Steel Series PNG Files

262 views
Skip to first unread message

Ron Walker

unread,
Nov 18, 2025, 1:51:26 PM (9 days ago) Nov 18
to weewx-user
Hi All,

I've been through the forum, but have not found an answer to where or even if these files can be found.  I understand that the author gjr80 has removed all of his files, but do they exist anywhere else?

Thanks in advance!


John Kline

unread,
Nov 18, 2025, 2:40:12 PM (9 days ago) Nov 18
to weewx...@googlegroups.com, weewx-user
Steelseries is Mark Crossley’s and is here:
Perhaps you mean to ask about weewx-realtime_gauge-data?  That was Gary’s.  But I don’t see the PNG files you are asking about.  Would you clarify what PNG files you mean?  (Note: the gauges are not PNG files.)

On Nov 18, 2025, at 12:51 PM, 'Ron Walker' via weewx-user <weewx...@googlegroups.com> wrote:

Hi All,

I've been through the forum, but have not found an answer to where or even if these files can be found.  I understand that the author gjr80 has removed all of his files, but do they exist anywhere else?

Thanks in advance!


--
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 weewx-user+...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/weewx-user/919efe6e-1330-41de-983a-3fb686f12d2dn%40googlegroups.com.

Ron Walker

unread,
Nov 18, 2025, 3:19:20 PM (9 days ago) Nov 18
to weewx-user
Hi John,

When the report runs, I get the following errors for a number of files with png extension.  The first line reports that /var/www/html/weewx/steelseries/index.html.tmp doesn't exist, but it does and permissions are correct.  I hope that this makes sense.

FileNotFoundError: [Errno 2] No such file or directory: '/ver/www/html/weewx/steelseries/index.html.tmp'
DEBUG weewx.manager: Daily summary version is 4.0
ERROR weewx.imagegenerator: Unable to save to file '/ver/www/html/weewx/steelseries/daybarometer.png' [Errno 2] No such file or directory: '/ver/www/html/weewx/steelseries/daybarometer.png':
ERROR weewx.imagegenerator: Unable to save to file '/ver/www/html/weewx/steelseries/dayrain.png' [Errno 2] No such file or directory: '/ver/www/html/weewx/steelseries/dayrain.png':
ERROR weewx.imagegenerator: Unable to save to file '/ver/www/html/weewx/steelseries/dayrainrate.png' [Errno 2] No such file or directory: '/ver/www/html/weewx/steelseries/dayrainrate.png':
ERROR weewx.imagegenerator: Unable to save to file '/ver/www/html/weewx/steelseries/daywind.png' [Errno 2] No such file or directory: '/ver/www/html/weewx/steelseries/daywind.png':
ERROR weewx.imagegenerator: Unable to save to file '/ver/www/html/weewx/steelseries/daywinddir.png' [Errno 2] No such file or directory: '/ver/www/html/weewx/steelseries/daywinddir.png':
ERROR weewx.imagegenerator: Unable to save to file '/ver/www/html/weewx/steelseries/daywindvec.png' [Errno 2] No such file or directory: '/ver/www/html/weewx/steelseries/daywindvec.png':
ERROR weewx.imagegenerator: Unable to save to file '/ver/www/html/weewx/steelseries/dayouttemphum.png' [Errno 2] No such file or directory: '/ver/www/html/weewx/steelseries/dayouttemphum.png':
ERROR weewx.imagegenerator: Unable to save to file '/ver/www/html/weewx/steelseries/dayinouttemp.png' [Errno 2] No such file or directory: '/ver/www/html/weewx/steelseries/dayinouttemp.png':
ERROR weewx.imagegenerator: Unable to save to file '/ver/www/html/weewx/steelseries/dayinouthum.png' [Errno 2] No such file or directory: '/ver/www/html/weewx/steelseries/dayinouthum.png':
ERROR weewx.imagegenerator: Unable to save to file '/ver/www/html/weewx/steelseries/dayradiation.png' [Errno 2] No such file or directory: '/ver/www/html/weewx/steelseries/dayradiation.png':
ERROR weewx.imagegenerator: Unable to save to file '/ver/www/html/weewx/steelseries/dayuv.png' [Errno 2] No such file or directory: '/ver/www/html/weewx/steelseries/dayuv.png':

