智能家居 / 软件心得 · 2018/06/15 0

智能家居(二):家庭照明系统改造

上一篇,将小米的智能设备成功接入了HA(Home Assistant),也成功通过HB(Home Bridge)将HA这些连入的设备成功接入了Apple的HomeKit(“家庭” App)。不过显然,我有更大的阴谋,想着如何才能将家里的灯光照明系统也接入。接入照明系统,显然是有很多好处的。比如,大包小包开门的时候,可以自动打开门口的灯。又比如,打开电视或者在电视前坐下后,根据光照情况自动打开照明。还比如,外面别的房间灯懒得下床走动,可以手机直接关闭或者根据人体感应传感器自动关闭。

为了这次改造,我感觉我也成了半个电工。试着搞懂了双控/单控区别和原理,单开/双开/三开开关的区别和接法,火线/零线的区分,绝缘胶布的使用。反正一圈下来,感觉可以去考个电工证了。

讲具体实现的方式前,先讲接入后到底可以做什么吧。看下面的视频:

  1. 可以Siri语音控制
  2. 可以手机“家庭”app里控制(以及别的App里进行控制和管理)
  3. 不影响物理开关的使用,且物理开关的导致的灯的状态也会实时反馈到App里

大概实现的功能,可以看下面的视频。

https://v.youku.com/v_show/id_XMzY1NTU1NTc5Mg==.html?sharefrom=iphone&sharekey=1ccc947ebf36d1862cc8901a78a1f2016


如果你还没开始装修,那么我要强调了,装修的时候,照明的开关务必要拉“零线”进去,不然就像我很麻烦的,要在灯泡处接电容。

智能开关,由于提供了更多的功能,比如指示灯,内部的元器件是需要待机和耗电的,虽然电量很小,但是从单根火线上取电目前还比较困难。目前市面上有做单火方案的,但是对于灯的功率、还有稳定性方面都有无法解决的问题(似乎目前只有小米的单火智能开关可以做到和零线版一样直接接入,但是价格也很辣手)。单火取电本质上有点类似偷电,从而带动电路板,但是接通一点会引起照明灯具的鬼火情况,也就是说灯无法完全关闭,忽闪忽闪,甚是吓人。我之前就有个房间的灯没有弄好,直接导致灯忽闪忽闪了一个晚上。

新装修的话,在每个开关面板上都布了零线的情况下,个人认为最简单的方式就是小米的方案了。每个开关直接使用“Aqara智能墙壁开关”,和普通的一模一样的接线就行了。只是需要注意的是,不要买错了产品。

如下图1和图2,才是Aqara智能墙壁开关,才能实现传统模式的物理开关灯光和智能管理。而小米商城里还有一个是99元左右的无线开关,注意这个本身不能接火线/零线,所以这个一般多用于需要双控一路灯的时候,一个开关使用Aqara智能墙壁开关,接实际的线和灯。另一个就使用这个99元的无线开关,可以放在床头,通过智能脚本或自动化,实现按下键的时候,打开/关闭Aqara这个墙壁开关所控制的灯。

(图1)

(图2)

(图3)

这部分的接线,具体设置,其实和传统的开关无异,因此我不做详述,会在下文中通过改装模块的接线来具体讲解,两者是类似的。

此外,小米的套装,还有一个注意点是,还需要购买一个小米的网关,大部分的功能和自动化都需要这个网关来驱动


如果你和我一样,已经装修好,或者不喜欢小米的这个面板开关,希望在基于自己现有的面板上进行改造的话。也有办法的。感谢网络和各种电商,搜索发现了这一款“HASSMART单零火WiFi 86/120开关改装模块”。

这个模块的特色:

  1. 基于现有物理开关,适用86/120暗盒,改装后不影响物理开关使用
  2. 可以使用wifi接入mqtt,适用mqtt统一发现和管理
  3. 也可以通过射频方式开关
  4. 支持双键/三键开关
  5. 单火/零线版通用

当然缺点也是有的:

  1. 目前大概每路支持的功率是100w左右,不建议将大功率照明使用这个开关改造
  2. 信号线略细,接入原有开关中略有麻烦
  3. 433射频的信号线在暗盒中需要调整好位置,否则可能接收的时候影响信号

预先条件:已经安装了Home Assistant。如果没有的话,可以参考我之前智能家居(Home Kit):Home Assistant + Home Bridge


零、安装MQTT

mosquitto(MQTT)是智能家居中使用颇多的用于多个智能设备之间通讯的协议,这次用的改装模块就是支持MQTT协议以及433射频的模块。因此需要先安装MQTT服务器。

我还是在群晖里安装的MQTT。

注册表里搜索zlee mqtt 关键词,然后安装,配置。注意网络使用宿主的,然后添加文件夹,如下第二张图。

 

确认mqtt在docker里运行了之后,就表示MQTT服务安装好了。


一、接线教程,以下大部分引用该模块提供的教程:

