【Follow me第二季第2期】Arduino Uno R4 WiFi 通过MQTT连入Home Assistant(容器版)
[复制链接]
本帖最后由 sunduoze 于 2024-9-12 22:29 编辑
1. 安装Docker (系统windows10及以上,其余系统未进行测试。另外如果有树莓派、NAS的用户也可以自行安装HA OS,Linux或虚拟机用户安装对应的版本).
2. Docker中拉取Home Assistant镜像
在windows命令行中输入以下命令搜索镜像,
docker search home-assistant
回车后可以看到排名第一的homeassistant/home-assistant; 输入以下命令拉取最新版本镜像
docker pull homeassistant/home-assistant
或者输入以下命令拉取稳定版
docker pull homeassistant/home-assistant:stable
3. 创建Home Assistant容器
在windows命令行中输入
docker run -d --name="HA_container" -v D:/ProgramData/HA:/config -p 8123:8123 homeassistant/home-assistant
其中HA_container为可自定义的容器名称,D:/ProgramData/HA为可自定义配置保存路径(注意是右斜杠)
4. 进入Home Assistant (HA)
浏览器输入: http://localhost:8123/
点击 创建我的智能家居 创建账号,之后按提示一步一步进入,最后重新登陆后即可进入HA主页
5. Docker中拉取EMQX镜像(MQTT服务器)
在windows命令行中输入以下命令搜索镜像,
docker search emqx
回车后可以看到排名第一的`emqx 并且是official的` ; 输入以下命令拉取最新版本镜像
docker pull emqx
6. 创建EMQX容器
在windows命令行中输入以下命令
docker run -d --name="EMQX_container" -p 1883:1883 -p 8083:8083 -p 8883:8883 -p 8084:8084 -p 18083:18083 emqx
其中HA为可自定义的容器名称,D:/ProgramData/HA为可自定义配置保存路径(注意是右斜杠)
7. 进入EMQX
浏览器输入: http://localhost:18083/
默认账号:admin 默认密码:public
8. 测试EMQX
进入EMQX[EMQX Dashboard](http://localhost:18083/#/dashboard/overview)
访问控制 -> 客户端认证 -> 选 +创建 (右上方)-> 选择 Password-Based -> 内置数据库 -> 3个都默认 -> 点 创建
点击 用户管 -> 点 +(右侧)-> 新建用户,填入用户名和密码
9. EMQX与HA连接
进入EMQX[EMQX Dashboard](http://localhost:18083/#/dashboard/overview)从EMQX 监控->集群概览 -> 节点信息 -> 节点名称的 @后 找到IP地址,此地址即为:EMQX服务器地址
进入HA[配置 – Home Assistant](http://localhost:8123/config/integrations/dashboard)配置 -> 设备与服务 -> 添加集成(右下角) -> 搜索MQTT -> 选择MQTT -> 填入代理:xxx.xxx.xxx.xxx.xxx(EMQX服务器地址) 端口:1883 用户名:admin 密码:admin 点击 提交 后提示 成功 xxx
接下来可以进入EMQX[EMQX Dashboard](http://localhost:18083/#/dashboard/overview)看到 在线连接数 从之前的0变为1,点开可以看到 用户端ID 等信息
10. EMQX与Arduino UNO R4 WiFi连接
Arduino中需要与这里的用户名和密码对应,MQTT_SERVER为windows电脑无线网卡的IP(cmd 使用 ipconfig查看)
#define MQTT_SERVER "xxx.xxx.xxx.xxx" // 定义MQTT服务器的地址
#define MQTT_PORT 1883 // 定义MQTT服务器的端口
#define MQTT_USERNAME "admin" //定义用户名
#define MQTT_PASSWORD "admin" //定义密码
修改arduino_secrets.h中以上代码,编译并上传到Arduino UNO R4 WiFi中
11. EMQX与Arduino UNO R4 WiFi连接,HA中的概览可以看到 按钮 以及 MQTT Sensor
进入EMQX[EMQX Dashboard](http://localhost:18083/#/dashboard/overview) 可以看到 在线连接数 变成3,并且可以看到 消息发布速率:右侧不断有数据发布和接收,至此Arduino的数据已经被EMQX服务器接收到啦!
12. 另一种方式实现界面的显示(修改configuration.yaml)
容器的配置文件保存路径的 `D:\ProgramData\HA` (大家根据自己的配置自行更改)的configuration.yaml文件,增加以下代码保存。
到HA的 [开发者工具 – Home Assistant](http://localhost:8123/developer-tools/yaml) 的 -> YAML 配置重新加载 -> 点击 所有YAML 配置 -> 如果代码无异常,则会显示绿色 代表配置已经更新
HA -> 概览 -> 编辑仪表盘(右上角)-> 添加卡片(右下角)-> 点击 按实体 -> 搜索栏输入 Arduino -> 可以看到 arduino Time 和 arduino Time -> 勾选后添加即可
HA -> 概览 点开新添加的卡片,选择不同的传感器,可以看到历史曲线
mqtt:
- button:
- unique_id: arduino uno button A
name: "Arduino Click me A"
command_topic: "UNO/arduino/myButtonA/cmd_t"
payload_press: "restart"
- unique_id: arduino uno button B
name: "Arduino Click me B"
command_topic: "UNO/arduino/myButtonB/cmd_t"
payload_press: "restart"
- sensor:
- unique_id: arduino uno Time
name: "arduino Time"
state_topic: "UNO/arduino/myUptime/stat_t"
suggested_display_precision: 1
unit_of_measurement: "s"
value_template: "{{ value }}"
- unique_id: arduino uno Voltage
name: "arduino Volt"
state_topic: "UNO/arduino/myAnalogInput/stat_t"
suggested_display_precision: 3
unit_of_measurement: "V"
value_template: "{{ value }}"
有疑问或者问题,欢迎大家一起讨论!
|