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

下载 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
|
验证
D/TYOPORA_Note/个人网站/relative/image-20230507195602039.png
HA链接MQTT
物联网2-智能家居6-安装MQTT_哔哩哔哩_bilibili

D/TYOPORA_Note/个人网站/relative/image-20230507204047959.png
HA验证MQTT
D/TYOPORA_Note/个人网站/relative/image-20230507204422060.png
MQTTX 测试->连接MQTT服务器
连接成功
MQTTX:跨平台 MQTT 5.0
桌面客户端工具 
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()
|