找回密码
 立即注册

微信扫码登录

搜索
查看: 1507|回复: 21

[基础教程] 中国移动X11不刷机接入HA,更新手动按键更新插座状态

[复制链接]

4

主题

118

回帖

1385

积分

金牌会员

积分
1385
金钱
1263
HASS币
10
发表于 2025-3-15 17:20:14 | 显示全部楼层 |阅读模式
本帖最后由 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'





回复

使用道具 举报

4

主题

118

回帖

1385

积分

金牌会员

积分
1385
金钱
1263
HASS币
10
 楼主| 发表于 2025-3-28 20:39:40 | 显示全部楼层
有大佬帮忙看看吗?
回复

使用道具 举报

2

主题

104

回帖

1275

积分

金牌会员

积分
1275
金钱
1169
HASS币
0
发表于 2025-3-29 03:40:18 | 显示全部楼层
esphome是用add mac suffix来区分,供参考
回复

使用道具 举报

4

主题

118

回帖

1385

积分

金牌会员

积分
1385
金钱
1263
HASS币
10
 楼主| 发表于 2025-3-29 10:34:53 | 显示全部楼层
sauron 发表于 2025-3-29 03:40
esphome是用add mac suffix来区分,供参考

scry大佬是用python的脚本配网和配置mqtt服务器的,并不是esphome固件。脚本里面配置mqtt服务器的时候,没有对每个插座的Clinet ID做区分,直接用mqtt服务器的登录名,导致每个插座接入mqtt服务器都是同一个Clinet ID。
回复

使用道具 举报

scry 

6

主题

93

回帖

803

积分

高级会员

积分
803
金钱
704
HASS币
10
发表于 2025-4-9 20:04:17 | 显示全部楼层
topic指定不同的sn也不能分开控制嘛
回复

使用道具 举报

4

主题

118

回帖

1385

积分

金牌会员

积分
1385
金钱
1263
HASS币
10
 楼主| 发表于 2025-4-10 20:56:40 | 显示全部楼层
本帖最后由 loveyolanda 于 2025-4-10 20:58 编辑
scry 发表于 2025-4-9 20:04
topic指定不同的sn也不能分开控制嘛

是的,我查看了mqtt日志,所有接入的插座topic是用sn区分了的,但是接入的名称全部都是用mqtt服务器的username为设备名,导致接入多个插座会冲突,反而全部都不能控制。期待大佬能解决这个问题,脚本太好用了,不用拆机刷机。
回复

使用道具 举报

4

主题

118

回帖

1385

积分

金牌会员

积分
1385
金钱
1263
HASS币
10
 楼主| 发表于 2025-4-11 10:58:57 | 显示全部楼层
scry 发表于 2025-4-9 20:04
topic指定不同的sn也不能分开控制嘛

大佬,能留个QQ吗?请教下
回复

使用道具 举报

scry 

6

主题

93

回帖

803

积分

高级会员

积分
803
金钱
704
HASS币
10
发表于 2025-4-11 19:25:58 | 显示全部楼层
loveyolanda 发表于 2025-4-10 20:56
是的,我查看了mqtt日志,所有接入的插座topic是用sn区分了的,但是接入的名称全部都是用mqtt服务器的user ...

username是指server.py脚本里的那个嘛,第30行有一段注释那个是动态返回username的代码
回复

使用道具 举报

scry 

6

主题

93

回帖

803

积分

高级会员

积分
803
金钱
704
HASS币
10
发表于 2025-4-11 19:27:21 | 显示全部楼层
loveyolanda 发表于 2025-4-11 10:58
大佬,能留个QQ吗?请教下

私发给你了
回复

使用道具 举报

4

主题

118

回帖

1385

积分

金牌会员

积分
1385
金钱
1263
HASS币
10
 楼主| 发表于 2025-4-17 17:36:27 | 显示全部楼层
解决办法见帖子。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian ( 晋ICP备17001384号-1 )

GMT+8, 2025-8-6 15:44 , Processed in 0.193498 second(s), 8 queries , MemCached On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表