树莓派构建智能家居控制系统 篇二:米家智能扫地机器人接入树莓派Domoticz

       上一篇末提到接下来要写写具体如何使用这两个开关来学习、导入博联e-Control中的遥控信号,又得先放放了,有需要的请先看外文自学吧。

米家智能扫地机器人接入树莓派Domoticz

       按张大妈的规矩,先推介下产品:小米扫地机,入手近一年。

米家(MIJIA)扫地机器人 小米扫地机器人 智能规划路线吸尘器 智能自动 米家扫地机器人1699元京东直达链接

       米家扫地机器人,真心不错,价格有良心、品质有保证、性能拿得出的国产扫地机。这是小米最让我满意的产品。完全替代了家里服役了近十年的irobot roomba(它的故事以后再讲)。

       今天要谈的是如何将小米扫地机接入Domoticz,接入Domoticz的用处其实并不太大,意义只是在于过程,学习应用下抓包的过程。还有就是若是用的是iOS10以上的苹果手机、平板,并在装有domoticz的终端上安装了homebridge服务,并让苹果手机、平板联上。那么恭喜你,你有时可以“犯二”下,对着手机说“嗨siri,开始爱妃扫地”、“嗨siri,停止爱妃扫地”、“嗨siri,开始爱妃回家吃饭”、“嗨siri,开始爱妃吱一声”,仅此而于。不过,有时“犯二”下也不错,是吧?

        开始前,还是先感谢下大神Sevift,是他将这方法分享出来。我只是搬运工,我是雷锋,不谢。

先看下最终成果:

米家智能扫地机器人接入树莓派Domoticz

接入思路:我们可以通过手机应用——米家下指令让小米扫地机开始扫地、暂停、回充、定位等等,那么如果我们能将这个看不见摸不着的通过wifi发送的指令抓出来,再告诉domoticz是啥内容,那么我们也就能实现用domoticz来控制小米扫地机了。(关键是这个小米扫地机在接收指令时没有握手的过程,只是简单地听到干啥就干啥,并不去确认发放指令的是谁。)

因此接入步骤:

一、电脑模拟手机发送指令、拦截发送的指令(抓包);

二、找出电脑发送的指令、并测试确认;

三、在安装 domoticz的终端设备中新建运行脚本;

四、domoticz新增虚拟选择开关;

五、让siri来指派干活;

六、搞定、结束。

前提:

1、你准备好了装有domoticz的终端(树莓派或windows电脑或Mac电脑等domoticz支持的终端);

2、你具备了最基本的domoticz操作能力(比如会增虚拟硬件、设备等等);

3、知道你当前电脑和小米扫地机的IP地址(都是在同一局域网中,将小米的IP地址设为静态的);

4、需要软件:安卓模拟软件BlueStacks、抓包软件wireshark、数据包发送软件packetsender;

5、如果最后还想试试“犯二”用siri来指令扫地机,那你的domoticz终端还必须装有homebridge,并且你的苹果手机或平板中的homekit也已配置正常。(过程在此不详述)

 

过程(下面的配图是基于用苹果电脑SSH连接装有domoticz的树莓派):

一、电脑模拟手机发送指令,拦截发送的指令(抓包)

1.1 找到米家应用发送相应指令的位置:

       在电脑(PC或Mac)安装安卓模拟软件BlueStacks(PC版、Mac版),并在BlueStacks中安装mi home应用,并登录mi home,找到你家的扫地机(什么?你没找到?那出门右拐,小米家、京东家、天猫家都有货,到货了再往下看)。我们总共要找到四个指令(清扫、暂停、回充、定位。你也可以花时间找更多,强力扫、安静扫......然并卵。),先于找“定位”指令为例做说明。先找到安卓模拟软件中米家应用扫地机定位按钮。

米家智能扫地机器人接入树莓派Domoticz

米家智能扫地机器人接入树莓派Domoticz

1.2 抓包前的准备:

       安装抓包软件wireshark,并打开。界面如下:

