Hi,
To trap bad data I have a derivative of alarm.py that has been sucessully running for years on Python 2.7 and weewx 3.x. I upgraded to weewx 4 and Python 3 a month or so ago and it has been running quite happily until a few days ago.
The bad data parameters have been triggered and badData.py has been called. The line that causes the issue is;
if eval(self.expression, None, record):
and the error is;
TypeError: '<' not supported between instances of 'NoneType' and 'float'
FYI I'm a Python novice and copy from working code then tweek to what I need and iterate to a result!
I looked at Alarm.py in the examples directory and Customisation guide and the offending line is the same as in my badData.py. So I'm assuming that syntax is OK for Python3
The error message is objecting to comparing a float to a None. I'm not sure why this is an issue now when it's run for several years.
My bad data test is for a temp under 10 or wind gust over 100
In weewx.conf:
badData_test = outTemp < 10.0 or windGust > 100
as it complaining about the < then it's the outTemp variable that's coming through as non numeric.
Lokking in the archive table around the time of the crash I can see a null record for outTemp and windGust
sqlite> select datetime, outtemp, windgust from archive where datetime > 1594530300 and datetime < 1594531800;
1594530600|43.34|0.0
1594530900||
1594531319|43.52|0.0
1594531619|43.52|0.0
I have had null values whilst running python2
I'm not sure where to go from here, help!
Configuration:
Maplin/Fine Offset weather station been running since 2013
Raspberry PI 1B running Buster
Python 3.7.3
1 . badData.py - attached
2. extracts from Weewx.conf:
##############################################################################
# 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, user.forecast.ZambrettiForecast, user.forecast.WUForecast, user.forecast.NWSFor$
restful_services = weewx.restx.StdWunderground, weewx.restx.StdWOW, weewx.restx.StdPWSweather, weewx.restx.StdCWOP, weewx.r$
report_services = weewx.engine.StdPrint, weewx.engine.StdReport, user.alarm.MyAlarm, user.badData.MyBadData
[Alarm]
expression = " inHumidity > 90.0"
time_wait = 86400
smtp_host = xxxx
smtp_user = xxxx
smtp_password = xxxx
mailto = xxxx
from = xxxx
subject = Humidity over 90!
badData_test = outTemp < 10.0 or windGust > 100
badData_subject = Weather Station spike detected
3. extrract from syslog at time of the crash
Jul 12 06:10:29 weepi weewx[513] INFO weewx.restx: WOW: Published record 2020-07-12 06:10:00 BST (1594530600)
Jul 12 06:10:29 weepi weewx[513] INFO weewx.restx: Wunderground-PWS: Published record 2020-07-12 06:10:00 BST (1594530600)
Jul 12 06:10:45 weepi weewx[513] INFO weewx.cheetahgenerator: Generated 8 files for report SeasonsReport in 14.87 seconds
Jul 12 06:10:52 weepi weewx[513] INFO weewx.imagegenerator: Generated 15 images for report SeasonsReport in 7.48 seconds
Jul 12 06:10:52 weepi weewx[513] INFO weewx.reportengine: Copied 0 files to /home/weewx/public_html
Jul 12 06:10:54 weepi weewx[513] INFO weewx.cheetahgenerator: Generated 6 files for report SmartphoneReport in 0.84 seconds
Jul 12 06:10:56 weepi weewx[513] INFO weewx.imagegenerator: Generated 6 images for report SmartphoneReport in 2.36 seconds
Jul 12 06:10:56 weepi weewx[513] INFO weewx.reportengine: Copied 0 files to /home/weewx/public_html/smartphone
Jul 12 06:10:57 weepi weewx[513] INFO weewx.cheetahgenerator: Generated 1 files for report MobileReport in 0.38 seconds
Jul 12 06:10:59 weepi weewx[513] INFO weewx.imagegenerator: Generated 4 images for report MobileReport in 1.66 seconds
Jul 12 06:10:59 weepi weewx[513] INFO weewx.reportengine: Copied 0 files to /home/weewx/public_html/mobile
Jul 12 06:11:03 weepi weewx[513] INFO weewx.cheetahgenerator: Generated 3 files for report exfoliation in 3.55 seconds
Jul 12 06:11:10 weepi weewx[513] INFO weewx.imagegenerator: Generated 15 images for report exfoliation in 6.91 seconds
Jul 12 06:11:10 weepi weewx[513] INFO weewx.reportengine: Copied 0 files to /home/weewx/public_html/exfoliation
Jul 12 06:15:31 weepi weewx[513] INFO weewx.manager: Added record 2020-07-12 06:15:00 BST (1594530900) to database 'weewx.sdb'
Jul 12 06:15:31 weepi weewx[513] INFO weewx.manager: Added record 2020-07-12 06:15:00 BST (1594530900) to daily summary in 'weewx.sdb'
Jul 12 06:15:31 weepi /weewxd: forecast: MainThread: Zambretti: starting thread
Jul 12 06:15:31 weepi /weewxd: forecast: MainThread: UKMO: starting thread
Jul 12 06:15:31 weepi weewx[513] INFO weewx.engine: Main loop exiting. Shutting engine down.
Jul 12 06:15:31 weepi weewx[513] INFO weewx.engine: Shutting down StdReport thread
Jul 12 06:15:31 weepi weewx[513] INFO weewx.restx: WOW: Published record 2020-07-12 06:15:00 BST (1594530900)
Jul 12 06:15:31 weepi weewx[513] INFO weewx.restx: Wunderground-PWS: Published record 2020-07-12 06:15:00 BST (1594530900)
Jul 12 06:15:31 weepi weewx[513] CRITICAL __main__: Caught unrecoverable exception:
Jul 12 06:15:31 weepi weewx[513] CRITICAL __main__: **** '<' not supported between instances of 'NoneType' and 'float'
Jul 12 06:15:31 weepi weewx[513] CRITICAL __main__: **** Traceback (most recent call last):
Jul 12 06:15:31 weepi weewx[513] CRITICAL __main__: **** File "/home/weewx/bin/weewx/engine.py", line 195, in run
Jul 12 06:15:31 weepi weewx[513] CRITICAL __main__: **** self.dispatchEvent(weewx.Event(weewx.CHECK_LOOP, packet=packet))
Jul 12 06:15:31 weepi weewx[513] CRITICAL __main__: **** File "/home/weewx/bin/weewx/engine.py", line 224, in dispatchEvent
Jul 12 06:15:31 weepi weewx[513] CRITICAL __main__: **** callback(event)
Jul 12 06:15:31 weepi weewx[513] CRITICAL __main__: **** File "/home/weewx/bin/weewx/engine.py", line 578, in check_loop
Jul 12 06:15:31 weepi weewx[513] CRITICAL __main__: **** raise BreakLoop
Jul 12 06:15:31 weepi weewx[513] CRITICAL __main__: **** weewx.engine.BreakLoop
Jul 12 06:15:31 weepi weewx[513] CRITICAL __main__: ****
Jul 12 06:15:31 weepi weewx[513] CRITICAL __main__: **** During handling of the above exception, another exception occurred:
Jul 12 06:15:31 weepi weewx[513] CRITICAL __main__: ****
Jul 12 06:15:32 weepi weewx[513] CRITICAL __main__: **** Traceback (most recent call last):
Jul 12 06:15:32 weepi weewx[513] CRITICAL __main__: **** File "/home/weewx/bin/weewxd", line 154, in main
Jul 12 06:15:32 weepi weewx[513] CRITICAL __main__: **** engine.run()
Jul 12 06:15:32 weepi weewx[513] CRITICAL __main__: **** File "/home/weewx/bin/weewx/engine.py", line 202, in run
Jul 12 06:15:32 weepi weewx[513] CRITICAL __main__: **** self.dispatchEvent(weewx.Event(weewx.POST_LOOP))
Jul 12 06:15:32 weepi weewx[513] CRITICAL __main__: **** File "/home/weewx/bin/weewx/engine.py", line 224, in dispatchEvent
Jul 12 06:15:32 weepi weewx[513] CRITICAL __main__: **** callback(event)
Jul 12 06:15:32 weepi weewx[513] CRITICAL __main__: **** File "/home/weewx/bin/weewx/engine.py", line 588, in post_loop
Jul 12 06:15:32 weepi weewx[513] CRITICAL __main__: **** self._software_catchup()
Jul 12 06:15:32 weepi weewx[513] CRITICAL __main__: **** File "/home/weewx/bin/weewx/engine.py", line 658, in _software_catchup
Jul 12 06:15:32 weepi weewx[513] CRITICAL __main__: **** origin='software'))
Jul 12 06:15:32 weepi weewx[513] CRITICAL __main__: **** File "/home/weewx/bin/weewx/engine.py", line 224, in dispatchEvent
Jul 12 06:15:32 weepi weewx[513] CRITICAL __main__: **** callback(event)
Jul 12 06:15:32 weepi weewx[513] CRITICAL __main__: **** File "/home/weewx/bin/user/badData.py", line 94, in newArchiveRecord
Jul 12 06:15:32 weepi weewx[513] CRITICAL __main__: **** if eval(self.expression, None, record): # NOTE 2
Jul 12 06:15:32 weepi weewx[513] CRITICAL __main__: **** File "<string>", line 1, in <module>
Jul 12 06:15:32 weepi weewx[513] CRITICAL __main__: **** TypeError: '<' not supported between instances of 'NoneType' and 'float'
Jul 12 06:15:32 weepi weewx[513] CRITICAL __main__: **** Exiting.
Jul 12 06:17:01 weepi CRON[32233]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jul 12 06:17:33 weepi systemd[1]: Starting Daily apt upgrade and clean activities...
Jul 12 06:17:40 weepi systemd[1]: apt-daily-upgrade.service: Succeeded.
Thanks in Advance