Hi Luc,

Here also the same problem last night, the Main engine shut down, casued by:

accum: ScalarStats.addHiLo expected float or int, got 308902

I have adapted line 463 of cmon.py. After this patch, the problem has been 
solved.

Thanks for your  advise!

Sef  (PA3SK)

Echt (NL)

Op donderdag 14 februari 2019 17:41:19 UTC+1 schreef Luc Heijst:
>
> 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 weewx-user+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to