4.1.1 + empty forecast on python3 not working???

90 views
Skip to first unread message

Chris Richmond

unread,
Jun 3, 2020, 10:29:38 AM6/3/20
to weewx-user
All,

    I'm setting up weewx on current versions of everything, and once I added the forecast module, I started
having problems.  I haven't used the forecast module in the past, so not too sure what to expect.  Still using
the simulator while working things out.

The first was that weewx would die within the first loop because of a float vs: NoneType
compare.  This is where the error occurs (self.last_ts was None):
1214         elif time.time() - self.interval > self.last_ts:

Since there wasn't a "last_ts" in the database, there was nothing to return.  This is my work-around (1059, 1060):
1057             # find out when the last forecast happened
1058             self.last_ts = Forecast.get_last_forecast_ts(dbm, self.method_id)
1059             if not self.last_ts:
1060                 self.last_ts = 0

That enabled the main engine to keep running, but when the forecast code actually ran, another error
was caught (one each for the 4 types enabled):

LOOP:   2020-06-02 16:20:16 MDT (1591136416) UV: 2.489577236140643, altimeter: 37.90032838090037, appTemp: 28.35108284522792, barometer: 31.099987728026797, beaufort: 0, cloudbase: 6858.786987764572, consBatteryVoltage: 12.0, dateTime: 1591136416, dewpoint: 27.108597225364377, heatindex: 32.581259971528496, heatingVoltage: 12.0, humidex: 32.581259971528496, inDewpoint: 31.079342683476767, inHumidity: 29.99950912408379, inTemp: 63.00024543795811, inTempBatteryStatus: 0, maxSolarRad: None, outHumidity: 79.99963184080383, outTemp: 32.581259971528496, outTempBatteryStatus: 0, pressure: 31.099987728026797, radiation: 177.82694543861737, rain: 0, rainBatteryStatus: 0, rainRate: 0.0, referenceVoltage: 12.110006725571685, rxCheckPercent: 61.04056080465194, supplyVoltage: 12.0, txBatteryStatus: 0, usUnits: 1, windBatteryStatus: 1, windDir: 359.9977910448229, windGust: 7.363183923558836e-05, windGustDir: 359.9977910448229, windSpeed: 6.135986602995303e-05, windchill: 32.581259971528496

Exception in thread OWMThread:
Traceback (most recent call last):
  File "/usr/lib/python3.5/threading.py", line 914, in _bootstrap_inner
    self.run()
  File "/home/weewx/bin/user/forecast.py", line 995, in run
    self._target(*self._args)
TypeError: 'NoneType' object is not callable

Now, update_forecast expects a passed argument, but none is passed; should be event maybe?
./bin/user/forecast.py:1064:        self.bind(weewx.NEW_ARCHIVE_RECORD, self.update_forecast)
./bin/user/forecast.py:1209:    def update_forecast(self, event):

And this is one line past the original error:
1214         elif time.time() - self.interval > self.last_ts:
1215             t = ForecastThread(self.do_forecast, event)

These should be the relevant parts of the weewx.conf:

[StdReport]
    [[forecast]]
        HTML_ROOT = public_html.sim/forecast
        skin = forecast

[DataBindings]
    [[forecast_binding]]
        database = forecast_sqlite

[Databases]
   [[forecast_sqlite]]
       database_name = forecast.sdb
       database_type = SQLite

