Mercurial > code > home > repos > homeauto
changeset 211:7d3645c2157e
rainforest eagle data -> carbon
Ignore-this: 953342d0ec8b882acb5a107468457b69
author | drewp@bigasterisk.com |
---|---|
date | Tue, 15 Dec 2015 00:27:24 -0800 |
parents | 75717a0be824 |
children | a7dd996617ef |
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()