MQTT

概览

是一个协议,软件只要符合这个协议就可以

安装 MQTT

6. 安装MQTT (itprojects.cn)

物联网2-智能家居6-安装MQTT_哔哩哔哩_bilibili

D/TYOPORA_Note/个人网站/relative/image-20230507202413585.png

我们采用的是EMQX这一款MQTT服务软件,官网地址如下

https://www.emqx.io/zh

下载 MQTT 镜像

sudo表示超级管理员权限

1
sudo docker pull emqx/emqx:5.0.16

创建 MQTT容器

1
sudo docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx:5.0.16

访问MQTT服务器

ip+18083

EMQX Dashboard

admin

xxxxxxxx.MQTT

安装homeassistant

物联网2-智能家居5-1-安装HomeAssistant+架构设计方案_哔哩哔哩_bilibili D/TYOPORA_Note/个人网站/relative/image-20230507193751737.png

下载 HA 镜像

homeaiisitant/home-assistant:latest

创建公共文件

D/TYOPORA_Note/个人网站/relative/image-20230507194056008.png
D/TYOPORA_Note/个人网站/relative/image-20230507194209320.png

5.1 安装HomeAssistant (itprojects.cn)

5.2 访问HomeAssistant (itprojects.cn)

创建HA虚拟机

创建

1
sudo docker run -d --name="homeassistant-v1" -v /home/ubuntu/homeassistant-config:/config -p 8123:8123 homeassistant/home-assistant:latest

验证

1
sudo docker ps
D/TYOPORA_Note/个人网站/relative/image-20230507195602039.png

HA链接MQTT

物联网2-智能家居6-安装MQTT_哔哩哔哩_bilibili D/TYOPORA_Note/个人网站/relative/image-20230507204102017.png

D/TYOPORA_Note/个人网站/relative/image-20230507204047959.png

HA验证MQTT

D/TYOPORA_Note/个人网站/relative/image-20230507204422060.png

MQTTX 测试->连接MQTT服务器

连接成功

MQTTX:跨平台 MQTT 5.0 桌面客户端工具 D/TYOPORA_Note/个人网站/relative/image-20230507221416280.png

esp32成功对接HA

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
from machine import Pin, SPI
import socket
import usocket
import time
import network
import machine
import ujson
from umqtt.simple import MQTTClient

ssid='Mr.CARD'
password='88888888'
def do_connect():
wlan = network.WLAN(network.STA_IF)
wlan.active(False)
wlan.active(True)
if not wlan.isconnected():
print('connecting to network...')
wlan.connect(ssid, password)
i = 1
while not wlan.isconnected():
print("正在链接...{}".format(i))
i += 1
time.sleep(5)
print('network config:', wlan.ifconfig())
return wlan.ifconfig()[0]

ip = do_connect()


homeassistant_device_name = "esp32_01"
homeassistant_device_sensor_name = "1"
homeassistant_device_sensor_type = "Temp"
homeassistant_config_topic = "homeassistant/sensor/HA/HA-%s-%s/config"%(homeassistant_device_name,homeassistant_device_sensor_name )
homeassistant_config_content ={
"unique_id": "HA-%s-%s"%(homeassistant_device_name,homeassistant_device_sensor_name),
"name": homeassistant_device_sensor_type,
"icon": "mdi:thermometer",
"state_topic": "HA-%s/%s/state"%(homeassistant_device_name,homeassistant_device_sensor_name),
"json_attributes_topic": "HA-%s/%s/attributes" %(homeassistant_device_name,homeassistant_device_sensor_name),
"device":{
"identifiers": homeassistant_device_name ,
"manufacturer":"wangmingdong",
"model":"HA",
"name": homeassistant_device_name,
"sw_version":"1.0"
}
}
homeassistant_state_topic = "HA-%s/%s/state" % (homeassistant_device_name, homeassistant_device_sensor_name)
homeassistant_state_content = 23
global c
c=None
def sub_cb(topic,msg):
print(topic,msg)
def main():
global c
while c is None:
time.sleep(0.5)
print("None")
c=MQTTClient(homeassistant_device_name,"124.221.117.153",1883 ,"admin" ,"16777216.MQTT" ,keepalive = 60)
print(type(c))
c.set_callback(sub_cb)
c.connect()
print("..........")
c.subscribe(b"my_esp32")
time.sleep(0.5)
send_content = ujson.dumps(homeassistant_config_content)
print(send_content)
c.publish(homeassistant_config_topic,send_content)

for i in range(100):
time.sleep(0.5)
try:
c.publish(homeassistant_state_topic, "%d"%i)
except:
c=MQTTClient(homeassistant_device_name,"124.221.117.153",1883 ,"admin" ,"16777216.MQTT" ,keepalive = 60)
print("error")
print("esp32..... %d"%i)
time.sleep(1)
main()