John Kline

unread,
Nov 18, 2025, 3:34:36 PM (9 days ago) Nov 18
to weewx...@googlegroups.com, weewx-user
These png files are generated by weewx-realtime_gauge-data/skins/RealtimeGauges /skin.conf

Do you have weewx-realtime_gauge-data installed?  If not, that was Gary’s.  You’ll need to find a copy.

There is an old copy here:

Someone here should be able to provide you with a more up to date copy.

If you already have weewx-realtime_gauge-data, there should be an error in the logs as to why these PNGs aren’t being generated.

On Nov 18, 2025, at 2:19 PM, 'Ron Walker' via weewx-user <weewx...@googlegroups.com> wrote:

Hi John,

Ron Walker

unread,
Nov 18, 2025, 4:00:10 PM (9 days ago) Nov 18
to weewx-user
I do not have weewx-realtime_gauge-data installed.  The instructions in the link that you provided reference the gjr80 files, which we know do not exist.

If anyone can provide weewx-realtime_gauge-data, I would greatly appreciate it!

Thanks!

Glenn McKechnie

unread,
Nov 18, 2025, 4:00:51 PM (9 days ago) Nov 18
to weewx...@googlegroups.com
On Nov 18, 2025, at 2:19 PM, 'Ron Walker' via weewx-user <weewx...@googlegroups.com> wrote:

Hi John,

When the report runs, I get the following errors for a number of files with png extension.  The first line reports that /var/www/html/weewx/steelseries/index.html.tmp doesn't exist, but it does and permissions are correct.  I hope that this makes sense.

FileNotFoundError: [Errno 2] No such file or directory: '/ver/www/html/weewx/steelseries/index.html.tmp'

I have to ask.
What's ver,  as found in your reported directory path

You mention it should be /var/www/html... in your introduction. Yet the log shows otherwise -Typo?

Ron Walker

unread,
Nov 18, 2025, 4:08:35 PM (9 days ago) Nov 18
to weewx-user
Glen,

You spotted what should have been obvious to me!  The error was a misspelling in weewx.conf which I have resolved!

Thank you!

John Kline

unread,
Nov 18, 2025, 4:10:19 PM (9 days ago) Nov 18
to weewx...@googlegroups.com, weewx-user
It is all working now?

On Nov 18, 2025, at 3:08 PM, 'Ron Walker' via weewx-user <weewx...@googlegroups.com> wrote:

Glen,
--
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 weewx-user+...@googlegroups.com.

Ron Walker

unread,
Nov 18, 2025, 4:18:46 PM (9 days ago) Nov 18
to weewx-user
Yes, it is!  Perhaps I should take a break!  I still need the weewx-realtime_gauge-data!

Thanks so much!

John Kline

unread,
Nov 18, 2025, 4:24:37 PM (9 days ago) Nov 18
to weewx...@googlegroups.com, weewx-user
I have a copy of weewx-realtime_gauge-data here:

The caveat is that I have long incorporated these gauges into my private skin, so I no longer run this.  Never-the-less, if you want to give it a try; I think I, and others, can get it running for you.

On Nov 18, 2025, at 3:18 PM, 'Ron Walker' via weewx-user <weewx...@googlegroups.com> wrote:

Yes, it is!  Perhaps I should take a break!  I still need the weewx-realtime_gauge-data!

Ron Walker

