changeset 1219:bff11263c71e

add request timeout. don't send NaN to influxdb. crash on failures. Ignore-this: 7c5303376024a46e3cdc6aaf70cf4da8 darcs-hash:0e480db6080f334daf539eb1bc692a8ec0bd537c
author drewp <drewp@bigasterisk.com>
date Tue, 26 Mar 2019 09:12:30 -0700
parents c571a45c944f
children 6c195446f49c
files service/powerEagle/reader.py
diffstat 1 files changed, 13 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/service/powerEagle/reader.py	Sat Mar 23 13:57:44 2019 -0700
+++ b/service/powerEagle/reader.py	Tue Mar 26 09:12:30 2019 -0700
@@ -1,5 +1,5 @@
 #!bin/python
-import json, logging, time
+import json, logging, time, os
 import sys
 sys.path.append("/my/proj/homeauto/lib")
 from logsetup import log
@@ -34,25 +34,30 @@
                             <LocalCommand>
                               <Name>get_price_blocks</Name>
                               <MacId>0x{macId}</MacId>
-                            </LocalCommand>'''.format(macId=macId))
+                            </LocalCommand>'''.format(macId=macId),
+                timeout=10)
             ret = json.loads(resp.body)
             if ret['demand_units'] != 'kW':
                 raise ValueError
             if ret['summation_units'] != 'kWh':
                 raise ValueError
-            influx.write_points([
+            pts = [
                 dict(measurement='housePowerW',
                      fields=dict(value=float(ret['demand']) * 1000),
                      tags=dict(house='berkeley'),
-                     time=int(startTime)),
-                dict(measurement='housePowerSumDeliveredKwh',
-                     fields=dict(value=float(ret['summation_delivered'])),
+                     time=int(startTime))]
+            sd = float(ret['summation_delivered'])
+            if sd > 0: # Sometimes nan
+                pts.append(dict(measurement='housePowerSumDeliveredKwh',
+                     fields=dict(value=float()),
                      tags=dict(house='berkeley'),
-                     time=int(startTime)),
-                ], time_precision='s')
+                     time=int(startTime)))
+                   
+            influx.write_points(pts, time_precision='s')
         except Exception as e:
             log.error("failed: %r", e)
             log.error(repr(ret))
+            os.abort()
 
         now = time.time()
         goal = startTime + periodSec - .2