Thanks, I'll give it a go and report back. If by "the author" you mean the developer of the Meteostick driver, I'm not sure how useful that'll be, a lot of his (very useful) WeeWX-related tools date from around the 2020 time frame and haven't been updated since then. For example there's multi-year-old PRs for the driver still active. Not meant as a criticism, everyone has a day job they need to deal with, just pointing out that a fix at the meteostick.py end may be awhile forthcoming.
On Monday, 20 October 2025 at 02:38:09 UTC+13 Tom Keffer wrote: > It appears that this part of the meteostick driver was never updated to > Python 3. > > The crc16() function could work with either Python 2 or 3 until V5.2, at > which point the Python 2 code was removed. > > For the moment, replace the file /usr/share/weewx/weewx/crc16.py with the > older version, attached below. > > I'll file an issue with the author. > > -tk > > On Sun, Oct 19, 2025 at 6:16 AM Joe Garcia <[email protected]> wrote: > >> Yeah, sorry, the post took awhile to appear so I couldn't update it with >> the full log, whole thing is attached below. Looking at the repo, there >> was a change to crc16.py 11 months ago that may have caused this: >> >> - def crc16(bytes, crc_start=0): >> + def crc16(byte_buf, crc_start=0): >> >> - return reduce(lambda crc_sum, ch: (_table[(crc_sum >> 8) ^ ch] ^ >> (crc_sum << 8)) & 0xffff, byte_buf, crc_start) >> + crc_sum = reduce(lambda crc, ch : (_table[(crc >> 8) ^ ch] ^ (crc << >> 8)) & 0xffff, byte_iter, crc_start) >> >> but see my earlier comment about no hablo Python :). >> >> CRITICAL __main__: Caught unrecoverable exception: >> CRITICAL __main__: **** unsupported operand type(s) for ^: 'int' and >> 'str' >> CRITICAL __main__: **** Traceback (most recent call last): >> CRITICAL __main__: **** File "/usr/share/weewx/weewxd.py", line >> 127, in main >> CRITICAL __main__: **** engine.run() >> CRITICAL __main__: **** ~~~~~~~~~~^^ >> CRITICAL __main__: **** File "/usr/share/weewx/weewx/engine.py", >> line 204, in run >> CRITICAL __main__: **** for packet in >> self.console.genLoopPackets(): >> CRITICAL __main__: **** >> ~~~~~~~~~~~~~~~~~~~~~~~~~~~^^ >> CRITICAL __main__: **** File "/etc/weewx/bin/user/meteostick.py", >> line 311, in genLoopPackets >> CRITICAL __main__: **** data = >> self.station.parse_readings(readings, self.rain_per_tip) >> CRITICAL __main__: **** File "/etc/weewx/bin/user/meteostick.py", >> line 638, in parse_readings >> CRITICAL __main__: **** data = self.parse_raw(raw, >> CRITICAL __main__: **** >> self.channels['iss'], >> CRITICAL __main__: **** ...<3 lines>... >> CRITICAL __main__: **** >> self.channels['temp_hum_2'], >> CRITICAL __main__: **** rain_per_tip) >> CRITICAL __main__: **** File "/etc/weewx/bin/user/meteostick.py", >> line 687, in parse_raw >> CRITICAL __main__: **** Meteostick._check_crc(raw_msg_crc, >> chksum) >> CRITICAL __main__: **** >> ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^ >> CRITICAL __main__: **** File "/etc/weewx/bin/user/meteostick.py", >> line 505, in _check_crc >> CRITICAL __main__: **** crc_result = crc16(msg) >> CRITICAL __main__: **** File "/usr/share/weewx/weewx/crc16.py", >> line 49, in crc16 >> CRITICAL __main__: **** return reduce(lambda crc_sum, ch: >> (_table[(crc_sum >> 8) ^ ch] ^ (crc_sum << 8)) & 0xffff, >> CRITICAL __main__: **** byte_buf, crc_start) >> CRITICAL __main__: **** File "/usr/share/weewx/weewx/crc16.py", >> line 49, in <lambda> >> CRITICAL __main__: **** return reduce(lambda crc_sum, ch: >> (_table[(crc_sum >> 8) ^ ch] ^ (crc_sum << 8)) & 0xffff, >> CRITICAL __main__: **** ~~~~~~~~~~~~~~~^~~~ >> CRITICAL __main__: **** TypeError: unsupported operand type(s) for >> ^: 'int' and 'str' >> 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 127, in main >> engine.run() >> ~~~~~~~~~~^^ >> File "/usr/share/weewx/weewx/engine.py", line 204, in run >> for packet in self.console.genLoopPackets(): >> ~~~~~~~~~~~~~~~~~~~~~~~~~~~^^ >> File "/etc/weewx/bin/user/meteostick.py", line 311, in genLoopPackets >> data = self.station.parse_readings(readings, self.rain_per_tip) >> File "/etc/weewx/bin/user/meteostick.py", line 638, in parse_readings >> data = self.parse_raw(raw, >> self.channels['iss'], >> ...<3 lines>... >> self.channels['temp_hum_2'], >> rain_per_tip) >> File "/etc/weewx/bin/user/meteostick.py", line 687, in parse_raw >> Meteostick._check_crc(raw_msg_crc, chksum) >> ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^ >> File "/etc/weewx/bin/user/meteostick.py", line 505, in _check_crc >> crc_result = crc16(msg) >> File "/usr/share/weewx/weewx/crc16.py", line 49, in crc16 >> return reduce(lambda crc_sum, ch: (_table[(crc_sum >> 8) ^ ch] ^ >> (crc_sum << 8)) & 0xffff, >> byte_buf, crc_start) >> File "/usr/share/weewx/weewx/crc16.py", line 49, in <lambda> >> return reduce(lambda crc_sum, ch: (_table[(crc_sum >> 8) ^ ch] ^ >> (crc_sum << 8)) & 0xffff, >> ~~~~~~~~~~~~~~~^~~~ >> TypeError: unsupported operand type(s) for ^: 'int' and 'str' >> >> On Sunday, 19 October 2025 at 03:12:18 UTC+13 Tom Keffer wrote: >> >>> I'm sorry but the lines in your snippet are so truncated it's hard to >>> tell what's going on. Can we see the full lines? >>> >>> On Sat, Oct 18, 2025 at 7:02 AM Joe Garcia <[email protected]> wrote: >>> >>>> Another instance of 5.2 breakage, Meteostick support no longer works: >>>> >>>> CRITICAL __main__: **** File >>>> "/etc/weewx/bin/user/meteostick.py", l> >>>> CRITICAL __main__: **** crc_result = crc16(msg) >>>> CRITICAL __main__: **** File "/usr/share/weewx/weewx/crc16.py", >>>> lin> >>>> CRITICAL __main__: **** return reduce(lambda crc_sum, ch: >>>> (_table> >>>> CRITICAL __main__: **** byte_buf, crc_start) >>>> CRITICAL __main__: **** File "/usr/share/weewx/weewx/crc16.py", >>>> lin> >>>> CRITICAL __main__: **** return reduce(lambda crc_sum, ch: >>>> (_table> >>>> CRITICAL __main__: **** >>>> > >>>> CRITICAL __main__: **** TypeError: unsupported operand type(s) for >>>> ^:> >>>> CRITICAL __main__: **** Exiting. >>>> >>>> This may also have come about from an update to Python that occurred at >>>> the same time, not 5.2-specific. Unfortunately I don't speak Python so >>>> I'm >>>> not sure what's required to fix meteostick.py, and the original on Github >>>> hasn't been updated since 2019. >>>> >>>> -- >>>> 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/56358b16-66c3-41f6-b500-5cd3e6f9aad6n%40googlegroups.com >>>> >>>> <https://groups.google.com/d/msgid/weewx-user/56358b16-66c3-41f6-b500-5cd3e6f9aad6n%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/eebc86d4-933e-480b-a5d4-6cdb1b49403fn%40googlegroups.com >> >> <https://groups.google.com/d/msgid/weewx-user/eebc86d4-933e-480b-a5d4-6cdb1b49403fn%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/e61f529d-5cef-499e-a603-3cfb77db8996n%40googlegroups.com.
