首页 > 编程 > Python > 正文

DIY个人智能家庭网关——python篇之门磁触发后自动点亮WIFI灯带

2019-11-06 09:07:19
字体:
来源:转载
供稿:网友
#!/usr/bin/env python# -*- coding: utf-8 -*- import serial  import socketimport threadingfrom time import sleep  import jsonimport subPRocessUDP_BROCAST_HOST = '192.168.1.255'  # UDP广播发送地址UDP_BROCAST_PORT = 1235   # UDP广播发送端口RECV_PORT = 1234  # UDP接收端口UDP_ADDR = (UDP_BROCAST_HOST, UDP_BROCAST_PORT)# 打开串口  ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=0.5)    # 门磁的地址码door_sensor_addr = "0x5555"# WIFI灯带的MAC地址作为设备的唯一IDwifi_light_id = "5c:cf:7f:d5:06:d3"# UDP 收发器        class UdpTransceiver(threading.Thread):    run = False        def __init__(self,addr,port):        threading.Thread.__init__(self)        self.socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)        #self.socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)        self.socket.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1)             address = (addr, port)           self.socket.bind(address)           def set_recv_cb(self,cb):        self.recv_cb = cb            def close(self):        self.socket.close()        def run(self):        run = True        while self.run:            data,addr = self.socket.recvfrom(1024)            self.recv_cb(self,TransceiverType.udp, addr,data)         def send(self,addr,data):        self.socket.sendto(data,addr)                def stop(self):        self.run = False  def recv(serial):      while True:        data =serial.read(64)        if data == '':          continue      else:        break      sleep(0.02)     return data       if __name__ == "__main__":    # 创建UDP接口	udpTrans = UdpTransceiver(UDP_BROCAST_HOST, RECV_PORT)		while True:	  data =recv(ser)  	  if data != '':   	    print "receive %s"%data	    s = json.loads(data)  	    if s["addr"] == door_sensor_addr:        # 命令为:设置工作模式 params有3个参数,1表示渐亮模式,10和80表示10秒从灭渐变到80%的亮度	      cmd = {"cmd":"set_mode","id":wifi_light_id,"params":["1","10","80"]}	      # 转换成json	      json_str = json.dumps(cmd)	      # 发送命令	      udpTrans.send(UDP_ADDR, json_str.encode())
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表