changeset 1016:1c5ff4c16f1e

rainforest eagle data -> carbon Ignore-this: 953342d0ec8b882acb5a107468457b69 darcs-hash:b2f95b62640ab0e23a5cbbab8a2c4659b595e659
author drewp <drewp@bigasterisk.com>
date Tue, 15 Dec 2015 00:27:24 -0800
parents 4d80718a47e5
children 3edda1f7a322
files service/powerEagle/reader.py service/powerEagle/requirements.txt
diffstat 2 files changed, 63 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/service/powerEagle/reader.py	Tue Dec 15 00:27:24 2015 -0800
@@ -0,0 +1,60 @@
+#!bin/python
+import json, logging, time
+import sys
+sys.path.append("/my/proj/homeauto/lib")
+from logsetup import log
+sys.path.append("/my/proj/room")
+from carbondata import CarbonClient
+from twisted.internet.task import LoopingCall
+from twisted.internet.defer import inlineCallbacks
+from twisted.internet import reactor
+from cyclone.httpclient import fetch
+
+from private_config import deviceIp, cloudId, installId, macId, periodSec
+
+auth = (cloudId + ':' + installId).encode('base64').strip()
+
+carbon = CarbonClient(serverHost='bang')
+
+class Poller(object):
+    def __init__(self, carbon):
+        self.carbon = carbon
+        self.lastPollTime = 0
+        LoopingCall(self.poll).start(interval=periodSec)
+
+    @inlineCallbacks
+    def poll(self):
+        ret = None
+        try:
+            resp = yield fetch(
+                'http://{deviceIp}/cgi-bin/cgi_manager'.format(deviceIp=deviceIp),
+                method='POST',
+                headers={'Authorization': ['Basic %s' % auth]},
+                postdata='''<LocalCommand>
+                              <Name>get_usage_data</Name>
+                              <MacId>0x{macId}</MacId>
+                            </LocalCommand>
+                            <LocalCommand>
+                              <Name>get_price_blocks</Name>
+                              <MacId>0x{macId}</MacId>
+                            </LocalCommand>'''.format(macId=macId))
+            ret = json.loads(resp.body)
+            if ret['demand_units'] != 'kW':
+                raise ValueError
+            if ret['summation_units'] != 'kWh':
+                raise ValueError
+            self.carbon.send('system.house.powerEagle.demand_w',
+                             float(ret['demand']) * 1000)
+            self.carbon.send('system.house.powerEagle.summation_delivered_kWh',
+                             float(ret['summation_delivered']))
+        except Exception as e:
+            log.error("failed: %r", e)
+            log.error(repr(ret))
+
+        self.lastPollTime = time.time()
+
+
+log.setLevel(logging.INFO)
+carbon = CarbonClient(serverHost='bang')
+p = Poller(carbon)
+reactor.run()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/service/powerEagle/requirements.txt	Tue Dec 15 00:27:24 2015 -0800
@@ -0,0 +1,3 @@
+cyclone==1.1
+service-identity==14.0.0
+Twisted==15.5.0