Import of driver failed [Interceptor]

322 views
Skip to first unread message

Scott Grayban

unread,
Jan 11, 2020, 12:25:35 AM1/11/20
to weewx-user
I did a restart tonight and weewx wouldn't start. Saw this in the logs and cannot figure out why this is happening. I checked all my configs and they are right, haven't touched then since last June.

weewx[5862]: engine: Import of driver failed: in method 'pcapObject_open_live', argument 2 of type 'char *' (<type 'exceptions.TypeE
rror'
>)

Any ideas ?

Scott Grayban

unread,
Jan 11, 2020, 12:36:15 AM1/11/20
to weewx-user
Running the Interceptor manuall works just fine so I know it's not that....

PYTHONPATH=/usr/share/weewx python weewx-share/user/interceptor.py --device=observer --mode=sniff --iface=wlan0 --filter="src 10.3.141.62 and dst port 80"

mapped packet: {'pressure': 27.741, 'outHumidity': 94.0, 'UV': 0.0, 'radiation': 0.0, 'rain': None, 'dateTime': 1578720667, 'windDir': 181.0, 'outTemp': 34.0
, 'windSpeed': 0.0, 'inHumidity': 33.0, 'inTemp': 71.2, 'windGust': 0.0, 'usUnits': 1}

Scott Grayban

