cmon v0.16 crashes in weewx version 3.9.1
See crashlog:
Feb 14 11:10:15 pi21 vpro[28175]: manager: Added record 2019-02-14 11:10:15
-03 (1550153415) to database 'cmon21'
Feb 14 11:10:15 pi21 vpro[28175]: engine: Main loop exiting. Shutting
engine down.
Feb 14 11:10:15 pi21 vpro[28175]: engine: Shutting down StdReport thread
Feb 14 11:10:15 pi21 vpro[28175]: engine: StdReport thread has been
terminated
Feb 14 11:10:15 pi21 vpro[28175]: engine: Caught unrecoverable exception in
engine:
Feb 14 11:10:15 pi21 vpro[28175]: **** accum: ScalarStats.addHiLo
expected float or int, got 3809297
Feb 14 11:10:15 pi21 vpro[28175]: **** Traceback (most recent call
last):
Feb 14 11:10:15 pi21 vpro[28175]: **** File
"/home/weewx/bin/weewx/engine.py", line 890, in main
Feb 14 11:10:15 pi21 vpro[28175]: **** engine.run()
Feb 14 11:10:15 pi21 vpro[28175]: **** File
"/home/weewx/bin/weewx/engine.py", line 202, in run
Feb 14 11:10:15 pi21 vpro[28175]: ****
self.dispatchEvent(weewx.Event(weewx.POST_LOOP))
Feb 14 11:10:15 pi21 vpro[28175]: **** File
"/home/weewx/bin/weewx/engine.py", line 224, in dispatchEvent
Feb 14 11:10:15 pi21 vpro[28175]: **** callback(event)
Feb 14 11:10:15 pi21 vpro[28175]: **** File
"/home/weewx/bin/weewx/engine.py", line 580, in post_loop
Feb 14 11:10:15 pi21 vpro[28175]: ****
self._catchup(self.engine.console.genArchiveRecords)
Feb 14 11:10:15 pi21 vpro[28175]: **** File
"/home/weewx/bin/weewx/engine.py", line 635, in _catchup
Feb 14 11:10:15 pi21 vpro[28175]: **** origin='hardware'))
Feb 14 11:10:15 pi21 vpro[28175]: **** File
"/home/weewx/bin/weewx/engine.py", line 224, in dispatchEvent
Feb 14 11:10:15 pi21 vpro[28175]: **** callback(event)
Feb 14 11:10:15 pi21 vpro[28175]: **** File
"/home/weewx/bin/user/cmon.py", line 714, in new_archive_record
Feb 14 11:10:15 pi21 vpro[28175]: ****
self.save_data(self.get_data(now, self.last_ts))
Feb 14 11:10:15 pi21 vpro[28175]: **** File
"/home/weewx/bin/user/cmon.py", line 721, in save_data
Feb 14 11:10:15 pi21 vpro[28175]: **** self.dbm.addRecord(record)
Feb 14 11:10:15 pi21 vpro[28175]: **** File
"/home/weewx/bin/weewx/manager.py", line 246, in addRecord
Feb 14 11:10:15 pi21 vpro[28175]: ****
self._addSingleRecord(record, cursor, log_level)
Feb 14 11:10:15 pi21 vpro[28175]: **** File
"/home/weewx/bin/weewx/manager.py", line 1216, in _addSingleRecord
Feb 14 11:10:15 pi21 vpro[28175]: ****
_day_summary.addRecord(record, weight=_weight)
Feb 14 11:10:15 pi21 vpro[28175]: **** File
"/home/weewx/bin/weewx/accum.py", line 256, in addRecord
Feb 14 11:10:15 pi21 vpro[28175]: **** func(self, record,
obs_type, add_hilo, weight)
Feb 14 11:10:15 pi21 vpro[28175]: **** File
"/home/weewx/bin/weewx/accum.py", line 314, in add_value
Feb 14 11:10:15 pi21 vpro[28175]: **** self[obs_type].addHiLo(val,
record['dateTime'])
Feb 14 11:10:15 pi21 vpro[28175]: **** File
"/home/weewx/bin/weewx/accum.py", line 77, in addHiLo
Feb 14 11:10:15 pi21 vpro[28175]: **** raise ValueError("accum:
ScalarStats.addHiLo expected float or int, got %s" % val)
Feb 14 11:10:15 pi21 vpro[28175]: **** ValueError: accum:
ScalarStats.addHiLo expected float or int, got 3809297
Feb 14 11:10:15 pi21 vpro[28175]: **** Exiting.
The problem is caused by the net_eth0_tbytes calculation in cmon.py, see
below.
# get network usage
fn = '/proc/net/dev'
try:
netinfo = self._readproc_dict(fn)
if netinfo:
for iface in netinfo:
values = netinfo[iface].split()
for i, k in enumerate(self._NET_KEYS):
if iface not in self.last_net:
self.last_net[iface] = {}
if k in self.last_net[iface]:
x = int(values[i]) - self.last_net[iface][k]
if x < 0:
maxcnt = 0x100000000 # 32-bit counter
if x + maxcnt < 0:
maxcnt = 0x10000000000000000 # 64-bit
counter
x += maxcnt
record['net_' + iface + '_' + k] = *x*
self.last_net[iface][k] = int(values[i])
except Exception, e:
logdbg("read failed for %s: %s" % (fn, e))
The value of net_eth0_tbytes is a long integer ('net_eth0_tbytes': *108233L*,)
and accum.py (of version 3.9.1) expects a float or an integer, but NOT a
long.
To solve this, the cmon value must be converted to an integer in line 463
of cmon.py
record['net_' + iface + '_' + k] = *int(x)*
Luc
--
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].
For more options, visit https://groups.google.com/d/optout.