|
本帖最后由 loveyolanda 于 2025-6-30 10:06 编辑
参考scry大佬的帖子中国移动x11脱离app配网方案
https://bbs.hassbian.com/thread-25208-1-1.html
(出处: 『瀚思彼岸』» 智能家居技术论坛)
2025.6.30更新一下homeassistant的自动化,手动按按键更新插座状态,不再使用nodered。
alias: X11插座MQTT转换
description: 支持多设备的MQTT消息转换
triggers:
- topic: /sys/2dGkWmko/+/thing/event/property/post
trigger: mqtt
conditions: []
actions:
- data:
topic: >-
{{
trigger.topic|replace('event/property/post','service/property/set_reply')
}}
payload: |-
{
"id": {{ trigger.payload_json.id }},
"method": "thing.service.property.set",
"data": {"switch": {{trigger.payload_json.params.switch}}},
"timestamp": {{ now().timestamp()|int * 1000 }},
"version": "2.0.0"
}
qos: "2"
retain: true
action: mqtt.publish
mode: queued
2025.6.3更新一下,手动按按键更新插座状态。
用nodered实现的,流程如下,思路是将手动按键的topic及json数据转换为控制插座开关的topic及json数据:支持多个插座,自动获取插座SN。
[{"id":"86622760ed0d7951","type":"tab","label":"流程 1","disabled":false,"info":"","env":[]},{"id":"54e6b011edf0cc5c","type":"mqtt in","z":"86622760ed0d7951","name":"监控MQTT","topic":"/sys/2dGkWmko/+/thing/event/property/post","qos":"2","datatype":"utf8","broker":"8345ab7e.a3f928","nl":false,"rap":false,"inputs":0,"x":240,"y":180,"wires":[["b83805e5624b0666"]]},{"id":"b83805e5624b0666","type":"function","z":"86622760ed0d7951","name":"Topic转换","func":"// 从主题中提取设备ID\nconst sn = msg.topic.split("/")[3];\nconst rawData = JSON.parse(msg.payload);\n// 获取当前时间戳(13位)\nconst timestamp = Date.now();\n// 保留原始switch值并重构对象\nmsg.id = rawData.id;\nmsg.sn = sn;\nmsg.payload = {\n id: msg.id,\n method: "thing.service.property.set",\n data: { switch: rawData.params.switch },\n timestamp: timestamp,\n version: "2.0.0"\n};\nmsg.topic = '/sys/2dGkWmko/' + msg.sn +'/thing/service/property/set_reply'\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":460,"y":180,"wires":[["f8463f82ae25ae43"]]},{"id":"f8463f82ae25ae43","type":"mqtt out","z":"86622760ed0d7951","name":"发布到MQTT","topic":"","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"8345ab7e.a3f928","x":710,"y":180,"wires":[]},{"id":"8345ab7e.a3f928","type":"mqtt-broker","name":"Haos mqtt","broker":"192.168.2.22","port":"1883","clientid":"","autoConnect":true,"usetls":false,"compatmode":false,"protocolVersion":4,"keepalive":"60","cleansession":true,"autoUnsubscribe":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""}]
配网后,配置好你的本地MQTT服务器后,接入ha配置yaml如下:但是目前存在一个问题,就是只能接入1个X11,同时接入多个X11的话,HA都不能控制插座,经请教scry大佬,是因为这个插座默认以username作为Clinetid,解决办法就是修改脚本
data = {
"code": 200,
"msg": "OK",
"result": {
"username": USERNAME, #post_data['productId'][0] + '.' + post_data['deviceId'][0]
"secret": SECRET,
"sslEndpoint": f"ssl://{BROKER}:8883",
"tcpEndpoint": f"tcp://{BROKER}:1883",
"channel": ""
},
"ok": True
修改为
data = {
"code": 200,
"msg": "OK",
"result": {
"username": post_data['productId'][0] + post_data['deviceId'][0],
"secret": SECRET,
"sslEndpoint": f"ssl://{BROKER}:8883",
"tcpEndpoint": f"tcp://{BROKER}:1883",
"channel": ""
},
"ok": True
配置多个mqtt账号和密码,账号为2dGkWmko1110052001256,其中的1110052001256修改为你自己插座的SN。能将所有插座接入mqtt,控制无问题。
yaml配置如下:
mqtt:
- switch:
name: 'X11'
unique_id: X11
state_topic: '/sys/2dGkWmko/sn/thing/service/property/set_reply'
command_topic: '/sys/2dGkWmko/sn/thing/service/property/set'
payload_on: '{"id":137555423,"method":"thing.service.property.set","params":{"switch":1},"timestamp":1681502670027,"version":"2.0.0"}'
payload_off: '{"id":137555423,"method":"thing.service.property.set","params":{"switch":0},"timestamp":1681502670027,"version":"2.0.0"}'
value_template: '{{ value_json.data.switch }}'
state_on: '1'
state_off: '0'
|
|