1、机械开关不直接与零/火线相接,而是与模块出来的信号控制线相连
2、如果你用单火接线方式,一定要把黑色的零线用电工胶布包好,否则可能会有短路危险!

3、接线前先确定下灯的瓦数,如果有接近100w的,且要装在双开或三开上,不!要!把!100w这个灯接到第一路,可接到第二或第三路,否则可能出现烧坏现象。超过100w的灯,不建议使用。

首先是单火单开接线图,这里强调和注意的是,在灯的那侧,要并联1-2个电容(一端接零线,一端接火线),否则就会如最一开始说的,灯会忽闪忽闪。

将入盒的火线接模块的红线(粗),黑线(粗)则用绝缘胶带包好,防止接触到别的线,黄线(粗)接灯的控制线。黑线(细)接开关的火线接触点上,白线(细)接开关上灯控制点。

其次是零火单开的情况,有零线的情况下,改造很简单。将入盒的火线接模块的红线(粗),零线接模块的黑线(粗),黄线(粗)接灯的控制线。黑线(细)接开关的火线接触点上,白线(细)接开关上灯控制点。

单火双开(三开)和零火双开(三开)其实是差不多的,只是多了几根黄线(粗)和白线(细)。所以需要注意的就是黄线(粗)有1,2,3对应三开的灯1,灯2和灯3。白线(细)则是对应的灯信号线,所以也要1对1,2对2,3对3。

上个买家秀以及具体的安装图片。

首先是把开关面板拆了,这是个三开的面板。红色的是火线,左手边的两根U型线是把火线并联给第二个和第三个开关。右手边的2白1黑是三根连接灯泡的线。这是拿最普通的三开单控来说明的,之前拆了卧室的一个双控的三开,由于电工当初安装时候不规范,把我绕了好几天才理出点头绪,生生把自己逼成了半个电工。

然后是把火线和模块的红线(粗)连接,黄线(粗)跟之前说的电灯线连接(记住三根灯泡的线的顺序,建议第一路连接瓦数最低的,尤其是单火的情况下,更要记住第一路,等会要并联电容的)。

此处的黑线(粗)没有直接绝缘掉了,因为家里是单火的情况。

然后接的细线:黑细线接原来火线的触点,三根白线接原来灯泡线的触点,如下第二张图。

努力将这个模块塞回去暗盒,注意如果使用433射频的话,将那个一圈圈的铜丝拉出来点,对着外面。然后拧上螺丝,盖好面板。就和原来的面板毫无区别。

前面提到,因为家里开关是单火,因此,拿了个扶梯,探头到天花板里,对第一路所连接的灯带那边的连接线拆了,并联了两个电容。先把两个电容两边的引针先绕一起,然后一边并联到火线,一边并联到零线。


二、配置开关

以下大部分文件和图片沿用商品中的文字和图片。

1. 进入配网模式:

上电后,等待10秒,待模块初始化完毕。无论几开的模块,可按86机械开关的任意按键,开-关-开-关-开-关-开-关-开-关-开-关(共12次),注意这里按键速度不要过快,大概0.5秒的时间间隔就可以,亦不能按的太慢!以实际控制的灯能随按键也“亮-灭”12次为准,此时停止按键,如果你没有装上底盒,可以看到模块上的led指示灯会进入一直慢闪的状态,与此同时,刚刚按键所对应的灯(你家里的灯)会闪三下,提示进入配网模式。

2. 在确定进入配网模式后,打开手机(或电脑),搜索名为HASSMART_开头的wifi热点,并连接进去(无密码):

如图所示,最好截图记下此wifi热点的名称,因为后面的芯片ID:C2C6BF,将来可能会用到。

3. 连接进去后,会自动打开如下界面(如果未自动打开,在浏览器中手动输入192.168.4.1,或者退出wifi重新连入):


此时,点击第一个按钮,进入自动搜索wifi配网模式。

3. 由于模块要自动搜索wifi,这里可能要等待几秒,然后进入出现以下界面(上面部分我没有截图,实际情况上面会有一个个扫描到的wifi名称):


点击相应wifi热点名称,会自动填入SSID,然后输入你的wifi密码和MQTT相关配置。比如刚才群晖docker里安装的mqtt,没有设置用户名和密码,可以不用去管,默认的或者瞎填都可以。开关名称建议你加上每个房间的相关代码或者简写,不然后面添加开关太多,在HomeAssistant里要对应起来很麻烦。

这里需要说明的是,开关名称要严格按照图上提示来,并且不同设备间不要重复。另外关于离线模式,刚我提到了,模块初次上电默认为离线模式,如果不选为“否”的话,即便你配置了wifi和mqtt信息,也不会联网。如果想联网使用,请一定将此项改为“否”。上电状态不用多说了,“自动”会保存重启前的状态(意外断电无效),“上电开”和“上电关”分别表示模块断电后,重新上电时,继电器也就是你灯的状态。你希望意外断电恢复后,灯是开的,就选上电开,希望是关的就上电关。无论你选择啥,上电后模块都会把实际灯的状态反馈回HASS。

