zoukankan      html  css  js  c++  java
  • wifi智能插座 一键扫描局域网内插座Ip及其它信息 Python源代码API

    转载请保留原地址. http://www.cnblogs.com/lsqandzy 

    最近买了几个智能插座玩,插座安装在家里,连接好wifi,不管你人在哪里,通过手机,一键开启或关闭插座电源,想象一下,马上要下班了,天好热,先把空调打开,等回到家已经凉飕飕的。哈~
    闲暇时间用python3写了 局域网内一键扫描和控制插座开关的代码。

    一键扫描:

    import socket  
    import threading,time
    class UdpServer:
        def __init__(self):
            self.DeviceList={}
            self.thread_server=threading.Thread(target=self.start)
            self.thread_server.start()
        def start(self):
            address = ('', 48899)  
            self.s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
            self.s.bind(address)
            try:
                while True:  
                    data, addr = self.s.recvfrom(1024)  
                    if not data:  
                        print("exist")
                        break  
                    data=str(data)
                    d_list=data.replace("b'","").replace("'","").split(',')
                    if str(addr[0]) in d_list[0]:
                        temp_device={}
                        temp_device['IP']=d_list[0]
                        temp_device['MAC']=d_list[1]
                        temp_device['SN']=d_list[2]
                        temp_device['RES']=d_list[3]
                        temp_device['STATUS']=d_list[4]     
                        self.DeviceList[addr[0]]=temp_device
                self.s.close()
            except:
                self.s.close()
                print("Thread Wrong")
        def stop(self):
            self.s.close()
            del self.thread_server
        def getDevice(self):
            return self.DeviceList
    
    try:
        ss=UdpServer()
        address = ('192.168.1.255', 48899)  
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)  
        msg = b"""YZ-RECOSCAN"""
        s.sendto(msg, address)    
        s.close()
        time.sleep(1)
        DeviceList=ss.getDevice()    
        ss.stop()
        for item in DeviceList:
            print(DeviceList[item])
    except:
        print("wrong")
    del ss

    贴图:

    接了3个插座,ip分别是 128、123、121

    Status表示开关状态 0关闭 1开启

    Mac是网卡mac不解释

    Res是插座的工作状态 0异常(正在启动、正在恢复、等等) 1正常

    Sn是插座的序列号

    一键控制:

    from socket import *
    HOST='192.168.1.121'
    PORT=8899
    tcpCliSock = socket(AF_INET, SOCK_STREAM)
    tcpCliSock.connect((HOST,PORT))
    data2 =b"""AT+YZSWITCH=1,ON,201604151533"""
    tcpCliSock.send(data2)
    data1 = tcpCliSock.recv(1024)
    print (data1)

    控制121插座开启

    操作成功!

    以上是在局域网内控制的代码。

  • 相关阅读:
    [ZZ] Valse 2017 | 生成对抗网络(GAN)研究年度进展评述
    [ZZ] 多领域视觉数据的转换、关联与自适应学习
    [ZZ] 深度学习三巨头之一来清华演讲了,你只需要知道这7点
    [ZZ] 如何在多版本anaconda python环境下转换spyder
    支持向量机(Support Vector Machine,SVM)
    Wavelet Ridgelet Curvelet Contourlet Ripplet
    新技术革命思潮
    [ZZ] 边缘检测 梯度与Roberts、Prewitt、Sobel、Lapacian算子
    [ZZ] matlab中小波变换函数dwt2和wavedec2 系数提取函数appcoef2和detcoef2
    [综] 卷积的物理意义
  • 原文地址:https://www.cnblogs.com/lsqandzy/p/5396709.html
Copyright © 2011-2022 走看看