unread,
Nov 18, 2025, 6:06:56 PM (9 days ago) Nov 18
to weewx-user
Ok, I gave it a shot and did the manual install.  After modifying the weewx.conf file, I restarted weewx and got the following on restart:

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
CRITICAL __main__: Caught unrecoverable exception:
CRITICAL __main__:     ****  No module named 'six'
CRITICAL __main__:     ****  Traceback (most recent call last):
CRITICAL __main__:     ****    File "/usr/share/weewx/weewxd.py", line 121, in main
CRITICAL __main__:     ****      engine = weewx.engine.StdEngine(config_dict)
CRITICAL __main__:     ****    File "/usr/share/weewx/weewx/engine.py", line 89, in __init__
CRITICAL __main__:     ****      self.loadServices(config_dict)
CRITICAL __main__:     ****      ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
CRITICAL __main__:     ****    File "/usr/share/weewx/weewx/engine.py", line 157, in loadServices
CRITICAL __main__:     ****      obj = weeutil.weeutil.get_object(svc)(self, config_dict)
CRITICAL __main__:     ****            ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^
CRITICAL __main__:     ****    File "/usr/share/weewx/weeutil/weeutil.py", line 1404, in get_object
CRITICAL __main__:     ****      module = importlib.import_module(module_name)
CRITICAL __main__:     ****    File "/usr/lib/python3.13/importlib/__init__.py", line 88, in import_module
CRITICAL __main__:     ****      return _bootstrap._gcd_import(name[level:], package, level)
CRITICAL __main__:     ****             ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
CRITICAL __main__:     ****    File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
CRITICAL __main__:     ****    File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
CRITICAL __main__:     ****    File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
CRITICAL __main__:     ****    File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
CRITICAL __main__:     ****    File "<frozen importlib._bootstrap_external>", line 1026, in exec_module
CRITICAL __main__:     ****    File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
CRITICAL __main__:     ****    File "/etc/weewx/bin/user/rtgd.py", line 625, in <module>
CRITICAL __main__:     ****      from six.moves import http_client
CRITICAL __main__:     ****  ModuleNotFoundError: No module named 'six'
CRITICAL __main__:     ****  Exiting.
Traceback (most recent call last):
  File "/usr/share/weewx/weewxd.py", line 226, in <module>
    main()
    ~~~~^^
  File "/usr/share/weewx/weewxd.py", line 121, in main
    engine = weewx.engine.StdEngine(config_dict)
  File "/usr/share/weewx/weewx/engine.py", line 89, in __init__
    self.loadServices(config_dict)
    ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
  File "/usr/share/weewx/weewx/engine.py", line 157, in loadServices
    obj = weeutil.weeutil.get_object(svc)(self, config_dict)
          ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^
  File "/usr/share/weewx/weeutil/weeutil.py", line 1404, in get_object
    module = importlib.import_module(module_name)
  File "/usr/lib/python3.13/importlib/__init__.py", line 88, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 1026, in exec_module
  File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
  File "/etc/weewx/bin/user/rtgd.py", line 625, in <module>
    from six.moves import http_client
ModuleNotFoundError: No module named 'six'
weewx.service: Main process exited, code=exited, status=1/FAILURE
weewx.service: Failed with result 'exit-code'.
weewx.service: Consumed 1.197s CPU time.

Any ideas?

John Kline

unread,
Nov 18, 2025, 6:35:46 PM (9 days ago) Nov 18
to weewx...@googlegroups.com, weewx-user
You need to install six.  If you have pip install, do a “pip install six” after activating your environment.
For package installs, sudo install “python3-six” should do it.

On Nov 18, 2025, at 5:07 PM, 'Ron Walker' via weewx-user <weewx...@googlegroups.com> wrote:

Ok, I gave it a shot and did the manual install.  After modifying the weewx.conf file, I restarted weewx and got the following on restart:

Jimi Lawson

unread,
Nov 18, 2025, 6:39:10 PM (9 days ago) Nov 18
to weewx-user
Not sure if this is of any use but I still have this file "steelseries-2.7.6.tar.gz" from 2021 when I first setup WEEWX, it was downloaded from 
https://github.com/gjr80/weewx-steelseries/releases/download/v2.7.6/steelseries-2.7.6.tar.gz I can make it available from my website if anyone wants a copy ?
Regards
Jimi

Ron Walker

unread,
Nov 18, 2025, 6:53:00 PM (9 days ago) Nov 18
to weewx-user
John,

When i tried to install six using the package install, I got:

pi@raspberrypi:~ $ sudo install "python3-six"
install: missing destination file operand after 'python3-six'
Try 'install --help' for more information.

Did I miss something?

Ron Walker

unread,
Nov 18, 2025, 6:54:40 PM (9 days ago) Nov 18
to weewx-user
Jimi,

