本帖最后由 XCray 于 2022-3-24 21:48 编辑
我使用HA的最看重的功能,就是可以在严重告警事件发生时可以通过电话卡发短信告警的能力,之前在官方集成这个功能之前,自己琢磨过好几种方案,也发帖子介绍过。
随着官方SMS notifications via GSM-modem组件的成熟,一直想找个机会把它用上但没有动手,只到最近发现在群晖上使用hassio方式越来越别扭,干脆再次把部署方案整体迁移回vmm的hassOS,顺便使用这个组件、简化掉单独的短信网关。
这儿把详细过程记录如下,供有同样需求的同学参考。
0. 利用快照功能,快速迁移到虚拟机的HassOS方式。主要是可以完美的恢复推送ID和绝大部分配置,个别配置项手工修改即可,这一步无需展开。
1. 利用UI首次添加该集成时需要下载安装依赖,然后必须重启OS才可生效,否则无法连接设备/串口(这一点官方文档应该补充说明);
2. notify服务仍需在configuration.yaml里配置,这一点官方文档说的也不够清晰;
3. 测试短信接收功能,一次性成功,但原有自动化的action部分需要修改,以匹配这个组件的短信接收事件的数据格式;
- 收到短信后,该组件触发sms.incoming_sms事件,数据格式如下:
{
"event_type": "sms.incoming_sms",
"data": {
"phone": "+86186xxxxxxx",
"date": "2021-05-22 08:17:40",
"text": "中文字幕在线播放"
},
"origin": "LOCAL",
"time_fired": "2021-05-22T00:17:45.457912+00:00",
"context": {
"id": "62a6965cf21bf32bbc512a5b2801110f",
"parent_id": null,
"user_id": null
}
}
对应的,自动化action修改如下(注意缩进,论坛代码嵌入功能一直不咋好用):
data_template:
title: '收到短信 {{ now().strftime(''%Y-%m-%d %H:%M:%S'') }}'
message: '{{ trigger.event.data.text }} 来自 {{trigger.event.data.phone }}'
service: persistent_notification.create
data_template:
title: '收到短信 {{ now().strftime(''%Y-%m-%d %H:%M:%S'') }}'
message: '{{ trigger.event.data.text }} 来自 {{ trigger.event.data.phone }}'
service: notify.notify
两个动作各有优点,我一直两个都用。
这儿当然还可以添加其他动作,比如把短信转发出来,或者根据接收到的短信具体内容执行其他动作(任何动作都可以,这样就可以实现利用短信控制家里的各种东西)。
4. 测试发送失败,可能原因:怀疑平台名称并不是sms。在UI删除掉该集成,改用configuration.yaml配置,重启,测试成功!这里还是要diss一下官方文档和组件代码,没必要非得实现UI配置,尤其是半拉子实现,还不如简简单单的配置文件呢!
虽然成功了,但仍有两个问题需要解决:
4.1 默认不支持中文,需要修改代码:
ssh登录到hassOS,输入root,然后login;
docker ps #找到HA core的容器ID
docker exec -i -t 容器ID /bin/bash #进入容器
转到路径/usr/src/homeassistant/homeassistant/components/sms
vi notify.py第49行,"Unicode": False,修改为True
保存退出,重启HA,测试成功
每次版本升级都需要手动修改,期待组件作者可以修改代码,实现自动判断所选择的编码方案。//注:2022.3.7确认作者已经修改支持Unicode了
4.2 可选的消息标题无效,不用即可
5. 修改短信发送自动化的action,比如:
- service: notify.sms_xxxx
data:
message: 大门被打开!
短信告警的好处和必要性这儿就不重复了,明白的自然明白。
~~~~~~~~~~~~~~~~~~~~~
顺便记录一点,相对于原来的vmm debian (SMS GW) + hassio的部署方案,这次重新部署的vmm hassOS方案的CPU占用率并没有明显变化,这一点也算是意外之喜吧(之前就是因为这个方案的CPU占用明显偏高才弃而不用的)。
~~~~~~~20210828补充~~~~~~~~
实际上在2021.6.6以及之前的版本,ha container安装方式(也就是在docker上跑ha core)这个组件也是可以正常工作的,只不过从2021.7.0开始,直到最新的2021.8.8,这个组件因依赖被破坏,无法正常工作,尤其是接收短信。
~~~~~~~20220324补充~~~~~~~~
好像自2021.9.x版本开始,这个功能又恢复正常了,并且最新的2022.3.7测试,已默认支持发送中文短信。
文档也有所改进,该说的基本都说清楚了。
|