1
0
mirror of https://github.com/no2chem/wideq.git synced 2025-05-21 01:20:11 -07:00

Try out monitoring

This commit is contained in:
Adrian Sampson 2018-01-08 14:03:46 -08:00
parent 3f6b4f1bf8
commit d0a4e3e823
2 changed files with 41 additions and 3 deletions

View File

@ -1,5 +1,6 @@
import wideq import wideq
import json import json
import time
STATE_FILE = 'wideq_state.json' STATE_FILE = 'wideq_state.json'
@ -101,6 +102,15 @@ def example():
print_devices(devices) print_devices(devices)
# For fun, try monitoring the first device
first_device_id = devices[0]['deviceId']
with wideq.Monitor(session, first_device_id) as mon:
for i in range(4):
time.sleep(1)
print('Polling...')
res = mon.poll()
print(res)
if __name__ == '__main__': if __name__ == '__main__':
example() example()

View File

@ -201,14 +201,42 @@ class Session(object):
}) })
return work_id return work_id
def monitor_get(self, work_ids): def monitor_poll(self, work_ids):
"""Get the results of monitoring tasks. """Get the results of monitoring tasks.
`work_ids` is a mapping from device IDs to work IDs. Return a `work_ids` is a mapping from device IDs to work IDs. Return a
mapping from device IDs to status results. mapping from work IDs to status results.
""" """
work_list = [{'deviceId': k, 'workId': v} work_list = [{'deviceId': k, 'workId': v}
for k, v in work_ids.items()] for k, v in work_ids.items()]
out = self.post('rti/rtiResult', {'workList': work_list})['workList'] out = self.post('rti/rtiResult', {'workList': work_list})['workList']
return {d['deviceId']: d for d in out} return {d['workId']: d for d in out}
def monitor_stop(self, work_id):
"""Stop monitoring a device."""
self.post('rti/rtiMon', {
'cmd': 'Mon',
'cmdOpt': 'Stop',
'workId': work_id,
})
class Monitor(object):
"""A monitoring task for a single device."""
def __init__(self, session, device_id):
self.session = session
self.device_id = device_id
def __enter__(self):
self.work_id = self.session.monitor_start(self.device_id)
return self
def poll(self):
data = self.session.monitor_poll({self.device_id: self.work_id})
return data[self.work_id]
def __exit__(self, type, value, tb):
self.session.monitor_stop(self.work_id)