I think I have all of the Steel Series files.  At this point its getting them correctly installed and configured.

Thanks!

Glenn McKechnie

unread,
Nov 18, 2025, 7:03:48 PM (9 days ago) Nov 18
to weewx...@googlegroups.com

sudo apt install “python3-six”

Cheers
 Glenn (VK3GLN)

Various WeeWx addons at
https://github.com/glennmckechnie


Ron Walker

unread,
Nov 18, 2025, 7:33:28 PM (9 days ago) Nov 18
to weewx-user
Glen,

You are correct again!  Install went well.  Now on restart:

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
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-18 19:30:00 EST (1763512200) to database 'weewx.sdb'

Little by little!

John Kline

unread,
Nov 18, 2025, 10:46:09 PM (9 days ago) Nov 18
to weewx...@googlegroups.com, weewx-user

I don’t see how this error can happen unless you have max_cache_age set to a string in weewx.conf (or skin.conf).
Have you set max_cache_age?

Ron Walker

unread,
Nov 19, 2025, 10:31:42 AM (8 days ago) Nov 19
to weewx-user
Hi John,

I never set max_cache_age, but I did search weewx.conf and skin.conf.  It was found in weewx.conf and is set to 600, I guess by default.  I did delete the line and replaced it, just in case, but the error returned when weewx was restarted.

Ron

John Kline

unread,
Nov 19, 2025, 11:17:15 AM (8 days ago) Nov 19
to weewx...@googlegroups.com, weewx-user
 I did delete the line and replaced it
What do you mean by “replaced it”?

Let’s log the variables so we can see which one is the string being complained about.

Edit rtgd.py in bin/user by adding the following line immediately above line 2894:
log.info(“ts: %s (%s), self.cache[obs][‘ts’]: %s (%s), max_age: %s (%s)” % (ts, ts, self.cache[obs][‘ts’], self.cache[obs][‘ts’], max_age, max_age))

After you’ve added the line, restart weewx.

Lastly, paste into your reply the line above printed in the log immediately before the error you are getting.

Ron Walker

unread,
Nov 19, 2025, 1:33:59 PM (8 days ago) Nov 19
to weewx-user
John,

I deleted the max_cache_age line and retyped it, in case there was any text I couldn't see.

Here is the line you requested:
File "/etc/weewx/bin/user/rtgd.py", line 2893
    log.info(\u201cts: %s (%s), self.cache[obs][\u2018ts\u2019]: %s (%s), max_age: %s (%s)\u201d % (ts, ts, self.cache[obs][\u2018ts\u2019], self.cache[obs][\u2018ts\u2019], max_age, max_age))
             ^
SyntaxError: invalid character '\u201c' (U+201C)


Hope I got the right info!

Glenn McKechnie

unread,
Nov 19, 2025, 2:25:37 PM (8 days ago) Nov 19
to weewx...@googlegroups.com
On Thu, 20 Nov 2025 at 05:34, 'Ron Walker' via weewx-user <weewx...@googlegroups.com> wrote:
John,

I deleted the max_cache_age line and retyped it, in case there was any text I couldn't see.

Here is the line you requested:
File "/etc/weewx/bin/user/rtgd.py", line 2893
    log.info(\u201cts: %s (%s), self.cache[obs][\u2018ts\u2019]: %s (%s), max_age: %s (%s)\u201d % (ts, ts, self.cache[obs][\u2018ts\u2019], self.cache[obs][\u2018ts\u2019], max_age, max_age))
             ^
SyntaxError: invalid character '\u201c' (U+201C)


That syntax error is the result of non-ascii characters in your log.info string. Specifically - smart quotes. They are showing up as \u201c and \201d instead.

Where you see " or   ie :- 'double quotes' delete them and replace them with the plain " character from your keyboard. Use a plain text editor to do it and it will have no choice but to insert the correct character. Use nano, vim or whatever is your favourite editor

There is a subtle difference in their appearance and while they appear the same, they are most definitely not.

John Kline

unread,
Nov 19, 2025, 4:16:14 PM (8 days ago) Nov 19
to weewx...@googlegroups.com, weewx...@googlegroups.com
Do what Glenn said.  The quotes got changed to smart quotes by my mail program.  After you do that, we should get log messages and not a syntax error on the line I asked you to add.

