注意事项:
IP最后一位会在附近跳动
182-183
相关工具
需要下载合适版本的米家,用电脑的手机模拟器,数据库软件查看获取的token
链接:https://pan.baidu.com/s/1MLwZ8K1-7Jq2rM1zIb_CIg
提取码:2qor使用python-miio控制小米智能插座
token获取
参考:
一日一技|只要一台电脑,轻松获取米家设备 token
回到主界面,打开 RE 浏览器并跳转到路径 /data/data/com.xiaomi.smarthome/databases/,找到 miio2 文件,并检查一下文件的修改时间是不是最近的;点击鼠标不松开选中 miio2 文件后,在界面右上角点击「复制」按钮;然后通过路径 /storage/emulated/0/$MuMu共享文件夹 找到模拟器的共享文件夹,点击右下角的「复制至此」按钮;最后,点击模拟器底部工具栏上的「文件共享」按钮就能在本地文件夹找到 miio2 文件了。
py控制电器
参考这个得到我们是P5型号
import miio
from miio.chuangmi_plug import ChuangmiPlug
from miio.yeelight import Yeelight
from miio.fan import FanP5
#插座
plug_ip='192.168.31.235'
plug_token='f91513e7bdf1b28dcbfd11b7197e7c99' # 输入之前获得token
#台灯
light_ip='192.168.31.8'
light_token='5f38707156577f4eee6358dd8c82b2d9' # 输入之前获得token
#落地扇
fan_ip='192.168.31.130'
fan_token='3d1b6f525af4d36032cec9041c62f86d' # 输入之前获得token
plug= ChuangmiPlug(ip=plug_ip, token=plug_token)
light=Yeelight(ip=light_ip, token=light_token)
fan=FanP5(ip=fan_ip,token=fan_token)
x=plug.status() # 给出设备的状态
#s = miio.device.Device(ip=ip3, token=token3)
#print(plug.info())
#light.off()
fan.off()
# x: <ChuangmiPlugStatus power=True, usb_power=None, temperature=46, load_power=None, wifi_led=None>
# x.power = True
#x=d.info()
#print(x)
# type(z)
# miio.device.DeviceInfo
# print(z)
# chuangmi.plug.m3 v1.3.8_0002 (04:CF:8C:5F:**:**) @ 192.168.1.20 - token: *****
#x=d.off()
# x = ['ok'] 则 控制成功
#x=d.on()
# x = ['ok'] 则 控制成功
ros通讯控制小米电器
python代码
ROS通讯控制台灯,风扇,插座等电器
```python
#!/usr/bin/env python3
#coding=utf-8
from std_msgs.msg import String
import rospy
from miio.chuangmi_plug import ChuangmiPlug
from miio.yeelight import Yeelight
from miio.fan import FanP5
#插座
plug_ip='192.168.31.235'
plug_token='f91513e7bdf1b28dcbfd11b7197e7c99' # 输入之前获得token
#台灯
light_ip='192.168.31.9'
light_token='5f38707156577f4eee6358dd8c82b2d9' # 输入之前获得token
#落地扇
fan_ip='192.168.31.130'
fan_token='3d1b6f525af4d36032cec9041c62f86d' # 输入之前获得token
#回调函数输入的应该是msg
def callback(msg):
if msg.data.find("风扇") > -1:
fan=FanP5(ip=fan_ip,token=fan_token)
if msg.data.find("开") > -1:
fan.on()
elif msg.data.find("关") > -1:
fan.off()
elif msg.data.find("台灯") > -1:
light=Yeelight(ip=light_ip, token=light_token)
if msg.data.find("开") > -1:
light.on()
elif msg.data.find("关") > -1:
light.off()
elif msg.data.find("插座") > -1:
plug= ChuangmiPlug(ip=plug_ip, token=plug_token)
if msg.data.find("开") > -1:
plug.on()
elif msg.data.find("关") > -1:
plug.off()
def voice_listener():
rospy.init_node('electronic_listener', anonymous=True)
#Subscriber函数第一个参数是topic的名称,第二个参数是接受的数据类型 第三个参数是回调函数的名称
rospy.Subscriber('voice_message', String, callback)
rospy.spin()
if __name__ == '__main__':
voice_listener()
```
下载moudle
```bash
pip install rospkg
pip install python-miio
```
命令行发布话题
```bash
rostopic pub -1 /voice_message std_msgs/String "data: '打开风扇'"
```