转载请保留原地址. 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插座开启

操作成功!

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

wifi智能插座 一键扫描局域网内插座Ip及其它信息 Python源代码API的更多相关文章

  1. 扫描局域网内的ip和主机名

    1. 目的 今天发现我配置的一台电脑ip被人占用了,所以准备写个程序扫描一下局域网内所有正在使用的ip和主机名 2. 实现--直接上代码 import time import threading im ...

  2. Snmp协议应用-扫描局域网内打印机

    .h2cls { background: #6fa833 none repeat scroll 0 0 !important; color: #fff; font-family: "微软雅黑 ...

  3. Java 网络编程(1):使用 NetworkInterface 获得本机在局域网内的 IP 地址

    原文地址:https://segmentfault.com/a/1190000007462741 1.问题提出 在使用 Java 开发网络程序时,有时候我们需要知道本机在局域网中的 IP 地址.很常见 ...

  4. 查看局域网内所有IP的方法

    1,windows下查看局域网内所有IP的方法: 在MS-DOS命令行输入arp -a 2,Linux下,查看局域网内所有IP的方法: 在命令行输入nmap -sP 172.10.3.0/24

  5. 如何知道局域网内哪些ip被占用----工具法Free IP Scanner

    在局域网中,尤其是在工作室和公司中需要修改IP地址才能上网,通常我们在设置完ip地址后会提示[该ip地址已被占用],又得回头去修改ip地址.本篇经验就介绍一款很好用的免费软件——Free IP Sca ...

  6. [PythonCode]扫描局域网的alive ip地址

    内网的主机都是自己主动分配ip地址,有时候须要查看下有那些ip在使用,就写了个简单的脚本. linux和windows下都能够用,用多线程来ping1-255全部的地址,效率不高.2分钟左右. 先凑合 ...

  7. cmd查看同一个局域网内电脑IP

    win+R,cmd  #快速打开cmd窗口 net view  #查看本地局域网内开启了哪些计算机共享  运行后可以看到已共享的计算机名称 net view ip  #查看对方局域网内开启了哪些共享 ...

  8. kali&BT安装好之后无法上网(包括Wifi)或者无法获得内网IP解决方法

    大家都知道,要想进行内网渗透攻击,你必须要在那个内网里.但是大家在Vmware里安装kali的时候,大多数用户为了方便,未选择桥接模式,而是选择了使用与本机共享的IP网络当然,这样能上网,但是你的虚拟 ...

  9. 解决局域网内无法IP访问IIS已发布的网站

    在IIS上发布的网站,本地可以访问,但是局域网内其他电脑却访问不了,原来是防火墙的问题,关闭它就可以访问了. 上面是我的简单操作 后来又百度了一下,发现有个更详细的操作:http://jingyan. ...

随机推荐

  1. project euler 14 collatz

    def collatz(num,i): i =i + 1 if num%2 == 0: return collatz(num//2,i) elif num == 1: return i else: r ...

  2. MVC过滤器详解和示例

    原文  http://blog.csdn.net/ankeyuan/article/details/29624005 MVC过滤器一共分为四个:ActionFilter(方法过滤器),ResultFi ...

  3. 利用Azure高级存储搭建高性能Linux服务器(1)

    目前Azure针对虚拟机提供两种类型的存储,一种是标准存储,基于HDD的,一种是高性能存储Premium Storage(在下文中简称PS),基于SSD的.针对用户高性能,低延迟,I/O密集型的应用, ...

  4. bzoj 3238 Ahoi2013 差异

    3238: [Ahoi2013]差异 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 2357  Solved: 1067[Submit][Status ...

  5. nginx的url重写[rewrite规则和参考]

    本日志内容来自互联网和平日使用经验,整理一下方便日后参考. Nginx Rewrite 相关指令有 if.rewrite.set.return 等. if 的语法 应用于 server 和 locat ...

  6. 自己动手写谷歌API翻译接口

      可以看到,利用GET请求方式,带入某些参数,就会返回一个json数组,QueryString参数如下:     同样的,我们只需要传入这三个参数,就可以获得我们想要的翻译内容,公开方法,代码如下. ...

  7. Keil C51里关于堆栈指针的处理

    Keil C是非常优秀的C51编译器,可能是最好的C51编译器,提供各种优化模式,对变量的优化和地址安排做得非常好.这是用C语言写代码的好处之一,如果用汇编写,得费一大番功夫给各个变量安排内存物理地址 ...

  8. 《Programming WPF》翻译 第7章 4.转换

    原文:<Programming WPF>翻译 第7章 4.转换 支持高分辨率显示是WPF中的重要样式.这是被部分地支持--强调了可伸缩的向量图,而不是图像.但是,正如使用GDI+和GDI3 ...

  9. c++ 14

    一.堆栈(stack) stack -> vector/deque/list push  -> push_back pop   -> pop_back top   -> bac ...

  10. UVa1399.Ancient Cipher

    题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...