跟CT一起玩转全屋智能 篇一:威联通Docker下Home assitant的升级以及零冷水热水器的接入
创作立场声明:为了给大家带来更多更实用的智能家居技巧干货分享,特别新开专栏“跟CT一起玩转全屋智能”,希望大家多多支持。
大家好,我是你们的智能家居领路人CT,在前一段时间的文章里,我有写过一篇把群晖NAS上的Docker容器整个备份还原迁移到威联通上的文章:
大家收藏和评论都非常热烈,但是这里我要指出的是,这样的备份还原方式其实并不是Docker推荐的方式,我采用这个方式完全是因为我使用的domoticz为值友dt27打包的完整版ubuntu,所以我自己在里面安装很多其他应用。不能使用正常的升级途径进行升级(会造成应用及脚本丢失)。并且我在备份之后发现,我的整个domoticz有整整11.17GB:
当然,一个运行了4年左右的智能家居中枢,这么多日志,有个11GB并不算啥。但是在迁移的时候我思考了下,玩domoticz的人相对于Home assitant来说少很多,这就导致了能够接入的设备插件也很少,家里新的设备基本都是我自己通过抓码或者改写他人的脚本来实现接入和控制的。虽然自己用着没啥,但是如果写教程出来分享,一是domoticz关注的人少,没有什么价值。二来就是脚本啥的对于初学者来说都太难了。所以在我的“零基础打造全屋智能”文章里,评论最多的一句就是“这也是零基础?”所以我自己踅摸了下,决定把自己用的domoticz系统转换成Home assitant,顺应下时代潮流。而原来的专栏将不再更新,新的有关Home assitant的内容建立新的专栏“跟CT一起玩转全屋智能”,欢迎大家关注收藏。
一、威联通Docker下Home assitant的升级
我们先来讲讲系统的升级,我之前也经常吐槽Home assitant玩家不是在升级,就是在等升级的路上。在自己安装了home assitant之后,切实体会就是——我吐槽的一点都没有错。
官网最常见的notice就是这句,Make sure you……,经常是上去看到要求最低运行某一版,然后急匆匆升级之后,第二天打开官网,发现又更了一版。怎么办呢?只能默默更新。而关于使用docker安装home assitant的文章其实全网有很多,但是关于升级的内容,我找了下,几乎是没有,我不知道是因为太简单了,所以在这里也简单提下。按照HA官方的指导,其实非常简单,升级DOCKER内的HA一共分为四步:
1.下载新版本的容器:
docker pull homeassistant/home-assistant:stable
2.停止现有HA容器:
docker stop home-assistant
3.删除现有容器:
docker rm home-assistant
4.运行新版本容器:
docker run -d --name="home-assistant" -v <本机映射路径>:/config -v /etc/localtime:/etc/localtime:ro --net=host homeassistant/home-assistant:stable
其实打开了NAS的SSH的话,使用putty上去非常简单。当然,我们也可以在web ui上同样操作。其实在威联通(QNAP)的ContainerStation上更新HA与安装全新HA的步骤是完全相同的:
首先是记录下现在运行的HA的配置和共享文件夹设置:
然后停止和删除容器以及镜像,重新安装创建一个新的Home assitant容器:
直接使用命令行运行的话,可以设定localtime,但是使用UI界面的话,我们就需要在环境里加上一条TZ的设置:
然后网络选择HOST模式:
加载共享文件夹与之前一致:
之后打开WEB界面就可以看到升级后的HA了:
我的HA还在部署阶段,没有分类,所有比较乱,大家看看就好。这里值得提醒一句的是,升级前备份一下自己的config目录。
二、零冷水热水器的接入
在之前我有过一篇关于家里更换美的零冷水热水器的文章:
其中也吐槽了天猫精灵中对于热水器只有开关,设定温度的选项,而没有打开零冷水的控制方式。而美的新品使用的MSMART协议都已经升级到了V3.0,其加密是结合APP使用动态密令来进行的,所以几乎不可能被破解。所以不加改造使用本地局域网控制几乎是不可能的,而国外用户目前将美的产品接入HA都是通过硬件改造的:
这个改造方式优点是比较美观,并且可以直接读取状态等信息。缺点是技术难度比较高。并且燃气热水器目前没有看到有改的,所以难度就更高了。所以我就想简单的说我只要打开零冷水就好了,根据思路,最简单的方式还是拆机,找到零冷水水泵的触发开关,直接控制开关就行。不过因为安装的限制,热水器前面板并不能直接拆开(有橱柜挡板)。
所以就想着反正是塞橱里的,不如遵循我改油烟机的方式,直接加个舵机,来模拟手按零冷水的开关就好:
这个是制作出来的成品,其中机械手部分贴了一条导电海绵,并且海绵接地。当然,这部分完全是取决于触摸开关的电容设定的,例如我的352空净,直接接地就能触发开关,完全不需要舵机,只要一个继电器控制通断就行。而右侧的两个绿色PCB的圆板是两个天猫精灵的无线开关。因为在实际测试中发现,热水器电源开着的情况下长时间不用热水器会进入待机模式,而进入待机模式后,需要触发开关两次才能打开零冷水功能(第一次触发点亮屏幕,第二次触发打开功能)。解决的方法是利用了天猫精灵的无线开关,在控制打开零冷水之前对热水器进行一次关和开的操作(在待机情况下,单独下开的指令并不会唤醒热水器)。当然,要是没有天猫精灵的话可以使用一个智能插座来进行开关操作,或者利用现有的ESP来加个继电器来对热水器电源进行控制。
这样,我每次通过自动化来控制零冷水,这块主机就会先执行关闭热水器,然后打开热水器,然后控制舵机按动按钮来打开零冷水。
这样我就实现了通过网络(自动化,语音)来打开热水器零冷水的功能。但是,这里还需要解决的一个问题是,热水器的工作状态。我之前是通过一个带电量检测的智能插座来对热水器的工作状态进行检测的。当插座功率高于10W时可以判定热水器在工作,而热水器低于3W时可以判定热水器没有在工作,不过因为WIFI智能插座的功率上报和查询有时间间隔(1分钟),相对不够即时,所以我这里又给热水器加了一个水流传感器:
这个水流传感器其实就是一个干簧管磁性开关,上面标记的DC250V 0.3A是最大承受电流。当水流按箭头方向通过时,会冲击里面的一个小磁铁至干簧管位置触发开关,而水流静止时因为磁力关系,小磁铁就会复位断开开关。这个感应器还有个用法就是把黑色的干簧管换成小米门磁。同样也能进行触发,如果习惯使用米家的话,就可以以此改造,门磁关闭时有水流通过,门磁打开时就无水流。(购买时请注意购买水流信号检测而不是流量检测,流量检测输出为脉冲,不是开关信号)
考虑到传感器内部原件会对管径产生影响,所以我买的是6分口的传感器,搭配2个6转4的转换器将其接在热水器上。
接水管的时候一定要注意水流方向,下面是接线图:
其中继电器的常闭端接无线开关的按钮两极。接着我们就要给D1mini(或其他ESP8266)刷固件了,这里推荐使用20200703版,因为最近的几版似乎没有了舵机控制或者有bug。刷机非常简单,就USB插电脑上,然后将bin文件夹里对应的bin文件(根据8266或8285)选,我这里用的是normal_IRext_no_rx_ESP8266_4M2M拷贝到FlashESP8266.exe所在目录,运行FlashESP8266选择端口固件进行刷机即可:
刷完之后MCU会自动重启,然后打开手机查找ESP相关的AP连接(密码configesp)然后将MCU连入WIFI网络,之后就可以回到电脑上进行配置了。
先进config标签页,将Unit Name改掉,我改成了heart_curtain,因为这块ESP我还接了窗帘控制。
之后在Controllers里面第一个添加Home Assitant MQTT控制器,将MQTT服务器名字填入,如果有用户名密码也记得填,之后别忘了勾选Enabled,然后Submit。
然后去Hardware页面把D6和D7的boot states改成Outputlow,使得这两个开关上机之后就是关的状态。
接着去Devices页面建立两个Switch input的开关,D7叫做water,D6叫做heater。当然这里的名字无所谓,只要和后面的rules对应就好,我这里的water是水流传感器,heater是热水器,其实不讲究的话只要D7那个就好。
然后去tools的advanced Settings里把Rules Settings里的Rules和Old Engine都勾上。之后就可以编写rules了
下面来讲解下rules
热水器状态检测
1.启动后将D6,D7设置为低电平:
on System#Boot do
GPIO,13,0
GPIO,12,0
endon
这一步在之前hardware里也进行过设置,不过早期的ESPEASY经常有问题,所以这里上个双保险。
2.检测到水流开关触发,设定一个3秒的定时器:
On water#state do
timerSet,2,3
endon
这一步的触发条件是水流传感器,无论是开还是关,都会触发这个定时器
3.timerSet2计时结束,触发热水器开关状态:
On Rules#Timer=2 do
if [water#state]=1
GPIO,12,1
else
GPIO,12,0
endif
endon
这是水流开关触发后3秒,再次检测水流传感器的状态,如果是开,那就把heater开关设定为开,如果是关,那就把heater开关设定为关。
上面2个rules连在一起就可以判断热水器的开关状态,当然,这里比较遗憾的是仅仅只能判断水龙头或水泵是否在工作,如果热水器没通电打开热水龙头,系统还是会判断热水器是开着的。如果考究点,可以在系统里加上一个功率检测的双鉴。
零冷水开关
4.触发零冷水开关
On startwatering do
GPIO,4,1
delay 300
GPIO,4,0
delay 300
GPIO,4,1
delay 300
GPIO,4,0
delay 2000
GPIO,4,1
delay 300
GPIO,4,0
delay 4000
Servo,1,0,45
delay 500
Servo,1,0,0
timerSet,1,5
endon
其中 starwatering是event的名字,之后GPIO,4,1到delay 2000之前是双击两下无线开关,关闭热水器,然后停2秒,GPIO,4,1到下一个delay 4000是单击无线开关,打开热水器,然后再等待4秒。Servo,1,0,45就是舵机旋转45度,然后等0.5秒回到0。最后设了一个5秒的定时器,用来检测零冷水是否打开成功。
5.检测零冷水是否开启成功
On Rules#Timer=1 do
if [water#state]=0
GPIO,4,1
delay 300
GPIO,4,0
delay 4000
Servo,1,0,45
delay 500
Servo,1,0,0
timerSet,1,5
endif
endon
这是5秒的计时器到了之后检测水流传感器是否打开,如果发现没有水流的话,就再执行一次打开热水器,按下按钮的操作。
这里关于MCU的配置就完成了,接着就是将其接入HA了。这一步也非常简单,我们只需要在configuration.yaml里添加一个MQTT的Switch就好了:
重启下HA就能使用了:
打开热水后系统反馈:
关闭热水后系统反馈:
因为rules里面设置了3秒的再次确认,所以有点延迟,如果不喜欢延迟可以把确认的这条删掉,直接利用水流传感器的反馈来作为状态。
开启零冷水:
好了,至此我们就把热水器零冷水以及热水器状态接入了HA,接着就可以按自己喜好设置自动化或者是语音控制了,例如早上6点半到7点半进入卫生间,系统自动打开零冷水,或者是浴霸开启后,系统自动设置零冷水等等。至于HA的自动化,我准备使用appdeamon来实现。若有兴趣,敬请期待我之后的原创分享。喜欢的话可别忘了点赞,收藏,评论哦~
casatift
校验提示文案
POKO哑虎呸呸
校验提示文案
灵KOYB
校验提示文案
汗宝
校验提示文案
Netsuki
校验提示文案
暖夏梦初醒
校验提示文案
美济的风
校验提示文案
破碎荆棘
校验提示文案
北极值友
校验提示文案
我就是cy
校验提示文案
Sword_Dance
校验提示文案
司徒嘉胤
校验提示文案
熊樣
校验提示文案
telanx
校验提示文案
无敌木头儿
校验提示文案
藏于九地动于九天
校验提示文案
Leslie_Yu
校验提示文案
值友8697565487
校验提示文案
美济的风
校验提示文案
值友8697565487
校验提示文案
暖夏梦初醒
校验提示文案
Leslie_Yu
校验提示文案
藏于九地动于九天
校验提示文案
Netsuki
校验提示文案
无敌木头儿
校验提示文案
汗宝
校验提示文案
telanx
校验提示文案
熊樣
校验提示文案
司徒嘉胤
校验提示文案
casatift
校验提示文案
Sword_Dance
校验提示文案
我就是cy
校验提示文案
灵KOYB
校验提示文案
POKO哑虎呸呸
校验提示文案
北极值友
校验提示文案
破碎荆棘
校验提示文案