diff options
Diffstat (limited to 'mfiapi.py')
-rw-r--r-- | mfiapi.py | 58 |
1 files changed, 0 insertions, 58 deletions
diff --git a/mfiapi.py b/mfiapi.py deleted file mode 100644 index 31f0330..0000000 --- a/mfiapi.py +++ /dev/null | |||
@@ -1,58 +0,0 @@ | |||
1 | import json | ||
2 | import urllib2 | ||
3 | import urllib | ||
4 | from cookielib import CookieJar | ||
5 | |||
6 | def bool_to_bin(value): | ||
7 | return 1 if value == True else 0 | ||
8 | |||
9 | |||
10 | def bin_to_bool(value): | ||
11 | return True if int(value) == 1 else False | ||
12 | |||
13 | |||
14 | class MFiAPI(object): | ||
15 | |||
16 | def __init__(self, host): | ||
17 | self.host = host | ||
18 | self.opener = urllib2.build_opener( | ||
19 | urllib2.HTTPCookieProcessor(CookieJar())) | ||
20 | |||
21 | def _make_url(self, suffix): | ||
22 | return 'https://{}/{}'.format(self.host, suffix) | ||
23 | |||
24 | def login(self, username, password): | ||
25 | form_data = urllib.urlencode({ | ||
26 | 'username' : username, | ||
27 | 'password': password, | ||
28 | 'login': 'login' | ||
29 | }) | ||
30 | |||
31 | self.opener.open(self._make_url('login'), form_data) | ||
32 | |||
33 | def get_sensor_data(self): | ||
34 | resp = self.opener.open(self._make_url('api/v1.0/list/sensors')) | ||
35 | return json.load(resp)['data'] | ||
36 | |||
37 | def port_status(self): | ||
38 | data = self.get_sensor_data() | ||
39 | return dict((i['label'], bin_to_bool(i['output_val'])) for i in data) | ||
40 | |||
41 | def set_port(self, mac, port, value): | ||
42 | data = urllib.urlencode({ "json": json.dumps({ | ||
43 | "mac": mac, | ||
44 | "val": bool_to_bin(value), | ||
45 | "port": int(port), | ||
46 | "cmd": "mfi-output" | ||
47 | }) | ||
48 | }) | ||
49 | |||
50 | self.opener.open(self._make_url("api/v1.0/cmd/devmgr"), data) | ||
51 | |||
52 | def toggle_port(self, name): | ||
53 | mac, port, status = None, None, None | ||
54 | |||
55 | for data in self.get_sensor_data(): | ||
56 | if data['label'] == name: | ||
57 | set_to = not bin_to_bool(data['output_val']) | ||
58 | self.set_port(data['mac'], data['port'], set_to) | ||