#!/usr/bin/env python
# -*- coding: utf-8 -*-
import serial
import socket
import threading
from time import sleep
import json
import subprocess
UDP_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地址作爲設備的唯一ID
wifi_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())
DIY個人智能家庭網關——python篇之門磁觸發後自動點亮WIFI燈帶
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.