[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.NWSForecast, user.forecast.OWMForecast, user.forecast.DSForecast
        report_services = weewx.engine.StdPrint, weewx.engine.StdReport
        restful_services = ,
#       restful_services = weewx.restx.StdStationRegistry, weewx.restx.StdWunderground, weewx.restx.StdPWSweather, weewx.restx.StdCWOP, weewx.restx.StdWOW, weewx.restx.StdAWEKAS

# Options for extension 'forecast'
[Forecast]
    data_binding = forecast_binding
    [[Zambretti]]
        hemisphere = NORTH
    [[NWS]]
        foid = "PIH"
        lid = "IDZ053"
    [[OWM]]
        api_key = xxxxxxxxxxxxxxx583a6
    [[DS]]
        api_key = xxxxxxxxxxxxxxx108eb

The DB exists, but doesn't have much in it:
router1_/home/weewx> d archive.sim/
total 1056
-rw-r--r-- 1 weewx users    8192 Jun  2 16:17 forecast.sdb
-rw-r--r-- 1 weewx users 1073152 Jun  2 16:20 weewx.sdb


And the relevant log (start-up and forecast messages (debug=2 in config).  Actually this is start-up until the first set of exceptions
were reported (running without -d)"

Jun  2 16:05:19 router1 weewx[31567] CRITICAL __main__: Keyboard interrupt.
Jun  2 16:17:58 router1 weewx[32274] INFO __main__: Initializing weewx version 4.1.1
Jun  2 16:17:58 router1 weewx[32274] INFO __main__: Using Python 3.5.3 (default, Sep 27 2018, 17:25:39) #012[GCC 6.3.0 20170516]
Jun  2 16:17:58 router1 weewx[32274] INFO __main__: Platform Linux-4.9.0-8-amd64-x86_64-with-debian-9
Jun  2 16:17:58 router1 weewx[32274] INFO __main__: Locale is 'C'
Jun  2 16:17:58 router1 weewx[32274] INFO __main__: Using configuration file weewx.conf.sim
Jun  2 16:17:58 router1 weewx[32274] INFO __main__: Debug is 2
Jun  2 16:17:58 router1 weewx[32274] DEBUG __main__: Initializing engine
Jun  2 16:17:58 router1 weewx[32274] INFO weewx.engine: Loading station type Simulator (weewx.drivers.simulator)
Jun  2 16:17:58 router1 weewx[32274] DEBUG weewx.engine: Loading service weewx.engine.StdTimeSynch
Jun  2 16:17:58 router1 weewx[32274] DEBUG weewx.engine: Finished loading service weewx.engine.StdTimeSynch
Jun  2 16:17:58 router1 weewx[32274] DEBUG weewx.engine: Loading service weewx.engine.StdConvert
Jun  2 16:17:58 router1 weewx[32274] INFO weewx.engine: StdConvert target unit is 0x1
Jun  2 16:17:58 router1 weewx[32274] DEBUG weewx.engine: Finished loading service weewx.engine.StdConvert
Jun  2 16:17:58 router1 weewx[32274] DEBUG weewx.engine: Loading service weewx.engine.StdCalibrate
Jun  2 16:17:58 router1 weewx[32274] DEBUG weewx.engine: Finished loading service weewx.engine.StdCalibrate
Jun  2 16:17:58 router1 weewx[32274] DEBUG weewx.engine: Loading service weewx.engine.StdQC
Jun  2 16:17:58 router1 weewx[32274] DEBUG weewx.engine: Finished loading service weewx.engine.StdQC
Jun  2 16:17:58 router1 weewx[32274] DEBUG weewx.engine: Loading service weewx.wxservices.StdWXCalculate
Jun  2 16:17:58 router1 weewx[32274] DEBUG weewx.manager: Daily summary version is 2.0
Jun  2 16:17:58 router1 weewx[32274] INFO weewx.wxservices: The following values will be calculated: 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
Jun  2 16:17:58 router1 weewx[32274] INFO weewx.wxservices: The following algorithms will be used for calculations: altimeter=aaASOS, maxSolarRad=RS
Jun  2 16:17:58 router1 weewx[32274] DEBUG weewx.engine: Finished loading service weewx.wxservices.StdWXCalculate
Jun  2 16:17:58 router1 weewx[32274] DEBUG weewx.engine: Loading service weewx.engine.StdArchive
Jun  2 16:17:58 router1 weewx[32274] INFO weewx.engine: Archive will use data binding wx_binding
Jun  2 16:17:58 router1 weewx[32274] INFO weewx.engine: Record generation will be attempted in 'hardware'
Jun  2 16:17:58 router1 weewx[32274] INFO weewx.engine: Using archive interval of 300 seconds (specified in weewx configuration)
Jun  2 16:17:58 router1 weewx[32274] DEBUG weewx.engine: Use LOOP data in hi/low calculations: 1
Jun  2 16:17:58 router1 weewx[32274] DEBUG weewx.engine: Finished loading service weewx.engine.StdArchive
Jun  2 16:17:58 router1 weewx[32274] DEBUG weewx.engine: Loading service user.forecast.ZambrettiForecast
Jun  2 16:17:58 router1 /weewxd: forecast: MainThread: Zambretti: forecast version 3.4.0b1
Jun  2 16:17:58 router1 weewx[32274] INFO weewx.manager: Created and initialized table 'archive' in database 'forecast.sdb'
Jun  2 16:17:58 router1 /weewxd: forecast: MainThread: Zambretti: interval=600 max_age=604800 winddir_period=1800 pressure_period=10800 hemisphere=NORTH lower_pressure=950.0 upper_pressure=1050.0
Jun  2 16:17:58 router1 weewx[32274] DEBUG weewx.engine: Finished loading service user.forecast.ZambrettiForecast
Jun  2 16:17:58 router1 weewx[32274] DEBUG weewx.engine: Loading service user.forecast.NWSForecast
Jun  2 16:17:58 router1 /weewxd: forecast: MainThread: NWS: forecast version 3.4.0b1
Jun  2 16:17:58 router1 /weewxd: forecast: MainThread: NWS: interval=10800 max_age=604800 lid=IDZ053 foid=PIH
Jun  2 16:17:58 router1 weewx[32274] DEBUG weewx.engine: Finished loading service user.forecast.NWSForecast
Jun  2 16:17:58 router1 weewx[32274] DEBUG weewx.engine: Loading service user.forecast.OWMForecast
Jun  2 16:17:58 router1 /weewxd: forecast: MainThread: OWM: forecast version 3.4.0b1
Jun  2 16:17:58 router1 /weewxd: forecast: MainThread: OWM: interval=10800 max_age=604800 api_key=XXXXXXXXXXXXXXXXXXXXXXXXXXXX83a6 location=4x.12,-1x1.35 fc=5day3hour
Jun  2 16:17:58 router1 weewx[32274] DEBUG weewx.engine: Finished loading service user.forecast.OWMForecast
Jun  2 16:17:58 router1 weewx[32274] DEBUG weewx.engine: Loading service user.forecast.DSForecast
Jun  2 16:17:58 router1 /weewxd: forecast: MainThread: DS: forecast version 3.4.0b1
Jun  2 16:17:58 router1 /weewxd: forecast: MainThread: DS: interval=10800 max_age=604800 api_key=XXXXXXXXXXXXXXXXXXXXXXXXXXXX08eb location=4x.12,-1x1.35 fc=daily
Jun  2 16:17:58 router1 weewx[32274] DEBUG weewx.engine: Finished loading service user.forecast.DSForecast
Jun  2 16:17:58 router1 weewx[32274] DEBUG weewx.engine: Loading service weewx.engine.StdPrint
Jun  2 16:17:58 router1 weewx[32274] DEBUG weewx.engine: Finished loading service weewx.engine.StdPrint
Jun  2 16:17:58 router1 weewx[32274] DEBUG weewx.engine: Loading service weewx.engine.StdReport
Jun  2 16:17:58 router1 weewx[32274] DEBUG weewx.engine: Finished loading service weewx.engine.StdReport
Jun  2 16:17:58 router1 weewx[32274] INFO __main__: Starting up weewx version 4.1.1
Jun  2 16:17:58 router1 weewx[32274] INFO weewx.engine: Clock error is -0.12 seconds (positive is fast)
Jun  2 16:17:58 router1 weewx[32274] INFO weewx.engine: Using binding 'wx_binding' to database 'weewx.sdb'
Jun  2 16:17:58 router1 weewx[32274] INFO weewx.manager: Starting backfill of daily summaries
Jun  2 16:17:58 router1 weewx[32274] INFO weewx.engine: Starting main packet loop.
Jun  2 16:20:15 router1 weewx[32274] INFO weewx.manager: Added record 2020-06-02 16:20:00 MDT (1591136400) to database 'weewx.sdb'
Jun  2 16:20:15 router1 weewx[32274] INFO weewx.manager: Added record 2020-06-02 16:20:00 MDT (1591136400) to daily summary in 'weewx.sdb'
Jun  2 16:20:15 router1 /weewxd: forecast: MainThread: Zambretti: starting thread
Jun  2 16:20:15 router1 /weewxd: forecast: MainThread: NWS: starting thread
Jun  2 16:20:15 router1 /weewxd: forecast: MainThread: OWM: starting thread
Jun  2 16:20:15 router1 /weewxd: forecast: MainThread: DS: starting thread
Jun  2 16:20:15 router1 weewx[32274] DEBUG weewx.reportengine: Running reports for latest time in the database.
Jun  2 16:20:15 router1 weewx[32274] DEBUG weewx.reportengine: Running report 'SeasonsReport'
Jun  2 16:20:15 router1 weewx[32274] DEBUG weewx.reportengine: Found configuration file /home/weewx/skins.vp2/Seasons/skin.conf for report 'SeasonsReport'
Jun  2 16:20:15 router1 weewx[32274] DEBUG weewx.cheetahgenerator: Using search list ['weewx.cheetahgenerator.Almanac', 'weewx.cheetahgenerator.Station', 'weewx.cheetahgenerator.Current', 'weewx.cheetahgenerator.Stats', 'weewx.cheetahgenerator.UnitInfo', 'weewx.cheetahgenerator.Extras', 'user.stats.MyXSearch']
Jun  2 16:20:15 router1 weewx[32274] DEBUG weewx.manager: Daily summary version is 2.0
Jun  2 16:20:16 router1 weewx[32274] INFO weewx.cheetahgenerator: Generated 9 files for report SeasonsReport in 0.97 seconds
Jun  2 16:20:16 router1 weewx[32274] DEBUG weewx.manager: Daily summary version is 2.0
Jun  2 16:20:17 router1 weewx[32274] INFO weewx.imagegenerator: Generated 15 images for report SeasonsReport in 0.28 seconds
Jun  2 16:20:17 router1 weewx[32274] INFO weewx.reportengine: Copied 5 files to /home/weewx/public_html.sim/Seasons
Jun  2 16:20:17 router1 weewx[32274] DEBUG weewx.reportengine: Running report 'SmartphoneReport'
Jun  2 16:20:17 router1 weewx[32274] DEBUG weewx.reportengine: Found configuration file /home/weewx/skins.vp2/Smartphone/skin.conf for report 'SmartphoneReport'
Jun  2 16:20:17 router1 weewx[32274] DEBUG weewx.cheetahgenerator: Using search list ['weewx.cheetahgenerator.Almanac', 'weewx.cheetahgenerator.Station', 'weewx.cheetahgenerator.Current', 'weewx.cheetahgenerator.Stats', 'weewx.cheetahgenerator.UnitInfo', 'weewx.cheetahgenerator.Extras']
Jun  2 16:20:17 router1 weewx[32274] DEBUG weewx.manager: Daily summary version is 2.0
Jun  2 16:20:17 router1 weewx[32274] INFO weewx.cheetahgenerator: Generated 6 files for report SmartphoneReport in 0.08 seconds
Jun  2 16:20:17 router1 weewx[32274] DEBUG weewx.manager: Daily summary version is 2.0
Jun  2 16:20:17 router1 weewx[32274] DEBUG PIL.PngImagePlugin: STREAM b'IHDR' 16 13
Jun  2 16:20:17 router1 weewx[32274] DEBUG PIL.PngImagePlugin: STREAM b'IDAT' 41 1216
Jun  2 16:20:17 router1 weewx[32274] DEBUG PIL.PngImagePlugin: STREAM b'IHDR' 16 13
Jun  2 16:20:17 router1 weewx[32274] DEBUG PIL.PngImagePlugin: STREAM b'IDAT' 41 1216
Jun  2 16:20:17 router1 weewx[32274] INFO weewx.imagegenerator: Generated 6 images for report SmartphoneReport in 0.08 seconds
Jun  2 16:20:17 router1 weewx[32274] INFO weewx.reportengine: Copied 6 files to /home/weewx/public_html.sim/smartphone
Jun  2 16:20:17 router1 weewx[32274] DEBUG weewx.reportengine: Running report 'forecast'
Jun  2 16:20:17 router1 weewx[32274] DEBUG weewx.reportengine: Found configuration file /home/weewx/skins.vp2/forecast/skin.conf for report 'forecast'
Jun  2 16:20:17 router1 weewx[32274] DEBUG weewx.cheetahgenerator: Using search list ['weewx.cheetahgenerator.Almanac', 'weewx.cheetahgenerator.Station', 'weewx.cheetahgenerator.Current', 'weewx.cheetahgenerator.Stats', 'weewx.cheetahgenerator.UnitInfo', 'weewx.cheetahgenerator.Extras', 'user.forecast.ForecastVariables']
Jun  2 16:20:17 router1 weewx[32274] DEBUG weewx.manager: Daily summary version is 2.0
Jun  2 16:20:17 router1 weewx[32274] INFO weewx.cheetahgenerator: Generated 12 files for report forecast in 0.54 seconds
Jun  2 16:20:17 router1 weewx[32274] INFO weewx.reportengine: Copied 87 files to /home/weewx/public_html.sim/forecast
Jun  2 16:20:17 router1 weewx[32274] DEBUG weewx.reportengine: Running report 'RSYNC'
Jun  2 16:20:17 router1 weewx[32274] DEBUG weewx.reportengine: Found configuration file /home/weewx/skins.vp2/Rsync/skin.conf for report 'RSYNC'
Jun  2 16:20:17 router1 weewx[32274] DEBUG weeutil.rsyncupload: rsyncupload: cmd: [['rsync', '--archive', '--stats', '-e ssh', '/home/weewx/public_html.sim/', 'we...@router1.csrhome.home:/var/www/html/simweather']]
Jun  2 16:20:18 router1 weewx[32274] INFO weeutil.rsyncupload: rsync'd 145 files (404,365 bytes) in 0.18 seconds
Jun  2 16:20:46 router1 weewx[32274] INFO weewx.engine: Main loop exiting. Shutting engine down.
Jun  2 16:20:46 router1 weewx[32274] INFO weewx.engine: Shutting down StdReport thread
Jun  2 16:20:46 router1 weewx[32274] DEBUG weewx.engine: StdReport thread has been terminated
Jun  2 16:20:46 router1 weewx[32274] CRITICAL __main__: Keyboard interrupt.





 

Chris Richmond

unread,
Jun 10, 2020, 9:30:57 PM6/10/20
to weewx-user
So it seems that part of the problem is that the support for gzipped data from Darksky doesn't work (python(2 or 3) issue), so forcing (in code) non-compressed queries
resolved that issue.  This is using a clean install of 3.9.2. At this point, I'm not sure I care about 4.1.1 or python3  :^), but I'm guessing I'll have to in the future.
Chris

Reply all
Reply to author
Forward
0 new messages