On Nov 19, 2025, at 11:25 AM, Glenn McKechnie <glenn.m...@gmail.com> wrote:


--
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 weewx-user+...@googlegroups.com.

Ron Walker

unread,
Nov 19, 2025, 4:18:31 PM (8 days ago) Nov 19
to weewx-user
Glen, John,

I deleted and replaced the double and single quotes in the code.  It turns out that single quotes threw the same error when I restarted weewx.  Here the log output from the restart:

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: Empty database

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
CRITICAL user.rtgd: Unexpected exception of type <class 'KeyError'>

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 1870, in process_packet
DEBUG user.rtgd: rtgdthread: ****     _conv_packet = weewx.units.to_std_system(packet,
DEBUG user.rtgd: rtgdthread: ****                                              self.stats_unit_system)
DEBUG user.rtgd: rtgdthread: ****   File "/usr/share/weewx/weewx/units.py", line 1613, in to_std_system
DEBUG user.rtgd: rtgdthread: ****     _datadict_target = StdUnitConverters[unit_system].convertDict(datadict)
DEBUG user.rtgd: rtgdthread: ****                        ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
DEBUG user.rtgd: rtgdthread: **** KeyError: None
CRITICAL user.rtgd: Thread exiting. Reason: None


Thanks for staying with me on this!

John Kline

unread,
Nov 19, 2025, 4:20:43 PM (8 days ago) Nov 19
to weewx...@googlegroups.com, weewx-user
Hey can’t be single quotes because there are single quotes inside the string.  Replace the things that look like double quotes with actual double quotes.

On Nov 19, 2025, at 1:18 PM, 'Ron Walker' via weewx-user <weewx...@googlegroups.com> wrote:

Glen, John,
--
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 weewx-user+...@googlegroups.com.

Ron Walker

unread,
Nov 19, 2025, 5:02:32 PM (8 days ago) Nov 19
to weewx-user
John,

Let me clarify.  I did exactly what Glen said and replaced the double quotes in the line.  I then restarted weewx and got a similar error message.  It looked to me as though it was pointing to the single quotes, which I replaced.  I then restarted weewx and got the error in the previous message.

Next, I tried just retyping the line entirely and get the following error along with the output from the log.info. It seems to point to the line following the log.info line,which I did not touch!

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'
 
The line referenced in the error:

if obs in self.cache and ts - self.cache[obs]['ts'] <= max_age:

John Kline

unread,
Nov 19, 2025, 5:25:19 PM (8 days ago) Nov 19
to weewx...@googlegroups.com, weewx-user
Is there no log message above the error you sent?  Did you restart weewx?  In what directory did you change rtgd.py?

On Nov 19, 2025, at 2:02 PM, 'Ron Walker' via weewx-user <weewx...@googlegroups.com> wrote:

John,

Ron Walker

unread,
Nov 19, 2025, 5:34:05 PM (8 days ago) Nov 19
to weewx-user
The entire log for the restart of weewx to the error follows.  Yes, I restarted weewx. The rtgd.py file is located in /etc/weewx/bin/user

DEBUG weewx.manager: Daily summary version is 4.0
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 (17635890

Ron Walker

unread,
Nov 19, 2025, 5:37:51 PM (8 days ago) Nov 19
to weewx-user
INFO weewx.manager: Added record 2025-11-19 16:50:00 EST (1763589000) to daily summary in 'weewx.sdb'

First paste didn't show complete log.

Ian Millard

unread,
Nov 19, 2025, 6:55:25 PM (8 days ago) Nov 19
to weewx...@googlegroups.com
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

Ron Walker

unread,
Nov 19, 2025, 8:13:26 PM (8 days ago) Nov 19
to weewx-user
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!  

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)

John Kline

unread,
Nov 19, 2025, 9:54:01 PM (8 days ago) Nov 19
to weewx...@googlegroups.com, weewx-user
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 <weewx...@googlegroups.com> wrote:

Ian, Glen, John,
--
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 weewx-user+...@googlegroups.com.

John Kline

