使用叮当声控智米电风扇

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

前言

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 条评论
登录 后参与评论

相关文章

来自专栏猿湿Xoong

怎么用TWRP刷LineageOS拯救我的Android手机?

1964
来自专栏zhisheng

MacBook Pro 初体验

背景 在 Mac 到手之前就在各种群里看到人说 Mac 多好用,也有很多人鼓吹过 Mac 的好处,最后也坚定我的年前目标了 —— 就是买台 Mac,之前请原谅我...

3007
来自专栏嵌入式程序猿

你还在傻傻的写驱动吗?

因为工作项目中8位单片机经常用microchip,而32位常用NXP的,而两家都在积极推广自己的芯片配置,代码生成工具,microchip有MCC,而NXP有M...

3456
来自专栏北京马哥教育

你所写过的最好的Python脚本是什么?

这是网友在 Quora 上提的同名问答帖,本文摘编了排名前两名的答案。得到最多赞的用户介绍了他写的在Facebook上面感谢好友的脚本。排名第二的答案介绍了他写...

3409
来自专栏IT派

Python的10大集成开发环境和代码编辑器(指南)

使用IDLE或者Python Shell来编写Python是非常适合于简单程序的,但是这些工具往往将大型的编程项目变成一个个充满绝望和沮丧的“坑”。使用一款集成...

1406
来自专栏Web 开发

微软的版本,好复杂啊

MSDN(Microsoft Developer Network):这是微软公司面向软件开发者的一种版本。MSDN 涵盖了所有的可以被开发扩充的平台和应用程序,...

842
来自专栏james大数据架构

NET开发学习项目资源(2)

NET开发学习项目资源 击标题链接即可下载。 目录: 1.征婚交友网站    前台交友信息和后台会员管理两大部分组成。    前台功能模块    该模块主要包括...

1905
来自专栏coding

程序员如何优雅使用mac

在折腾windows和linux一段时间内,饱经各种摧残的我,虽然掌握了一些不为人知的黑科技,终于对此感到厌倦,转投mac阵营。入手了2017款的Apple M...

852
来自专栏Timhbw博客

Mac OS X和Linux下的微信客户端:Electronic WeChat

Mac OS X 和 Linux下更好用的微信客户端. 使用Electron构建. Electronic WeChat 是本开源项目发布的产品。网页版微信是其中...

33510
来自专栏Crossin的编程教室

在这个什么都看脸的时代,如何用 GUI 提高 python 程序的颜值?

0、前言 有不少初学者会问,Python 写的程序看起来好丑啊,只能在那个黑黑的框里运行吗?隔壁家的 JS 好像挺好看的,还能有酷炫效果呢…… 其实呢,术业有专...

3317

扫码关注云+社区