I did a test install of the sunduration extension in a VM and it runs ok although I didn't alter Belchertown to try to graph the sunduration items. An unaltered Belchertown runs fine.
FWIW - a clean weewx+Belchertown+sunduration setup has no mention of "group_sun" at all. My guess is you have a reference to group_sun in Belchertown's skin.conf or graphs.conf, or perhaps in weewx.conf if you did other edits there. You can search for that via something like "grep -rHi group_sun /etc/weewx /usr/share/weewx" and see if it finds anything. On Friday, October 31, 2025 at 9:44:15 AM UTC-7 Jon B wrote: > Sorry for the delayed reply. It seems that I'm already running the latest > version of the Belchertown skin. weectl extension list returns Version 1.3.1 > > On Sunday, 26 October 2025 at 08:22:08 UTC-6 Tom Keffer wrote: > >> Try upgrading the Belchertown skin. >> >> On Sat, Oct 25, 2025 at 8:14 PM Jon B <[email protected]> wrote: >> >>> My dad recently upgraded weewx for his Davis Vantage Pro2 to version 5.2 >>> and it's not fully working any more. He's using the Belchertown skin on >>> Ubuntu (I think). Here is a section from the logs: >>> >>> 2025-10-23T23:10:15.901050+01:00 weewxd[4698]: DEBUG >>> weewx.drivers.vantage: Getting archive packets since 2025-10-23 23:05:00 >>> BST (1761257100) >>> 2025-10-23T23:10:16.408056+01:00 weewxd[4698]: DEBUG >>> weewx.drivers.vantage: Successfully woke up Vantage console >>> 2025-10-23T23:10:16.429478+01:00 weewxd[4698]: DEBUG >>> weewx.drivers.vantage: Retrieving 1 page(s); starting index= 4 >>> 2025-10-23T23:10:16.572128+01:00 weewxd[4698]: INFO user.sunduration: >>> Sunshine duration from loop packets = 0.000000 min >>> 2025-10-23T23:10:16.624541+01:00 weewxd[4698]: INFO weewx.manager: >>> Added record 2025-10-23 23:10:00 BST (1761257400) to database 'weewx.sdb' >>> 2025-10-23T23:10:16.654449+01:00 weewxd[4698]: INFO weewx.manager: >>> Added record 2025-10-23 23:10:00 BST (1761257400) to daily summary in >>> 'weewx.sdb' >>> 2025-10-23T23:10:16.687827+01:00 weewxd[4698]: DEBUG >>> weewx.reportengine: Running reports for latest time in the database. >>> 2025-10-23T23:10:16.688035+01:00 weewxd[4698]: DEBUG >>> weewx.reportengine: Report 'SeasonsReport' not enabled. Skipping. >>> 2025-10-23T23:10:16.688166+01:00 weewxd[4698]: DEBUG >>> weewx.reportengine: Report 'SmartphoneReport' not enabled. Skipping. >>> 2025-10-23T23:10:16.688293+01:00 weewxd[4698]: DEBUG >>> weewx.reportengine: Report 'MobileReport' not enabled. Skipping. >>> 2025-10-23T23:10:16.688424+01:00 weewxd[4698]: DEBUG >>> weewx.reportengine: Report 'StandardReport' not enabled. Skipping. >>> 2025-10-23T23:10:16.688560+01:00 weewxd[4698]: DEBUG >>> weewx.reportengine: Running report 'Belchertown' >>> 2025-10-23T23:10:16.702619+01:00 weewxd[4698]: DEBUG >>> weewx.drivers.vantage: Requesting 200 LOOP packets. >>> 2025-10-23T23:10:16.713309+01:00 weewxd[4698]: DEBUG >>> weewx.reportengine: Found configuration file >>> /etc/weewx/skins/Belchertown/skin.conf for report 'Belchertown' >>> 2025-10-23T23:10:16.726182+01:00 weewxd[4698]: DEBUG >>> weewx.reportengine: Running generators for report 'Belchertown' in >>> directory '/etc/weewx/skins/Belchertown' with locale 'en_GB.UTF-8' >>> 2025-10-23T23:10:16.731197+01:00 weewxd[4698]: DEBUG >>> weewx.cheetahgenerator: Using search list ['user.belchertown.getData', >>> 'user.historygenerator.MyXSearch', 'weewx.cheetahgenerator.Almanac', >>> 'weewx.cheetahgenerator.Current', 'weewx.cheetahgenerator.DisplayOptions', >>> 'weewx.cheetahgenerator.Extras', 'weewx.cheetahgenerator.Gettext', >>> 'weewx.cheetahgenerator.JSONHelpers', 'weewx.cheetahgenerator.PlotInfo', >>> 'weewx.cheetahgenerator.SkinInfo', 'weewx.cheetahgenerator.Station', >>> 'weewx.cheetahgenerator.Stats', 'weewx.cheetahgenerator.UnitInfo'] >>> 2025-10-23T23:10:16.731584+01:00 weewxd[4698]: DEBUG >>> user.historygenerator: Navigation: No historygenerator.py specific labels >>> found >>> 2025-10-23T23:10:16.731697+01:00 weewxd[4698]: DEBUG >>> user.historygenerator: StationInfo: No historygenerator.py specific labels >>> found >>> 2025-10-23T23:10:16.731791+01:00 weewxd[4698]: DEBUG >>> user.historygenerator: TranslationLinks: No historygenerator.py specific >>> labels found >>> 2025-10-23T23:10:16.731869+01:00 weewxd[4698]: DEBUG >>> user.historygenerator: ImageGenerator: No historygenerator.py specific >>> labels found >>> 2025-10-23T23:10:16.731967+01:00 weewxd[4698]: DEBUG >>> user.historygenerator: BootstrapLabels: No historygenerator.py specific >>> labels found >>> 2025-10-23T23:10:16.732047+01:00 weewxd[4698]: DEBUG >>> user.historygenerator: JSONGenerator: No historygenerator.py specific >>> labels found >>> 2025-10-23T23:10:16.732139+01:00 weewxd[4698]: DEBUG >>> user.historygenerator: LiveGauges: No historygenerator.py specific labels >>> found >>> 2025-10-23T23:10:16.732216+01:00 weewxd[4698]: DEBUG >>> user.historygenerator: Stats: No historygenerator.py specific labels found >>> 2025-10-23T23:10:16.732336+01:00 weewxd[4698]: DEBUG >>> user.historygenerator: News: No historygenerator.py specific labels found >>> 2025-10-23T23:10:16.732415+01:00 weewxd[4698]: DEBUG >>> user.historygenerator: LiveCharts: No historygenerator.py specific labels >>> found >>> 2025-10-23T23:10:16.732523+01:00 weewxd[4698]: DEBUG >>> user.historygenerator: locale: No historygenerator.py specific labels found >>> 2025-10-23T23:10:16.737843+01:00 weewxd[4698]: DEBUG weewx.manager: >>> Daily summary version is 4.0 >>> 2025-10-23T23:10:16.772512+01:00 weewxd[4698]: ERROR >>> weewx.reportengine: Caught unrecoverable exception in generator >>> 'weewx.cheetahgenerator.CheetahGenerator' >>> 2025-10-23T23:10:16.772686+01:00 weewxd[4698]: ERROR >>> weewx.reportengine: **** 'group_sun' >>> 2025-10-23T23:10:16.802108+01:00 weewxd[4698]: ERROR >>> weewx.reportengine: **** Traceback (most recent call last): >>> 2025-10-23T23:10:16.802315+01:00 weewxd[4698]: ERROR >>> weewx.reportengine: **** File >>> "/usr/share/weewx/weewx/reportengine.py", line 248, in run >>> 2025-10-23T23:10:16.802412+01:00 weewxd[4698]: ERROR >>> weewx.reportengine: **** obj.start() >>> 2025-10-23T23:10:16.802489+01:00 weewxd[4698]: ERROR >>> weewx.reportengine: **** File >>> "/usr/share/weewx/weewx/reportengine.py", line 465, in start >>> 2025-10-23T23:10:16.802561+01:00 weewxd[4698]: ERROR >>> weewx.reportengine: **** self.run() >>> 2025-10-23T23:10:16.802632+01:00 weewxd[4698]: ERROR >>> weewx.reportengine: **** File >>> "/usr/share/weewx/weewx/cheetahgenerator.py", line 166, in run >>> 2025-10-23T23:10:16.802709+01:00 weewxd[4698]: ERROR >>> weewx.reportengine: **** ngen = >>> self.generate(gen_dict[section_name], section_name, self.gen_ts) >>> 2025-10-23T23:10:16.802780+01:00 weewxd[4698]: ERROR >>> weewx.reportengine: **** >>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >>> 2025-10-23T23:10:16.802853+01:00 weewxd[4698]: ERROR >>> weewx.reportengine: **** File >>> "/usr/share/weewx/weewx/cheetahgenerator.py", line 226, in generate >>> 2025-10-23T23:10:16.802943+01:00 weewxd[4698]: ERROR >>> weewx.reportengine: **** ngen += >>> self.generate(section[subsection], subsection, gen_ts) >>> 2025-10-23T23:10:16.803017+01:00 weewxd[4698]: ERROR >>> weewx.reportengine: **** >>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >>> 2025-10-23T23:10:16.803089+01:00 weewxd[4698]: ERROR >>> weewx.reportengine: **** File >>> "/usr/share/weewx/weewx/cheetahgenerator.py", line 226, in generate >>> 2025-10-23T23:10:16.803161+01:00 weewxd[4698]: ERROR >>> weewx.reportengine: **** ngen += >>> self.generate(section[subsection], subsection, gen_ts) >>> 2025-10-23T23:10:16.803232+01:00 weewxd[4698]: ERROR >>> weewx.reportengine: **** >>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >>> 2025-10-23T23:10:16.803330+01:00 weewxd[4698]: ERROR >>> weewx.reportengine: **** File >>> "/usr/share/weewx/weewx/cheetahgenerator.py", line 309, in generate >>> 2025-10-23T23:10:16.803411+01:00 weewxd[4698]: ERROR >>> weewx.reportengine: **** searchList = >>> self._getSearchList(encoding, timespan, >>> 2025-10-23T23:10:16.803483+01:00 weewxd[4698]: ERROR >>> weewx.reportengine: **** >>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >>> 2025-10-23T23:10:16.803554+01:00 weewxd[4698]: ERROR >>> weewx.reportengine: **** File >>> "/usr/share/weewx/weewx/cheetahgenerator.py", line 401, in _getSearchList >>> 2025-10-23T23:10:16.803628+01:00 weewxd[4698]: ERROR >>> weewx.reportengine: **** search_list += >>> obj.get_extension_list(timespan, db_lookup) >>> 2025-10-23T23:10:16.803701+01:00 weewxd[4698]: ERROR >>> weewx.reportengine: **** >>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >>> 2025-10-23T23:10:16.803773+01:00 weewxd[4698]: ERROR >>> weewx.reportengine: **** File >>> "/etc/weewx/bin/user/belchertown.py", line 797, in get_extension_list >>> 2025-10-23T23:10:16.803843+01:00 weewxd[4698]: ERROR >>> weewx.reportengine: **** sun_unit = >>> converter.group_unit_dict["group_sun"] >>> 2025-10-23T23:10:16.803919+01:00 weewxd[4698]: ERROR >>> weewx.reportengine: **** >>> ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^ >>> 2025-10-23T23:10:16.803985+01:00 weewxd[4698]: ERROR >>> weewx.reportengine: **** File >>> "/usr/lib/python3.12/collections/__init__.py", line 1015, in __getitem__ >>> 2025-10-23T23:10:16.804053+01:00 weewxd[4698]: ERROR >>> weewx.reportengine: **** return self.__missing__(key) >>> # support subclasses that define __missing__ >>> 2025-10-23T23:10:16.804120+01:00 weewxd[4698]: ERROR >>> weewx.reportengine: **** ^^^^^^^^^^^^^^^^^^^^^ >>> 2025-10-23T23:10:16.804180+01:00 weewxd[4698]: ERROR >>> weewx.reportengine: **** File >>> "/usr/lib/python3.12/collections/__init__.py", line 1007, in __missing__ >>> 2025-10-23T23:10:16.804280+01:00 weewxd[4698]: ERROR >>> weewx.reportengine: **** raise KeyError(key) >>> 2025-10-23T23:10:16.804360+01:00 weewxd[4698]: ERROR >>> weewx.reportengine: **** KeyError: 'group_sun' >>> 2025-10-23T23:10:16.804428+01:00 weewxd[4698]: ERROR >>> weewx.reportengine: **** Generator terminated >>> 2025-10-23T23:10:16.806325+01:00 weewxd[4698]: Traceback (most recent >>> call last): >>> 2025-10-23T23:10:16.807242+01:00 weewxd[4698]: File >>> "/usr/share/weewx/weewx/reportengine.py", line 248, in run >>> 2025-10-23T23:10:16.807474+01:00 weewxd[4698]: obj.start() >>> 2025-10-23T23:10:16.807584+01:00 weewxd[4698]: File >>> "/usr/share/weewx/weewx/reportengine.py", line 465, in start >>> 2025-10-23T23:10:16.807665+01:00 weewxd[4698]: self.run() >>> 2025-10-23T23:10:16.807739+01:00 weewxd[4698]: File >>> "/usr/share/weewx/weewx/cheetahgenerator.py", line 166, in run >>> 2025-10-23T23:10:16.807873+01:00 weewxd[4698]: ngen = >>> self.generate(gen_dict[section_name], section_name, self.gen_ts) >>> 2025-10-23T23:10:16.807958+01:00 weewxd[4698]: >>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >>> 2025-10-23T23:10:16.808040+01:00 weewxd[4698]: File >>> "/usr/share/weewx/weewx/cheetahgenerator.py", line 226, in generate >>> 2025-10-23T23:10:16.808121+01:00 weewxd[4698]: ngen += >>> self.generate(section[subsection], subsection, gen_ts) >>> 2025-10-23T23:10:16.808204+01:00 weewxd[4698]: >>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >>> 2025-10-23T23:10:16.808315+01:00 weewxd[4698]: File >>> "/usr/share/weewx/weewx/cheetahgenerator.py", line 226, in generate >>> 2025-10-23T23:10:16.808398+01:00 weewxd[4698]: ngen += >>> self.generate(section[subsection], subsection, gen_ts) >>> 2025-10-23T23:10:16.808480+01:00 weewxd[4698]: >>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >>> 2025-10-23T23:10:16.808610+01:00 weewxd[4698]: File >>> "/usr/share/weewx/weewx/cheetahgenerator.py", line 309, in generate >>> 2025-10-23T23:10:16.808704+01:00 weewxd[4698]: searchList = >>> self._getSearchList(encoding, timespan, >>> 2025-10-23T23:10:16.808818+01:00 weewxd[4698]: >>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >>> 2025-10-23T23:10:16.808908+01:00 weewxd[4698]: File >>> "/usr/share/weewx/weewx/cheetahgenerator.py", line 401, in _getSearchList >>> 2025-10-23T23:10:16.808992+01:00 weewxd[4698]: search_list += >>> obj.get_extension_list(timespan, db_lookup) >>> 2025-10-23T23:10:16.809071+01:00 weewxd[4698]: >>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >>> 2025-10-23T23:10:16.809150+01:00 weewxd[4698]: File >>> "/etc/weewx/bin/user/belchertown.py", line 797, in get_extension_list >>> 2025-10-23T23:10:16.809231+01:00 weewxd[4698]: sun_unit = >>> converter.group_unit_dict["group_sun"] >>> 2025-10-23T23:10:16.809340+01:00 weewxd[4698]: >>> ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^ >>> 2025-10-23T23:10:16.809426+01:00 weewxd[4698]: File >>> "/usr/lib/python3.12/collections/__init__.py", line 1015, in __getitem__ >>> 2025-10-23T23:10:16.809509+01:00 weewxd[4698]: return >>> self.__missing__(key) # support subclasses that define >>> __missing__ >>> 2025-10-23T23:10:16.809592+01:00 weewxd[4698]: >>> ^^^^^^^^^^^^^^^^^^^^^ >>> 2025-10-23T23:10:16.809804+01:00 weewxd[4698]: File >>> "/usr/lib/python3.12/collections/__init__.py", line 1007, in __missing__ >>> 2025-10-23T23:10:16.809983+01:00 weewxd[4698]: raise KeyError(key) >>> 2025-10-23T23:10:16.810116+01:00 weewxd[4698]: KeyError: 'group_sun' >>> 2025-10-23T23:10:16.810832+01:00 weewxd[4698]: INFO weewx.reportengine: >>> Copied 3 files to /var/www/html/weewx/belchertown >>> 2025-10-23T23:10:16.833554+01:00 weewxd[4698]: DEBUG weewx.manager: >>> Daily summary version is 4.0 >>> 2025-10-23T23:10:17.220871+01:00 weewxd[4698]: DEBUG >>> weewx.drivers.vantage: Successfully woke up Vantage console >>> 2025-10-23T23:10:17.283215+01:00 weewxd[4698]: DEBUG user.sunduration: >>> Calculated LOOP sunshine_time = 1.000000, based on radiation = 0.000000, >>> and threshold = 0.000000 >>> 2025-10-23T23:10:17.894062+01:00 weewxd[4698]: DEBUG user.sunduration: >>> Calculated LOOP sunshine_time = 1.000000, based on radiation = 0.000000, >>> and threshold = 0.000000 >>> 2025-10-23T23:10:17.951423+01:00 weewxd[4698]: INFO weewx.restx: WOW: >>> Published record 2025-10-23 23:10:00 BST (1761257400) >>> 2025-10-23T23:10:18.176479+01:00 weewxd[4698]: INFO weewx.restx: >>> Wunderground-PWS: Published record 2025-10-23 23:10:00 BST (1761257400) >>> 2025-10-23T23:10:19.894694+01:00 weewxd[4698]: DEBUG user.sunduration: >>> Calculated LOOP sunshine_time = 2.000000, based on radiation = 0.000000, >>> and threshold = 0.000000 >>> 2025-10-23T23:10:20.435013+01:00 weewxd[4698]: DEBUG >>> weewx.reportengine: Report 'FTP' not enabled. Skipping. >>> 2025-10-23T23:10:20.435195+01:00 weewxd[4698]: DEBUG >>> weewx.reportengine: Running report 'RSYNC' >>> 2025-10-23T23:10:20.436971+01:00 weewxd[4698]: DEBUG >>> weewx.reportengine: Found configuration file >>> /etc/weewx/skins/Rsync/skin.conf for report 'RSYNC' >>> 2025-10-23T23:10:20.443733+01:00 weewxd[4698]: DEBUG >>> weewx.reportengine: Running generators for report 'RSYNC' in directory >>> '/etc/weewx/skins/Rsync' with locale 'en_GB.UTF-8' >>> 2025-10-23T23:10:20.443910+01:00 weewxd[4698]: DEBUG >>> weeutil.rsyncupload: rsyncupload: cmd: [['rsync', '--archive', '--stats', >>> '-e', 'ssh', '/var/www/html/weewx/', 'server@server:/server/path']] >>> 2025-10-23T23:10:21.895922+01:00 weewxd[4698]: DEBUG user.sunduration: >>> Calculated LOOP sunshine_time = 2.000000, based on radiation = 0.000000, >>> and threshold = 0.000000 >>> 2025-10-23T23:10:23.580487+01:00 weewxd[4698]: INFO >>> weeutil.rsyncupload: rsync'd 13 files (3,471,491 bytes) in 3.14 seconds >>> 2025-10-23T23:10:23.895215+01:00 weewxd[4698]: DEBUG user.sunduration: >>> Calculated LOOP sunshine_time = 2.000000, based on radiation = 0.000000, >>> and threshold = 0.000000 >>> >>> Seemingly it's an error related to the sunshine hours variable that I >>> added using this: https://github.com/Jterrettaz/sunduration. I'm in a >>> different country to my dad so it's a bit difficult for me to debug it, so >>> I thought I'd see if anyone can suggest something obvious that would be >>> causing it. It didn't seem like any of the main files in /etc/weewx/ or >>> /usr/share/weewx/ had been modified recently by the upgrade but I could >>> have missed it. He chose the option to keep the existing weewx.conf when >>> prompted, so I've already had him make the change to "schema = >>> weewx.schemas.wview_extended.schema" >>> in that in case that's necessary. >>> >>> -- >>> >> 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/3c0ef64d-c84a-4915-adcd-6bfa5342d9dan%40googlegroups.com >>> >>> <https://groups.google.com/d/msgid/weewx-user/3c0ef64d-c84a-4915-adcd-6bfa5342d9dan%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/79df5506-907b-4fd9-a3c5-c5615fe638dcn%40googlegroups.com.