米家智能扫地机器人接入树莓派Domoticz

       点击第四个按纽Capture Options,打开Wireshark - Capture Interfaces窗口,选择你当前电脑的上网端(无线或网卡。我是无线网卡,选Wi-Fi en0),点击开始,进入Wireshark软件的抓包界面,自动开始抓包。

米家智能扫地机器人接入树莓派Domoticz

       先让它停下来,点击工具栏第二个,红色停止按纽(先别抓包、我们还没给扫地机发指令呢)。再点击第一个蓝色鲨鱼图标(Start Capturing packets)出现个确认保存窗口。暂停。

米家智能扫地机器人接入树莓派Domoticz

1.3 抓包:

       先将第1.1的窗口和第1.2的窗口并排,方便一会两窗口间快速切换操作。接下来运作要快哦(慢也行,就是到时抓包软件抓到太多不相关的信息,不好找指令代码)。点击上面1.2不保存按钮(Continue without Saving),开始抓包,立马回到第1.1在bluestaacks软件已进入的mi home应用定位界面,点击定位我的扫地机,在听到扫地机回答“皇上,臣妾在此。”时,说明电脑已发出我们要找的定位指令,小米扫地机也收到了,立马回到wireshark界面,点击第二个停止按纽停止抓包。指令已被抓,就看你筛选了。

二、找出电脑发送的指令、并测试确认

2.1 找出正确数据包:

       按目标列IP地址排序 ,根据你源头列——操作电脑的IP、目标列——小米扫地机的IP地址、协议列DUP进行筛选,如下图操作,在数据串上点右键,点击copy - ...as a Hex Stream,复制(...as a Hex Stream)。

米家智能扫地机器人接入树莓派Domoticz

米家智能扫地机器人接入树莓派Domoticz

2.2 测试找到的数据包:

       打开数据包发送软件packetsender,将复制内容填入,点击发送。

米家智能扫地机器人接入树莓派Domoticz

       点击发送后,若扫地机有回复“皇上,臣妾在此。”,就说明定位指令找到。将该指令保存在一个文本文件中备用。若发送后,扫地机没反应,就说明找错数据包了,再找符合条件(源头列是电脑IP 地址、目标列是扫地机IP地址、协议列是UDP)的数据包,再复制、再发送测试。直到扫地机有回应。一般也就两三个数据包符合条件的。实在找不到,再重来一遍抓包,动作快点,减少抓包数据,免得无关数据太多。

       另外几个指令也是按此操作,找出。

 

       最后你就得到所需的四组数据都是长度为120个的字符串。

       你会发现这四个字条串的前28个字符都是相同的。

米家智能扫地机器人接入树莓派Domoticz

       至此,你的抓包、找指令的活是干好了,不错!

 

三、在安装 domoticz的终端设备中新建运行脚本(以终端是树莓派为例)

SSH进入树莓派或直接在树莓派的终端窗口操作:

cd  /home/pi/domoticz/scripts/python/         进入要新建脚本文件的目录(位置自己定。建议放这好归类管理);

sudo nano MiRobotVacuum.py                    编辑新建脚本文件MiRobotVacuum.py,文件名自取,注意大小写;

将以下脚本复制进去:

#!/usr/bin/python

import socket
import sys
import codecs

UDP_IP = '192.168.100.18'
UDP_PORT = 54321
INET_ADDR = (UDP_IP,UDP_PORT)

action = str(sys.argv[1])
massage = "213100500000000002f2c97b5872"

if action == "start":
   message_to_send = massage + "2fd096c280746dc2091bad1d30c49ce74da6c88492a5c0e7c427ad0b4ca98c3b08ea35e67b29dddd8624dd1f2ea46ced68fce3c5b7fef8e89eef60b3c777f43a5622"

if action == "pause":
   message_to_send = massage + "3080fdc4d67fe6fd048b63eb6d2cee5f285f8fec54c2e3bc5486641ec620bae160e9717af4d17ce3c0265bcb807644dae475bcaaf089391f6f76fa85b31396af3e26"

