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.

Reply via email to