python实现网关_用python实现与小米网关通讯

1 #!/usr/bin/env python

2 #-*- coding:utf-8 -*-

3 importsocket4 importjson5 from xm_gw importudp_token_key6

7

8 classudp_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 defwhois(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 returndata_dic23

24 defget_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 returndata_dic33

34 defread_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 returndata_dic43

44 defwrite_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 returndata_dic55

56 defread_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 inls: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 returnls_sensor_state70

71 defget_dict_model_sid(self):72 dic_gw=self.whois()73 ls=self.read_all_sid()74 dic_model_sid ={}75 for dic inls:76 model = dic.get(‘model‘)77 sid = dic.get(‘sid‘)78 dic_model_sid[model] =sid79 dic_model_sid[‘gateway‘] = dic_gw.get(‘sid‘)80 returndic_model_sid81

82

83 if __name__==‘__main__‘:84 importtime85 #{‘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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值