有劳各位点个赞。
创建了专栏“智能家居”,终于可以按照目录分文章发出来了,每片篇幅可控,目录清晰。
本篇将作为长篇搜集所有章节
更新进度: 暂停此篇更新,请阅读专栏分章。
本文最后成文较长,请各位记得收藏,我会逐渐完善本文,并逐步添加提纲,省事大家阅读。
序言
第一章 服务器架设及系统选择
第二章 少少装置,正式开启你的智能家居之旅
第三章 便宜又好用,定制空间大的好装置
第四章 Homeassistant系统安装及基础设定
第五章 智能感知的基础 ——传感器
第六章 无限可能,神器降临 ——Node-RED
第七章 有话说出来 ——让HomeAssistant说话
第八章 说有用的话,做有用的事
第九章 IFTTT的使用
第十章 自建HomeAssistant定时任务——Google都没做到的事
第十一章 废旧利用,旧手机电视盒子等安装Homeassistant服务
第十二章 如何DIY的漂亮
第十三章 Homeassistant服务器安全及状态监控(上)
第十四章 Homeassistant服务器安全及状态监控(下)
(以下为下册内容)
第十五章 Ubuntu18.04LTS升级到20.04LTS
第十六章 透过IFTTT和LINE接收所有推送通知
第十七章 聊聊外观——Homeassistant管理页面
第十八章 Esp8266的应用——远程控制门禁系统(上)
第十九章 Esp8266软件设定——远程控制门禁系统(下)
第二十章 摄像头接入Homeassistant系统
第二十一章 聊聊Siri控制
第二十二章 “Homeassistant+Siri+捷径”实现更多智能
第二十三章 小度音箱接入Homeassistant
第二十四章 路由器管理接入HomeAssistant
第二十五章 聊一台空气质量传感器——MQ135
第二十六章 自制远程控制智能门锁升级版
第二十七章 电池供电的超低能耗ESP传感器
第二十八章 Homeassistant 升级失败处理
<hr/>采购链接推荐:
序言:
随着AI的不断被推出,大数据的血腥积累,当前人类社会似乎要进入全面“人工智能”,也有人开玩笑说只能叫“人工智障”。我那7岁的小儿有句名言:“爸爸,如何目前什么都要说话呀”。确实,所谓的人工智能,现阶段不过是在大数据的堆砌下,通过对用户的数据画像,结合后台算力,模拟出了一些场景下拟智能应用。当然了,语音识别,图形识别等技术的发展,或是对未来可能的人工智能,提供了基础。不讨论这么虚无的东西了,或是来说人间烟火吧。
当前智能家居市场群雄逐鹿,各家纷至沓来,智能电视机,智能音箱,智能开关,智能窗帘,花式传感,林林总总。其实这些只能算是素材,或者叫零件,具备了智能的基础,而进一步的智能应该是如何配置,联动,打造个性化的场景应用。也就是说,我们不能说用手机可以开灯就叫做智能灯,起码是要达到,下班回家了,家里光线亮度不够,那么自动开灯,夜晚睡觉,对光线不再有需求,自动关灯。这算是最基础的场景应用。我们要做的当然要远比这复杂,最重要的是能够按照自个的习惯,需求,量身定制,另外还要满足自个DIYer(自个做,自个作的心。
<hr/>第一章 服务器架设及系统选择
一般家居环境对服务器的运力要求并不高,这也给了选择很大的空间。如果已有24小时运行的系统,不论是windows,linux,macos,甚至旧安卓手机,电视机盒子,nas系统,openwrt(自定路由器系统)都可以成为家居智能服务器,或者2-300元买个树莓派也是很好的选择。
本着废物利用,环保为先的精神,我自个就选择了一台已有近20年历史的Sapphire v8做我的服务器,他同时还担任着我的dns、ftp、daap、vpn、ss等多项任务,目前的cpu平均使用率也只有4%。。。
就是它了,功耗低,发热小,风扇几乎无声,同时还可以HDMI接驳电视机,光纤输出环绕音效,6个USB接口,总之是非常实用。
硬件有了,接下来就是软件,软件方面我用过不少,最后选择了Homeassistant,开源,更新及时,兼容好,可定制程度非常高,且能够搭载Homebridge,桥接到iOS下的“家庭” app(装X很重要,都说苹果的homekit贵,这下全解决)。
那么他本身的界面是指什么呢,高度定制之后也很好看,我觉得比“家庭” app拥有更高的颜值,当然这需要好的审美,这似乎离我有点远。。。。或是上图吧
可定制程度非常高。
<hr/>第二章 少少装置,正式开启你的智能家居之旅
导读:简单几个装置,让家里老设备焕发新活力——普通遥控器的转化
1、小度智能音箱;2、博联 Rm mini;3、博联 Rm pro
如果单单想体验一下语音控制家里的电视机、空调、电视盒子等可以红外遥控的设备,那么直接买一台百度新出的小度智能音箱1S,按照官方说明已经可以简单体验,但这明显不是我的初衷,我要做的是高度可定制,极致个性化的体验。所以在选用设备上,也要同时考虑后期的应用。
上面三个设备,只要选两个就可以开启入门家居智能体验,甚至都不需要我前面说的服务器和系统,而价格也是极其亲民,1、小度智能音箱,盛惠69元,2、博联 rm mini 69元,有活动时还会更便宜。3、博联 Rm pro是因为带了射频,所以比rm mini要贵一些,不过我个人就推荐直接买Rm pro,因为后期有些设备用射频会更环保和安全。所以我推荐选择1和3 。迈步入门:
1、小度开箱及配置网络:
看说明书就好了,很简单
需要下载一台“小度”app
2、Rm pro (或rm mini)配置:
下载“智慧星”,注册账号
绑定RMpro或Rm mini 顺便在里面根据型号添加电器 然后回到 小度app 选择 智能家居 ->右上角 “+” 登陆刚才的“智慧星”账号
不论是在“智慧星”或是绑定之后在“小度”app中都可以增加电器,电视机、空调、电视盒子等。如果在列表中找不到家里电器所对应的型号,还可以使用学习功能,将遥控器按钮对应学习到app中使用。
到这里,已经可以用嘴巴喊“小度小度,打开电视机”,“小度小度,空调温度25度”,“小度小度,我要听Eason的歌”等操作。手机上进入小度app或者“智慧星”app也都可以进行控制,而且支持远程,“智慧星”app还支持一定程度的一键场景,将多个设备的多个动作集合到一台按钮中(这只是省事,离智能真的很远很远...)。
上图中的灯,我使用射频开关控制面板,也就是之前提到Rmpro拥有的功能,市场上有wifi面板或控件可供选择,不过我个人就倾向于使用射频控制,为啥呢,因为我们生活的环境中已经有太多的Wi-Fi,且后期有些DIY设备必须使用Wi-Fi,如果每盏灯再增加一台Wi-Fi,而且灯或者开关往往离我们睡觉的地方并不远,无线污染会非常严重,不利环保,不利健康。不选红外控制的原因也很简单,不能穿墙。到这里,已经算是迈步入门了,附加福利是小度还能帮你放点音乐,上个闹钟什么的,功能也算不错。而且后期会成为家居智能系统的嘴巴,通过它我们将可以设定一系列的语音输出功能。将小度换成Google Home,或者是小米小爱,阿里天猫精灵都是可以的,设定用法大同小异。
<hr/>第三章 便宜又好用,定制空间大的好装置
导读:
简单装置,改造普通电器,布局传感器
1、sonoff basic;2、esp8266-01(s)
本章开始,需要基础动手能力,烙铁一套、导线若干、以及其他形色传感器,某宝全部有售,且价格极其平民。
智能控制离不开各种传感器和控制单元,而上面这两个就是最基本却也是最实用,也基本是无所不能的两个小装置。其主要工作芯片都是Esp8266,不过Sonoff是经过一定定制,可以直接接入220V市电,并直接控制一路开关。而Esp8266-01(s)则是体积非常小巧,可以内嵌入任何地方。
Sonoff可以直接接入电路使用,本身也有app(易微联)可以使用,不过我们说了是要定制,那么自然不能满足于原有的功能限制,那么需要一台可以刷入固件(就是驱动这些小装置的内部系统)的装置
是不是土豪金不关键,关键就是这个USB转TTL,反正没几个钱,直接买这个最省事,肯定满足。
Sonoff开关拆开,取出电路板是右边这个样子的。
将两个设备按照连线的接法用杜邦线链接,在链接之前最好的做法是在Sonoff线路板上的那一排5个洞焊上排针,省事调试,也为以后接入传感器留好接口。
刷固件的软件环境,Windows,Macos,Linux都有相应工具,不过Linux下全部都是命令行,会用的省事,不会用的晕圈。所以这里以windows为例吧(自个其实是用Macos的)。
下载最新刷固件工具:
- ESPEasy_mega-20200515.zip
https://github.com/letscontrolit/ESPEasy/releases/download/mega-20200515/ESPEasy_mega-20200515.zip
https://github.com/arendst/Tasmota/releases/download/v8.3.1/tasmota.bin第一台是软件,解压后放到一台文件夹,路径中不能有中文,第二个是要刷进去的固件,放到软件所在的文件夹,exe文件所在的同一台目录即可。
之后,把已经接好的sonoff的USB插入电脑usb口,注意,插入的时候,要先按住sonoff上那个黑色的长柱按钮,usb插入,3-5秒后松开长柱按钮,这时就进入强刷机状态了。双击Flashesp8266.exe,选择com3(如果失败就再试其他com口,firmware选择tasmota.bin,剩下的就是等它运行完成。这是最简单的强刷机过程,不能更简单。刷完之后,会在无线中发现一台以tasmota,或者sonoff开头的wifi节点(不同的固件不同的名称,总之就是新出来的又没密码的那个),电脑链接上去,打开网页192.168.4.1,就看到了tasmota的管理页面了。
打开界面1,没接传感器的话,上面是没有那些温度湿度的,点Configuration->Configuration Wifi,就是后面这个页面,点击Scan for wifi networks,或者自个填入SSID(无线网络名称),Password(密码)。一共可以填入两组,链接的时候会自动扫描链接任意一组。设置完成后,它会链接网络。电脑也会从刚才链接的那个热点断开,重新链接你本来的网络。
这时,你要从你的路由器设定页面找到sonoff的ip地址,不同的路由器方法不同,大部分的路由器都是192.168.1.1。找到ip地址之后,就和之前一样了,或是登录sonoff管理页面,然后点Firmware Upgrade->Start upgrade,等待它升级并重新启动。
一台可以接入各种传感器,控制电源的基础设备就准备好了。接下来就是接入传感器,比如温湿度传感,我接了两个,人体感应(可以知道是否有人),光线传感器(可以知道环境光线强度)等等等等。
传感器的VCC与GND对应接在电路板VCC和GND,可以接多个。传感器的数据端(out)或其他接到RX(Gpio1)、TX(Gpio3)、Gpio14上。
根据所接入传感器型号,在设置页面选择Configuration->Configure Module
我接入了2个温湿度传感器,分别在RX、TX。一台人体感应在GPIO14,人体感应实际是一台通断状态,所以使用Switch2来反馈,在GPIO4选择Relay2,这样在管理页就会显示出第二个开关。
将它接入某个合适的地方,来发挥作用,比如放在卫生间。将开关接入顶灯,温湿度传感器和人体传感器安装在适合的位置,就可以设定联动:晚上的时候人来灯亮,人走灯灭。我自个则是联动了抽湿机,灯,换气扇,空调等,可以做到湿度高于80%则自动抽湿,温度高于28度则开启空调降温,晚上人来灯亮,人走灯灭;家里没人,温度高于28度也不会启动空调等等。总之按照个人喜好,随意设定。
Esp8266本质上与sonoff一样,只不过,它没有电压转换,需要3.3v电源,以及可用的GPIO少一些,但是作为一般的传感器节点也足够使用了。我们目前有了小度可以说话,RMpro可以遥控空调、电视机,Sonoff可以检测温度、湿度,以及判断是否有人,并控制一盏灯。这里要插播一句,如果有条件的或是要用Google home,接入IFTTT之后,可以衍生出很多实用的功能,将设备联动以及语音控制无限拓展。接入Google和IFTTT需要翻墙,请自行百度。
下一篇开始安装调试Homeassistant服务器,并把这些设备接入,桥接到“家庭”app,开始个性化定制。
ps:对了,买个摄像头,支持onvif或者rtsp的最好,是否支持直接询问卖家。一并可以接入,试一试酷炫的人脸识别。
<hr/>第四章 Homeassistant系统安装及基础设定
导读:Homeassistant作为目前开源类最完整的智能设备整合平台,以其更新快、兼容广、可定制程度高、开发人员众多为主要特征。
安装文,总是很枯燥,所以挤宅就成了挤宅
系统安装分为两部分:
1、操作系统,这里推荐安装Ubuntu 18.04
2、Hassio(homeassistant的一种封装,后期维护升级省事,自带Addon store,可以便利安装多种插件)
Ubuntu作为图形界面的Linux受到很多爱好者欢迎,本章的安装将从Ubuntu开始。
Ubuntu 18.04
下载地址: https://www.ubuntu-tw.org/modules/tinyd0/
建议下载18.04版本,稳定可靠。
具体安装过程与一般操作系统无异,将镜像刻录光盘,或者将映像写入硬盘(U盘)安装等,具体操作流程可参考Ubuntu官方图文教程,安装时记得选择安装OpenSSH server,这样便于以后远程管理。
http://wiki.ubuntu-tw.org/index.php?title=UbuntuInstall
Hassio 安装
进入Ubuntu系统后,找到terminal,打开是一台命令行界面,不要怕,命令都是现成的,拷贝粘贴即可。
sudo -i
add-apt-repository universe
apt-get update
apt-get install -y apparmor-utils apt-transport-https avahi-daemon ca-certificates curl dbus jq network-manager socat software-properties-common
curl -sSL https://get.docker.com | sh
systemctl disable ModemManager
apt-get purge modemmanager
curl -sL &#34;https://raw.githubusercontent.com/home-assistant/hassio-installer/master/hassio_install.sh&#34; | bash -s过程中有下载大约1G的资料,所以保持耐心,很多资料来自海外网站,可以使用加速器。
Homeassistant的基础设定
完成后,打开浏览器访问 http://hassio.local:8123 就可以看到homeassistant的管理页面。其他电脑可以通过访问Ubuntu所在电脑的ip地址加端口号来访问:http://IP地址:8123
如果你的局域网段是在192.168.1.*,默认初始界面是无需登录的,可以直接进入,然后设定新的用户名,密码等,如果有外网访问的需求,建议开启两步验证。两步验证需要验证程序,Google ,微软都有免费提供,比如“Authenticator”。
为了便于编辑修改Homeassistant的设定文件,进入管理界面的Supervisor->Add-on store
安装红框内的3个插件,Let&#39;s Encrypt是用来启用https加密链接的,一方面保障信息传输安全,后期有些功能也需要https加密链接。Mosqutto broker是MQTT服务器,用来接收发送MQTT信息,MQTT是一台应用信息传输的标准协议,我们用它来接受和发送ESP8266装置(包括Sonoff)的传感器、开关状态等信息。File editor是配置文件编辑插件,安装之后,可以直接在管理页面编辑配置文件,而无需SSH链接服务器等一系列繁琐的操作。
最先用到的就是File editor,安装之后,打开Start on boot(开机自启)Auto update(自动升级)Show in sidebar(侧边栏显示)然后点击Start。
点击OPEN WEB UI,或者从侧边栏选择File editor都会进入文件编辑界面,左上有个文件夹图标,点击就会出现权限允许范围内的文件及子文件夹列表。在config文件夹下找到configuration.yaml,这个文件就是以后要多次用到的设定文件,homeassistant的配置都会在这里修改。
(注意到Node-RED没,这是一台图形化编程界面,也是在Add-on store安装,和File editor一样的设定,开机自启,升级,侧边栏。他的功能很强大,与它后会有期)
继续前文,打开configuration.yaml之后,在右侧编辑区就可以写入修改设定内容了。最初的文件里有什么我已经不记得了,也不想再重做一遍。没关系啦,只要该有的都有了就可以了,本着多了不嫌多,少了就不可以的原则,我把需要放进去的,一台个列出来。
顶格的“Python_script:、default_config:、wake_on_lan:、map:、notify:、http:、homekit:、tts:”这些都是组件,很多不需要细节配置,只需要声明,就像上图直接抄到configuration.yaml就可以了。
server_port是指电脑访问端口,也就是之前提到http://[服务器IP地址]:8321中的8321,可以改成9321或任意一台端口。
base_url则可以制定成互联网域名,或者局域网ip地址,如果启用了https,则声明为https的绑定网址。
ssl_certificate、ssl_key是相关加密文件,还没有启用https,先直接删掉。以后再具体介绍。
ip_ban用来设定是否组织特定IP地址访问,结合login_attempts_threshold可以设定某个ip地址尝试访问失败几次后被阻止。这个是一台安全策略,防止暴力解密。
homekit就是用来桥接苹果是手机IOS系统“家庭”app的组件,启用后,就可以在“家庭”app中发现绝大部分在homeassistant中设定的装置。(homekit后面的双箭头是表示列表收起了,目前各位只需要输入&#34;homekit:&#34;即可)
- tts需要配置:
- platform: google_translate 可以直接写入。
- platform: baidu 需要在百度平台设定,后期再详细介绍。
(tts顶格,配置内容另起一行空两格,“-”之后空一格,“:”之后空一格)
- smartir 需要安装定制组件,该组件是一众热心人士编写的用来省事控制空调的红外遥控组件,下载后放入服务器目录“/usr/share/hassio/homeassistant/custom_components”
链接: https://pan.baidu.com/s/1aPgjaiujEmGcQSnEDg_WcA 提取码: 7mxz
每一次的configuration.yaml修改都需要保存,并重启服务
到此,基础的设置已经了解了,下篇讲述如何将传感器,开关控件等添加到设置文件中,并进行自动化设定。需要准备以下信息:
1、sonoff装置的IP地址,及设置详情
2、空调、电视机的牌子及型号(如支持网络,则要同时准备IP地址以及MAC地址)
3、如有其它装置要接入,同样需要IP地址及MAC地址等。
4、基本的英文读写能力。。。。没办法,写程序总是离不开英语。
不过也不用担心,即便不认识英文,也一样可以配置。抄抄抄
<hr/>第五章 智能感知的基础——传感器
导读:
传感器就是触觉、视觉、听觉、嗅觉,总之就是感觉。有了它才有了“自觉”
上回说到,要接入传感器,这里就给大家列出了4个常用的小模块,在智能家居中应用最多的是人体、温湿度、光线,烟雾模块通常都是在厨房应用较多。人体感应就像视觉,可以知道附近是否有活的生物经过,不止人,还有不是人
温湿度顾名思义啦,光线模块则可以判断环境光线的强度。
焊接传感器
用电烙铁将上述接线接好,也可以使用杜邦线加排针的方式更灵活,可以随意更换传感器。
先插播解释下这类模块和单片机的一些基本概念:RX、TX 串流通讯端口,RX是写入(Gpio03),TX是读取(Gpio01),之前写入固件就是通过这两个端口。
GPIO 普通通讯端口,可以根据实际需要,通过固件内的驱动程序和用户的定义来实现不同的数据接收。
不同型号和款式的模块针脚定义可能不同,注意观察,总之VCC对VCC(正极)GND对GND(负极),OUT等其他数据输出脚对应RX、TX、GPIO,需要留意的是RX和TX本来是通讯口,所以开机会有几次高低电位变化,最好就不要接开关类,接温湿度,光线等数字输出是没有问题的。所以上图中将人体传感接到了GPIO14上。接好之后,就可以上电了,至于传感器放哪里,线需要多长,那就得要自个思考了。
接入Homeassistant
先做两个假设:
1、homeassistant服务器的IP地址 192.168.1.100
2、sonoff 的IP地址 192.168.1.101
首先去homeassistant的管理页,侧边栏选择Supervisor ,如果有看我之前的内容,那么这里已经安装了Mosquitto broker
在设置中,将“asd”该为你自个的用户名,“123456”该为你的密码,其他都不用动,回到info页,点Start ,MQTT服务器就开始等待信息流传入了。
再到sonoff管理页 http://192.168.1.101,选择configuration->Configure MQTT
设定好之后,点Save保存 ,再回到Configuration->Configure Module.
按照图片设定,就完成了温湿度(DHT11)和人体感应(Switch2)的设置。
配置Configuration.yaml
浏览器打开http://192.168.1.100:8123,选择File editor,找到configuration.yaml,就可以在右侧编辑了。
写到Configruation.yaml里的格式如上图。
附上代码:
##温湿度设定:
sensor:
- platform: mqtt
name: &#34;temp_sonoff2&#34;
state_topic: &#34;tele/sonoff2/SENSOR&#34;
value_template: &#34;{{ value_json[&#39;DHT11&#39;].Temperature }}&#34;
unit_of_measurement: &#34;°C&#34;
- platform: mqtt
name: &#34;humi_sonoff2&#34;
state_topic: &#34;tele/sonoff2/SENSOR&#34;
value_template: &#34;{{ value_json[&#39;DHT11&#39;].Humidity }}&#34;
unit_of_measurement: &#34;%&#34;
##人体感应设定:
binary_sensor:
- platform: mqtt
name: &#34;PIR2&#34;
qos: 0
state_topic: &#34;stat/sonoff2/POWER2&#34;
payload_on: &#34;ON&#34;
payload_off: &#34;OFF&#34;
device_class: motion
scan_interval: 6000
##开关设定:
switch:
- platform: mqtt
name: &#34;sonoff2&#34;
state_topic: &#34;stat/sonoff2/POWER1&#34;
command_topic: &#34;cmnd/sonoff2/POWER1&#34;
qos: 1
payload_on: &#34;ON&#34;
payload_off: &#34;OFF&#34;
retain: false设定完成之后,保存,并重新启动服务。
侧边栏Configuration->Server Controls 拉至最底,RESTART
配置概览面板
概览面板就是把所有的开关,传感器数据等集中在一起省事操作管理的版面。
保存后就成了一台“view”也就是一台概览页面,点击“+”来添加各种类型的控件,我选择了Entities作为样板。
至此,我们已经完成了整个Homeassistant的设定流程。接下来就可以按照这样的方式,添加各种需要的开关控制以及传感器。
<hr/>第六章 无限可能,神其降临——Node-RED
导读:隆重推出Node-RED,可视化编程神器。
既然是人工智能,人自然是主导,然而面对一行又一行的代码,学习成本却非常高昂,不是金钱,是时间。所以近年来越来越多的可视化编程就成了救世主,在很大程度上降低了门槛,拓展了使用。
Node-red作为一款IBM开发的可视化编程工具,通过拖拽部件来实现逻辑化过程,链接设备硬件,WebAPI,功能函数,以及各类在线服务。在这里我们主要面向Homeassistant,通过它丰富的部件来拓展功能和定制个性化的流程(场景),而不是简单的自动化模块。
1、安装
采用Hassio安装的最大好处就是这些插件的安装几乎0难度,只需要在Homeassistant管理页面侧边栏选择Supervisor->Add-on store 点击右上角的三个点,选择Repositories,添加源https://addons.community,然后选择Close。就可以在Add-on store中找到Node-RED。
点击Install,等待一小会儿就安装完毕。在Configuration中设置一下第一项(credential_secret),这个相当于一台密码,用来加密你的Node,随便写一台就好,无需引号。
再点击START。就已经可以使用了,记得打开Start on boot ,Auto update,Show in sidebar。
2、写下第一台Node
还记得之前设定中安装的人体感应和开关吗,第一台Node简单点:人来灯亮,人走2分钟后灯灭。
这个流程需要用到3个部件:
负责监视指定的实体状态,比如这里要用到的人体感应
调用系统服务,比如这里要用的打开开关
设定延时,控制下一台动作执行前需要等待的时间。
这个部件有个比较好用的地方,就是当有新的消息进来,它会自动重置,也就是重新开始计时,那么用到我们的Node里就意味着,只要感应到有人,那么2分钟的计时器就会重置,而不会出现人待了2分钟,灯就灭了。
逻辑思路:
检测到有人→开灯
|——>是否离开——是→延时→关灯
↑否—— |
双击部件会弹出该部件的配置页,每个部件配置页不同,但大致上都是包括例如:Name(命名)、Entity ID(实体ID)、State(状态)、Domain(域)、service(服务)、Data(编码)等项。
配置好每一台部件之后,就可以部署了。点击右上角红色部署按钮。
第一台Node已经完成了,走近人体感应测试一下,灯是否亮起,离开之后等待2分钟,看是否灯会熄灭。
Node的每个部件都有说明,如果能够看得懂一些英文的话,可以通过查看说明掌握大多数部件的用法,通过不断扩展就可以创造出各种应用。Node只是工具,更重要的是你的大脑 | <hr/>第七章 有话说出来
——让HomeAssistant说话
导读: “没声音,再好的戏也出不来”,这是谁做的广告来的?做啥的广告来的?不重要了,反正说的还挺对。
让设备说话有两种方式,一种是真的说话,通过外放设备播放声音;另一种是Notification“通知”,通知可以发送到手机,发送到即时通讯软件,发送到电视机等等。
1、推送“通知”
比起说话,“通知”简单一些,也很实用。系统内建了Notify,我们要做的就是加载它,并做好规则。在Configuration.yaml中,加入notify:
如果要在电视机上接收“通知”,需要把电视机接入HA(homeassistant),以LG电视机为例:
电视机的IP需要设置为固定IP,并且记录它的mac地址,按照上面格式一并写入。重新启动HA。
在上次Node基础上,增加一台Call service部件,链接好。(我这里比昨天多加了一台判断是否已打开(not on)的模块来避免重复发送开关指令。
以LG电视机为例,部署之后就可以测试了,是不是非常简单。其他设备也是一样的,手机商店搜索Home assistant安装,并登录HA之后,就可以在Node部件的Service中找到对应的手机名字,改为手机,“通知”就会推送到手机。如果手机没有收到,那么到HA管理页->侧边栏->配置->集成->“+”,有两个需要添加,1、Home Assistant iOS,2、Mobile APP。添加后就不会有问题了。
2、说话
最开始购买入门装置时介绍过,购买一台小度或者是Google home(mini),这样就可以作为外放设备,用来说话。Google home的添加和刚才的Home Assistant iOS一样,在同样的地方,添加即可。小度的话需要在Configuration.yaml中加载一台组件。
而在一开始我们也已经添加了tts引擎,如果没有,那么记得也写进去。百度的tts引擎需要申请一下:
申请百度账号,进入https://ai.baidu.com/tech/speech/tts 页面选择立即使用,创建应用,按照说明即可,选项全部默认。之后就会看到app id,api key, secret key,对应填好。
保存并重新启动HA。
剩下的事情和“通知”差不多了,都是采用Node-red来操作。只不过就是Domain换成了tts,service换成了语音引擎,Entity Id写入你接入的设备。
Data部分同样是
{&#34;message&#34;: &#34;你想要说的话&#34;}百度支持中英文,不过有时候会说的比较别扭,Google也支持中英文,建议在Data中加入&#34;language&#34;:&#34;zh-cn&#34;(中文)&#34;en-us&#34;(英文),发音更纯正准确。
{&#34;message&#34;: &#34;你想要说的话&#34;,&#34;language&#34;: &#34;zh-cn&#34;}如果你能够使用Google的服务,那么加上IFTTT可以拓展出好多好多的实用功能,比如将通知转发至即时通讯软件Line(免费),比如定制Google的语音命令等等。
<hr/>第八章 说有用的话,做有用的事 ——Notify的进阶
导读:话说对了才有用,没用的叫啰嗦;事做对了才有用,不然叫磨洋工。
什么叫有用实在是见仁见智,话说出来有人爱听,事做出来有人开心,就够了。
就说我吧,出门下楼,下雨了,没带伞;大太阳,没戴帽子墨镜,只好心里一万个不情愿。所以第一台要做的就是出门提醒,尤其是下雨这件事情实在是。。。。
编程嘛,总是要有逻辑:
开门→检测天气预报→条件分流→播放提醒 老规矩,先增加天气预报的功能到Homeassistant中,系统自带了现成的英文天气预报,HA管理页->侧边栏->配置->集成->“+”,Meteorologisk institutt (Met.no) 跳出来的对话框中填好名字,和经纬度就可以了,默认的经纬度就是你当前的位置。如果需要选定地点的经纬度,1、你可以上网去找,2、侧边栏->配置->地点->“+” 在跳出的地图上选择你要的地方,就会有对应的经纬度显示出来。
图上是个有意思的地方,当然不是你的经纬度,如果是家里的话,半径小一点,100左右就可以了。
Met.no设定好之后,就可以到HA管理页添加天气预报卡片:
看起来或是蛮好看的。
既然说了是进阶,那么就要用上函数和变量,DIY的时候总得要有所追求,不然就没得提高了不是。上Node-RED
今天用五个部件,三个新部件
current_state
在流程中检测某个实体(entity_id)的当前状态。
switch
是一台分流器,通过设定不同的关键字来选择或者过滤输出,每一台输出点都对应一台条件。
函数
函数是个很有用的部件,在属性页里可以写很多东西,有点类似于语言编程了。进阶嘛,总得有点小难度。
event:state不多讲,和之前一样的设定方式,entity_id设定为Door(门),state设定为on,就是开门就输出一条消息。
call service不多讲,这里设定为tts 到 google home。注意的是Data留空,用函数来控制。
current_state 如其名,就是检测当前状态,并传递到下一台部件。State留空,就是不管是指什么状态都在同一台输出节点。
switch也不难,按照天气状态来添加分流条件。多个条件通过属性页左下的添加按钮来增加。
函数来了,属性页打开基本啥都没有,想起一句歌词“空,空,空,空如也”。就像赚钱,越是啥都不干的越赚钱。这东西也一样,空,但很牛X。
msg.payload 负责告诉下一台接收部件消息的来源;变量内容则是要传到下一台部件的具体内容,这里我们要传递到下一台流程的Data(在call service中留空了),所以变量名称就是&#34;data&#34;: ,call service是TTS,所以data的格式按照tts的需求去写,&#34;message&#34;、&#34;Language&#34;。变量中语句多于一行,记得加“,”分割,最后一行不需要(初学之坑)。
按照上图部署之后,当门打开时,如果天气预报下雨,HA就会通过Google home说话提醒带伞。
既然switch设定了5个输出口,那另外四个如何用呢,可以通过设定每个不同的tts home来对应,不过这样的话还要函数干甚呢,所以函数不是这样用的。
函数的进阶使用 Switch的属性也有一项msg.payload,也就是说switch的输出消息也是通过msg.payload来传递,那么在函数中就可以引用啦。
初学的时候,可以把需要带伞的,和只是需要报一下天气的分开,这个时候switch就有用啦,如果再进阶,函数中可以直接使用if else来判断,那么switch都不需要了。。。。
#附上代码:
var mesg = &#34;&#34;
var laug = &#34;en-us&#34;
if (msg.payload == &#34;rainy&#34;)
{
mesg = &#34;take a umbrella.&#34;
}
else
if (msg.payload == &#34;tornad&#34;)
{
mesg = &#34;体重不够,不要出门&#34;,
laug = &#34;zh-cn&#34;
}
else
if (msg.payload == &#34;hail&#34;)
{
mesg = &#34;请自带铁锅。&#34;,
laug = &#34;zh-cn&#34;
}
msg.payload =
{
&#34;data&#34;:
{
&#34;message&#34;: &#34;outside is &#34; + msg.payload + mesg,
&#34;language&#34;: laug
}
}
return msg;函数的使用同样见仁见智,会成为HA编程中最有趣的部分,比起添加多个部件来达到同样的效果,函数更能够把流程精简下来。
<hr/>第九章 IFTTT的使用
导读:
IFTTT是一台第三方平台,可以很省事的联动很多网络服务,可以和Google Assistant进行互动,用来自定义语音指令,个性化定制Google home可以说是非常省事,神器!
本来想直接写定时任务,然而发现篇幅太长,只好分开先写IFTTT,所以这里的IFTTT是围绕如何一步步让Google home可以设定定时任务,要知道,这可是各家智能音箱目前都没有的功能。比如设定下午5点打开空调,7点打开电视机。
IFTTT
首先要創建帳號,可以連結Google 或Facebook 帳號登入,也可以用Email 創一個新的。
插播一下HA里面的相关设定:在IFTTT中搜索webhook,并链接,有一串api key需要记录下来,并放入configuration.yaml。api key就是显示的一串网址https://maker.ifttt.com/use/后面的部分。
记得重启HA。
链接你的Google Assistant账号,Line账号。还有其他许多服务都可以接入,这里我们只先说这几个。
回到HA,在配置中添加IFTTT集成,跟着说明走就好了。配置过程中会有一串网址,要记录下来,向HA发送网络事件的时候需要。
设定Google指令,登录IFTTT,Create,会弹出如下画面。
点击This会进入服务选择,搜索Google Assistant,并点击进入,选择模式,因为我们要设定某个时间做某件事情,所以是数字、文字都需要,选择最后一台
填上自个想要如何表达,我的设定是
这里有个坑,当设定的$(text)后面连着其他单词,google经常会判定他们都是需要传送的Text,所以也给后期增加了一些啰嗦的处理。如果想要简单,可以直接设置成 set $ # ,不过语法上就有些别扭,或是那句话,强迫症不能忍。
其实google目前已经支持中文了,所以你可以直接说中文,他会翻译过来对应你设定的语音指令,比如这里就可以用中文告诉Google助理“设定空调5点打开”
THIS设定完成之后就是THAT,搜索Webhook,选择Make a web request
URL填之前设定IFTTT集成时记录下来的那串地址,method写get或是post无所谓,content默认或者选json(我这里的body用的是json格式,其实不需要写这么多,写多了只是为了后期有很多不同的event时省事调用)。最重要的就是TextField和NumberField,点击Add ingredient就可以添加上去。默认的后面会有空格(大大大大大坑),记得删掉。创建之后,当向Google home按照上面的语法发出指令时,google就会向HA传递一台事件,HA就可以收到body部分的信息,进而可以按照需要去设定啦。
到这里关于webhook和google assistant的ifttt就已经算是设定完了,其他用法以后陆续介绍。
第十章 自建HomeAssistant定时任务——Google都没做到的事
导读:
智能音箱可以设定闹钟,但却不可以定时执行任务,今天就来搞定它。
不知道是不想做或是不肯做或是不愿做或是挤牙膏,总之目前的智能音箱都是只能设定闹钟,却不能够在设定的时间执行特定的操作任务。之前实现的时候有个方案,借助日历(比如Google日历),例如“hi,Google,设定18:00打开电视机”,那么就会在Google日历的18:00设定一条日历,并在日历提醒时执行打开电视机的任务。执行后发现因为Node-RED和Google日历执行时有延迟,总是不能够很准确的在设定的时间执行任务(多数会延迟3-10分钟),强迫症自然是不能忍。所以就执行第二套方案,在自个的服务器上面做计时器定时,写到头麻到不想写的时候,突然找到一台部件,可以协助实现,开心!
或是以Google home为例,可以实现语音设定“hi,Google,设定1730打开空调”,并且使用Notify通知设定结果,支持单个删除,全部删除,修改等功能。实现这个功可以用到几个好东西,除Node-RED外,重磅推出IFTTT,Line即时通讯。
IFTTT
IFTTT是一台第三方平台,可以很省事的联动很多网络服务,可以和Google Assistant进行互动,用来自定义语音指令,个性化定制Google home可以说是非常省事,神器!
LINE
LINE就是一台即时通讯软件,类似于wechat、whatsapp,只不过它可以直接接入IFTTT,用来接收推送通知省事快捷,且无推送信息条数限制,强烈建议安装使用。
准备工作
1、Node-RED
需要添加一台组件,在Node-RED的菜单中选择设置→安装,搜索corn-plus,并安装它。
2、IFTTT首先要創建帳號,可以連結Google 或Facebook 帳號登入,也可以用Email 創一個新的。搜索webhook,并链接,有一串api key需要记录下来,并放入configuration.yaml。api key就是显示的一串网址https://maker.ifttt.com/use/后面的部分。
记得重启HA。
并链接你的Google Assistant账号,Line账号,具体在右上角点击头像,选择My services 。还有其他许多服务都可以接入,这里我们只先说这两个。
回到HA,在配置中添加IFTTT集成,跟着说明走就好了。
开始设定
老规矩先说逻辑
Google指令→传入HA→Node-RED处理→执行
Node-RED处理包括命令解析,时间设定,任务安排,以及修改、删除,检查当前设定等。1、先设定Google指令,通过IFTTT,上一篇已叙,不再赘述。
如果跟足上篇,正好就到了Google发送事件至HA的环节。
2、HA收到事件的处理。
HA本身可以接收webhook发来的事件,上一篇也同样有叙述,透过将有关信息发送到一串网络地址,该信息就会被HA所接收,并作为一台“事件”,从而可以用来触发一系列动作,并将其所携带的信息作为处理数据。
在Node-RED中使用events:all模块来监测事件情况,配置如下:
IFTTT发来的事件在HA中使用ifttt_webhook_received来定义。
插播Debug
插播一下Node-RED中debug的使用,通过debug可以及时了解收到的信息内容,json格式,以及产生错误的可能原因。
配置
通常我会选择完整咨讯。将他链接到你希望了解输出信息的接口上,就可以了,他的存在不会影响你的其他流程,只会多出一台分支来收集所有的输出信息,并显示在右侧边栏的debug栏。
图示1、2、3打开右侧边栏i是infomation窗口,中间的瓢虫就是debug,后面的是dashboard。
看到payload没,他就是对应msg.payload的,同理event_type对应的就是msg.event_type。而再下一级的用法是msg.payload.time,以此类推。
我本身使用了很多IFTTT的事件触发,所以先要用switch模块来分流。
分流之后的第一台输出口就是目前要用到的定时任务,
这是我们在IFTTT中设定的事件所携带的信息,第一台event对应了刚才的分流设定,entity_id对应Google中的文字部分,time对应数字部分,command是为了省事添加删除等功能的附加字段,state这里为on表示这是设定让设备打开的命令,同理在IFTTT中设定off的命令,并把对应的state改为off,就完成了添加turn off的定时功能。由于这个Noede-RED的流程可以说是相当复杂,所以这里直接贴出代码,大家可以使用汇入功能直接汇入使用。
代码在同日推送的另一篇图文Node-RED定时任务代码中,或者直接下载。链接: https://pan.baidu.com/s/1-74Od_TnE_bvQd3AaoEoxQ 提取码: hwvz
有任何疑问或者交流讨论,欢迎随时留言
<hr/>十一章 废旧利用,旧手机电视盒子等安装Homeassistant服务
导读
旧手机,电视盒子,路由器都可以成为homeassistant的服务器
这年头谁没几个旧手机,谁家没个安卓的电视盒子,谁家没个配置还不错的路由器。本着环保、折腾的理念,心里想着“高手”的人设。其实就是为了省钱而已。言归正传,家用HA所要求的系统性能并不高,这个在之前的服务器架设篇已经说过,所以旧手机是足够应付的,存储空间也完全可以几十块买个存储卡解决,所以从实用性上来讲,比单独布置一台服务器划算的多。
安装Linux系统环
手机最好Root,Root这种事情就不多讲了,旧手机的root软件一大堆,root起来也很省事。不root也是可以的,听起来像不像葵花宝典。
root了就下载商店里下载Linux Deploy,这个是个linux的模拟器。不root就下载Termux ,Termux不需要Root,就以它为例吧。第一次启动比较慢,是在安装一些环境,耐心点等吧。启动之后还会继续安装和更新一些linux的工具,不要退出,不要乱搞它,继续等。
等到出现$符号,就说明可以操作了,linux系统常用操作apt update,apt upgrade,这两个命令依次输入,这个是linux系统更新库文件的常规命令,没事就可以执行一下,保持文件最新。
准备Python环境
由于每个手机的配置不一样,cpu也不一定是那个型号,所以需要编译环境,
安装编译器clang
apt install clang安装文本编辑软件nano
apt install nano安装Python
apt install python python-dev有时候某些库或者插件还可能会使用Python 2,顺手安装上,免得将来报错不知道为啥
apt install python2 python2-dev
pip install BeautifulSoup4 requests如果安装过程中报错,可能是pip不够新,更新一下,另外大小写要注意。
pip install --upgrade pip安装过程中如果需要确认的,一律按Y回车。
安装一些依赖
apt install libxml2-dev libxslt-dev libcrypt-dev openssl-dev libffi-devpip install lxml后期还有些ffmpeg,daapd等等一些依赖,可以需要的时候再安装。
安装homeassistant
前面的环境都准备玩了,就是正式安装homeassistant了,
pip install homeassistant等。等。。等。。。等。。。。安装完就可以启动了,命令行输入hass,然后在电脑里打开浏览器输入:http://手机IP:8123是不是打开了,到这里“破”手机安装homeassistant就算完成啦,剩下的就和单独的服务器一样啦,只是不要手机断电,不要息屏(差点忘了,息屏会断wifi,所以手机记得设置不息屏,或者安装一些软件设置息屏不关wifi),至于手机嘛,常插电源找个地方放这就好了,好看点就买个充电手机座给它吧。
其他东西
手机屏幕太小,操作不省事,可以考虑安装openssh
apt install openssh很多linux资源都在国外,如果报错,可能是连不上服务器,记得科学上网。
如果安装过程中报错是opensslv.h,安装opensshl-dev
安装MQTT
apt install mosquitto安装Node-RED先安装依赖组件
apt-get install -y nodejs再安装
npm install -g node-red这样安装的Node-RED访问地址是:手机IP地址:1880 ,与之前的hassio有些不同,使用上倒是没什么太多区别。
系统安装见仁见智,不同手机不同平台又不一定完全一样,如果有问题,欢迎关注留言讨论咨询。
<hr/>第十二章 如何DIY的漂亮
导读:
说了好久的DIY,也做了好多个东东出来,外观一直是个困扰。如何做,才能更和谐融洽,今天就聊一聊。
我自个DIY用的比較多的,或是sonoff basic这个产品,就以它为例吧。
刚开始做的东西是这样的
然后外壳上掏个洞,把线往外一拉,壳子一套,完事。装到天花里是这样的特立独行,吊儿郎当。。。
这个是DIYer的通病,既然已经自个动手了,就理所应当的觉得,肯定不能是封装模块化啦,肯定是要这样那样“肉酸”的啦,然后就会停留在“这可是我自个做的,还想咋样的”自我陶醉及安慰中,对着那些个横七竖八,拖拖拉拉的装置假装很满意。家毕竟是天天都要待的地方,所以或是要上点心的,所以我就把我自个的装置都改进了一下。
这样明显看起来好多了,尤其是稍稍远一点看,简直就是原装嘛。
需要一些装备
1、手电钻,某宝上几十块一台,我自个一直使用,质量或是相当不错,可以说非常物有所值,对于DIY来讲,简直居家必备。
2、棒棒胶,最好呢就再买个棒棒胶枪,这样打出来的棒棒胶有灵魂,更棒棒。3、烙铁,这个肯定有啦,不然就没得DIY了。
4、导线若干。
过程
上几个内部图给各位看官。
sonoff装置的这一侧,有比较大的空间,可以放下很多内容,所以就在这个角落开了个孔,当然要量好尺寸,选好对应的钻头。将需要安装的小模块用比较柔软的导线链接好,最好选软一些的胶线,焊点不容易脱落,再生枝节,别问我为啥强调这个,外壳上的那一丢丢玻璃胶已经是遗憾了。
开孔后,将红外感应的帽子拆下来,注意是整个塑料的部分,而不只是半圆的部分。也可以不拆下来,直接用打棒棒胶将人体感应(红外感应)固定好,注意,我用的红外感应是SR501或SR505这样的微型产品,尾段的排针去掉,或者弯曲,这样才能放进sonoff的外壳空间内,另外一台是bh1705的光感器,这个光感器用来检测周围光线强度。光感器的位置我没有重新开孔,而是直接将sonoff的按钮去掉,将光感器对准那个按钮孔,同样用棒棒胶固定,固定时记得在洞洞里也打上胶,这样能够实现更好的光线传播。其实你也可以选个合适的角度开孔,用来检测对应方向的光照强度。也许眼力好的东西已经发现了,外壳的旁边还锯了个缺口。。。你可千万别再锯了,那个就是 一开始拉线出来的地方。
就这么简单,一台外观完美的人体感应+光照度检测+开关控制装置就做好了,装哪里看都不肉酸。
使用
我的这个装置使用了人体感应,和光照检测,用来做什么呢,用来安装在厨房的操作台来控制灯光。
逻辑是这样的:
如果有人站在操作台前,切光线不够强,那么开灯(我实际设置了1分钟的检测延时,也就是如果人停留在操作台区1分钟,才开灯)。
人离开,那么2分钟后关灯。当然了,2分钟内人如果又回来了,等就会继续保持开着。
插播一下BH1750的另外一台用处
光照感应还有另外一台功能,还记得之前的一篇里介绍过,我个人不推荐卧房之类的开关使用wifi装置,主要是这些开关离人体太近,尤其睡觉时使用,非常的不合适,那么如何判断灯的具体状态呢,就要用到这个bh1750了。
我安装在厨房,厨房除了这个操作台的灯之外,还有两个LED顶灯。所以我会分别打开两个顶灯,来观察光照度的变化,记录下来,然后同时打开两个顶灯,记录光照度变化。然后就可以通过写一台自动化控制流程来实时改变HA里面对于厨房两个顶灯的开关状态。
Node-RED的处理流程是这样的:
不要被他的外表吓到,加多了很多个模组,只是为了能够更准确地判断各项条件,减少误触,提升判断准确度。
老规矩,贴上Node-RED代码:
链接: https://pan.baidu.com/s/1QJtZJ9B16AG-NgP8apwMNA 提取码: ejf8
<hr/>第十三章 Homeassistant服务器安全及状态监控(上)
导读: 服务器加好之后,24x7运行,加上开放了外网端口,如何避免或者及时发现服务器异常是非常必要的。
架设了家庭服务器,通常都会承载比较多的功能,比如媒体服务,个人云盘,FTP,SSH等等。远程控制和服务器调试,使得开网外网端口无可避免。那么如何能够保障服务器安全,的确是一台课题。从思路上来说,主要采用两方面的措施:
一台是堵塞常规漏洞;再一台是及时发现异常。
先说常规漏洞,下篇说监督服务器及时发现异常。
一般措施
一般来说如果是Linux内核的服务器,本身的安全策略也OK的话,被攻击的可能性不算高,加上本身如果路由器设定也比较合理的话,外网攻击基本可以阻止。 而且从家庭服务器的角度来说,由于本身性质和所存储数据的敏感性并不是很高,所以遭受的攻击多数来自于“好事者”的尝试性攻击,那么安全策略也主要是防止这些情况的发生。 1、路由器设定Ddos保护;
配图虽然用了Ddos的图,这个是个常见的攻击方法,不过从这个攻击的效果来说只是拖慢服务器反应,或者堵塞网络,造成无法访问,所以对于家庭服务器危害并不大,不用特别在意。而且目前多数的路由器都有自带忽略Ddos攻击的功能,通常默认已开启。建议检查一下,保证已启用该功能能。 通常位于路由器管理页的WAN设置页面
默认开启的就不要挑√,像我的路由器。 2、设定服务器管理密码
Linux服务器的用户密码,Linux的跟管理员Root的密码默认是随机变化的,所以你自个的都不知道的东西,不用去管它了。 另外一台就是你登录和操作的用户名和密码,这个密码设定的要复杂一些,常规来说都是至少8位,包含大小写字母以及特殊字符,减少使用常用单词等规则下就足够安全了。命令:
passwd3、SSH隧道的安全措施
SSh隧道登陆的时候可以使用用户名和密码登录,命令是: ssh username@服务器IP地址 回车之后再输入密码,输入密码时没有任何显示,输完回车就会完成登录。但输密码有两个问题,一台是密码如果设置的复杂,那么记忆和登录时的输入都比较繁琐,且有泄露的可能,那如何办呢,在常用的操作机上采用对称加密来免密登录。 操作端terminal下输入命令(windows的cmd下也是可以的):
ssh-keygen -b 4096 -t rsa生成秘钥,-b 4096表示生成4096位的加密,非常之安全了,去掉这部分的话,默认是2048位,其实也已经非常安全。 然后如果是操作机也是linux系统,直接:
ssh-copy-id username@remote-server将公钥传送到服务器端。如果操作机是Windows系统,那么就需要先密码登录到SSH服务器,然后执行以下命令:
touch ~/.ssh/authorized_keys创建authorized_keys文件,如果已经有了,就忽略这一步。 将在windows主机中创建的公钥文件拷贝到服务器上~/.ssh目录下,并执行:
cat -n ~/.ssh/rsa.pub ~/.ssh/authorized_keys并检查权限:.ssh目录的权限为700authorized_keys目录的权限为600大功告成,至此就可以免密码链接SSH了。 4、路由器端口映射
这部分设定通常在路由器管理页的高级设定中,设定端口映射的主要意义在于将内网的服务器某个端口暴露在外网,以供访问或链接,比如HA服务器的8123端口,通过映射就可以从外网链接访问。通常映射都采用内外网相同的服务端口,不过我们这里要调整一下,比如内网8123对应外网9527,SSH内网21对应外网6952等等。如此操作的主要原因或是基于常用端口遭受攻击的可能性更大些,改为一些非常用端口则会减少这种有针对性的攻击可能。
预告:Homeassistant服务器安全及状态监控(下)透过对服务器CPU状态的监控,并实时发送服务器状态数据及图片来及时发现服务器异常,并在必要时解除威胁。 | <hr/>第十四章 Homeassistant服务器安全及状态监控(下)
导读:
透过对服务器CPU状态的监控,并实时发送服务器状态数据及图片来及时发现服务器异常,并在必要时解除威胁。
上篇大致说到了Linux系统的一些基础安全设定,和路由器的简单设置,虽然看似简单,却是性价比最高的部分。如果说服务器承载了很多敏感或者重要数据(这个我是非常反对的,重要数据应该保存在专业的云端服务器,比如Dropbox,Onedrive等),那么就应该考虑部署高防服务器,比如阿里云盾等等。
本篇侧重于服务器一旦出现异常,如何及时发现,并在必要时采取行动。同时也可以发现是否有程序崩溃或过载等情况。
简单的真相
回归到计算机的本质,计算机的算力运行主要依靠CPU,所以实时监测CPU的使用率,无疑是有效发现计算机是否有额外程序在运行的最佳切入点,当计算机出现异常,比如被入侵,被攻击,或者程序运行陷入死循环等等都会导致CPU使用率的大幅提升。因此透过对服务器CPU状态的监控,并实时发送服务器状态数据及图片来及时发现服务器异常。
配置HA
在HA的传感器(sensor)模组中,提供了监测cpu和内容使用率等的平台,如下:(添加至configuration.yaml中)
sensor: - platform: systemonitor resources: - type: disk_use_percent - type: memory_use_percent - type: processor_use - type: last_boot
本身还支持很多其他命令,不过我觉得这四个已经够用了。由上到下依次是:硬盘使用率,内存使用率,CPU使用率和最后一次重启时间。这里没有使用网络用量监测,主要是考虑很多时候网络流量的变化并不能很准确的检测出系统异常,加上后期会为大家介绍的远程监测其他电脑(比如小朋友是不是把自个关屋里偷偷玩游戏)等用途时,网络流量的变化起伏或是比较大的。
管理页面元素
既然有了这些数据,那么添加到管理界面来显示相关信息 也是一台不错的体验。
我采用了bar-card的自定义卡片来显示。如果是最简单的方式,可以使用系统自带的History Graph卡片:
用哪个就看各位的界面如何设计了。
异常及时推送
总算到了正题,Node-RED神奇再次登场,为啥这么喜欢Node-RED,因为它是真神器。。。
抛砖引玉,我自个只设置了cpu使用率高的时候推送通知报警,并截取服务器屏幕发送至手机。各位可以任意发挥。
里面有几处需要各位自行修改为自个的内容,已做了标示,几个时间Delay也可以自行设定,我设定的是如果cpu使用超过10%,且持续了10分钟就推送警告,另外还需要在homeassistant文件夹的WWW文件夹下自建images文件夹,用来存放图片。采用了IFTTT+LINE接收警告,后续会详细介绍如何设置LINE以及如何推送到微信。
在扩展方面,可以设定自动重新启动,自动杀进程等等,各位见仁见智,如有代码或命令方面的需要,敬请关注并留言。这部分还同时使用了VNC服务和vncsnapshot,vnc可以直接启用服务器自带,vncsnapshot是开源免费程序,下载地址在这里:http://vncsnapshot.sourceforge.net/附上Node-RED代码:链接: https://pan.baidu.com/s/1xWk3Ajm8CxC6YwOP_vp9bA 提取码: 71bg下载二维码:
<hr/> |