使用叮当声控智米电风扇

作为一个完全开源的智能音箱项目,叮当也能够很方便的接入其他智能家电,并声控它们。本文将介绍如何使用叮当声控智米电风扇。

前言

dingdang-robot (以下简称“叮当”),是我在今年5月20号开源的一个中文智能音箱项目。

起初,我只是抱着一个好玩的心态做这个项目,并不期望这个项目能得到多少关注。然而,随着 QQ 用户群人数的不断壮大,越来越多的朋友安装了叮当,并且真正将它投入在了日常的使用上。很多朋友也提出了各种好玩的建议、想法,甚至为叮当贡献了插件或者捐赠了这个项目,让我觉得这个项目是很有价值的,也让我知道,我能做的还有很多东西。因此,我并不是开源了叮当之后就撒手不管了,而是利用业余时间不断完善叮当,又陆续发布了 8 个小版本,使得叮当在响应速度和功能丰富程度上都有了很大提升:

  • 自 v0.1.1 起,邮件通知也增加了 echo 功能,用户可以发送带 [echo] 前缀的邮件给叮当接入的邮箱,从而实现让叮当朗读标题的消息,而不是提醒有新的邮件。利用这个功能,可以很方便地和 ifttt 结合,当满足某个条件时让图灵通知这个事件。例如,我将 ifttt 的 Date & Time 触发器和 Email 做了联动,实现定时在每天晚上 11 点发送邮件通知我睡觉;
  • 自 v0.1.2 起,叮当的响应速度有了很大提升;
  • v0.1.3 增加了 snowboy 离线唤醒 STT 引擎,目前有 PocketSphinx 和 snowboy 两套离线唤醒引擎可供选择;
  • v0.1.4 增加了 SendQR 插件,可以让叮当将微信的登录二维码发送到邮箱。@hhao 也给叮当写了个可以获取二维码图片文件的服务器插件。另外,邮箱增加了 [control] 前缀支持,用户可以发送带 [control] 前缀标题的邮件,该标题里的内容会被当成一句指令交给叮当执行,从而实现类似微信的远程控制叮当的功能;
  • v0.1.5 开始,可以微信控制音乐播放了;
  • v0.1.7 开始,所有插件都可以通过在插件配置里头通过 enable 选项开关;
  • 叮当的官方+第三方插件数量由 6 个增加到了 13 个。

除了完善已有的功能,我也正试图让叮当往智能家电控制中心的方向上发展。

如今很多智能音箱除了用来听歌对话之外,还扮演了家庭中的一个控制中心的角色。不过,由于各家采用的接入协议有所区别,A 家的智能家电并不见得能得到 B 家的智能音箱的支持。而由于叮当是开源的项目,对其进行定制,接入控制家电所需的协议,从而实现声控大部分的智能家电是完全可能的。今天我就分享一下如何用叮当控制智米电风扇。

智米风扇声控插件

先上视频。这个视频演示了使用叮当实现对智米风扇的电源开关、摇头开关、自然风开关、风量调节、预约关机的声控:

使用手机阅读本文的用户,如果看不到视频,可以点击这个链接前往观看。

插件的主页:https://github.com/wzpan/dingdang-smart-mi-fan

安装插件

先安装 python2-miio :

pip install python2-miio

之后,克隆本项目到任意目录:

git clone https://github.com/wzpan/dingdang-smart-mi-fan.git

再将里头的 SmartMiFan.py 拷贝至 /home/pi/.dingdang/custom 目录。

cp dingdang-smart-mi-fan/SmartMiFan.py /home/pi/.dingdang/custom/

如果没有 custom 目录,就先创建它然后再执行上面的拷贝命令:

mkdir /home/pi/.dingdang/custom

然后,确保你的智米电风扇已开机并和叮当所在的机器处于同一个局域网下。然后执行以下命令获取风扇的 hosttoken:

miio2 discover

最后在 /home/pi/.dingdang/profile.yml 中添加如下配置:

# 智米风扇
smart_mi_fan:
    host: "192.168.1.106"
    token: "32e9af2050bc9d6f599c061733effee0"
    angle: 60  # 摇头的角度范围。可选值为 30/60/90/120

完成后重启叮当即可使用本插件。

指令列表

指令

相同指令

用途

打开风扇

启动风扇

打开风扇

关闭风扇

-

关闭风扇

开启自然风

启动自然风

切换到自然风模式

关闭自然风

关闭自然风

切换到普通模式

开始摇头

开启摇头

开始摇头

停止摇头

结束摇头,关闭摇头

结束摇头

加大风速

加快风速,加大风量,加大风力

加大风扇转速

减少风速

减慢风速,减少风量,减小风力

降低风扇转速

$num $unit 后关闭风扇

$num 是数字,$unit 可以是秒/分钟/小时

预约关机

开发心得

下面说说开发心得。小米的智能家电使用的是 miio 协议。在编写这个插件之前,我先试用了 @homeassistantchina提供的 HomeAssistant 的智米风扇插件 smart_mi_fan.py,这个插件在 HomeAssistant 里头的体验非常不错:

通过阅读这个插件,我发现这个插件依赖了一个封装了 miio 协议的 Python 3 的库 python-miio 。再阅读 python-miio 的源码,可以发现这个库就是通过 socket 来实现和家电的通讯的。整个发送消息的逻辑写成了一个 send 函数:

1

def send(self, command, parameters=None)

使用这个函数非常简单,只需要传入要发送的指令即可。