unread,
Nov 19, 2025, 9:55:48 PM (8 days ago) Nov 19
to weewx...@googlegroups.com, weewx-user
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 <jo...@johnkline.com> wrote:



Ron Walker

unread,
Nov 20, 2025, 9:15:53 AM (7 days ago) Nov 20
to weewx-user
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

John Kline

unread,
Nov 20, 2025, 9:29:59 AM (7 days ago) Nov 20
to weewx...@googlegroups.com, weewx-user
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 <weewx...@googlegroups.com> wrote:



Ron Walker

unread,
Nov 20, 2025, 10:03:18 AM (7 days ago) Nov 20
to weewx-user
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'

John Kline

unread,
Nov 20, 2025, 10:12:59 AM (7 days ago) Nov 20
to weewx...@googlegroups.com, weewx-user
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?

On Nov 20, 2025, at 7:03 AM, 'Ron Walker' via weewx-user <weewx...@googlegroups.com> wrote:

John,

Ron Walker

unread,
Nov 20, 2025, 10:26:38 AM (7 days ago) Nov 20
to weewx-user
John,

I'm pretty sure they are mcrossley gauges.

Ron

John Kline

unread,
Nov 20, 2025, 11:35:55 AM (7 days ago) Nov 20
to weewx...@googlegroups.com, weewx-user
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 Kline

unread,
Nov 20, 2025, 12:07:21 PM (7 days ago) Nov 20
to weewx...@googlegroups.com, weewx-user
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 ***

On Nov 20, 2025, at 8:35 AM, John Kline <jo...@johnkline.com> wrote:



Ron Walker

unread,
Nov 20, 2025, 12:45:58 PM (7 days ago) Nov 20
to weewx-user
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
Message has been deleted
Message has been deleted

Devonian

unread,
Nov 21, 2025, 5:27:42 AM (6 days ago) Nov 21
to weewx-user
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

John Kline

unread,
Nov 21, 2025, 11:46:46 AM (6 days ago) Nov 21
to weewx...@googlegroups.com, weewx-user
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

On Nov 21, 2025, at 2:27 AM, Devonian <devon...@gmail.com> wrote:

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.

Ron Walker

unread,
Nov 21, 2025, 4:21:36 PM (6 days ago) Nov 21
to weewx-user
Nigel, John,

Thank you for your kind offer!  I'd like to take advantage of it as John suggests!

Ron

John Kline

unread,
Nov 21, 2025, 6:22:36 PM (6 days ago) Nov 21
to weewx...@googlegroups.com, weewx-user

Ron Walker

unread,
Nov 21, 2025, 8:38:09 PM (6 days ago) Nov 21
to weewx-user
I've downloaded the master.zip.  Should I user the installation instructions on the readme or do a manual install?

Ron Walker

unread,
Nov 21, 2025, 9:01:31 PM (6 days ago) Nov 21
to weewx-user
Actually, I just copied the 0.6.7 rtgd.py to /etc/bin/user and restarted weewx.  Everything started with no issues!  

Thanks again, Nigel and John!

John Kline

unread,
Nov 21, 2025, 10:50:28 PM (6 days ago) Nov 21
to weewx...@googlegroups.com, weewx-user
You could have done an install, but copying rtgd.py is works too.  You are now running with a stock rtgd.py.  The changes you made to gauges.js are per instructions as the steel gauges are meant to work multiple weather programs.  You are good to go.

On Nov 21, 2025, at 6:01 PM, 'Ron Walker' via weewx-user <weewx...@googlegroups.com> wrote:

Actually, I just copied the 0.6.7 rtgd.py to /etc/bin/user and restarted weewx.  Everything started with no issues!  

Devonian

unread,
Nov 22, 2025, 4:28:27 AM (5 days ago) Nov 22
to weewx-user
Well, it looks as though you guys fixed it whilst i slept !
Good to see an archive of Gary's excellent work.

Nigel

Ron Walker

unread,
Nov 23, 2025, 9:20:43 AM (4 days ago) Nov 23
to weewx-user
John, Nigel,

Thank you both for your help with this issue!  Couldn't have done it without you!

Ron

Reply all
Reply to author
Forward
0 new messages