前言
使用 HomeAssistant All-In-One 安装完成之后,树莓派端已经安装了支持 MQTT 协议的 mosquito 。如果安装日志中出现了
“下列软件包有为满足的依赖关系:mosquitto:依赖:libssl1.0.0(>=1.0.1)但无法安装它,mosquitto:依赖:libwebsocket3(>=1.2)但无法安装它。mosquitto-clients:依赖:libmosquitto1(-1.4.14-0mosquitto1~jessie2)但是它将不会被安装。E:无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。”
请参考链接 github.com/eclipse/mosquitto/issues/529 。或执行如下两条指令:
wget http://security.debian.org/debian-security/pool/updates/main/o/openssl/libssl1.0.0_1.0.1t-1+deb8u6_armhf.deb
sudo dpkg -i libssl1.0.0_1.0.1t-1+deb8u6_armhf.deb
然后重新安装 mosquitto 即可(也可以再次执行 HomeAssistant All-In-One 安装指令,已配置好的设备不会被重置)。
如果你按照 HomeAssistant All-In-One 安装界面的引导进行了如下配置。
那么执行 第二条命令,也就是 sudo mosquitto_passwd /etc/mosquitto/pwfile pi
的时候表示创建了一个 mosquitto 用户,用户名为 pi 。密码就是执行完这条命令之后输入的密码。请牢记。
以下操作默认已经安装完成 mosquitto 。
1. 测试mosquitto 的可用性
① 添加 MQTT 协议的支持
在 configure.yaml
文件中添加如下代码(建议在每一个configure 文件中每一个 冒号后都添加一个英文的空格,防止出现意外的错误):
mqtt:
broker: 127.0.0.1
port: 1883
username: pi #将 pi 换成你的用户名
password: mima #将 mima 换成你的 mosquitto 密码
② 添加测试机构
如果在你的 configure.yaml
文件中已经存在 sensor:
标签,请务必忽略第一行,然后将剩余的两行代码添加到 sensor:
标签下。
sersor:
- platform: mqtt
state_topic: "home-assistant/arduino/test"
name: 'HelloArduino'
保存之后执行如下指令,重启 HomeAssistant ,重启之后 HomeAssistant 首页上应该会出现一个名为 HelloArduino 的圆形徽章。
sudo systemctl restart home-assistant.service
② 测试添加的机构是否可用
之后打开终端,输入如下指令:
mosquitto_pub -h 127.0.0.1 -u pi -P mima -t home-assistant/arduino/test -m "Hello" #将 pi 换成你的用户名,将 mima 换成你的密码
然后打开 HomeAssistant 页面,这个时候首页上 HelloArduino 圆形徽章中间应该出现 Hello 。
2. 添加 Arduino 传感器配置
这个时候可以将之前sensor
中添加的测试机构可以删除,注意,如果你的 sensor:
标签下仅有测试机构,请不要删除sensor:
这一行。
以下是我的配置文件,仅供参考:
sensor:
- platform: mqtt
state_topic: "home-assistant/arduino/arduino1"
name: 'Arduino_Temp_1'
unit_of_measurement: '°C'
value_template: '{{ value_json.Temp1 }}'
- platform: mqtt
state_topic: "home-assistant/arduino/arduino1"
name: 'Arduino_Temp_2'
unit_of_measurement: '°C'
value_template: '{{ value_json.Temp2 }}'
- platform: mqtt
state_topic: "home-assistant/arduino/arduino1"
name: 'Arduino_Humi'
unit_of_measurement: '%'
value_template: '{{ value_json.Humidity }}'
- platform: mqtt
state_topic: "home-assistant/arduino/arduino1"
name: 'Arduino_Humi'
unit_of_measurement: '%'
value_template: '{{ value_json.Humidity }}'
- platform: mqtt
state_topic: "home-assistant/arduino/arduino1"
name: 'Arduino_Brightness'
unit_of_measurement: 'mV'
value_template: '{{ value_json.Brightness }}'
- platform: mqtt
state_topic: "home-assistant/arduino/arduino1"
name: 'Arduino_Preasure'
unit_of_measurement: 'mb'
value_template: '{{ value_json.Preasure }}'
- platform: mqtt
state_topic: "home-assistant/arduino/arduino1"
name: 'Arduino_Atmosphere'
unit_of_measurement: 'atm'
value_template: '{{ value_json.Atmosphere }}'
- platform: mqtt
state_topic: "home-assistant/arduino/arduino1"
name: 'Arduino_FireSensor'
unit_of_measurement: 'mV'
value_template: '{{ value_json.Fire }}'
- platform: mqtt
state_topic: "home-assistant/arduino/arduino1"
name: 'Arduino_FireState'
unit_of_measurement: 'mV'
value_template: '{{ value_json.Fire }}'
- platform: mqtt
state_topic: "home-assistant/arduino/arduino1"
name: 'Arduino_FireState'
value_template: '{{ value_json.FireState }}'
- platform: mqtt
state_topic: "home-assistant/arduino/arduino1"
name: 'Arduino_BodyState'
value_template: '{{ value_json.BodyState }}'
- platform: mqtt
state_topic: "home-assistant/arduino/arduino1"
name: 'Arduino_ObjectDistance'
unit_of_measurement: 'mm'
value_template: '{{ value_json.ObjectDistance }}'
- platform: mqtt
state_topic: "home-assistant/arduino/arduino1"
name: 'Arduino_ShockState'
value_template: '{{ value_json.ShockState }}'
将这些配置文件添加完成后,再次执行以下指令,重启 HomeAssistant 服务即可。
sudo systemctl restart home-assistant.service
至此,树莓派端设置完成。在这里我使用的 Arduino 设备都是传感器,不包含开关等控制设备。
至于灯或者开关灯控制设备,请参考下一篇文章。