weewx[5862]: engine: Import of driver failed: in method 'pcapObject_open_live', argument 2 of type 'char *' (<type 'exceptions.TypeE
rror'>)Running the Interceptor manuall works just fine so I know it's not that....
[Interceptor]
driver = user.interceptor
device_type = observer
mode = sniff
iface = wlan0
pcap_filter = src 10.3.141.62 and dst port 80
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 ?
Jan 11 00:39:13 weewx-pi weewx[3942]: interceptor: ServerThread: start sniff serverJan 11 00:39:13 weewx-pi weewx[3942]: engine: Loading service wJan 11 00:39:13 weewx-pi weewx[3942]: interceptor: MainThread: shutting down server threadJan 11 00:39:13 weewx-pi weewx[3942]: interceptor: MainThread: stop sniff serverJan 11 00:39:33 weewx-pi weewx[3942]: interceptor: MainThread: unable to shut down server threadJan 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 nameJan 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 mainJan 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 loadServicesJan 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_objectJan 11 00:39:34 weewx-pi weewx[3942]: **** mod = __import__(module)Jan 11 00:39:34 weewx-pi weewx[3942]: **** ValueError: Empty module nameJan 11 00:39:34 weewx-pi weewx[3942]: **** Exiting.
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 .46I did a apt upgrade after I couldn't get weewx running but non of those packages involved python.
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.49Jan 11 00:39:13 weewx-pi weewx[3942]: interceptor: MainThread: device type: observerJan 11 00:39:13 weewx-pi weewx[3942]: interceptor: MainThread: sensor map: NoneJan 11 00:39:13 weewx-pi weewx[3942]: interceptor: MainThread: mode is sniffJan 11 00:39:13 weewx-pi weewx[3942]: interceptor: MainThread: sniff iface=wlan0 promiscuous=0Jan 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
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.engine: Import of driver failed: in method 'pcapObject_open_live', argument 2 of type 'char *' (<type 'exceptions.Type
Error'>)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)
All of this points to the weewx engine but non of it makes any sense because I can run interceptor standalone.
Well I can't find it. I have been through it a dozen times and just don't see it.
[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 weewxpressure = prefer_hardwarebarometer = prefer_hardwarealtimeter = prefer_hardwarewindchill = prefer_hardwareheatindex = prefer_hardwaredewpoint = prefer_hardwareinDewpoint = prefer_hardwarerainRate = prefer_hardwareinHumidity = Inside Humidity
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.
i still have no idea what changes you are making between runs
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
May 25 17:56:02 GreatWall weewx[10284] INFO __main__: Initializing weewx version 4.0.0May 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.11May 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.confMay 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.53May 25 17:56:02 GreatWall weewx[10284] INFO user.interceptor: device type: wu-clientMay 25 17:56:02 GreatWall weewx[10284] INFO user.interceptor: mode is sniffMay 25 17:56:02 GreatWall weewx[10284] INFO user.interceptor: sniff iface=wlan0 promiscuous=0May 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 setupStationMay 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 loaderMay 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_liveMay 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...# 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 zerodebug = 0
# Root directory of the weewx data file hierarchy for this stationWEEWX_ROOT = /
# Whether to log successful operationslog_success = True
# Whether to log unsuccessful operationslog_failure = True
# How long to wait before timing out a socket (FTP, HTTP) connectionsocket_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
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}310 DEFAULT_IFACE = 'wlan0'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_liveJul 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...