1 #!/usr/bin/env python
2 # -*- coding:utf-8 -*-
3 import socket
4 import json
5 from xm_gw import udp_token_key
6
7
8 class udp_gw():
9 def __init__(self, ip_gateway='192.168.8.100'):
10 self.ip_port_zu43 = ('224.0.0.50', 4321)
11 self.ip_port_single = (ip_gateway, 9898)
12 self.ip_port_zu9898=('224.0.0.50', 9898)
13
14 def whois(self):
15 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, 0)
16 comd = {'cmd': 'whois'}
17 order = json.dumps(comd)
18 s.sendto(bytes(order, encoding="utf-8"), self.ip_port_zu43)
19 data_bytes, addr = s.recvfrom(1024)
20 data_dic = json.loads(str(data_bytes, encoding='utf-8'))
21 s.close()
22 return data_dic
23
24 def get_id_list(self):
25 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, 0)
26 comd = {'cmd': 'get_id_list'}
27 order = json.dumps(comd)
28 s.sendto(bytes(order, encoding="utf-8"), self.ip_port_single)
29 data_bytes, addr = s.recvfrom(1024)
30 data_dic = json.loads(str(data_bytes, encoding='utf-8'))
31 s.close()
32 return data_dic
33
34 def read_sid(self, sid):
35 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, 0)
36 comd = {'cmd': 'read', 'sid': sid}
37 order = json.dumps(comd)
38 s.sendto(bytes(order, encoding="utf-8"), self.ip_port_single)
39 data_bytes, addr = s.recvfrom(1024)
40 data_dic = json.loads(str(data_bytes, encoding='utf-8'))
41 s.close()
42 return data_dic
43
44 def write_plug(self, status):
45 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, 0)
46 key_encrypt = udp_token_key.get_token_encrypty()
47 comd = {"cmd": "write", "model": "plug", "sid": "158d0001b84d9a", "short_id": 46384,
48 "data": {"status": status, 'key': key_encrypt}}
49 order = json.dumps(comd)
50 s.sendto(bytes(order, encoding="utf-8"), self.ip_port_single)
51 data_bytes, addr = s.recvfrom(1024)
52 data_dic = json.loads(str(data_bytes, encoding='utf-8'))
53 s.close()
54 return data_dic
55
56 def read_all_sid(self):
57 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, 0)
58 ls = json.loads(self.get_id_list().get('data'))
59 ls_sensor_state = []
60 for sid in ls:
61 comd = {'cmd': 'read', 'sid': sid}
62 order = json.dumps(comd)
63 s.sendto(bytes(order, encoding="utf-8"), self.ip_port_single)
64 data_bytes, addr = s.recvfrom(1024)
65 data_dic = json.loads(str(data_bytes, encoding='utf-8'))
66 # print(data_dic)
67 ls_sensor_state.append(data_dic)
68 s.close()
69 return ls_sensor_state
70
71 def get_dict_model_sid(self):
72 dic_gw=self.whois()
73 ls=self.read_all_sid()
74 dic_model_sid = {}
75 for dic in ls:
76 model = dic.get('model')
77 sid = dic.get('sid')
78 dic_model_sid[model] = sid
79 dic_model_sid['gateway'] = dic_gw.get('sid')
80 return dic_model_sid
81
82
83 if __name__=='__main__':
84 import time
85 #{'plug': '158d0001b84d9a', 'switch': '158d0001c10bd7', 'sensor_ht': '158d0001e87bd9',
86 # 'magnet': '158d0001bb3daf', 'motion': '158d0001c2f110', 'gateway': '7811dcb38599'}
87 gw=udp_gw('192.168.31.150')
88 tmp = gw.read_sid('158d0001b84d9a')
89 # print(tmp1)
90 # time.sleep(5)
91 # gw.write_plug('off')
92 # time.sleep(5)
93 # tmp=gw.read_sid('158d0001b84d9a')
94
95 print(tmp)