if action == "home":
   message_to_send = massage + "30e4006525a8e0420c337fbc2bfc1741369bb9760685aafe250790ee4ea8bda3aafbdfaa47ae0e8518503530fb72579fe8cf334c6a6fcd4cbc94bfb310f64163a80a"

if action == "find":
   message_to_send = massage + "29d24b61f9c826221c4c7a68be606ff324f81fcc282e18fa679d0506e3e805cbfe56323f2dc292f5d609d20782cb6df1abe3b4a9ce062da42e3371126048c2213b3e"

message_to_send = codecs.decode(message_to_send, "hex_codec")
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(message_to_send, INET_ADDR)

米家智能扫地机器人接入树莓派Domoticz

       建议大家先用文本代码编辑器(我是用atom)修改好后,再一次复制粘贴过来。至于为什么要将四个字符串中的前28位相同的字符单列出来,然后在指令中用 + 再合并,没啥,就是为了减少代码字符数,只是程序员的工作习惯。好吧,保留原创者的工作习惯,向他致敬。

保存、退出nano。

sudo chmod 777 MiRobotVacuum.py            赋予文件权限

在终端添加python脚本的工作完成。


四、domoticz新增虚拟选择开关

      在domoticz中新增硬件,名称自取,类型选择dummy。

米家智能扫地机器人接入树莓派Domoticz

       在开关页手动添加开关,类型选为选择开关。

米家智能扫地机器人接入树莓派Domoticz

       进入新建开关的编辑页面:

米家智能扫地机器人接入树莓派Domoticz

       编辑选择开关的名称及相关的脚本命令,保存。

       不出差错的话,你的小米扫地机接入domoticz的活就完成了,试着控制看看。

 

五、让siri来指派干活

       苹果手机、平板中的homekit是不支持选择开关的,为了偶尔的“犯二”,让siri来控制扫地机,我们要在domoticz做些设置。不细讲。新建硬件,新建虚拟开关。

米家智能扫地机器人接入树莓派Domoticz

       在苹果手机、平板中的homekit多了三个开关。归到客厅。开始“犯二”,没办法,本来设定为爱妃的,可siri总听成艾菲,好吧,没皇上命,叫不成爱妃。

米家智能扫地机器人接入树莓派Domoticz

六、搞定,收工。值友们,开工吧......


参考资料:

https://www.domoticz.com/forum/viewtopic.php?f=17&t=11520&hilit=Mi+Robot+Vacuum&start=280

上一篇

博联智能遥控器RM2(RM Pro)接入树莓派Domoticz前言:写正文之前先感谢以下值友们和他们的文章:零基础打造全屋智能控制系统篇一:智能家居控制中心搭建及小米博联的联动零基础打造全屋智能控制系统篇一:智能家居控制中心搭建及小米博联的...关于智能家居的原创本站已有不少,楼主在搭...vonzeng| 39 评论25 收藏407查看详情
本文著作权归作者本人和什么值得买共同所有,未经许可不得转载。文章仅代表作者看法,如有更多内容分享或是对文中观点有不同见解,值客原创欢迎您的投稿。点此投稿
推荐关注:
智能家居
标签:智能家居 +关注
经验
标签:经验 +关注
扫地机器人
分类:扫地机器人 +关注
#树莓派构建智能家居控制系统#
系列:树莓派构建智能家居控制系统 +关注

提示

鼠标移到标签上方,

尝试关注标签~

评论50

发表评论请 登录
  • 最新
  • 最热
评论举报

请选择举报理由

690 50

关注数量超出限制,请先删除部分内容再尝试

关注数量超出限制,
请先删除部分内容再尝试

登录
注册
用户名/邮箱
密码
验证码
看不清?点击更换
看不清?点击更换 忘记密码?

已收藏
去我的收藏夹 >

已取消收藏
去我的收藏夹 >

小提示