Mercurial > code > home > repos > homeauto
comparison service/powerEagle/reader.py @ 1017:3edda1f7a322
LoopingCall sets the interview between calls, but I want the period of calls
Ignore-this: 224af7b995395d5e0c43c382360e4c90
darcs-hash:ac6b7338bc3a80b4b53be59b63c4a612daf49f7b
author | drewp <drewp@bigasterisk.com> |
---|---|
date | Tue, 15 Dec 2015 00:41:51 -0800 |
parents | 1c5ff4c16f1e |
children | 7a1e9ef4c8b2 |
comparison
equal
deleted
inserted
replaced
1016:1c5ff4c16f1e | 1017:3edda1f7a322 |
---|---|
3 import sys | 3 import sys |
4 sys.path.append("/my/proj/homeauto/lib") | 4 sys.path.append("/my/proj/homeauto/lib") |
5 from logsetup import log | 5 from logsetup import log |
6 sys.path.append("/my/proj/room") | 6 sys.path.append("/my/proj/room") |
7 from carbondata import CarbonClient | 7 from carbondata import CarbonClient |
8 from twisted.internet.task import LoopingCall | |
9 from twisted.internet.defer import inlineCallbacks | 8 from twisted.internet.defer import inlineCallbacks |
10 from twisted.internet import reactor | 9 from twisted.internet import reactor |
11 from cyclone.httpclient import fetch | 10 from cyclone.httpclient import fetch |
12 | 11 |
13 from private_config import deviceIp, cloudId, installId, macId, periodSec | 12 from private_config import deviceIp, cloudId, installId, macId, periodSec |
17 carbon = CarbonClient(serverHost='bang') | 16 carbon = CarbonClient(serverHost='bang') |
18 | 17 |
19 class Poller(object): | 18 class Poller(object): |
20 def __init__(self, carbon): | 19 def __init__(self, carbon): |
21 self.carbon = carbon | 20 self.carbon = carbon |
22 self.lastPollTime = 0 | 21 reactor.callLater(0, self.poll) |
23 LoopingCall(self.poll).start(interval=periodSec) | |
24 | 22 |
25 @inlineCallbacks | 23 @inlineCallbacks |
26 def poll(self): | 24 def poll(self): |
27 ret = None | 25 ret = None |
26 startTime = time.time() | |
28 try: | 27 try: |
29 resp = yield fetch( | 28 resp = yield fetch( |
30 'http://{deviceIp}/cgi-bin/cgi_manager'.format(deviceIp=deviceIp), | 29 'http://{deviceIp}/cgi-bin/cgi_manager'.format(deviceIp=deviceIp), |
31 method='POST', | 30 method='POST', |
32 headers={'Authorization': ['Basic %s' % auth]}, | 31 headers={'Authorization': ['Basic %s' % auth]}, |
49 float(ret['summation_delivered'])) | 48 float(ret['summation_delivered'])) |
50 except Exception as e: | 49 except Exception as e: |
51 log.error("failed: %r", e) | 50 log.error("failed: %r", e) |
52 log.error(repr(ret)) | 51 log.error(repr(ret)) |
53 | 52 |
54 self.lastPollTime = time.time() | 53 now = time.time() |
54 goal = startTime + periodSec | |
55 reactor.callLater(max(1, goal - now), self.poll) | |
55 | 56 |
56 | 57 |
57 log.setLevel(logging.INFO) | 58 log.setLevel(logging.INFO) |
58 carbon = CarbonClient(serverHost='bang') | 59 carbon = CarbonClient(serverHost='bang') |
59 p = Poller(carbon) | 60 p = Poller(carbon) |