转载请保留原地址. 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. JAVA单元测试Junit

    1.为什么要用Junit 做了很多项目,几乎没怎么用过Java的单元测试,是因为它没有用吗?显然不是,是自己的开发方式太不规范!对于大型的软件项目,单元测试不仅有效实用,还非常有必要!它能够测试每个方 ...

  2. PMBOK 项目管理 九大知识领域和五大流程

    PMI   Project Management Institute.PMI 是世界上最大的非盈利机构,是项目管理领域的领导者.PMI制定项目管理行业标准,带领项目管理的研究并提供项目管理的培训,证书 ...

  3. WINAPI大全~

    http://www.alsprogrammingresource.com/win32_functions_g.html

  4. UltraChart导出图片

    ? //一定要先绑定UltraChart,如果先绑定,然后有点击图片导出,没有用的 string fulPath="xxxx"; this.UltraChartTScore.Sav ...

  5. mybatis和hibernate对比

    Hibernate是一个数据库表和java对象之间完全映射的框架,java开发人员直接对java对象操作,而不对数据库表进行操作: Mybatis是对SQL语句和java对象进行映射,仍需要开发人员编 ...

  6. spring bean初始化和销毁

    spring bean的创建与消亡由spring容器进行管理,除了使用<bean><property/></bean>进行简单的属性配置之外,spring支持更人性 ...

  7. C# WEB API ApiController 修改response header contentType

    var res = Request.CreateResponse(HttpStatusCode.OK, file); res.Content.Headers.ContentType = new Med ...

  8. c、c++知识点

    一. (1)在linux下类似uint8_t这样的文件定义在头文件<stdint.h>里面   (2)截取了stdint.h头文件里的一些常用部分 二.c++中c_str()用法 函数返回 ...

  9. jquery 自动跳出列表

    先上效果图:当鼠标经过相亲会自动弹出取最新的10条数据

  10. jquery倒计时(仿团购)转至 http://justcoding.iteye.com/blog/2210962

    倒计时一般是用来表示未来某一时刻距现在时刻还剩多少时间.倒计时在WEB上应用非常广泛,如考试系统倒计时,团购网站中的优惠活动倒计时等等.今天,我们来使用jQuery实现一个简单的倒计时功能.