Ron,
I think it would be a good idea to get rtgd-0.6.7.tar.gz from Nigel. It’s a later version and, hopefully, it will run straightaway without changing the code. If you want to give it a try, we can help you get it working.
John If it's any use, I have "rtgd-0.6.7.tar.gz" file that creates the weewx loop data (gauge-data.txt) for SS gauges. Nigel G4ZAL On Thursday, 20 November 2025 at 17:45:58 UTC Ron Walker wrote:
SUCCESS!! After making the changes to gauges.js and restarting weewx, it appears to be working! Data showing up on gauges!
Thanks to you John and everyone else who contributed to this journey!
Ron On Thursday, November 20, 2025 at 12:07:21 PM UTC-5 John Kline wrote:
Assuming gauge-data.txt is working correctly, you need to make the following changes to web_server/scripts/gauges.js
Change weatherProgram to 6 weatherProgram : 0, // Set 0=Cumulus, 1=Weather Display, 2=VWS, 3=WeatherCat, 4=Meteobridge, 5=WView, 6=WeeWX, 7=WLCOM
You may also need to change realTimeUrlWeewx to point the the location of gauge-data.txt (depending on where we end up finding gauge-data.txt).
realTimeUrlWeewx : 'gauge-data.txt', // *** WeeWX Users: Change to your location of the gauge data file ***
Ron,
Would you verify that the following file exists: /var/www/html/weewx/steelseries/gauge-data.txt
If it does, next you need to determine if it is being updated on every loop record. Is it changing only on the archive interval (every 5 minutes) or more often (perhaps every two seconds for some devices)?
If gauge-data.txt is working correctly, we can make the changes to point the _javascript_ to the correct file. John,
I'm pretty sure they are mcrossley gauges. Ron
On Thursday, November 20, 2025 at 10:12:59 AM UTC-5 John Kline wrote:
That looks fine. The problem might be a mismatched SteelSeries-Weather-Gauges.
I provided you with a link to Mark Crossley’s original repository; but Gary modified that. Exactly which SteelSeries-Weather-Gauges do you have installed? John,
Here is the Realtime Gauges section of weewx.conf:
[RealtimeGaugeData] # Date format to be used in gauge-data.txt. Must be either %d/%m/%Y, # %m/%d/%Y or %Y/%m/%d. Separator may be forward slash '/' or a # hyphen '-'. Default is %Y/%m/%d. date_format = %m/%d/%Y
# Time format to be used in gauge-data.txt. May be %H:%M or %h:%M. # Default is %H:%M time_format = %H:%M
# Path to gauge-data.txt. Relative paths are relative to HTML_ROOT. If # empty default is HTML_ROOT. If setting omitted altogether default is # /var/tmp rtgd_path = /var/www/html/weewx/steelseries
# File name (only) of file produced by rtgd. Optional, default is # gauge-data.txt. rtgd_file_name = gauge-data.txt
# Remote URL to which the gauge-data.txt data will be posted via HTTP POST. # Optional, omit to disable HTTP POST. # If remote_server_url is specified, do not specify an rsync server. # remote_server_url = http://remote/address
# timeout in seconds for remote URL posts. Optional, default is 2 timeout = 1
# Text returned from remote URL indicating success. Optional, default is no # response text. response_text = success
# Remote host to which the gauge-data.txt data will be synced via rsync. # Optional, omit to disable rsync to remote host. # If rsync_server is specified, do not specify a remote_server_url. # # Note: The rsync feature will only work in WeeWX v.4 and above. In earlier # versions, rsyncing of single files is not supported by WeeWX' rsync # help function. # # To use rsync, passwordless ssh using public/private key must be # configured for authentication from the user account that WeeWX runs under on # this computer to the user account on the remote machine with write access to # the destination directory (rsync_remote_rtgd_dir). # # If you run logwatch on your system, the following lines will show in the # WeeWX section when they are non-zero. The first line includes any # reporting files rsynced (if that is configured). The others report timeouts # and write errors. Small numbers are expected here as timeouts are purposely # defaulted to 1 second. If taking to long to send, it's better to skip it # and send the next (as in fresher) gauge-data.txt file. # # rsync: files uploaded 27206 # rsync: gauge-data: IO timeout-data 7 # rsync: gauge-data: connection timeouts 11 # rsync: gauge-data: write errors 1 # # # Fill out the following fields: # rsync_server : The server to which gauge-data.txt will be copied. # rsync_user : The userid on rsync_server with write # permission to rsync_remote_rtgd_dir. # rsync_remote_rtgd_dir : The directory on rsync_server where # gauge-data.txt will be copied. # rsync_compress : True to compress the file before sending. # Default is False. # rsync_log_success : True to write success with timing messages to # the log (for debugging). Default is False. # rsync_ssh_options : ssh options Default is '-o ConnectTimeout=1' # (When connecting, time out in 1 second.) # rsync_timeout : I/O timeout. Default is 1. (When sending, # timeout in 1 second.) # rsync_skip_if_older_than : Don't bother to rsync if greater than this # number of seconds. Default is 4. (Skip this # and move on to the next if this data is older # than 4 seconds. # Use either the post method or the rsync method, not both. # [[Rsync]] # rsync_server = emerald.johnkline.com # rsync_user = root # rsync_remote_rtgd_dir = /home/weewx/gauge-data # rsync_compress = False # rsync_log_success = False # rsync_ssh_options = "-o ConnectTimeout=1" # rsync_timeout = 1 # rsync_skip_if_older_than = 4
# Minimum interval (seconds) between file generation. Ideally # gauge-data.txt would be generated on receipt of every loop packet (there # is no point in generating more frequently than this); however, in some # cases the user may wish to generate gauge-data.txt less frequently. The # min_interval option sets the minimum time between successive # gauge-data.txt generations. Generation will be skipped on arrival of a # loop packet if min_interval seconds have NOT elapsed since the last # generation. If min_interval is 0 or omitted generation will occur on # every loop packet (as will be the case if min_interval < station loop # period). Optional, default is 0. min_interval = 2
# Number of compass points to include in WindRoseData, normally # 8 or 16. Optional, default 16. windrose_points = 16
# Period over which to calculate WindRoseData in seconds. Optional, default # is 86400 (24 hours). windrose_period = 86400
# Binding to use for appTemp data. Optional, default 'wx_binding'. apptemp_binding = wx_binding
# The SteelSeries Weather Gauges displays the content of the gauge-data.txt # 'forecast' field in the scrolling text display. The RTGD service can # populate the 'forecast' field from a number of sources. The available # sources are: # # 1. a user specified text # 2. the first line of a text file # 3. Weather Underground forecast from the Weather Underground API # 4. Darksky forecast from the Darksky API # 5. Zambretti forecast from the WeeWX forecast extension # # The block to be used is specified using the scroller_source config # option. The scroller_source should be set to one of the following strings # to use the indicated block: # 1. text - to use user specified text # 2. file - to user the first line of a text file # 3. Weather Underground - to use a Weather Underground forecast # 4. Darksky - to use a Darksky forecast # 5. Zambretti - to use a Zambretti forecast # # The scroller_source config option is case insensitive. A corresponding # second level config section (ie [[ ]]) is required for the block to be # used. Refer to step 4 below for details. If the scroller_source config # option is omitted or left blank the 'forecast' field will be blank and no # scroller text will be displayed. scroller_source = text|file|WU|DS|Zambretti
# Update windrun value each loop period or just on each archive period. # Optional, default is False. windrun_loop = false
# Stations that provide partial packets are supported through a cache that # caches packet data. max_cache_age is the maximum age in seconds for # which cached data is retained. Optional, default is 600 seconds. max_cache_age = 600 # It is possible to ignore the sensor contact check result for the station # and always set the gauge-data.txt SensorContactLost field to 0 (sensor # contact not lost). This option should be used with care as it may mask a # legitimate sensor lost contact state. Optional, default is False. ignore_lost_contact = False
[[StringFormats]] # String formats. Optional. degree_C = %.1f degree_F = %.1f degree_compass = %.0f hPa = %.1f inHg = %.2f inch = %.2f inch_per_hour = %.2f km_per_hour = %.1f km = %.1f mbar = %.1f meter = %.0f meter_per_second = %.1f mile_per_hour = %.1f mile = %.1f mm = %.1f mm_per_hour = %.1f percent = %.0f uv_index = %.1f watt_per_meter_squared = %.0f
[[Groups]] # Groups. Optional. Note not all available WeeWX units are supported # for each group. group_altitude = foot # Options are 'meter' or 'foot' group_pressure = hPa # Options are 'inHg', 'mbar', or 'hPa' group_rain = mm # Options are 'inch' or 'mm' group_speed = km_per_hour # Options are 'mile_per_hour','km_per_hour' or 'meter_per_second' group_temperature = degree_C # Options are 'degree_F' or 'degree_C'
On Thursday, November 20, 2025 at 9:29:59 AM UTC-5 John Kline wrote:
I would have thought the js would be looking for gauge-data.txt and not realtimegauges.txt.
Please send the section of weewx.conf for realtime gauges. Don’t send your entire weewx.conf file.
Also, we still need to get to the bottom of why max_age is a string. Hacking the code to change it to an int is not a desirable way to work around the issue. Perhaps when you send the weewx.conf entrees, we’ll get an answer to that question.
Hi John,
Here is the output from the console: /realtimegauges.txt?_=1763647600018:1 Failed to load resource: the server responded with a status of 404 (Not Found) /realtimegauges.txt?_=1763647600019:1 Failed to load resource: the server responded with a status of 404 (Not Found) /realtimegauges.txt?_=1763647600020:1 Failed to load resource: the server responded with a status of 404 (Not Found) /realtimegauges.txt?_=1763647600021:1 Failed to load resource: the server responded with a status of 404 (Not Found) /realtimegauges.txt?_=1763647600022:1 Failed to load resource: the server responded with a status of 404 (Not Found) jquery-1.11.1.min.js:4 GET http://localhost/realtimegauges.txt?_=1763647600023 404 (Not Found) send @ jquery-1.11.1.min.js:4 ajax @ jquery-1.11.1.min.js:4 getRealtime @ gauges.js:2743 jquery-1.11.1.min.js:4 GET http://localhost/realtimegauges.txt?_=1763647600024 404 (Not Found) send @ jquery-1.11.1.min.js:4 ajax @ jquery-1.11.1.min.js:4 getRealtime @ gauges.js:2743 setTimeout checkRtError @ gauges.js:2789 (anonymous) @ gauges.js:2751 j @ jquery-1.11.1.min.js:2 fireWith @ jquery-1.11.1.min.js:2 x @ jquery-1.11.1.min.js:4 b @ jquery-1.11.1.min.js:4 XMLHttpRequest.send send @ jquery-1.11.1.min.js:4 ajax @ jquery-1.11.1.min.js:4 getRealtime @ gauges.js:2743 jquery-1.11.1.min.js:4 GET http://localhost/realtimegauges.txt?_=1763647600025 404 (Not Found) send @ jquery-1.11.1.min.js:4 ajax @ jquery-1.11.1.min.js:4 getRealtime @ gauges.js:2743 setTimeout checkRtError @ gauges.js:2789 (anonymous) @ gauges.js:2751 j @ jquery-1.11.1.min.js:2 fireWith @ jquery-1.11.1.min.js:2 x @ jquery-1.11.1.min.js:4 b @ jquery-1.11.1.min.js:4 XMLHttpRequest.send send @ jquery-1.11.1.min.js:4 ajax @ jquery-1.11.1.min.js:4 getRealtime @ gauges.js:2743 setTimeout checkRtError @ gauges.js:2789 (anonymous) @ gauges.js:2751 j @ jquery-1.11.1.min.js:2 fireWith @ jquery-1.11.1.min.js:2 x @ jquery-1.11.1.min.js:4 b @ jquery-1.11.1.min.js:4 XMLHttpRequest.send send @ jquery-1.11.1.min.js:4 ajax @ jquery-1.11.1.min.js:4 getRealtime @ gauges.js:2743 jquery-1.11.1.min.js:4 GET http://localhost/realtimegauges.txt?_=1763647600026 404 (Not Found) send @ jquery-1.11.1.min.js:4 ajax @ jquery-1.11.1.min.js:4 getRealtime @ gauges.js:2743 setTimeout checkRtError @ gauges.js:2789 (anonymous) @ gauges.js:2751 j @ jquery-1.11.1.min.js:2 fireWith @ jquery-1.11.1.min.js:2 x @ jquery-1.11.1.min.js:4 b @ jquery-1.11.1.min.js:4 XMLHttpRequest.send send @ jquery-1.11.1.min.js:4 ajax @ jquery-1.11.1.min.js:4 getRealtime @ gauges.js:2743 setTimeout checkRtError @ gauges.js:2789 (anonymous) @ gauges.js:2751 j @ jquery-1.11.1.min.js:2 fireWith @ jquery-1.11.1.min.js:2 x @ jquery-1.11.1.min.js:4 b @ jquery-1.11.1.min.js:4 XMLHttpRequest.send send @ jquery-1.11.1.min.js:4 ajax @ jquery-1.11.1.min.js:4 getRealtime @ gauges.js:2743 setTimeout checkRtError @ gauges.js:2789 (anonymous) @ gauges.js:2751 j @ jquery-1.11.1.min.js:2 fireWith @ jquery-1.11.1.min.js:2 x @ jquery-1.11.1.min.js:4 b @ jquery-1.11.1.min.js:4 XMLHttpRequest.send send @ jquery-1.11.1.min.js:4 ajax @ jquery-1.11.1.min.js:4 getRealtime @ gauges.js:2743 jquery-1.11.1.min.js:4 GET http://localhost/realtimegauges.txt?_=1763647600027 404 (Not Found) send @ jquery-1.11.1.min.js:4 ajax @ jquery-1.11.1.min.js:4 getRealtime @ gauges.js:2743 setTimeout checkRtError @ gauges.js:2789 (anonymous) @ gauges.js:2751 j @ jquery-1.11.1.min.js:2 fireWith @ jquery-1.11.1.min.js:2 x @ jquery-1.11.1.min.js:4 b @ jquery-1.11.1.min.js:4 XMLHttpRequest.send send @ jquery-1.11.1.min.js:4 ajax @ jquery-1.11.1.min.js:4 getRealtime @ gauges.js:2743 setTimeout checkRtError @ gauges.js:2789 (anonymous) @ gauges.js:2751 j @ jquery-1.11.1.min.js:2 fireWith @ jquery-1.11.1.min.js:2 x @ jquery-1.11.1.min.js:4 b @ jquery-1.11.1.min.js:4 XMLHttpRequest.send send @ jquery-1.11.1.min.js:4 ajax @ jquery-1.11.1.min.js:4 getRealtime @ gauges.js:2743 setTimeout checkRtError @ gauges.js:2789 (anonymous) @ gauges.js:2751 j @ jquery-1.11.1.min.js:2 fireWith @ jquery-1.11.1.min.js:2 x @ jquery-1.11.1.min.js:4 b @ jquery-1.11.1.min.js:4 XMLHttpRequest.send send @ jquery-1.11.1.min.js:4 ajax @ jquery-1.11.1.min.js:4 getRealtime @ gauges.js:2743 setTimeout checkRtError @ gauges.js:2789 (anonymous) @ gauges.js:2751 j @ jquery-1.11.1.min.js:2 fireWith @ jquery-1.11.1.min.js:2 x @ jquery-1.11.1.min.js:4 b @ jquery-1.11.1.min.js:4 XMLHttpRequest.send send @ jquery-1.11.1.min.js:4 ajax @ jquery-1.11.1.min.js:4 getRealtime @ gauges.js:2743 jquery-1.11.1.min.js:4 GET http://localhost/realtimegauges.txt?_=1763647600028 404 (Not Found) send @ jquery-1.11.1.min.js:4 ajax @ jquery-1.11.1.min.js:4 getRealtime @ gauges.js:2743 setTimeout checkRtError @ gauges.js:2789 (anonymous) @ gauges.js:2751 j @ jquery-1.11.1.min.js:2 fireWith @ jquery-1.11.1.min.js:2 x @ jquery-1.11.1.min.js:4 b @ jquery-1.11.1.min.js:4 XMLHttpRequest.send send @ jquery-1.11.1.min.js:4 ajax @ jquery-1.11.1.min.js:4 getRealtime @ gauges.js:2743 setTimeout checkRtError @ gauges.js:2789 (anonymous) @ gauges.js:2751 j @ jquery-1.11.1.min.js:2 fireWith @ jquery-1.11.1.min.js:2 x @ jquery-1.11.1.min.js:4 b @ jquery-1.11.1.min.js:4 XMLHttpRequest.send send @ jquery-1.11.1.min.js:4 ajax @ jquery-1.11.1.min.js:4 getRealtime @ gauges.js:2743 setTimeout checkRtError @ gauges.js:2789 (anonymous) @ gauges.js:2751 j @ jquery-1.11.1.min.js:2 fireWith @ jquery-1.11.1.min.js:2 x @ jquery-1.11.1.min.js:4 b @ jquery-1.11.1.min.js:4 XMLHttpRequest.send send @ jquery-1.11.1.min.js:4 ajax @ jquery-1.11.1.min.js:4 getRealtime @ gauges.js:2743 setTimeout checkRtError @ gauges.js:2789 (anonymous) @ gauges.js:2751 j @ jquery-1.11.1.min.js:2 fireWith @ jquery-1.11.1.min.js:2 x @ jquery-1.11.1.min.js:4 b @ jquery-1.11.1.min.js:4 XMLHttpRequest.send send @ jquery-1.11.1.min.js:4 ajax @ jquery-1.11.1.min.js:4 getRealtime @ gauges.js:2743 setTimeout checkRtError @ gauges.js:2789 (anonymous) @ gauges.js:2751 j @ jquery-1.11.1.min.js:2 fireWith @ jquery-1.11.1.min.js:2 x @ jquery-1.11.1.min.js:4 b @ jquery-1.11.1.min.js:4 XMLHttpRequest.send
On Wednesday, November 19, 2025 at 9:55:48 PM UTC-5 John Kline wrote:
As for your current problem, would you look at the _javascript_ console in your browser when the gauges display is displayed? There should be _javascript_ errors that you can paste here.
Well, I screwed up the line I wanted you to add. Then end of that line should have been:
(ts, type(ts), self.cache[obs][‘ts’], type(self.cache[obs][‘ts’]), max_age, type(max_age)))
As I mentioned, the only way you could get this is if max_age is a string. Are you sure you don’t have max_cache_age = “600” (i.e., the 600 in quotes) in weewx.conf? Ian, Glen, John,
I made the changes that Ian suggested and that seems to have done the trick! I've pasted the log from the restart. I've waited a couple of report periods, but there is no change in the gauges. Thank you all for the progress so far!
Started weewx.service - WeeWX. INFO __main__: Initializing weewxd version 5.2.0 INFO __main__: Command line: /usr/share/weewx/weewxd.py /etc/weewx/weewx.conf INFO __main__: Using Python: 3.13.5 (main, Jun 25 2025, 18:55:22) [GCC 14.2.0] INFO __main__: Located at: /usr/bin/python3 INFO __main__: Platform: Linux-6.12.47+rpt-rpi-v8-aarch64-with-glibc2.41 INFO __main__: Locale: 'en_US' INFO __main__: Entry path: /usr/share/weewx/weewxd.py INFO __main__: WEEWX_ROOT: /etc/weewx INFO __main__: Config file: /etc/weewx/weewx.conf INFO __main__: User module: /etc/weewx/bin/user INFO __main__: Debug: 1 INFO __main__: User: weewx INFO __main__: Group: weewx INFO __main__: Groups: weewx DEBUG __main__: loop_on_init: False DEBUG __main__: Initializing engine INFO weewx.engine: Loading station type FileParse (user.fileparse) INFO user.fileparse: Data file is /var/tmp/weewx/data.csv INFO user.fileparse: Polling interval is 10.0 INFO user.fileparse: Label map is {'pressure': 'pressure', 'outTemp': 'outTemp', 'inTemp': 'inTemp', 'outHumidity': 'outHumidity', 'inHumidity': 'inHumidity', 'windSpeed': 'windSpeed', 'windDir': 'windDir', 'windGust': 'windGust', 'windGustDir': 'windGustDir', 'supplyVoltage': 'supplyVoltage', 'lightLevel': 'radiation', 'rain': 'rain'} DEBUG weewx.engine: Loading service weewx.engine.StdTimeSynch DEBUG weewx.engine: Finished loading service weewx.engine.StdTimeSynch DEBUG weewx.engine: Loading service weewx.engine.StdConvert INFO weewx.engine: StdConvert target unit is 0x1 DEBUG weewx.engine: Finished loading service weewx.engine.StdConvert DEBUG weewx.engine: Loading service weewx.engine.StdCalibrate DEBUG weewx.engine: Finished loading service weewx.engine.StdCalibrate DEBUG weewx.engine: Loading service weewx.engine.StdQC DEBUG weewx.engine: Finished loading service weewx.engine.StdQC DEBUG weewx.engine: Loading service weewx.wxservices.StdWXCalculate INFO weewx.wxservices: StdWXCalculate will use data binding wx_binding DEBUG weewx.manager: Daily summary version is 4.0 DEBUG weewx.engine: Finished loading service weewx.wxservices.StdWXCalculate DEBUG weewx.engine: Loading service weewx.wxxtypes.StdWXXTypes DEBUG weewx.engine: Finished loading service weewx.wxxtypes.StdWXXTypes DEBUG weewx.engine: Loading service weewx.wxxtypes.StdPressureCooker DEBUG weewx.engine: Finished loading service weewx.wxxtypes.StdPressureCooker DEBUG weewx.engine: Loading service weewx.wxxtypes.StdRainRater DEBUG weewx.engine: Finished loading service weewx.wxxtypes.StdRainRater DEBUG weewx.engine: Loading service weewx.wxxtypes.StdDelta DEBUG weewx.engine: Finished loading service weewx.wxxtypes.StdDelta DEBUG weewx.engine: Loading service weewx.engine.StdArchive INFO weewx.engine: Archive will use data binding wx_binding INFO weewx.engine: Record generation will be attempted in 'hardware' INFO weewx.engine: Using archive interval of 300 seconds (specified in weewx configuration) DEBUG weewx.engine: Use LOOP data in hi/low calculations: 1 DEBUG weewx.engine: Finished loading service weewx.engine.StdArchive DEBUG weewx.engine: Loading service weewx.restx.StdStationRegistry INFO weewx.restx: StationRegistry: Registration not requested. DEBUG weewx.engine: Finished loading service weewx.restx.StdStationRegistry DEBUG weewx.engine: Loading service weewx.restx.StdWunderground INFO weewx.restx: Wunderground: Posting not enabled. DEBUG weewx.engine: Finished loading service weewx.restx.StdWunderground DEBUG weewx.engine: Loading service weewx.restx.StdPWSweather INFO weewx.restx: PWSweather: Posting not enabled. DEBUG weewx.engine: Finished loading service weewx.restx.StdPWSweather DEBUG weewx.engine: Loading service weewx.restx.StdCWOP INFO weewx.restx: CWOP: Posting not enabled. DEBUG weewx.engine: Finished loading service weewx.restx.StdCWOP DEBUG weewx.engine: Loading service weewx.restx.StdWOW INFO weewx.restx: WOW: Posting not enabled. DEBUG weewx.engine: Finished loading service weewx.restx.StdWOW DEBUG weewx.engine: Loading service weewx.restx.StdWOWBE INFO weewx.restx: WOW-BE: Posting not enabled. DEBUG weewx.engine: Finished loading service weewx.restx.StdWOWBE DEBUG weewx.engine: Loading service weewx.restx.StdAWEKAS INFO weewx.restx: AWEKAS: Posting not enabled. DEBUG weewx.engine: Finished loading service weewx.restx.StdAWEKAS DEBUG weewx.engine: Loading service weewx.engine.StdPrint DEBUG weewx.engine: Finished loading service weewx.engine.StdPrint DEBUG weewx.engine: Loading service weewx.engine.StdReport INFO weewx.engine: 'pyephem' detected, extended almanac data is available DEBUG weewx.engine: Finished loading service weewx.engine.StdReport DEBUG weewx.engine: Loading service user.rtgd.RealtimeGaugeData INFO user.rtgd: version is 0.5.5 DEBUG weewx.manager: Daily summary version is 4.0 INFO user.rtgd: Unknown block specified for scroller_text INFO user.rtgd: gauge-data.txt will not be exported. INFO user.rtgd: '/var/www/html/weewx/steelseries/gauge-data.txt' will be generated. min_interval is 2 seconds DEBUG weewx.engine: Finished loading service user.rtgd.RealtimeGaugeData INFO __main__: Starting up weewx version 5.2.0 DEBUG weewx.engine: Station does not support reading the time INFO weewx.engine: Using binding 'wx_binding' to database 'weewx.sdb' INFO weewx.manager: Starting backfill of daily summaries INFO weewx.manager: Daily summaries up to date INFO weewx.engine: Starting main packet loop. DEBUG weewx.manager: Daily summary version is 4.0 DEBUG weewx.manager: Daily summary version is 4.0 INFO user.rtgd: ts: 1763600590 (1763600590), self.cache[obs]['ts']: 1763600590 (1763600590), max_age: 600 (600) INFO user.rtgd: ts: 1763600590 (1763600590), self.cache[obs]['ts']: 1763600400 (1763600400), max_age: 600 (600) INFO user.rtgd: ts: 1763600590 (1763600590), self.cache[obs]['ts']: 1763600400 (1763600400), max_age: 600 (600) INFO user.rtgd: ts: 1763600590 (1763600590), self.cache[obs]['ts']: 1763600590 (1763600590), max_age: 600 (600) INFO user.rtgd: ts: 1763600590 (1763600590), self.cache[obs]['ts']: 1763600590 (1763600590), max_age: 600 (600) INFO user.rtgd: ts: 1763600590 (1763600590), self.cache[obs]['ts']: 1763600590 (1763600590), max_age: 600 (600) INFO user.rtgd: ts: 1763600590 (1763600590), self.cache[obs]['ts']: 1763600590 (1763600590), max_age: 600 (600) INFO user.rtgd: ts: 1763600590 (1763600590), self.cache[obs]['ts']: 1763600590 (1763600590), max_age: 600 (600) INFO user.rtgd: ts: 1763600590 (1763600590), self.cache[obs]['ts']: 1763600590 (1763600590), max_age: 600 (600) INFO user.rtgd: ts: 1763600590 (1763600590), self.cache[obs]['ts']: 1763600590 (1763600590), max_age: 600 (600) INFO user.rtgd: ts: 1763600590 (1763600590), self.cache[obs]['ts']: 1763600590 (1763600590), max_age: 600 (600) INFO user.rtgd: ts: 1763600590 (1763600590), self.cache[obs]['ts']: 1763600590 (1763600590), max_age: 600 (600) INFO user.rtgd: ts: 1763600590 (1763600590), self.cache[obs]['ts']: 1763600590 (1763600590), max_age: 600 (600) INFO user.rtgd: ts: 1763600590 (1763600590), self.cache[obs]['ts']: 1763600590 (1763600590), max_age: 600 (600) INFO user.rtgd: ts: 1763600590 (1763600590), self.cache[obs]['ts']: 1763600590 (1763600590), max_age: 600 (600) INFO user.rtgd: ts: 1763600590 (1763600590), self.cache[obs]['ts']: 1763600590 (1763600590), max_age: 600 (600) INFO user.rtgd: ts: 1763600590 (1763600590), self.cache[obs]['ts']: 1763600590 (1763600590), max_age: 600 (600) INFO user.rtgd: ts: 1763600590 (1763600590), self.cache[obs]['ts']: 1763600400 (1763600400), max_age: 600 (600) INFO user.rtgd: ts: 1763600590 (1763600590), self.cache[obs]['ts']: 1763600590 (1763600590), max_age: 600 (600) INFO user.rtgd: ts: 1763600590 (1763600590), self.cache[obs]['ts']: 1763600590 (1763600590), max_age: 600 (600) INFO user.rtgd: ts: 1763600590 (1763600590), self.cache[obs]['ts']: 1763600590 (1763600590), max_age: 600 (600) INFO user.rtgd: ts: 1763600590 (1763600590), self.cache[obs]['ts']: 1763600590 (1763600590), max_age: 600 (600) INFO user.rtgd: ts: 1763600590 (1763600590), self.cache[obs]['ts']: 1763600590 (1763600590), max_age: 600 (600) INFO user.rtgd: ts: 1763600590 (1763600590), self.cache[obs]['ts']: 1763600590 (1763600590), max_age: 600 (600) INFO user.rtgd: ts: 1763600590 (1763600590), self.cache[obs]['ts']: 1763600590 (1763600590), max_age: 600 (600) INFO user.rtgd: ts: 1763600590 (1763600590), self.cache[obs]['ts']: 1763600590 (1763600590), max_age: 600 (600) INFO user.rtgd: ts: 1763600590 (1763600590), self.cache[obs]['ts']: 1763600590 (1763600590), max_age: 600 (600)
On Wednesday, November 19, 2025 at 6:55:25 PM UTC-5 Ian Millard wrote:
Hi,
The error in your WeeWX log shows a type mismatch in the RealtimeGaugeData extension. The issue is that max_age is being treated as a string instead of an integer when comparing timestamps.
Find the problematic line (around line 2894): if obs in self.cache and ts - self.cache[obs]['ts'] <= max_age: Modify it to ensure integer comparison: if obs in self.cache and ts - self.cache[obs]['ts'] <= int(max_age):
Also check the calling function (around line 2908) and ensure the max_age parameter is passed as integer: packet[obs] = self.get_value(obs, ts, int(max_age)) Cheers, Ian
Started weewx.service - WeeWX. INFO __main__: Initializing weewxd version 5.2.0 INFO __main__: Command line: /usr/share/weewx/weewxd.py /etc/weewx/weewx.conf INFO __main__: Using Python: 3.13.5 (main, Jun 25 2025, 18:55:22) [GCC 14.2.0] INFO __main__: Located at: /usr/bin/python3 INFO __main__: Platform: Linux-6.12.47+rpt-rpi-v8-aarch64-with-glibc2.41 INFO __main__: Locale: 'en_US' INFO __main__: Entry path: /usr/share/weewx/weewxd.py INFO __main__: WEEWX_ROOT: /etc/weewx INFO __main__: Config file: /etc/weewx/weewx.conf INFO __main__: User module: /etc/weewx/bin/user INFO __main__: Debug: 1 INFO __main__: User: weewx INFO __main__: Group: weewx INFO __main__: Groups: weewx DEBUG __main__: loop_on_init: False DEBUG __main__: Initializing engine INFO weewx.engine: Loading station type FileParse (user.fileparse) INFO user.fileparse: Data file is /var/tmp/weewx/data.csv INFO user.fileparse: Polling interval is 10.0 INFO user.fileparse: Label map is {'pressure': 'pressure', 'outTemp': 'outTemp', 'inTemp': 'inTemp', 'outHumidity': 'outHumidity', 'inHumidity': 'inHumidity', 'windSpeed': 'windSpeed', 'windDir': 'windDir', 'windGust': 'windGust', 'windGustDir': 'windGustDir', 'supplyVoltage': 'supplyVoltage', 'lightLevel': 'radiation', 'rain': 'rain'} DEBUG weewx.engine: Loading service weewx.engine.StdTimeSynch DEBUG weewx.engine: Finished loading service weewx.engine.StdTimeSynch DEBUG weewx.engine: Loading service weewx.engine.StdConvert INFO weewx.engine: StdConvert target unit is 0x1 DEBUG weewx.engine: Finished loading service weewx.engine.StdConvert DEBUG weewx.engine: Loading service weewx.engine.StdCalibrate DEBUG weewx.engine: Finished loading service weewx.engine.StdCalibrate DEBUG weewx.engine: Loading service weewx.engine.StdQC DEBUG weewx.engine: Finished loading service weewx.engine.StdQC DEBUG weewx.engine: Loading service weewx.wxservices.StdWXCalculate INFO weewx.wxservices: StdWXCalculate will use data binding wx_binding DEBUG weewx.manager: Daily summary version is 4.0 DEBUG weewx.engine: Finished loading service weewx.wxservices.StdWXCalculate DEBUG weewx.engine: Loading service weewx.wxxtypes.StdWXXTypes DEBUG weewx.engine: Finished loading service weewx.wxxtypes.StdWXXTypes DEBUG weewx.engine: Loading service weewx.wxxtypes.StdPressureCooker DEBUG weewx.engine: Finished loading service weewx.wxxtypes.StdPressureCooker DEBUG weewx.engine: Loading service weewx.wxxtypes.StdRainRater DEBUG weewx.engine: Finished loading service weewx.wxxtypes.StdRainRater DEBUG weewx.engine: Loading service weewx.wxxtypes.StdDelta DEBUG weewx.engine: Finished loading service weewx.wxxtypes.StdDelta DEBUG weewx.engine: Loading service weewx.engine.StdArchive INFO weewx.engine: Archive will use data binding wx_binding INFO weewx.engine: Record generation will be attempted in 'hardware' INFO weewx.engine: Using archive interval of 300 seconds (specified in weewx configuration) DEBUG weewx.engine: Use LOOP data in hi/low calculations: 1 DEBUG weewx.engine: Finished loading service weewx.engine.StdArchive DEBUG weewx.engine: Loading service weewx.restx.StdStationRegistry INFO weewx.restx: StationRegistry: Registration not requested. DEBUG weewx.engine: Finished loading service weewx.restx.StdStationRegistry DEBUG weewx.engine: Loading service weewx.restx.StdWunderground INFO weewx.restx: Wunderground: Posting not enabled. DEBUG weewx.engine: Finished loading service weewx.restx.StdWunderground DEBUG weewx.engine: Loading service weewx.restx.StdPWSweather INFO weewx.restx: PWSweather: Posting not enabled. DEBUG weewx.engine: Finished loading service weewx.restx.StdPWSweather DEBUG weewx.engine: Loading service weewx.restx.StdCWOP INFO weewx.restx: CWOP: Posting not enabled. DEBUG weewx.engine: Finished loading service weewx.restx.StdCWOP DEBUG weewx.engine: Loading service weewx.restx.StdWOW INFO weewx.restx: WOW: Posting not enabled. DEBUG weewx.engine: Finished loading service weewx.restx.StdWOW DEBUG weewx.engine: Loading service weewx.restx.StdWOWBE INFO weewx.restx: WOW-BE: Posting not enabled. DEBUG weewx.engine: Finished loading service weewx.restx.StdWOWBE DEBUG weewx.engine: Loading service weewx.restx.StdAWEKAS INFO weewx.restx: AWEKAS: Posting not enabled. DEBUG weewx.engine: Finished loading service weewx.restx.StdAWEKAS DEBUG weewx.engine: Loading service weewx.engine.StdPrint DEBUG weewx.engine: Finished loading service weewx.engine.StdPrint DEBUG weewx.engine: Loading service weewx.engine.StdReport INFO weewx.engine: 'pyephem' detected, extended almanac data is available DEBUG weewx.engine: Finished loading service weewx.engine.StdReport DEBUG weewx.engine: Loading service user.rtgd.RealtimeGaugeData INFO user.rtgd: version is 0.5.5 DEBUG weewx.manager: Daily summary version is 4.0 INFO user.rtgd: Unknown block specified for scroller_text INFO user.rtgd: gauge-data.txt will not be exported. INFO user.rtgd: '/var/www/html/weewx/steelseries/gauge-data.txt' will be generated. min_interval is 2 seconds DEBUG weewx.engine: Finished loading service user.rtgd.RealtimeGaugeData INFO __main__: Starting up weewx version 5.2.0 DEBUG weewx.engine: Station does not support reading the time INFO weewx.engine: Using binding 'wx_binding' to database 'weewx.sdb' INFO weewx.manager: Starting backfill of daily summaries INFO weewx.manager: Daily summaries up to date INFO weewx.engine: Starting main packet loop. DEBUG weewx.manager: Daily summary version is 4.0 DEBUG weewx.manager: Daily summary version is 4.0 INFO user.rtgd: ts: 1763588923 (1763588923), self.cache[obs]['ts']: 1763588923 (1763588923), max_age: 600 (600) CRITICAL user.rtgd: Unexpected exception of type <class 'TypeError'> DEBUG user.rtgd: rtgdthread: **** Traceback (most recent call last): DEBUG user.rtgd: rtgdthread: **** File "/etc/weewx/bin/user/rtgd.py", line 1825, in run DEBUG user.rtgd: rtgdthread: **** self.process_packet(_package['payload']) DEBUG user.rtgd: rtgdthread: **** ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^ DEBUG user.rtgd: rtgdthread: **** File "/etc/weewx/bin/user/rtgd.py", line 1880, in process_packet DEBUG user.rtgd: rtgdthread: **** cached_packet = self.packet_cache.get_packet(_conv_packet['dateTime'], DEBUG user.rtgd: rtgdthread: **** self.max_cache_age) DEBUG user.rtgd: rtgdthread: **** File "/etc/weewx/bin/user/rtgd.py", line 2908, in get_packet DEBUG user.rtgd: rtgdthread: **** packet[obs] = self.get_value(obs, ts, max_age) DEBUG user.rtgd: rtgdthread: **** ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^ DEBUG user.rtgd: rtgdthread: **** File "/etc/weewx/bin/user/rtgd.py", line 2894, in get_value DEBUG user.rtgd: rtgdthread: **** if obs in self.cache and ts - self.cache[obs]['ts'] <= max_age: DEBUG user.rtgd: rtgdthread: **** ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ DEBUG user.rtgd: rtgdthread: **** TypeError: '<=' not supported between instances of 'int' and 'str' CRITICAL user.rtgd: Thread exiting. Reason: '<=' not supported between instances of 'int' and 'str' INFO weewx.manager: Added record 2025-11-19 16:50:00 EST (1763589000) to database 'weewx.sdb' INFO weewx.manager: Added record 2025-11-19 16:50:00 EST (1763589000) to daily summary in 'weewx.sdb'
--
You received this message because you are subscribed to the Google Groups "weewx-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].
To view this discussion visit https://groups.google.com/d/msgid/weewx-user/dc5f17d5-1799-468e-bf3f-a76f99d0851an%40googlegroups.com.
--
You received this message because you are subscribed to the Google Groups "weewx-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].
--
You received this message because you are subscribed to the Google Groups "weewx-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].
--
You received this message because you are subscribed to the Google Groups "weewx-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].
To view this discussion visit https://groups.google.com/d/msgid/weewx-user/32e1c767-3dcc-49a2-a929-c2328f86d168n%40googlegroups.com.
--
You received this message because you are subscribed to the Google Groups "weewx-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].
To view this discussion visit https://groups.google.com/d/msgid/weewx-user/84ef58e8-2c8c-4ade-a97a-b04d2365907an%40googlegroups.com.
--
You received this message because you are subscribed to the Google Groups "weewx-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].
To view this discussion visit https://groups.google.com/d/msgid/weewx-user/6FC0B471-A4AA-48BA-A9F8-CB6906255CC5%40johnkline.com.
|