通过阅读 smart_mi_fan.py 的源码,不难发现 miio 的指令主要是两个类型:

  1. 获取属性。获取风扇的温度、角度、电源、风速等属性。通过发送 get_prop 指令并带上需要获取的属性名即可得到这些属性的值。具体有如下这些:
    • temp_dec:温度;
    • humidity:湿度;
    • angle:角度;
    • speed:风速;
    • poweroff_time:预约关机的时间(秒);
    • power:是否开机;
    • ac_power:是否使用交流电供电;
    • battery:电池剩余电量;
    • angle_enable:是否摇头;
    • speed_level:正常风风速等级;
    • natural_level:自然风风速等级;
    • child_lock:儿童锁;
    • buzzer:是否有声音反馈;
    • led_b:LED指示灯的亮度。
  2. 设置属性。设置某个属性的值。通过发送 set_属性名 指令并带上值即可对该属性进行控制。

了解了这个套路后,我只需要照着写一个叮当的插件,即可实现让叮当声控智米风扇的目标。

不过,在完成这个目标前,我还遇到了一个问题:python-miio 只能在 Python 3 环境中使用,而叮当是使用 Python 2 编写的。于是我对 python-miio 进行了 Python 2 版本的移植,发布为 python2-miio 。为了避免两个版本的 miio命令行工具冲突,我把 python 2 版本的 miio 更名为 miio2

插件的编写过程也很轻松,和写其他的叮当插件一样的套路,所以整个插件我只用了一个晚上的时间就写好了。如果你看过我之前写的一篇编写叮当插件的教程《手把手教你编写叮当机器人插件》,那么阅读风扇声控插件的源码也不会很困难,这里就只放上源码链接:https://github.com/wzpan/dingdang-smart-mi-fan/blob/master/SmartMiFan.py

最后就是插件的发布问题。考虑到这个插件比较私人——大部分用户并没有智米风扇,因此我并没有把它丢进 dingdang-contrib 中,而是单独创建了一个仓库来托管。对于需要使用这个插件的人,只需要将它放到个人的插件目录 /home/pi/.dingdang/custom 中,即可让该插件生效[1]。这样的好处是无需改动 contrib 目录,也不会影响 contrib 目录的更新。


  1. custom 目录的支持在叮当 v0.1.9 开始引进。

原文发布于微信公众号 - HaHack(gh_12d2fe363c80)

原文发表时间:2017-07-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏SAP梦心的SAP分享

【SAP业务模式】之ICS(四):组织单元的配置

      SAP的ICS业务后台配置主要有以下几个配置点:       1、组织单元的配置(公司代码、销售组织、工厂、采购组织等);       2、主数据的...

306100
来自专栏云计算D1net

使用云计算灾难恢复计划制定勒索软件恢复策略

如今,企业需要确保快照和云计算出现勒索软件,此外对备份存储执行严格的控制,以增加应对攻击的安全性。 如果勒索软件没有让IT人员夜不能寐,那么他很幸运。而如果一个...

44760
来自专栏FreeBuf

钓鱼攻击工具包Angler Exploit Kit已感染超过9w网站

近期,Palo Alto Networks的分析报告显示,Angler Exploit Kit的持续感染已经导致超过90000个网站被攻破,且大多数网站在Ale...

26450
来自专栏FreeBuf

2015年数据库漏洞威胁报告

互联网就像空气,彻底的融入我们的生活之中。因此我们愈发习惯把越来越多的数据保存在网上以换取更便捷的服务。不过,随之而来的安全事件无不让人触目惊心。 回忆2015...

25070
来自专栏FreeBuf

从安全漏洞看印度国家银行APP为何“技术落后10年”

2007年的时候,我在印度最大的国有银行中的一家注册了一个账号,这个国家的银行(政府或者民营)普遍所使用的技术与当前水平相比至少落后了10年。 2015年末,我...

22070
来自专栏企鹅号快讯

各种NB的国外黑客网站

这次说说一些非常有价值的国外黑客网站大全! 有需要的可保存下来细细琢磨! 本公众号提供了图书馆及下载专区。该图书馆为初学者提供了黑客知识和计算机技术基础知识。下...

2.1K100
来自专栏FreeBuf

我是如何黑掉英国间谍软件公司Gamma的

前几天,有黑客《入侵了英国间谍软件公司Gamma》。本文翻译自黑客自己公布的入侵指南。详细的介绍了从信息收集,到发现目标站点,以及进行源码审计,绕过waf注入,...

624100
来自专栏安恒信息

Struts2应用范围有多广?有多严重?哪些网站受到了波及?

1、什么是Struts 2漏洞? Struts是Apache软件基金会(ASF)赞助的一个开源项目,通过采用JavaServlet/JSP技术,实现基于Java...

30370
来自专栏源哥的专栏

基于linux的嵌入IPv4协议栈的内容过滤防火墙系统(2)-概要引言

概要:在Linux系统下,具有图形界面的防火墙系统很少,而包含内容过滤的防火墙系统更可以说是少之又少,本程序不仅具有防火墙功能,而且可以对rar、zip压缩格式...

7430
来自专栏程序员互动联盟

黑客利用Wi-Fi攻击你的七种方法

Wifi热点随处可见,我们好多人进入饭店,茶餐厅等第一句话就是:有没有wifi啊?我们知道公共wifi是非常容易受到攻击的。那么家用wifi呢?下面的文章介绍了...

41160

扫码关注云+社区

领取腾讯云代金券