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.
>
> On Nov 20, 2025, at 6:16 AM, 'Ron Walker' via weewx-user <
> [email protected]> wrote:
>
>
>
> 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.
>>
>> On Nov 19, 2025, at 6:53 PM, John Kline <[email protected]> wrote:
>>
>>
>>
>> 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?
>>
>> On Nov 19, 2025, at 5:13 PM, 'Ron Walker' via weewx-user <
>> [email protected]> wrote:
>>
>> 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
>>>
>>>
>>> On 19 Nov 2025, at 22:37, 'Ron Walker' via weewx-user <
>>> [email protected]> wrote:
>>>
>>> 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
>>
>> <https://groups.google.com/d/msgid/weewx-user/dc5f17d5-1799-468e-bf3f-a76f99d0851an%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>> --
> 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/83f0924f-3e05-4d37-aff6-6accbd539da2n%40googlegroups.com
>
> <https://groups.google.com/d/msgid/weewx-user/83f0924f-3e05-4d37-aff6-6accbd539da2n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
>
--
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/795f2ba8-abb0-46a7-9113-76b01127a7edn%40googlegroups.com.