设置完后,点击保存,提示正在保存,请等待时,请耐心等待数秒,模块会自动重启。

4. 到这里,模块方面的配置结束。


三、Home Assistant配置

打开configuration.yaml文件,把下面的broker地址换成你实际的MQTT服务的IP地址。比如刚才Docker安装的MQTT的话,无密码和用户名,直接省掉username和password这两行。

?

1
2
3
4
5
6
mqtt:
  broker: 192.168.6.8
  port: 1883
  username: mqtt
  password: mqtt
  discovery: true

保存完,重启hass,下面就是见证奇迹的时刻了。

我下面是已经将各个灯都自定义名字和分组了,直接在Home Assistant里开关点灯了。如果物理开关有点亮开关的话,这里HA里的状态也会变。


*射频学习和对码,因为我没用,因此不在这里详细叙述了。


四、HomeKit接入

之前一篇文章提到过通过Home Bridge将HA里的智能化设备接入苹果的HomeKit,达到iOS里的“家庭”App进行控制或者通过Siri进行语音控制。

现在有个好消息,HA本身也支持将设备转接到HomeKit里了,只需要在configuration.yaml文件里添加如下代码:

搭好,先设置模块再配置这里)

然后重启HA即可,HomeKit里加设备和之前HomeBridge一样的。

如果之前已经enable了Homekit的话,其实重启HA之后,在iOS的“家庭”app里就可以看到加入的那些开关,我把它们类型都改成了“灯泡”,然后名字和所属房间都修改分配了下。

所以,这样子的话,app里直接可以控制了,如果想要Siri开灯/关灯的话,可以这么说。

“Hey Siri”,“打开主卧衣帽间白灯”(对应第二张倒数第二行的房间里的灯),然后Siri会说好的,已经打开。关闭也类似,说“关闭主卧射灯”。这里的经验就是,一定要加“的”,不然Siri会说不知道操作家庭里的哪个设备。

然后,如果想在外面也能控制的话,需要一台HomePod或者一台iPAD作为中枢,一直开着连着网。


五、自动化

自动化有很多方案,比较简易和易上手的话,就可以使用“家庭”App里自带的“自动化”功能。

如果希望功能强大、自定义方便的话,则直接使用HA的Automation功能。

  1. 晚上10点到凌晨5点,当检测到有人移动时,自动打开夜灯

– alias: north_light_gateway_on

hide_entity: false

initial_state: ‘on’

trigger:

– platform: state

entity_id: binary_sensor.motion_sensor_xxx

from: ‘off’

to: ‘on’

condition:

– condition: time

after: ’22:00:00′

before: ’05:00:00′

action:

– service: light.turn_on

entity_id: light.gateway_light_xxx

2. 晚上6点到凌晨5点,当光感低于250的时候,开门自动打开门口处的灯。 这里的要点是判断人是出去还是进来,进来的话,要把门口的打开/关闭感应作为condition放在里面,而人体移动感应作为触发条件。所以最后的逻辑是,当门口的人体感应检测到变化时,自动化开始运行。避免出门的时候也打开灯。

– alias: 1f_doorlight_on

hide_entity: false

initial_state: ‘on’

trigger:

– platform: state

entity_id: binary_sensor.motion_sensor_xxx

from: ‘off’

to: ‘on’

condition:

condition: and

conditions:

– condition: time

after: ’18:00:00′

before: ’05:00:00′

– condition: state

entity_id: binary_sensor.door_window_sensor_xxx

state: ‘on’

– condition: numeric_state

entity_id: sensor.illumination_7811dce15e6a

value_template: ‘{{ states.sensor.illumination_xxx.state| int }}’

below: 250

action:

– service: switch.turn_on

entity_id: switch.hassmart_xxx

3. 白天出门时候,如果下雨概率大于30%的话,则提示带伞。这里就是出门的时候的自动化。注意到与上面那个案例的区别在于,开门的动作作为”trigger”,而人体感应则作为“条件”。此处,还调用了百度的TTS,实现了播放文本的功效。

– alias: door_open_weather

hide_entity: false

initial_state: ‘on’

trigger:

– platform: state

entity_id: binary_sensor.door_window_sensor_xxx

from: ‘off’

to: ‘on’

condition:

condition: and

conditions:

– condition: time

after: ’06:00:00′

before: ’17:00:00′

– condition: state

entity_id: binary_sensor.motion_sensor_xxx

state: ‘on’

– condition: numeric_state

entity_id: sensor.heweather_pop

above: 30

action:

– service: tts.baidu_say

data_template:

entity_id: media_player.phicomm_t1

message: >

“今天下雨概率为:{{states(‘sensor.heweather_pop’)}},注意带伞”

cache: false

HA的自动化功能还是很强大的,上面只是一小部分简单的举例。

感兴趣的朋友,可以扫下面的二维码关注我公众号。谢谢。