api.py
104 lines
| 2.5 KiB
| text/x-python
|
PythonLexer
|
r51 | ''' | ||
|
r185 | API to configure new Radar controller | ||
|
r51 | |||
|
r185 | @author: Juan C. Espinoza | ||
|
r51 | ''' | ||
|
r185 | import os | ||
import json | ||||
import requests | ||||
from struct import pack | ||||
from base64 import b64encode | ||||
class RCApi(object): | ||||
def __init__(self, ip, port=80): | ||||
self.url = 'http://{}:{}/'.format(ip, port) | ||||
self.params = None | ||||
def load(self, filename): | ||||
self.params = json.load(open(filename)) | ||||
r299 | self.pk = self.params['configurations']['allIds'][0] | |||
print 'RC Configuration: {}'.format(self.params['configurations']['byId'][self.pk]['name']) | ||||
|
r185 | |||
def status(self): | ||||
url = os.path.join(self.url, 'status') | ||||
req = requests.get(url) | ||||
return req.json() | ||||
def read(self): | ||||
url = os.path.join(self.url, 'read') | ||||
req = requests.get(url) | ||||
return req.json() | ||||
def stop(self): | ||||
url = os.path.join(self.url, 'stop') | ||||
req = requests.post(url) | ||||
return req.json() | ||||
def reset(self): | ||||
url = os.path.join(self.url, 'reset') | ||||
req = requests.post(url) | ||||
return req.json() | ||||
def start(self): | ||||
url = os.path.join(self.url, 'start') | ||||
req = requests.post(url) | ||||
return req.json() | ||||
def write(self): | ||||
url_write = os.path.join(self.url, 'write') | ||||
r299 | url_divider = os.path.join(self.url, 'divider') | |||
values = zip(self.params['configurations']['byId'][self.pk]['pulses'], | ||||
[x-1 for x in self.params['configurations']['byId'][self.pk]['delays']]) | ||||
|
r185 | payload = '' | ||
for tup in values: | ||||
vals = pack('<HH', *tup) | ||||
r299 | payload += '\x85'+vals[0]+'\x84'+vals[1]+'\x85'+vals[2]+'\x84'+vals[3] | |||
|
r185 | |||
req = requests.post(url_divider, | ||||
r299 | data={'divider':int(self.params['configurations']['byId'][self.pk]['clock_divider'])-1}) | |||
|
r185 | if 'ok' not in req.text: | ||
print 'Error sending divider' | ||||
return False | ||||
r299 | ||||
|
r185 | req = requests.post(url_write, | ||
data=b64encode(payload)) | ||||
return req.json() | ||||
|
r172 | |||
|
r185 | if __name__ == '__main__': | ||
r299 | import time | |||
|
r185 | ip = '10.10.10.100' | ||
r299 | ||||
filename = './dia.json' | ||||
|
r185 | rc = RCApi(ip) | ||
rc.load(filename) | ||||
r299 | # print rc.status() | |||
# time.sleep(1) | ||||
# print rc.reset() | ||||
# time.sleep(1) | ||||
# print rc.stop() | ||||
# time.sleep(1) | ||||
|
r185 | print rc.write() | ||
r299 | # time.sleep(1) | |||
# print rc.start() | ||||
|
r185 | |||
|
r172 | |||
|
r61 | |||
|
r172 | |||