unread,
Jan 11, 2020, 3:07:32 AM1/11/20
to weewx-user
Jan 11 00:06:14 weewx-pi weewx[1417]: engine: Loading station type Interceptor (user.interceptor)
Jan 11 00:06:14 weewx-pi weewx[1417]: interceptor: MainThread: driver version is 0.49
Jan 11 00:06:14 weewx-pi weewx[1417]: interceptor: MainThread: device type: observer
Jan 11 00:06:14 weewx-pi weewx[1417]: interceptor: MainThread: sensor map: None
Jan 11 00:06:14 weewx-pi weewx[1417]: interceptor: MainThread: mode is sniff
Jan 11 00:06:14 weewx-pi weewx[1417]: interceptor: MainThread: sniff iface=wlan0 promiscuous=0
Jan 11 00:06:14 weewx-pi weewx[1417]: interceptor: MainThread: sniff filter 'src 10.3.141.62 and dst port 80'
Jan 11 00:06:14 weewx-pi weewx[1417]: engine: Import of driver failed: in method 'pcapObject_open_live', argument 2 of type 'char *' (<type 'exceptions.TypeE
rror'>)
Jan 11 00:06:14 weewx-pi weewx[1417]: engine: Unable to load driver: in method 'pcapObject_open_live', argument 2 of type 'char *'
Jan 11 00:06:14 weewx-pi weewx[1417]:     ****  Exiting...


On Friday, January 10, 2020 at 9:25:35 PM UTC-8, Scott Grayban wrote:

mwall

unread,
Jan 11, 2020, 3:08:11 AM1/11/20
to weewx-user


On Saturday, January 11, 2020 at 12:36:15 AM UTC-5, Scott Grayban wrote:
Running the Interceptor manuall works just fine so I know it's not that....

did you do a system update?

what version of weewx is this, what version of python, and what version of the weewx-interceptor?

also, please post the [Interceptor] section of your weewx configuration file

m

Scott Grayban

unread,
Jan 11, 2020, 4:48:13 PM1/11/20
to weewx-user
No system update. Still running Raspbian 9 on it.

weeWX 3.9.2
Python 2.7.13
DRIVER_NAME = 'Interceptor'
DRIVER_VERSION = '0.49'


[Interceptor]
 
    driver
= user.interceptor
    device_type
= observer
    mode
= sniff
    iface
= wlan0
    pcap_filter
= src 10.3.141.62 and dst port 80
 


Scott Grayban

unread,
Jan 11, 2020, 4:51:30 PM1/11/20
to weewx-user
I tried pycap and that did run for a few seconds.

Jan 11 00:39:13 weewx-pi weewx[3942]: engine: Loading station type Interceptor (user.interceptor)
Jan 11 00:39:13 weewx-pi weewx[3942]: interceptor: MainThread: driver version is 0.49
Jan 11 00:39:13 weewx-pi weewx[3942]: interceptor: MainThread: device type: observer
Jan 11 00:39:13 weewx-pi weewx[3942]: interceptor: MainThread: sensor map: None
Jan 11 00:39:13 weewx-pi weewx[3942]: interceptor: MainThread: mode is sniff
Jan 11 00:39:13 weewx-pi weewx[3942]: interceptor: MainThread: sniff iface=wlan0 promiscuous=0
Jan 11 00:39:13 weewx-pi weewx[3942]: interceptor: MainThread: sniff filter 'src 10.3.141.62 and dst port 80'
Jan 11 00:39:13 weewx-pi weewx[3942]: interceptor: MainThread: pypcap (1.2.2)
Jan 11 00:39:13 weewx-pi weewx[3942]: interceptor: ServerThread: start sniff server
Jan 11 00:39:13 weewx-pi weewx[3942]: engine: Loading service w
Jan 11 00:39:13 weewx-pi weewx[3942]: interceptor: MainThread: shutting down server thread
Jan 11 00:39:13 weewx-pi weewx[3942]: interceptor: MainThread: stop sniff server
Jan 11 00:39:33 weewx-pi weewx[3942]: interceptor: MainThread: unable to shut down server thread
Jan 11 00:39:33 weewx-pi weewx[3942]: engine: Caught unrecoverable exception in engine:
Jan 11 00:39:33 weewx-pi weewx[3942]:     ****  Empty module name
Jan 11 00:39:33 weewx-pi weewx[3942]:     ****  Traceback (most recent call last):
Jan 11 00:39:33 weewx-pi weewx[3942]:     ****    File "/usr/share/weewx/weewx/engine.py", line 888, in main
Jan 11 00:39:33 weewx-pi weewx[3942]:     ****      engine = engine_class(config_dict)
Jan 11 00:39:33 weewx-pi weewx[3942]:     ****    File "/usr/share/weewx/weewx/engine.py", line 78, in __init__
Jan 11 00:39:33 weewx-pi weewx[3942]:     ****      self.loadServices(config_dict)
Jan 11 00:39:33 weewx-pi weewx[3942]:     ****    File "/usr/share/weewx/weewx/engine.py", line 142, in loadServices
Jan 11 00:39:34 weewx-pi weewx[3942]:     ****      self.service_obj.append(weeutil.weeutil._get_object(svc)(self, config_dict))
Jan 11 00:39:34 weewx-pi weewx[3942]:     ****    File "/usr/share/weewx/weeutil/weeutil.py", line 1107, in _get_object
Jan 11 00:39:34 weewx-pi weewx[3942]:     ****      mod = __import__(module)
Jan 11 00:39:34 weewx-pi weewx[3942]:     ****  ValueError: Empty module name
Jan 11 00:39:34 weewx-pi weewx[3942]:     ****  Exiting.


On Saturday, January 11, 2020 at 12:08:11 AM UTC-8, mwall wrote:

mwall

unread,
Jan 11, 2020, 7:19:58 PM1/11/20
to weewx-user
On Saturday, January 11, 2020 at 12:25:35 AM UTC-5, Scott Grayban wrote:
I did a restart tonight and weewx wouldn't start. Saw this in the logs and cannot figure out why this is happening. I checked all my configs and they are right, haven't touched then since last June.

weewx[5862]: engine: Import of driver failed: in method 'pcapObject_open_live', argument 2 of type 'char *' (<type 'exceptions.TypeE
rror'
>)

Any ideas ?

so what *did* change between before the restart and after the restart?


On Saturday, January 11, 2020 at 4:51:30 PM UTC-5, Scott Grayban wrote:

Jan 11 00:39:13 weewx-pi weewx[3942]: interceptor: ServerThread: start sniff server
Jan 11 00:39:13 weewx-pi weewx[3942]: engine: Loading service w
Jan 11 00:39:13 weewx-pi weewx[3942]: interceptor: MainThread: shutting down server thread
Jan 11 00:39:13 weewx-pi weewx[3942]: interceptor: MainThread: stop sniff server
Jan 11 00:39:33 weewx-pi weewx[3942]: interceptor: MainThread: unable to shut down server thread
Jan 11 00:39:33 weewx-pi weewx[3942]: engine: Caught unrecoverable exception in engine:
Jan 11 00:39:33 weewx-pi weewx[3942]:     ****  Empty module name
Jan 11 00:39:33 weewx-pi weewx[3942]:     ****  Traceback (most recent call last):
Jan 11 00:39:33 weewx-pi weewx[3942]:     ****    File "/usr/share/weewx/weewx/engine.py", line 888, in main
Jan 11 00:39:33 weewx-pi weewx[3942]:     ****      engine = engine_class(config_dict)
Jan 11 00:39:33 weewx-pi weewx[3942]:     ****    File "/usr/share/weewx/weewx/engine.py", line 78, in __init__
Jan 11 00:39:33 weewx-pi weewx[3942]:     ****      self.loadServices(config_dict)
Jan 11 00:39:33 weewx-pi weewx[3942]:     ****    File "/usr/share/weewx/weewx/engine.py", line 142, in loadServices
Jan 11 00:39:34 weewx-pi weewx[3942]:     ****      self.service_obj.append(weeutil.weeutil._get_object(svc)(self, config_dict))
Jan 11 00:39:34 weewx-pi weewx[3942]:     ****    File "/usr/share/weewx/weeutil/weeutil.py", line 1107, in _get_object
Jan 11 00:39:34 weewx-pi weewx[3942]:     ****      mod = __import__(module)
Jan 11 00:39:34 weewx-pi weewx[3942]:     ****  ValueError: Empty module name
Jan 11 00:39:34 weewx-pi weewx[3942]:     ****  Exiting.

this looks like a mistake in your weewx configuration file - weewx is trying to load a service called 'w' that does not exist?
 

Scott Grayban

unread,
Jan 11, 2020, 7:22:00 PM1/11/20
to weewx-user
I added a custom page to my skin and that was it. I removed the changes and attempted a restart and it still wouldn't run.

Scott Grayban

unread,
Jan 11, 2020, 7:29:48 PM1/11/20
to weewx-user
I just disabled that skin also and used a different skin and same error.


On Saturday, January 11, 2020 at 4:19:58 PM UTC-8, mwall wrote:

mwall

unread,
Jan 11, 2020, 7:42:13 PM1/11/20
to weewx-user


On Saturday, January 11, 2020 at 12:25:35 AM UTC-5, Scott Grayban wrote:
which version of interceptor were you last running successfully?

in june, the interceptor version was 0.46.  the version became 0.49 with changes made in december 2019.  as of 11jan2020, the version is 0.50.

did you do 'apt-get update' between when weewx was last running properly and now?

 

Scott Grayban

unread,
Jan 11, 2020, 7:45:59 PM1/11/20
to weewx-user
Honestly I don't remember what version of Interceptor I was running before. I did a update because like I said I hadn't messed with it since last June so it could have been .46

I did a apt upgrade after I couldn't get weewx running but non of those packages involved python.

Scott Grayban

unread,
Jan 11, 2020, 7:52:09 PM1/11/20
to weewx-user
Actually your driver I used was around Mar 8, 2019 because that's when I wrote the Hostapd doc.


On Saturday, January 11, 2020 at 4:42:13 PM UTC-8, mwall wrote:

mwall

unread,
Jan 11, 2020, 7:54:18 PM1/11/20
to weewx-user


On Saturday, January 11, 2020 at 7:45:59 PM UTC-5, Scott Grayban wrote:
Honestly I don't remember what version of Interceptor I was running before. I did a update because like I said I hadn't messed with it since last June so it could have been .46

I did a apt upgrade after I couldn't get weewx running but non of those packages involved python.

that is probably what did it.  sniffing depends on the pcap library, and doing an apt upgrade could very well have changed that.

the exception that is preventing the driver from loading is a TypeError.  there is something odd about the second argument to  pcapObject_open_live 

Scott Grayban

unread,
Jan 11, 2020, 7:55:58 PM1/11/20
to weewx-user
I was getting that error BEFORE I did the upgrade though.

mwall

unread,
Jan 11, 2020, 9:26:06 PM1/11/20
to weewx-user


On Saturday, January 11, 2020 at 4:51:30 PM UTC-5, Scott Grayban wrote:
I tried pycap and that did run for a few seconds.

Jan 11 00:39:13 weewx-pi weewx[3942]: engine: Loading station type Interceptor (user.interceptor)
Jan 11 00:39:13 weewx-pi weewx[3942]: interceptor: MainThread: driver version is 0.49
Jan 11 00:39:13 weewx-pi weewx[3942]: interceptor: MainThread: device type: observer
Jan 11 00:39:13 weewx-pi weewx[3942]: interceptor: MainThread: sensor map: None
Jan 11 00:39:13 weewx-pi weewx[3942]: interceptor: MainThread: mode is sniff
Jan 11 00:39:13 weewx-pi weewx[3942]: interceptor: MainThread: sniff iface=wlan0 promiscuous=0
Jan 11 00:39:13 weewx-pi weewx[3942]: interceptor: MainThread: sniff filter 'src 10.3.141.62 and dst port 80'
Jan 11 00:39:13 weewx-pi weewx[3942]: interceptor: MainThread: pypcap (1.2.2)
Jan 11 00:39:13 weewx-pi weewx[3942]: interceptor: ServerThread: start sniff server

this is actually running just fine - when you ran it this time, there was no exception at pcapObject_open_live

so one time when you started weewxd, you got a type error for argument 2 of pcapObject_open_live.  we do not know what caused that.

another time when you started weewxd, you got a failure because of a bogus service configuration in your weewx configuration file.

and one time when you ran interceptor directly, it worked.

you did an apt update, which might have updated your pcap library

you updated the interceptor driver

the pcap initialization code in the interceptor driver has not changed since january 2019.

so without more information, i'd guess that the failures are due to changes that you are making in your weewx configuration file.

if it is true that running interceptor directly works, but running weewxd fails, with absolutely no other changes, then run those two different ways to figure out what is different.

m

Scott Grayban

unread,
Jan 11, 2020, 9:37:44 PM1/11/20
to weewx-user
pycap starts to run but then exits causes weewx to fail again.

interceptor: ServerThread: start sniff server
engine
: Loading service w
interceptor
: MainThread: shutting down server thread
interceptor
: MainThread: stop sniff server
interceptor
: MainThread: unable to shut down server thread
engine
: Caught unrecoverable exception in engine:
   
****  Empty module name
   
****  Traceback (most recent call last):
   
****    File "/usr/share/weewx/weewx/engine.py", line 888, in main
   
****      engine = engine_class(config_dict)
   
****    File "/usr/share/weewx/weewx/engine.py", line 78, in __init__
   
****      self.loadServices(config_dict)
   
****    File "/usr/share/weewx/weewx/engine.py", line 142, in loadServices
   
****      self.service_obj.append(weeutil.weeutil._get_object(svc)(self, config_dict))
   
****    File "/usr/share/weewx/weeutil/weeutil.py", line 1107, in _get_object
   
****      mod = __import__(module)
   
****  ValueError: Empty module name
   
****  Exiting.


libpcap fails completely
engine: Import of driver failed: in method 'pcapObject_open_live', argument 2 of type 'char *' (<type 'exceptions.Type
Error'
>)


All of this points to the weewx engine but non of it makes any sense because I can run interceptor standalone.

I really can't understand how any of this broke in a years time... I have done plenty of apt upgrades and nothing like this has ever happened and I have worked on my skin more then once and again no issues.

Guess running weewx is in the past now.... I have tried everything and it refuses to run.

Scott Grayban

unread,
Jan 11, 2020, 10:12:21 PM1/11/20
to weewx-user
Doing a strace running weewxd I am getting this....

stat64("/usr/share/weewx/swig_runtime_data4", 0x7e9d9ba8) = -1 ENOENT (No such file or directory)
open
("/usr/share/weewx/swig_runtime_data4.arm-linux-gnueabihf.so", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open
("/usr/share/weewx/swig_runtime_data4.so", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open
("/usr/share/weewx/swig_runtime_data4module.so", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open
("/usr/share/weewx/swig_runtime_data4.py", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open
("/usr/share/weewx/swig_runtime_data4.pyc", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
stat64
("/usr/lib/python2.7/swig_runtime_data4", 0x7e9d9ba8) = -1 ENOENT (No such file or directory)
open
("/usr/lib/python2.7/swig_runtime_data4.arm-linux-gnueabihf.so", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open
("/usr/lib/python2.7/swig_runtime_data4.so", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open
("/usr/lib/python2.7/swig_runtime_data4module.so", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open
("/usr/lib/python2.7/swig_runtime_data4.py", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open
("/usr/lib/python2.7/swig_runtime_data4.pyc", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
stat64
("/usr/lib/python2.7/plat-arm-linux-gnueabihf/swig_runtime_data4", 0x7e9d9ba8) = -1 ENOENT (No such file or directory)
open
("/usr/lib/python2.7/plat-arm-linux-gnueabihf/swig_runtime_data4.arm-linux-gnueabihf.so", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open
("/usr/lib/python2.7/plat-arm-linux-gnueabihf/swig_runtime_data4.so", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open
("/usr/lib/python2.7/plat-arm-linux-gnueabihf/swig_runtime_data4module.so", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open
("/usr/lib/python2.7/plat-arm-linux-gnueabihf/swig_runtime_data4.py", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open
("/usr/lib/python2.7/plat-arm-linux-gnueabihf/swig_runtime_data4.pyc", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
stat64
("/usr/lib/python2.7/lib-tk/swig_runtime_data4", 0x7e9d9ba8) = -1 ENOENT (No such file or directory)
open
("/usr/lib/python2.7/lib-tk/swig_runtime_data4.arm-linux-gnueabihf.so", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open
("/usr/lib/python2.7/lib-tk/swig_runtime_data4.so", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open
("/usr/lib/python2.7/lib-tk/swig_runtime_data4module.so", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open
("/usr/lib/python2.7/lib-tk/swig_runtime_data4.py", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open
("/usr/lib/python2.7/lib-tk/swig_runtime_data4.pyc", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
stat64
("/usr/lib/python2.7/lib-dynload/swig_runtime_data4", 0x7e9d9ba8) = -1 ENOENT (No such file or directory)
open
("/usr/lib/python2.7/lib-dynload/swig_runtime_data4.arm-linux-gnueabihf.so", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open
("/usr/lib/python2.7/lib-dynload/swig_runtime_data4.so", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open
("/usr/lib/python2.7/lib-dynload/swig_runtime_data4module.so", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open
("/usr/lib/python2.7/lib-dynload/swig_runtime_data4.py", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open
("/usr/lib/python2.7/lib-dynload/swig_runtime_data4.pyc", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
stat64
("/usr/local/lib/python2.7/dist-packages/swig_runtime_data4", 0x7e9d9ba8) = -1 ENOENT (No such file or directory)
open
("/usr/local/lib/python2.7/dist-packages/swig_runtime_data4.arm-linux-gnueabihf.so", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open
("/usr/local/lib/python2.7/dist-packages/swig_runtime_data4.so", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open
("/usr/local/lib/python2.7/dist-packages/swig_runtime_data4module.so", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open
("/usr/local/lib/python2.7/dist-packages/swig_runtime_data4.py", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open
("/usr/local/lib/python2.7/dist-packages/swig_runtime_data4.pyc", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
stat64
("/usr/lib/python2.7/dist-packages/swig_runtime_data4", 0x7e9d9ba8) = -1 ENOENT (No such file or directory)
open
("/usr/lib/python2.7/dist-packages/swig_runtime_data4.arm-linux-gnueabihf.so", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open
("/usr/lib/python2.7/dist-packages/swig_runtime_data4.so", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open
("/usr/lib/python2.7/dist-packages/swig_runtime_data4module.so", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open
("/usr/lib/python2.7/dist-packages/swig_runtime_data4.py", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open
("/usr/lib/python2.7/dist-packages/swig_runtime_data4.pyc", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
stat64
("/usr/lib/python2.7/dist-packages/PILcompat/swig_runtime_data4", 0x7e9d9ba8) = -1 ENOENT (No such file or directory)
open
("/usr/lib/python2.7/dist-packages/PILcompat/swig_runtime_data4.arm-linux-gnueabihf.so", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open
("/usr/lib/python2.7/dist-packages/PILcompat/swig_runtime_data4.so", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open
("/usr/lib/python2.7/dist-packages/PILcompat/swig_runtime_data4module.so", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open
("/usr/lib/python2.7/dist-packages/PILcompat/swig_runtime_data4.py", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open
("/usr/lib/python2.7/dist-packages/PILcompat/swig_runtime_data4.pyc", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
stat64
("/usr/lib/python2.7/dist-packages/gtk-2.0/swig_runtime_data4", 0x7e9d9ba8) = -1 ENOENT (No such file or directory)
open
("/usr/lib/python2.7/dist-packages/gtk-2.0/swig_runtime_data4.arm-linux-gnueabihf.so", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open
("/usr/lib/python2.7/dist-packages/gtk-2.0/swig_runtime_data4.so", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open
("/usr/lib/python2.7/dist-packages/gtk-2.0/swig_runtime_data4module.so", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open
("/usr/lib/python2.7/dist-packages/gtk-2.0/swig_runtime_data4.py", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open
("/usr/lib/python2.7/dist-packages/gtk-2.0/swig_runtime_data4.pyc", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)




On Saturday, January 11, 2020 at 6:26:06 PM UTC-8, mwall wrote:

mwall

unread,
Jan 12, 2020, 12:30:16 AM1/12/20
to weewx-user
On Saturday, January 11, 2020 at 9:37:44 PM UTC-5, Scott Grayban wrote:

All of this points to the weewx engine but non of it makes any sense because I can run interceptor standalone.

actually, it points to a problem in your weewx configuration file. 

Scott Grayban

unread,
Jan 12, 2020, 3:29:40 PM1/12/20
to weewx-user
Well I can't find it. I have been through it a dozen times and just don't see it.

mwall

unread,
Jan 12, 2020, 5:36:35 PM1/12/20
to weewx-user
On Sunday, January 12, 2020 at 3:29:40 PM UTC-5, Scott Grayban wrote:
Well I can't find it. I have been through it a dozen times and just don't see it.

no one can help you if you don't post it!  try posting your weewx configuration file (the one that resulted in the 'engine: Loading service w' and 'ValueError: Empty module name' exception).

diagnosing these things is MUCH easier if you post the log and config right from the start.

sometimes just the act of doing that will let you see things that you missed

Message has been deleted

Scott Grayban

unread,
Jan 12, 2020, 5:47:18 PM1/12/20
to weewx-user
# WEEWX CONFIGURATION FILE
#
# Copyright (c) 2009-2015 Tom Keffer
# See the file LICENSE.txt for your rights.

##############################################################################

# This section is for general configuration information.

# Set to 1 for extra debug info, otherwise comment it out or set to zero
debug = 1

# Root directory of the weewx data file hierarchy for this station
WEEWX_ROOT = /

# Whether to log successful operations
log_success = True

# Whether to log unsuccessful operations
log_failure = True

# How long to wait before timing out a socket (FTP, HTTP) connection
socket_timeout = 20

# Do not modify this. It is used when installing and updating weewx.
version = 3.9.2

##############################################################################

#   This section is for information about the station.

[Station]
    
    # Description of the station location
    location = "Nettleton District Weather Station, Spokane, Washington"
    
    # Latitude and longitude in decimal degrees
    latitude = 47.6677449
    longitude = -117.44763599999999
    
    # Altitude of the station, with unit it is in. This is downloaded from
    # from the station if the hardware supports it.
    altitude = 1922, foot
    
    # Set to type of station hardware. There must be a corresponding stanza
    # in this file with a 'driver' parameter indicating the driver to be used.
    #station_type = Simulator
    station_type = Interceptor

    # If you have a website, you may specify an URL
    
    # The start of the rain year (1=January; 10=October, etc.). This is
    # downloaded from the station if the hardware supports it.
    rain_year_start = 1
    
    # Start of week (0=Monday, 6=Sunday)
    week_start = 6

##############################################################################

[Simulator]
    # This section is for the weewx weather station simulator
    
    # The time (in seconds) between LOOP packets.
    loop_interval = 2.5
    
    # The simulator mode can be either 'simulator' or 'generator'.
    # Real-time simulator. Sleep between each LOOP packet.
    mode = simulator
    # Generator.  Emit LOOP packets as fast as possible (useful for testing).
    #mode = generator
    
    # The start time. Format is YYYY-mm-ddTHH:MM. If not specified, the default 
    # is to use the present time.
    #start = 2011-01-01T00:00
    
    # The driver to use:
    driver = weewx.drivers.simulator

[Interceptor]
    
    driver = user.interceptor
    device_type = observer
    mode = sniff
    iface = wlan0
    pcap_filter = src 10.3.141.62 and dst port 80

##############################################################################

#   This section is for uploading data to Internet sites

[StdRESTful]
    
    [[StationRegistry]]
        # To register this weather station with weewx, set this to true
        register_this_station = true
    
    [[AWEKAS]]
        # This section is for configuring posts to AWEKAS.
        
        # If you wish to do this, set the option 'enable' to true,
        # and specify a username and password.
        # To guard against parsing errors, put the password in quotes.
        enable = false
        username = replace_me
        password = replace_me
    
    [[CWOP]]
        # This section is for configuring posts to CWOP.
        
        # If you wish to do this, set the option 'enable' to true,
        # and specify the station ID (e.g., CW1234).
        enable = true
        station = FW4353
    
    # If this is an APRS (radio amateur) station, uncomment
    # the following and replace with a passcode (e.g., 12345).
    #passcode = replace_me (APRS stations only)
    
    [[PWSweather]]
        # This section is for configuring posts to PWSweather.com.
        
        # If you wish to do this, set the option 'enable' to true,
        # and specify a station and password.
        # To guard against parsing errors, put the password in quotes.
        enable = true
        station = KWASPOKA85
        password = xxxxxx
    
    [[WOW]]
        # This section is for configuring posts to WOW.
        
        # If you wish to do this, set the option 'enable' to true,
        # and specify a station and password.
        # To guard against parsing errors, put the password in quotes.
        enable = true
        station = d2850c02-2199-e911-80e7-0003ff59883f
        password = xxxxxxxxx
        retry_login = 30
    
    [[Wunderground]]
        # This section is for configuring posts to the Weather Underground.
        
        # If you wish to do this, set the option 'enable' to true,
        # and specify a station (e.g., 'KORHOODR3') and password.
        # To guard against parsing errors, put the password in quotes.
        enable = false
        station = KWASPOKA85
        password = xxxxxxxx
        
        # Set the following to True to have weewx use the WU "Rapidfire"
        # protocol. Not all hardware can support it. See the User's Guide.
        rapidfire = true
    
    [[OpenWeatherMap]]
        
        appid = xxxxxxxxxxx
        station_id = xxxxxxxxxx
    
    [[WeatherCloud]]
        id = xxxxxxxxxxx
        key = xxxxxxxxx
    
    [[MQTT]]
        server_url = mqtt://xxxxxx:1883/
        topic = weather/weewx
        unit_system = US
        binding = archive, loop
        aggregation = aggregate

##############################################################################

#   This section specifies what reports, using which skins, to generate.

[StdReport]
    
    # Where the skins reside, relative to WEEWX_ROOT
    SKIN_ROOT = /etc/weewx/skins
    
    # Where the generated reports should go, relative to WEEWX_ROOT
    HTML_ROOT = /home/weewx/public_html/
    
    # The database binding indicates which data should be used in reports.
    data_binding = wx_binding
    
    # Whether to log a successful operation
    log_success = True
    
    # Whether to log an unsuccessful operation
    log_failure = False
    
    # Each of the following subsections defines a report that will be run.
    # See the customizing guide to change the units, plot types and line
    # colors, modify the fonts, display additional sensor data, and other
    # customizations. Many of those changes can be made here by overriding
    # parameters, or by modifying templates within the skin itself.
    
    [[SeasonsReport]]
        # The SeasonsReport uses the 'Seasons' skin, which contains the
        # images, templates and plots for the report.
        skin = Seasons
        enable = false
    
    [[SmartphoneReport]]
        # The SmartphoneReport uses the 'Smartphone' skin, and the images and
        # files are placed in a dedicated subdirectory.
        skin = Smartphone
        enable = true
        HTML_ROOT = /var/www/html/weewx
    
    [[MobileReport]]
        # The MobileReport uses the 'Mobile' skin, and the images and files
        # are placed in a dedicated subdirectory.
        skin = Mobile
        enable = true
        HTML_ROOT = /var/www/html/weewx
    
    [[StandardReport]]
        # See the customizing guide to change the units, plot types and line
        # colors, modify the fonts, display additional sensor data, and other
        # customizations. Many of those changes can be made here by overriding
        # parameters, or by modifying templates within the skin itself.
        
        # The StandardReport uses the 'Standard' skin, which contains the
        # images, templates and plots for the report.
        HTML_ROOT = /var/www/html/standard
        skin = Standard
        enable = false
    
    [[Highcharts_Belchertown]]
        HTML_ROOT = /home/weewx/public_html/Nettleton
        skin = Highcharts_Belchertown
    
    [[Belchertown]]
        HTML_ROOT = /home/weewx/public_html/Nettleton
        skin = Nettleton
        [[[Extras]]]
            belchertown_root_url = http://www.nettletondistrict.com/Nettleton
            site_title = Nettleton District Weather Station
            footer_copyright_text = "Nettleton District Weather Station, Spokane, Washington"
            radar_html = <img src='http://radar.weather.gov/lite/N0R/OTX_loop.gif' name='myRadar'>
            mqtt_enabled = 1
            mqtt_host = xxxxxxxx
            mqtt_topic = weather/weewx/loop
            mqtt_port = 9001
            mqtt_ssl = 0
            disconnect_live_website_visitor = 1800000
            show_apptemp = 1
            show_windrun = 1
            show_cloudbase = 1
            highcharts_show_apptemp = 1
            forecast_enabled = 1
            forecast_alert_enabled = 1
            darksky_secret_key = xxxxxxxxxxxxxxx
            earthquake_enabled = 1
            facebook_enabled = 1
            twitter_enabled = 1
            graphs_page_header = Weather Observation Graphs
            records_page_header = Weather Observation Records
            reports_page_header = NOAA Reports
            about_page_header = About This Weather Station
            webcam_page_header = Weather Cam
            googleAnalyticsId = xxxxxxxx
    
    [[Inigo]]
        HTML_ROOT = /home/weewx/public_html/Nettleton/
        skin = Inigo
    
    [[Hubitat]]
        HTML_ROOT = /home/weewx/public_html/
        skin = Hubitat
    
    [[FTP]]
        # FTP'ing the results to a webserver is treated as just another report,
        # albeit one with an unusual report generator!
        skin = Ftp
        
        # If you wish to use FTP, uncomment and fill out the next four lines.
        # Use quotes around passwords to guard against parsing errors.
        #user = replace with the ftp username
        #password = replace with the ftp password
        #server = replace with the ftp server name, e.g, www.threefools.org
        #path = replace with the ftp destination directory (e.g., /weather)
        
        # Set to True for an FTP over TLS (FTPS) connection. Not all servers
        # support this.
        secure_ftp = True
        
        # To upload files from something other than what HTML_ROOT is set
        # to above, specify a different HTML_ROOT here.
        #HTML_ROOT = /var/www/html/weewx
        
        # Most FTP servers use port 21
        port = 21
        
        # Set to 1 to use passive mode, zero for active mode
        passive = 1
    
    [[RSYNC]]
        # rsync'ing to a webserver is treated as just another report
        skin = Rsync
        
        # If you wish to use rsync, you must configure passwordless ssh using
        # public/private key authentication from the user account that weewx
        # runs as to the user account on the remote machine where the files
        # will be copied.
        #
        # The server, user, and path determine where files will be sent.
        # The server is the server name, such as www.threefools.org
        # The user is the username, such as weewx
        # The path is the destination directory, such as /var/www/html/weather
        # Be sure that the user has write permissions on the destination!
        #server = replace_me
        #user = replace_me
        #path = replace_me
        
        # Rsync can be configured to remove files from the remote server if
        # they don't exist under HTML_ROOT locally. USE WITH CAUTION: if you
        # make a mistake in the remote path, you could could unintentionally
        # cause unrelated files to be deleted. Set to 1 to enable remote file
        # deletion, zero to allow files to accumulate remotely.
        delete = 0
    
    ####
    
    # Various options for customizing your reports.
    
    [[Defaults]]
        
        [[[Units]]]
            
            # The following section sets what unit to use for each unit group.
            # NB: The unit is always in the singular. I.e., 'mile_per_hour',
            # NOT 'miles_per_hour'
            [[[[Groups]]]]
                
                group_altitude = foot    # Options are 'foot' or 'meter'
                group_degree_day = degree_F_day    # Options are 'degree_F_day' or 'degree_C_day'
                group_pressure = inHg    # Options are 'inHg', 'mmHg', 'mbar', or 'hPa'
                group_rain = inch    # Options are 'inch', 'cm', or 'mm'
                group_rainrate = inch_per_hour    # Options are 'inch_per_hour', 'cm_per_hour', or 'mm_per_hour'
                group_speed = mile_per_hour    # Options are 'mile_per_hour', 'km_per_hour', 'knot', or 'meter_per_second'
                group_speed2 = mile_per_hour2    # Options are 'mile_per_hour2', 'km_per_hour2', 'knot2', or 'meter_per_second2'
                group_temperature = degree_F    # Options are 'degree_F' or 'degree_C'
            
            # The following section sets the formatting for each type of unit.
            [[[[StringFormats]]]]
                
                centibar = %.0f
                cm = %.2f
                cm_per_hour = %.2f
                degree_C = %.1f
                degree_F = %.1f
                degree_compass = %.0f
                foot = %.0f
                hPa = %.1f
                hour = %.1f
                inHg = %.3f
                inch = %.2f
                inch_per_hour = %.2f
                km_per_hour = %.0f
                km_per_hour2 = %.1f
                knot = %.0f
                knot2 = %.1f
                mbar = %.1f
                meter = %.0f
                meter_per_second = %.1f
                meter_per_second2 = %.1f
                mile_per_hour = %.0f
                mile_per_hour2 = %.1f
                mm = %.1f
                mmHg = %.1f
                mm_per_hour = %.1f
                percent = %.0f
                second = %.0f
                uv_index = %.1f
                volt = %.1f
                watt_per_meter_squared = %.0f
                NONE = "   N/A"
            
            # The following section sets the label to be used for each type of unit
            [[[[Labels]]]]
                
                day = " day", " days"
                hour = " hour", " hours"
                minute = " minute", " minutes"
                second = " second", " seconds"
                NONE = ""
            
            # The following section sets the format to be used for each time scale.
            # The values below will work in every locale, but they may not look
            # particularly attractive. See the Customization Guide for alternatives.
            [[[[TimeFormats]]]]
                
                hour = %H:%M
                day = %X
                week = %X (%A)
                month = %x %X
                year = %x %X
                rainyear = %x %X
                current = %x %X
                ephem_day = %X
                ephem_year = %x %X
            
            [[[[Ordinates]]]]
                
                # Ordinal directions. The last one should be for no wind direction
                directions = N, NNE, NE, ENE, E, ESE, SE, SSE, S, SSW, SW, WSW, W, WNW, NW, NNW, N/A
                
                # The following section sets the base temperatures used for the
                #  calculation of heating and cooling degree-days.
                [[[[[DegreeDays]]]]]
                    
                    # Base temperature for heating days, with unit:
                    heating_base = 65, degree_F
                    # Base temperature for cooling days, with unit:
                    cooling_base = 65, degree_F
                
                # A trend takes a difference across a time period. The following
                # section sets the time period, and how big an error is allowed to
                # still be counted as the start or end of a period.
                [[[[[Trend]]]]]
                    
                    time_delta = 10800    # 3 hours
                    time_grace = 300    # 5 minutes
        
        # The labels to be used for each observation type
        [[[Labels]]]
            
            # Set to hemisphere abbreviations suitable for your location:
            hemispheres = N, S, E, W
            
            # Formats to be used for latitude whole degrees, longitude whole
            # degrees, and minutes:
            latlon_formats = %02d, %03d, %05.2f
            
            # Generic labels, keyed by an observation type.
            [[[[Generic]]]]
                barometer = Barometer
                dewpoint = Dew Point
                ET = ET
                heatindex = Heat Index
                inHumidity = Inside Humidity
                inTemp = Inside Temperature
                outHumidity = Humidity
                outTemp = Outside Temperature
                radiation = Radiation
                rain = Rain
                rainRate = Rain Rate
                UV = UV Index
                windDir = Wind Direction
                windGust = Gust Speed
                windGustDir = Gust Direction
                windSpeed = Wind Speed
                windchill = Wind Chill
                windgustvec = Gust Vector
                windvec = Wind Vector
                maxwindGust = Max Gust
                extraTemp1 = Temperature1
                extraTemp2 = Temperature2
                extraTemp3 = Temperature3
                
                # Sensor status indicators
                
                rxCheckPercent = Signal Quality
                txBatteryStatus = Transmitter Battery
                windBatteryStatus = Wind Battery
                rainBatteryStatus = Rain Battery
                outTempBatteryStatus = Outside Temperature Battery
                inTempBatteryStatus = Inside Temperature Battery
                consBatteryVoltage = Console Battery
                heatingVoltage = Heating Battery
                supplyVoltage = Supply Voltage
                referenceVoltage = Reference Voltage
        
        [[[Almanac]]]
            
            # The labels to be used for the phases of the moon:
            moon_phases = New, Waxing crescent, First quarter, Waxing gibbous, Full, Waning gibbous, Last quarter, Waning crescent

##############################################################################

#   This service acts as a filter, converting the unit system coming from
#   the hardware to a unit system in the database.

[StdConvert]
    
    # The target_unit affects only the unit system in the database. Once
    # chosen it cannot be changed without converting the entire database.
    # Modification of target_unit after starting weewx will result in
    # corrupt data - the database will contain a mix of US and METRIC data.
    #
    # The value of target_unit does not affect the unit system for
    # reporting - reports can display US, Metric, or any combination of units.
    #
    # In most cases, target_unit should be left as the default: US
    #
    # In particular, those migrating from a standard wview installation
    # should use US since that is what the wview database contains.
    
    # DO NOT MODIFY THIS VALUE UNLESS YOU KNOW WHAT YOU ARE DOING!
    target_unit = US    # Options are 'US', 'METRICWX', or 'METRIC'

##############################################################################

#   This section can adjust data using calibration expressions.

[StdCalibrate]
    
    [[Corrections]]
        # For each type, an arbitrary calibration expression can be given. 
        # It should be in the units defined in the StdConvert section.
        # Example:
        foo = foo + 1.0

##############################################################################

#   This section is for quality control checks. If units are not specified,
#   values must be in the units defined in the StdConvert section.

[StdQC]
    
    [[MinMax]]
        barometer = 8.85, 32.50, inHg
        outTemp = -40, 149, degree_F
        inTemp = 14, 140, degree_F
        outHumidity = 10, 99
        inHumidity = 10, 99
        windSpeed = 0, 120, mile_per_hour
        pressure = 8.85, 32.50, inHg

##############################################################################

#   This section controls the origin of derived values.

[StdWXCalculate]
    
    [[Calculations]]
        # Derived quantities are calculated by this service. Possible values are:
        #  hardware        - use the value provided by hardware
        #  software        - use the value calculated by weewx
        #  prefer_hardware - use value provide by hardware if available,
        #                      otherwise use value calculated by weewx
        
        pressure = prefer_hardware
        barometer = prefer_hardware
        altimeter = prefer_hardware
        windchill = prefer_hardware
        heatindex = prefer_hardware
        dewpoint = prefer_hardware
        inDewpoint = prefer_hardware
        rainRate = prefer_hardware
        inHumidity = Inside Humidity

##############################################################################

#   For hardware that supports it, this section controls how often the
#   onboard clock gets updated.

[StdTimeSynch]
    
    # How often to check the weather station clock for drift (in seconds)
    clock_check = 3600
    
    # How much it can drift before we will correct it (in seconds)
    max_drift = 5

##############################################################################

#   This section is for configuring the archive service.

[StdArchive]
    
    # If the station hardware supports data logging then the archive interval
    # will be downloaded from the station. Otherwise, specify it (in seconds).
    archive_interval = 60
    
    # If possible, new archive records are downloaded from the station
    # hardware. If the hardware does not support this, then new archive
    # records will be generated in software.
    # Set the following to "software" to force software record generation.
    record_generation = hardware
    
    # Whether to include LOOP data in hi/low statistics
    loop_hilo = True
    
    # The data binding used to save archive records
    data_binding = wx_binding

##############################################################################

#   This section binds a data store to a database.

[DataBindings]
    
    [[wx_binding]]
        # The database must match one of the sections in [Databases].
        # This is likely to be the only option you would want to change.
        database = archive_sqlite
        # The name of the table within the database
        table_name = archive
        # The manager handles aggregation of data for historical summaries
        manager = weewx.wxmanager.WXDaySummaryManager
        # The schema defines the structure of the database.
        # It is *only* used when the database is created.
        #schema = schemas.wview.schema
        
        schema = user.extensions.schema_extended

##############################################################################

#   This section defines various databases.

[Databases]
    
    # A SQLite database is simply a single file
    [[archive_sqlite]]
        database_type = SQLite
        database_name = weewx.sdb
    
    # MySQL
    [[archive_mysql]]
        database_type = MySQL
        database_name = weewx

##############################################################################

#   This section defines defaults for the different types of databases.

[DatabaseTypes]
    
    # Defaults for SQLite databases
    [[SQLite]]
        driver = weedb.sqlite
        # Directory in which the database files are located
        SQLITE_ROOT = /var/lib/weewx
    
    # Defaults for MySQL databases
    [[MySQL]]
        driver = weedb.mysql
        # The host where the database is located
        host = localhost
        # The user name for logging in to the host
        user = weewx
        # The password for the user name (quotes guard against parsing errors)
        password = weewx

##############################################################################

#   This section configures the internal weewx engine.

[Engine]
    
    [[Services]]
        # This section specifies the services that should be run. They are
        # grouped by type, and the order of services within each group
        # determines the order in which the services will be run.
        prep_services = weewx.engine.StdTimeSynch
        data_services = ,
        process_services = weewx.engine.StdConvert, weewx.engine.StdCalibrate, weewx.engine.StdQC, weewx.wxservices.StdWXCalculate
        archive_services = weewx.engine.StdArchive
        restful_services = weewx.restx.StdStationRegistry, weewx.restx.StdWunderground, weewx.restx.StdPWSweather, weewx.restx.StdCWOP, weewx.restx.StdWOW, weewx.restx.StdAWEKAS, user.owm.OpenWeatherMap, user.wcloud.WeatherCloud, user.mqtt.MQTT
        report_services = weewx.engine.StdPrint, weewx.engine.StdReport

mwall

unread,
Jan 12, 2020, 6:05:53 PM1/12/20
to weewx-user
On Sunday, January 12, 2020 at 5:47:18 PM UTC-5, Scott Grayban wrote:

[StdWXCalculate]
    
    [[Calculations]]
        # Derived quantities are calculated by this service. Possible values are:
        #  hardware        - use the value provided by hardware
        #  software        - use the value calculated by weewx
        #  prefer_hardware - use value provide by hardware if available,
        #                      otherwise use value calculated by weewx
        
        pressure = prefer_hardware
        barometer = prefer_hardware
        altimeter = prefer_hardware
        windchill = prefer_hardware
        heatindex = prefer_hardware
        dewpoint = prefer_hardware
        inDewpoint = prefer_hardware
        rainRate = prefer_hardware
        inHumidity = Inside Humidity

probably not relevant to the interceptor, but 'Inside Humidity' is not a valid parameter for the 'Calculations' stanza.

now with debug=1, start up weewx and post the log from startup until failure.
 
Message has been deleted
Message has been deleted

Scott Grayban

unread,
Jan 12, 2020, 7:28:44 PM1/12/20
to weewx-user
Shit wont post right here...

Jan 12 16:23:49 weewx-pi weewx[8674]: engine: Initializing weewx version 3.9.2
Jan 12 16:23:49 weewx-pi weewx[8674]: engine: Using Python 2.7.13 (default, Sep 26 2018, 18:42:22) #012[GCC 6.3.0 20170516]
Jan 12 16:23:49 weewx-pi weewx[8674]: engine: Platform Linux-4.19.66-v7+-armv7l-with-debian-9.11
Jan 12 16:23:49 weewx-pi weewx[8674]: engine: Locale is 'en_US.UTF-8'
Jan 12 16:23:49 weewx-pi weewx[8674]: engine: Using configuration file /etc/weewx/weewx.conf
Jan 12 16:23:49 weewx-pi weewx[8674]: engine: Debug is 1
Jan 12 16:23:49 weewx-pi weewx[8674]: engine: Initializing engine
Jan 12 16:23:49 weewx-pi weewx[8674]: engine: Loading station type Interceptor (user.interceptor)
Jan 12 16:23:49 weewx-pi weewx[8674]: interceptor: MainThread: driver version is 0.49
Jan 12 16:23:49 weewx-pi weewx[8674]: interceptor: MainThread: device type: observer
Jan 12 16:23:49 weewx-pi weewx[8674]: interceptor: MainThread: sensor map: None
Jan 12 16:23:49 weewx-pi weewx[8674]: interceptor: MainThread: mode is sniff
Jan 12 16:23:49 weewx-pi weewx[8674]: interceptor: MainThread: sniff iface=wlan0 promiscuous=0
Jan 12 16:23:49 weewx-pi weewx[8674]: interceptor: MainThread: sniff filter 'src 10.3.141.62 and dst port 80'
Jan 12 16:23:50 weewx-pi weewx[8674]: interceptor: MainThread: pypcap (1.1)
Jan 12 16:23:50 weewx-pi weewx[8674]: interceptor: ServerThread: start sniff server
Jan 12 16:23:50 weewx-pi weewx[8674]: engine: Loading service w
Jan 12 16:23:50 weewx-pi weewx[8674]: interceptor: MainThread: shutting down server thread
Jan 12 16:23:50 weewx-pi weewx[8674]: interceptor: MainThread: stop sniff server
Jan 12 16:24:07 weewx-pi weewx[8674]: engine: Caught unrecoverable exception in engine:
Jan 12 16:24:07 weewx-pi weewx[8674]:     ****  Empty module name
Jan 12 16:24:07 weewx-pi weewx[8674]:     ****  Traceback (most recent call last):
Jan 12 16:24:07 weewx-pi weewx[8674]:     ****    File "/usr/share/weewx/weewx/engine.py", line 888, in main
Jan 12 16:24:07 weewx-pi weewx[8674]:     ****      engine = engine_class(config_dict)
Jan 12 16:24:07 weewx-pi weewx[8674]:     ****    File "/usr/share/weewx/weewx/engine.py", line 78, in __init__
Jan 12 16:24:07 weewx-pi weewx[8674]:     ****      self.loadServices(config_dict)
Jan 12 16:24:07 weewx-pi weewx[8674]:     ****    File "/usr/share/weewx/weewx/engine.py", line 142, in loadServices
Jan 12 16:24:07 weewx-pi weewx[8674]:     ****      self.service_obj.append(weeutil.weeutil._get_object(svc)(self, config_dict))
Jan 12 16:24:07 weewx-pi weewx[8674]:     ****    File "/usr/share/weewx/weeutil/weeutil.py", line 1107, in _get_object
Jan 12 16:24:07 weewx-pi weewx[8674]:     ****      mod = __import__(module)
Jan 12 16:24:07 weewx-pi weewx[8674]:     ****  ValueError: Empty module name
Jan 12 16:24:07 weewx-pi weewx[8674]:     ****  Exiting.

Scott Grayban

unread,
Jan 12, 2020, 7:29:36 PM1/12/20
to weewx-user
This error is with python-libpcap installed

Jan 12 13:28:07 weewx-pi weewx[3792]: engine: Initializing weewx version 3.9.2
Jan 12 13:28:07 weewx-pi weewx[3792]: engine: Using Python 2.7.13 (default, Sep 26 2018, 18:42:22) #012[GCC 6.3.0 20170516]
Jan 12 13:28:07 weewx-pi weewx[3792]: engine: Platform Linux-4.19.66-v7+-armv7l-with-debian-9.11
Jan 12 13:28:07 weewx-pi weewx[3792]: engine: Locale is 'en_US.UTF-8'
Jan 12 13:28:07 weewx-pi weewx[3792]: engine: Using configuration file /etc/weewx/weewx.conf.20200110210428
Jan 12 13:28:07 weewx-pi weewx[3792]: engine: Debug is 1
Jan 12 13:28:07 weewx-pi weewx[3792]: engine: Initializing engine
Jan 12 13:28:07 weewx-pi weewx[3792]: engine: Loading station type Interceptor (user.interceptor)
Jan 12 13:28:07 weewx-pi weewx[3792]: interceptor: MainThread: driver version is 0.49
Jan 12 13:28:07 weewx-pi weewx[3792]: interceptor: MainThread: device type: observer
Jan 12 13:28:07 weewx-pi weewx[3792]: interceptor: MainThread: sensor map: None
Jan 12 13:28:07 weewx-pi weewx[3792]: interceptor: MainThread: mode is sniff
Jan 12 13:28:07 weewx-pi weewx[3792]: interceptor: MainThread: sniff iface=wlan0 promiscuous=0
Jan 12 13:28:07 weewx-pi weewx[3792]: interceptor: MainThread: sniff filter 'src 10.3.141.62 and dst port 80'
Jan 12 13:28:07 weewx-pi weewx[3792]: engine: Import of driver failed: in method 'pcapObject_open_live', argument 2 of type 'char *' (<type 'exceptions.TypeError'>)
Jan 12 13:28:07 weewx-pi weewx[3792]: engine: Unable to load driver: in method 'pcapObject_open_live', argument 2 of type 'char *'
Jan 12 13:28:07 weewx-pi weewx[3792]:     ****  Exiting...

On Sunday, January 12, 2020 at 3:05:53 PM UTC-8, mwall wrote:

Scott Grayban

unread,
Jan 12, 2020, 7:45:31 PM1/12/20
to weewx-user
Just to make sure that this isn't a error caused by me I installed a fresh raspian and weewx with your driver and my Ambient connected to hostapd and the same error popped up for both libpcap and pypcap installed. All virgin here... the only change in that weewx.conf I made was changing the station type and adding hostpad to raspbian.

On Sunday, January 12, 2020 at 3:05:53 PM UTC-8, mwall wrote:

mwall

unread,
Jan 12, 2020, 8:15:06 PM1/12/20
to weewx-user


On Sunday, January 12, 2020 at 7:45:31 PM UTC-5, Scott Grayban wrote:
Just to make sure that this isn't a error caused by me I installed a fresh raspian and weewx with your driver and my Ambient connected to hostapd and the same error popped up for both libpcap and pypcap installed. All virgin here... the only change in that weewx.conf I made was changing the station type and adding hostpad to raspbian.

scott,

i still have no idea what changes you are making between runs, and which log output is associated with each change.  it sounds like you are modifying the libpcap layer and the python pcap layer - i've seen at least two different pypcap versions in the log output (1.1 and 1.2.2). 

m

Scott Grayban

unread,
Jan 12, 2020, 8:18:23 PM1/12/20
to weewx-user
never mind I have trashed weewx and will go on with something else. It worked for almost 3 years without a hitch.

Scott Grayban

unread,
Jan 12, 2020, 8:23:40 PM1/12/20
to weewx-user
i still have no idea what changes you are making between runs

It's pretty simple when you read...

python-libpcap is a debian package installed via apt. and python-pypcap is the other package. I posted both outputs from each different ways to supposedly run you driver and neither work anymore. Plain and simple. I tested on a virgin install of debian 9 for a raspberry pi 3B+ with only hostapd installed and weewx. I changed the station_type to Interceptor and added the wlan0 info. I then started weewx and same problem... I don't what to give you when just this simple test didnt work either. 

Stephen Backway

unread,
May 25, 2020, 4:38:15 AM5/25/20
to weewx-user



scott,

i still have no idea what changes you are making between runs, and which log output is associated with each change.  it sounds like you are modifying the libpcap layer and the python pcap layer - i've seen at least two different pypcap versions in the log output (1.1 and 1.2.2). 

m

Matt, did you ever get to the bottom of this issue?
I have just done an apt-get upgrade, which upgrade the pcap & weewx and ran into this same issue.  
I have made sure I'm using the latest version of interceptor. 

I'm regretting upgrading the entire system, rather than just the security updates...

Here is my log extract:
May 25 17:56:02 GreatWall weewx[10284] INFO __main__: Initializing weewx version 4.0.0
May 25 17:56:02 GreatWall weewx[10284] INFO __main__: Using Python 2.7.13 (default, Sep 26 2018, 18:42:22) #012[GCC 6.3.0 20170516]
May 25 17:56:02 GreatWall weewx[10284] INFO __main__: Platform Linux-4.19.66-v7+-armv7l-with-debian-9.11
May 25 17:56:02 GreatWall weewx[10284] INFO __main__: Locale is 'en_AU.UTF-8'
May 25 17:56:02 GreatWall weewx[10284] INFO __main__: Using configuration file /etc/weewx/weewx.conf
May 25 17:56:02 GreatWall weewx[10284] INFO weewx.engine: Loading station type Interceptor (user.interceptor)
May 25 17:56:02 GreatWall weewx[10284] INFO user.interceptor: driver version is 0.53
May 25 17:56:02 GreatWall weewx[10284] INFO user.interceptor: device type: wu-client
May 25 17:56:02 GreatWall weewx[10284] INFO user.interceptor: mode is sniff
May 25 17:56:02 GreatWall weewx[10284] INFO user.interceptor: sniff iface=wlan0 promiscuous=0
May 25 17:56:02 GreatWall weewx[10284] INFO user.interceptor: sniff filter 'src 192.168.4.50 and dst port 80'
May 25 17:56:02 GreatWall weewx[10284] ERROR weewx.engine: Import of driver failed: in method 'pcapObject_open_live', argument 2 of type 'char *' (<type 'exceptions.TypeError'>)
May 25 17:56:02 GreatWall weewx[10284] CRITICAL weewx.engine:     ****  Traceback (most recent call last):
May 25 17:56:02 GreatWall weewx[10284] CRITICAL weewx.engine:     ****    File "/usr/share/weewx/weewx/engine.py", line 103, in setupStation
May 25 17:56:02 GreatWall weewx[10284] CRITICAL weewx.engine:     ****      self.console = loader_function(config_dict, self)
May 25 17:56:02 GreatWall weewx[10284] CRITICAL weewx.engine:     ****    File "/usr/share/weewx/user/interceptor.py", line 315, in loader
May 25 17:56:02 GreatWall weewx[10284] CRITICAL weewx.engine:     ****      return InterceptorDriver(**config_dict[DRIVER_NAME])
May 25 17:56:02 GreatWall weewx[10284] CRITICAL weewx.engine:     ****    File "/usr/share/weewx/user/interceptor.py", line 2522, in __init__
May 25 17:56:02 GreatWall weewx[10284] CRITICAL weewx.engine:     ****      self._device = self.DEVICE_TYPES.get(self._device_type)(**stn_dict)
May 25 17:56:02 GreatWall weewx[10284] CRITICAL weewx.engine:     ****    File "/usr/share/weewx/user/interceptor.py", line 728, in __init__
May 25 17:56:02 GreatWall weewx[10284] CRITICAL weewx.engine:     ****      WUClient.Parser(), handler=WUClient.Handler, **stn_dict)
May 25 17:56:02 GreatWall weewx[10284] CRITICAL weewx.engine:     ****    File "/usr/share/weewx/user/interceptor.py", line 427, in __init__
May 25 17:56:02 GreatWall weewx[10284] CRITICAL weewx.engine:     ****      iface, pcap_filter, promiscuous)
May 25 17:56:02 GreatWall weewx[10284] CRITICAL weewx.engine:     ****    File "/usr/share/weewx/user/interceptor.py", line 469, in __init__
May 25 17:56:02 GreatWall weewx[10284] CRITICAL weewx.engine:     ****      self.sniffer.open_live(iface, snaplen, pval, timeout_ms)
May 25 17:56:02 GreatWall weewx[10284] CRITICAL weewx.engine:     ****    File "/usr/lib/python2.7/dist-packages/pcap.py", line 108, in open_live
May 25 17:56:02 GreatWall weewx[10284] CRITICAL weewx.engine:     ****      def open_live(self, *args): return _pcap.pcapObject_open_live(self, *args)
May 25 17:56:02 GreatWall weewx[10284] CRITICAL weewx.engine:     ****  TypeError: in method 'pcapObject_open_live', argument 2 of type 'char *'
May 25 17:56:02 GreatWall weewx[10284] CRITICAL __main__: Unable to load driver: in method 'pcapObject_open_live', argument 2 of type 'char *'
May 25 17:56:02 GreatWall weewx[10284] CRITICAL __main__:     ****  Exiting...

I'm using Raspbian, with the following versions: 
  • python-libpcap v0.6.4-1
  • weewx v4.0.0-1
  • Python v2.7.13-2+deb9u3
  • interceptor v0.54

Here is the weewx config file:
# WEEWX CONFIGURATION FILE
#
# Copyright (c) 2009-2019 Tom Keffer 
# See the file LICENSE.txt for your rights.

##############################################################################

# This section is for general configuration information.

# Set to 1 for extra debug info, otherwise comment it out or set to zero
debug = 0

# Root directory of the weewx data file hierarchy for this station
WEEWX_ROOT = /

# Whether to log successful operations
log_success = True

# Whether to log unsuccessful operations
log_failure = True

# How long to wait before timing out a socket (FTP, HTTP) connection
socket_timeout = 20

# Do not modify this. It is used when installing and updating weewx.
version = 4.0.0

##############################################################################

#   This section is for information about the station.

[Station]

    # Description of the station location
    location = "REMOVED"

    # Latitude in decimal degrees. Negative for southern hemisphere
    latitude = REMOVED
    # Longitude in decimal degrees. Negative for western hemisphere.
    longitude = REMOVED

    # Altitude of the station, with unit it is in. This is downloaded from
    # from the station if the hardware supports it.
    altitude = 271, meter    # Choose 'foot' or 'meter' for unit

    # Set to type of station hardware. There must be a corresponding stanza
    # in this file with a 'driver' parameter indicating the driver to be used.
    station_type = Interceptor

    # If you have a website, you may specify an URL
    #station_url = http://www.example.com

    # The start of the rain year (1=January; 10=October, etc.). This is
    # downloaded from the station if the hardware supports it.
    rain_year_start = 1

    # Start of week (0=Monday, 6=Sunday)
    week_start = 6

##############################################################################

[Interceptor]
    # This section is for the network traffic interceptor driver.

    # The driver to use:
    driver = user.interceptor

    # Specify the hardware device to capture.  Options include:
    #   acurite-bridge - acurite internet bridge, smarthub, or access
    #   observer - fine offset WH2600/HP1000/HP1003, ambient WS2902
    #   lw30x - oregon scientific LW301/LW302
    #   lacrosse-bridge - lacrosse GW1000U/C84612 internet bridge
    #   wu-client - any hardware that uses the weather underground protocol
    device_type = wu-client
    mode = sniff
    iface = wlan0
    pcap_filter = src 192.168.4.50 and dst port 80

##############################################################################

#   This section is for uploading data to Internet sites

[StdRESTful]

    [[StationRegistry]]
        # To register this weather station with weewx, set this to true
        register_this_station = false

    [[AWEKAS]]
        # This section is for configuring posts to AWEKAS.

        # If you wish to do this, set the option 'enable' to true,
        # and specify a username and password.
        # To guard against parsing errors, put the password in quotes.
        enable = false
        username = replace_me
        password = replace_me

    [[CWOP]]
        # This section is for configuring posts to CWOP.

        # If you wish to do this, set the option 'enable' to true,
        # and specify the station ID (e.g., CW1234).
        enable = false
        station = replace_me

    # If this is an APRS (radio amateur) station, uncomment
    # the following and replace with a passcode (e.g., 12345).
    #passcode = replace_me (APRS stations only)

    [[PWSweather]]
        # This section is for configuring posts to PWSweather.com.

        # If you wish to do this, set the option 'enable' to true,
        # and specify a station and password.
        # To guard against parsing errors, put the password in quotes.
        enable = false
        station = replace_me
        password = replace_me

    [[WOW]]
        # This section is for configuring posts to WOW.

        # If you wish to do this, set the option 'enable' to true,
        # and specify a station and password.
        # To guard against parsing errors, put the password in quotes.
        enable = false
        station = replace_me
        password = replace_me

    [[Wunderground]]
        # This section is for configuring posts to the Weather Underground.

        # If you wish to do this, set the option 'enable' to true,
        # and specify a station (e.g., 'KORHOODR3') and password.
        # To guard against parsing errors, put the password in quotes.
        enable = false
        station = replace_me
        password = replace_me

        # If you plan on using wunderfixer, set the following
        # to your API key:
        api_key = replace_me

        # Set the following to True to have weewx use the WU "Rapidfire"
        # protocol. Not all hardware can support it. See the User's Guide.
        rapidfire = False

##############################################################################

#   This section specifies what reports, using which skins, to generate.

[StdReport]

    # Where the skins reside, relative to WEEWX_ROOT
    SKIN_ROOT = /etc/weewx/skins

    # Where the generated reports should go, relative to WEEWX_ROOT
    HTML_ROOT = /var/www/html/weewx

    # The database binding indicates which data should be used in reports.
    data_binding = wx_binding

    # Whether to log a successful operation
    log_success = True

    # Whether to log an unsuccessful operation
    log_failure = False

    # Each of the following subsections defines a report that will be run.
    # See the customizing guide to change the units, plot types and line
    # colors, modify the fonts, display additional sensor data, and other
    # customizations. Many of those changes can be made here by overriding
    # parameters, or by modifying templates within the skin itself.

    [[SeasonsReport]]
        # The SeasonsReport uses the 'Seasons' skin, which contains the
        # images, templates and plots for the report.
        skin = Seasons
        enable = true

    [[SmartphoneReport]]
        # The SmartphoneReport uses the 'Smartphone' skin, and the images and
        # files are placed in a dedicated subdirectory.
        skin = Smartphone
        enable = false
        HTML_ROOT = /var/www/html/weewx/smartphone

    [[MobileReport]]
        # The MobileReport uses the 'Mobile' skin, and the images and files
        # are placed in a dedicated subdirectory.
        skin = Mobile
        enable = false
        HTML_ROOT = /var/www/html/weewx/mobile

    [[StandardReport]]
        # This is the old "Standard" skin. By default, it is not enabled.
        skin = Standard
        enable = false

    [[FTP]]
        # FTP'ing the results to a webserver is treated as just another report,
        # albeit one with an unusual report generator!
        skin = Ftp

        # If you wish to use FTP, set "enable" to "true", then
        # fill out the next four lines.
        # Use quotes around passwords to guard against parsing errors.
        enable = false
        user = replace_me
        password = replace_me
        server = replace_me    # The ftp server name, e.g, www.myserver.org
        path = replace_me    # The destination directory, e.g., /weather

        # Set to True for an FTP over TLS (FTPS) connection. Not all servers
        # support this.
        secure_ftp = False

        # To upload files from something other than what HTML_ROOT is set
        # to above, specify a different HTML_ROOT here.
        #HTML_ROOT = /var/www/html/weewx

        # Most FTP servers use port 21
        port = 21

        # Set to 1 to use passive mode, zero for active mode
        passive = 1

    [[RSYNC]]
        # rsync'ing to a webserver is treated as just another report
        skin = Rsync

        # If you wish to use rsync, you must configure passwordless ssh using
        # public/private key authentication from the user account that weewx
        # runs to the user account on the remote machine where the files
        # will be copied.
        #
        # If you wish to use rsync, set "enable" to "true", then
        # fill out server, user, and path.
        # The server should appear in your .ssh/config file.
        # The user is the username used in the identity file.
        # The path is the destination directory, such as /var/www/html/weather.
        # Be sure that the user has write permissions on the destination!
        enable = false
        server = replace_me
        user = replace_me
        path = replace_me

        # To upload files from something other than what HTML_ROOT is set
        # to above, specify a different HTML_ROOT here.
        #HTML_ROOT = /var/www/html/weewx

        # Rsync can be configured to remove files from the remote server if
        # they don't exist under HTML_ROOT locally. USE WITH CAUTION: if you
        # make a mistake in the remote path, you could could unintentionally
        # cause unrelated files to be deleted. Set to 1 to enable remote file
        # deletion, zero to allow files to accumulate remotely.
        delete = 0

    ####

    # Various options for customizing your reports.

    [[Defaults]]

        [[[Units]]]

            # The following section sets what unit to use for each unit group.
            # NB: The unit is always in the singular. I.e., 'mile_per_hour',
            # NOT 'miles_per_hour'
            [[[[Groups]]]]

                group_altitude = meter    # Options are 'foot' or 'meter'
                group_degree_day = degree_C_day    # Options are 'degree_F_day' or 'degree_C_day'
                group_distance = km    # Options are 'mile' or 'km'
                group_pressure = mbar    # Options are 'inHg', 'mmHg', 'mbar', or 'hPa'
                group_rain = mm    # Options are 'inch', 'cm', or 'mm'
                group_rainrate = mm_per_hour    # Options are 'inch_per_hour', 'cm_per_hour', or 'mm_per_hour'
                group_speed = meter_per_second    # Options are 'mile_per_hour', 'km_per_hour', 'knot', or 'meter_per_second'
                group_speed2 = meter_per_second2    # Options are 'mile_per_hour2', 'km_per_hour2', 'knot2', or 'meter_per_second2'
                group_temperature = degree_C    # Options are 'degree_F' or 'degree_C'

            # The following section sets the formatting for each type of unit.
            [[[[StringFormats]]]]

                centibar = %.0f
                cm = %.2f
                cm_per_hour = %.2f
                degree_C = %.1f
                degree_F = %.1f
                degree_compass = %.0f
                foot = %.0f
                hPa = %.1f
                hour = %.1f
                inHg = %.3f
                inch = %.2f
                inch_per_hour = %.2f
                km = %.1f
                km_per_hour = %.0f
                km_per_hour2 = %.1f
                knot = %.0f
                knot2 = %.1f
                mbar = %.1f
                meter = %.0f
                meter_per_second = %.1f
                meter_per_second2 = %.1f
                mile = %.1f
                mile_per_hour = %.0f
                mile_per_hour2 = %.1f
                mm = %.1f
                mmHg = %.1f
                mm_per_hour = %.1f
                percent = %.0f
                second = %.0f
                uv_index = %.1f
                volt = %.1f
                watt_per_meter_squared = %.0f
                NONE = "   N/A"

            # The following section overrides the label used for each type of unit
            [[[[Labels]]]]

                meter = " metre", " metres"    # You may prefer "metre".
                day = " day", " days"
                hour = " hour", " hours"
                minute = " minute", " minutes"
                second = " second", " seconds"
                NONE = ""

            # The following section sets the format for each time scale.
            # The values below will work in every locale, but they may not look
            # particularly attractive.
            [[[[TimeFormats]]]]

                hour = %H:%M
                day = %X
                week = %X (%A)
                month = %x %X
                year = %x %X
                rainyear = %x %X
                current = %x %X
                ephem_day = %X
                ephem_year = %x %X

            [[[[Ordinates]]]]

                # Ordinal directions. The last one is for no wind direction
                directions = N, NNE, NE, ENE, E, ESE, SE, SSE, S, SSW, SW, WSW, W, WNW, NW, NNW, N/A

            # The following section sets the base temperatures used for the
            #  calculation of heating, cooling, and growing degree-days.
            [[[[DegreeDays]]]]

                # Base temperature for heating days, with unit:
                heating_base = 65, degree_F
                # Base temperature for cooling days, with unit:
                cooling_base = 65, degree_F
                # Base temperature for growing days, with unit:
                growing_base = 50, degree_F
        foo = foo + 0.2

##############################################################################

#   This section is for quality control checks. If units are not specified,
#   values must be in the units defined in the StdConvert section.

[StdQC]

    [[MinMax]]
        barometer = 26, 32.5, inHg
        pressure = 24, 34.5, inHg
        outTemp = -40, 120, degree_F
        inTemp = 10, 120, degree_F
        outHumidity = 0, 100
        inHumidity = 0, 100
        windSpeed = 0, 120, mile_per_hour
        rain = 0, 10, inch

##############################################################################

#   This section controls the origin of derived values.

[StdWXCalculate]

    [[Calculations]]
        # How to calculate derived quantities.  Possible values are:
        #  hardware        - use the value provided by hardware
        #  software        - use the value calculated by weewx
        #  prefer_hardware - use value provide by hardware if available,
        #                      otherwise use value calculated by weewx

        pressure = prefer_hardware
        altimeter = prefer_hardware
        appTemp = prefer_hardware
        barometer = prefer_hardware
        beaufort = prefer_hardware
        cloudbase = prefer_hardware
        dewpoint = prefer_hardware
        ET = prefer_hardware
        heatindex = prefer_hardware
        humidex = prefer_hardware
        inDewpoint = prefer_hardware
        maxSolarRad = prefer_hardware
        rainRate = prefer_hardware
        windchill = prefer_hardware
        windrun = prefer_hardware

##############################################################################

#   For hardware that supports it, this section controls how often the
#   onboard clock gets updated.

[StdTimeSynch]

    # How often to check the weather station clock for drift (in seconds)
    clock_check = 14400

    # How much it can drift before we will correct it (in seconds)
    max_drift = 5

##############################################################################

#   This section is for configuring the archive service.

[StdArchive]

    # If the station hardware supports data logging then the archive interval
    # will be downloaded from the station. Otherwise, specify it (in seconds).
    archive_interval = 300

    # If possible, new archive records are downloaded from the station
    # hardware. If the hardware does not support this, then new archive
    # records will be generated in software.
    # Set the following to "software" to force software record generation.
    record_generation = hardware

    # Whether to include LOOP data in hi/low statistics
    loop_hilo = True

    # The data binding used to save archive records
    data_binding = wx_binding

##############################################################################

#   This section binds a data store to a database.

[DataBindings]

    [[wx_binding]]
        # The database must match one of the sections in [Databases].
        # This is likely to be the only option you would want to change.
        database = archive_sqlite
        # The name of the table within the database
        table_name = archive
        # The manager handles aggregation of data for historical summaries
        manager = weewx.manager.DaySummaryManager
        # The schema defines the structure of the database.
        # It is *only* used when the database is created.
        schema = schemas.wview_extended.schema

##############################################################################

#   This section defines various databases.

[Databases]

    # A SQLite database is simply a single file
    [[archive_sqlite]]
        database_name = weewx.sdb
        database_type = SQLite

    # MySQL
    [[archive_mysql]]
        database_name = weewx
        database_type = MySQL
        report_services = weewx.engine.StdPrint, weewx.engine.StdReport



Let me know what more information you need to help debug. 
Thanks.

Stephen Backway

unread,
May 25, 2020, 8:03:50 AM5/25/20
to weewx-user
Running the script directly works, so it is something todo with the Weewx - Interceptor link that isn't quite right.

Example output:

sudo PYTHONPATH=/usr/share/weewx python /usr/share/weewx/user/interceptor.py --device=wu-client --mode=sniff --iface=wlan0 --filter="src 192.168.4.50 and dst port 80"
mapped packet: {'barometer': 30.58, 'windchill': 46.4, 'dewpoint': 44.6, 'outHumidity': 94.0, 'UV': 0.0, 'radiation': 0.0, 'rain': None, 'dateTime': 1590407824, 'windDir': 86.0, 'outTemp': 46.4, 'windSpeed': 0.7, 'inHumidity': 57.0, 'inTemp': 70.0, 'windGust': 1.1, 'usUnits': 1}
mapped packet: {'barometer': 30.58, 'windchill': 46.4, 'dewpoint': 44.6, 'outHumidity': 94.0, 'UV': 0.0, 'radiation': 0.0, 'rain': 0.0, 'dateTime': 1590407824, 'windDir': 80.0, 'outTemp': 46.4, 'windSpeed': 0.9, 'inHumidity': 57.0, 'inTemp': 70.0, 'windGust': 1.1, 'usUnits': 1}
mapped packet: {'barometer': 30.58, 'windchill': 46.4, 'dewpoint': 44.6, 'outHumidity': 94.0, 'UV': 0.0, 'radiation': 0.0, 'rain': 0.0, 'dateTime': 1590407884, 'windDir': 80.0, 'outTemp': 46.4, 'windSpeed': 0.9, 'inHumidity': 57.0, 'inTemp': 69.8, 'windGust': 1.1, 'usUnits': 1}
mapped packet: {'barometer': 30.58, 'windchill': 46.4, 'dewpoint': 44.6, 'outHumidity': 94.0, 'UV': 0.0, 'radiation': 0.0, 'rain': 0.0, 'dateTime': 1590407884, 'windDir': 128.0, 'outTemp': 46.4, 'windSpeed': 1.1, 'inHumidity': 57.0, 'inTemp': 69.8, 'windGust': 1.1, 'usUnits': 1}



Stephen Backway

unread,
May 25, 2020, 8:41:41 AM5/25/20
to weewx-user
The issue appears to be with passing of the interface, as changing the default interface at line 310 of interceptor.py to the correct interface and not specifying the interface in the weewx.cfg results in it working.

For me this is what I changed it to:
310  DEFAULT_IFACE = 'wlan0'

Calling it a night, so hopefully that assists with tracking down the bug.

Zsolt Máté

unread,
Jun 30, 2020, 8:06:44 PM6/30/20
to weewx-user
Did anyone find a fix for this?
I'm in the same boat. Fresh raspberry pi image, clean install.

sudo PYTHONPATH=/usr/share/weewx python /usr/share/weewx/user/interceptor.py --device=observer --mode=sniff --iface=wlan0 --filter="src 10.3.141.115 and dst port 80"
mapped packet: {'barometer': 29.986, 'windchill': 45.5, 'dewpoint': 39.7, 'pressure': 30.024, 'outHumidity': 77.0, 'UV': 1.0, 'radiation': 105.33, 'rain': None, 'dateTime': 1593561263, 'windDir': 244.0, 'outTemp': 46.6, 'windSpeed': 3.4, 'inHumidity': 44.0, 'inTemp': 69.6, 'windGust': 4.5, 'usUnits': 1}


Jul  1 12:05:51 raspberrypi weewx[4198] CRITICAL weewx.engine:     ****      Observer.Parser(), handler=Observer.Handler, **stn_dict)
Jul  1 12:05:51 raspberrypi weewx[4198] CRITICAL weewx.engine:     ****    File "/usr/share/weewx/user/interceptor.py", line 427, in __init__
Jul  1 12:05:51 raspberrypi weewx[4198] CRITICAL weewx.engine:     ****      iface, pcap_filter, promiscuous)
Jul  1 12:05:51 raspberrypi weewx[4198] CRITICAL weewx.engine:     ****    File "/usr/share/weewx/user/interceptor.py", line 469, in __init__
Jul  1 12:05:51 raspberrypi weewx[4198] CRITICAL weewx.engine:     ****      self.sniffer.open_live(iface, snaplen, pval, timeout_ms)
Jul  1 12:05:51 raspberrypi weewx[4198] CRITICAL weewx.engine:     ****    File "/usr/lib/python2.7/dist-packages/pcap.py", line 108, in open_live
Jul  1 12:05:51 raspberrypi weewx[4198] CRITICAL weewx.engine:     ****      def open_live(self, *args): return _pcap.pcapObject_open_live(self, *args)
Jul  1 12:05:51 raspberrypi weewx[4198] CRITICAL weewx.engine:     ****  TypeError: in method 'pcapObject_open_live', argument 2 of type 'char *'
Jul  1 12:05:51 raspberrypi weewx[4198] CRITICAL __main__: Unable to load driver: in method 'pcapObject_open_live', argument 2 of type 'char *'
Jul  1 12:05:51 raspberrypi weewx[4198] CRITICAL __main__:     ****  Exiting...

Zsolt Máté

unread,
Jul 1, 2020, 7:26:55 PM7/1/20
to weewx-user
Solved by uninstalling python3 and installing 2.7.

Stefan Guddat

unread,
Sep 22, 2020, 4:52:24 PM9/22/20
to weewx-user
What did work for me was using pypcap instead of libpcap. So uninstall the recommended "python-libcacp" and install "python-pypcap" instead.
Reply all
Reply to author
Forward
0 new messages