转载请保留原地址. 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. 序列!序列!- 零基础入门学习Python016

    序列!序列! 让编程改变世界 Change the world by program 你可能发现了,小甲鱼把列表.元组和字符串放在一块儿来讲解是有道理的,我们发现Ta们之间有很多共同点: 1. 都可以 ...

  2. Unix,windows和Mac中的换行

    Unix 系统里,每行结尾只有“<换行>”,即“\n”:Windows系统里面,每行结尾是“<换行><回车 >”,即“\r\n”:Mac系统里,每行结尾是“< ...

  3. Android CursorAdapter

    CursorAdapter 继承于BaseAdapter是个虚类,它为cursor和ListView提供了连接的桥梁.            public abstract class     Cur ...

  4. CMD获取当前目录的绝对路径 (转)

    @echo offecho 当前盘符:%~d0echo 当前盘符和路径:%~dp0echo 当前批处理全路径:%~f0echo 当前盘符和路径的短文件名格式:%~sdp0echo 当前CMD默认目录: ...

  5. spring 4 泛型注入

    最近对系统进行改造,发现在泛型实例初始化的时候,得不到想要的泛型.或者需要强制转换. spring 4 开始支持泛型对象初始化,初始化方法如下: 注:使用配置文件的方法暂时还没有发现,下面是使用jav ...

  6. AJAX实例入门

    一.开门见山 这些时间,瞎子也看得见,AJAX正大踏步的朝我们走来.不管我们是拥护也好,反对也罢,还是视而不见,AJAX像一阵潮流,席转了我们所有的人. 关于AJAX的定义也好,大话也好,早有人在网上 ...

  7. c++ 08

    一.程序的错误 1.编码错误:编译阶段 2.设计错误:测试阶段 3.环境错误:使用阶段 4.应用错误:测试和使用阶段 二.错误处理机制 1.通过返回值处理错误 当一个函数在执行过程中发生了某种错误,通 ...

  8. Uva272.TEX Quotes

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

  9. HTTP请求&&响应

    在视频上截的图....俗话说好记性不如烂笔头,所以就保留下来 请求: 响应: 状态码: 请求头和响应头的解释:

  10. Promise 异步执行的同步操作

    Promise 是用来执行异步操作的. 但有时一个异步操作需要等其他的异步操作完成,这时候就可以使用then来做. function loadImageAsync(url) { return new ...