利用 midea_ac_lan 开源库控制美的空调

前言

美的智能家居平台的接口是非开放的。不管是在 HomeAssistant 还是 HomeBridge 中接入美的设备,都是靠伟大无私的开源社区提供解决方案。

在之前我自己的基于 Python 实现的智能家居控制系统 里,我用到的是 midea-ac-py

由于美的空调的 token、key 在每次重新供电时都会变化,而这个库没有将 discover 功能集成进来——库作者额外提供了一个命令行工具(
midea-msmart
)发现局域网内的美的设备,导致更新 token 流程的自动化程度不高,每次都要人工复制。

我曾经尝试把 midea-msmart 集成进我的系统,通过可编程方式更新 token,总会遇到各种奇怪问题,比如帐密验证失败、超时等等,所以一直在寻找可替代库。终于让我发现了 midea_ac_lan

阅读更多

智能家居实施状况汇总

12 月 11 号那天把宽带移到了新家,终于可以将我的智能家居想法正式实施了。

网络布线

弱电箱在玄关鞋柜里边,我把电信光猫改了桥接直接放弱电箱里了。中海预先布了 5 条线,两条六类,三条超五类,都可以支持千兆,省了从弱电箱到客厅重新布线的麻烦。

但是书房居然没有布线。这就很麻烦,因为我的台式机、NAS 等一些常用的有线设备肯定要放书房的啊。300M 的宽带从客厅跨过三道墙进入书房后,实测无线网的网速只剩下将将 100M 了。拿另一台路由器做无线 Mesh,发现不管放哪儿,网速甚至都提不到 200M。

阅读更多

外链 Jellyfin 视频播放页地址

我自己的检索服务

本人珍藏的视频比较多,有 TB 级别,所以之前我通过人工给视频文件打 tag 的方式,自创了一套文件检索系统。比如:

1
snis243_吉川爱美_单体_好身材_漂亮.mp4

这样一个文件名,约定以下划线分隔 tag,且第一个 tag 总是视频标题。

阅读更多

通过人体识别实现智能家居控制

市面上普遍使用的人体检测方案是红外传感器,缺点很多且显得特别弱智:

  • 只能检测运动物体;
  • 完全不能区分人或其它活动物体;
  • 不能区分人体是进入或离开某一区域。

设想一个最简单普遍的生活场景:当我晚上 7 点步入餐厅时,餐厅灯光应随之亮起;同理,当识别到餐厅无人时,应自动将餐厅灯关闭。通过人体传感器是死活做不到这点的。

转换思路,视餐厅为一平面图,上述问题即可抽象成 “如何检测一张图片内是否有人存在”,解决方案就显而易见了——目标检测。

阅读更多

智能家居终端控制系统设计

手里有闲置的 Surface 3 平板、Android 平板、Android 手机各一台,正好可以把它们分散固定在常驻区域的墙面上,一可以用作多媒体终端(这个功能是现成的),二就是可以用作智能家居的控制终端,和我的树莓派(中控系统)进行双工通信。

这是我设想的语音助手外的另一个重要的控制路径。比如,你已经在终端附近时,或超出拾音范围时,或者你恰巧在一直嗡嗡响的洗衣机周边时,通过屏幕终端下发命令应该是更优解。

3 个固定的终端大概是分别放在厨房、客厅、阳台。树莓派作为服务端,允许多个客户端的接入,推送设备状态信息到所有终端。最终的网络连接很可能不是图里这种 all to all 的结果,因为我很可能有两段路由。

终端的软件实现,大致确定以 web 页面形式实现,否则分别开发原生应用的代价太大了。前端框架用 React,小巧、组件化实现,上手简单;搭配 Spectre CSS 库,开发一个看起来差不多的 UI 应该是够了。

网络传输自然是 Websocket 了,树莓派是服务端,各个终端是客户端。因为是局域网传输,数据量也不大,所以应该直接传输 json 数据。具体的数据模型待定,跟最后选定的家电的能力强关联,现在写得太细也没什么意义。

待续…

DeepSpeech 调参备忘

最优解

迄今为止训练效果最好的一组参数集是:

1
python DeepSpeech.py --train_files /mnt/g/myowncorpus/dst.csv --dev_files /mnt/g/myowncorpus/dst.csv --export_dir /mnt/g/myowncorpus/ --checkpoint_dir /mnt/g/myowncorpus/checkpoints128 --alphabet_config_path /mnt/g/myowncorpus/alphabet.txt --dropout_rate 0.3 --early_stop True --n_hidden 128 --export_file_name hidden128 --export_author_id hidden128 --epochs 200 --export_model_version 0.0.3 --lm_alpha 0.6940122363709647 --lm_beta 4.777924224113021 --export_language cmn-Hans-CN --reduce_lr_on_plateau False --es_epochs 800 --test_files /mnt/g/myowncorpus/dst.csv --learning_rate 0.001 --beam_width 100
阅读更多

Ubuntu上安装并训练DeepSpeech

全程参照官方文档 ,仅少许浅坑。这篇文章算是摘要 + 翻译 + 注解吧。

前提条件

  • Python 3.6

    严格遵守,实测 3.8 版本会有诸多错误。

  • Mac 或 Linux 环境

    建议避过 Mac,缺失的依赖比 Linux 多很多,问题也多,我是半途放弃 Mac 转到 Ubuntu 的。可以通过启用 Windows 10 的 WSL 功能创建 Ubuntu 环境,可以使用所有的硬件能力。

  • CUDA 10.0 / CuDNN v7.6 per Dockerfile.

    这条为非必须,因为我是新手,直接用 CPU 训练的。

阅读更多

准备训练自己的智能家居语音助手

Mozilla 实现的 DeepSpeech 语音识别引擎可以离线使用、可以运行在树莓派 4 上,简直就是给我准备的。

它附赠了一个训练好的普通话模型,我暂时没有试用。但训练自己专属的语音助手明显更带感,也更能贴近自己的说话习惯。

阅读更多

智能家居产品调研备忘

协议

调研中发现,小米开放了一套自研的控制协议 https://github.com/OpenMiHome/mihome-binary-protocol 。对应的 python 实现在这里 https://github.com/rytilahti/python-miio 。下文提到的云仪开窗器就是采用的 miio 。miio 涉及一个 token,看了下源码,token 大概是端到端的数据加密密钥的作用,https://github.com/al-one/hass-xiaomi-miot#obtain-miio-token 这里有获取 token 方法。

灯具

yeelight。控制协议完全开放,https://www.yeelight.com/download/Yeelight_Inter-Operation_Spec.pdf,有可直接使用的 python 包, https://pypi.org/project/yeelight/ 。大概看了下是参照 spec 实现的。

阅读更多