『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
楼主: dizherui

[插件集成] Airmx 秒新加湿器接入HA

[复制链接]

5

主题

42

帖子

489

积分

中级会员

Rank: 3Rank: 3

积分
489
金钱
447
HASS币
0
发表于 2024-12-6 11:32:20 | 显示全部楼层
本帖最后由 jesusya 于 2024-12-6 15:47 编辑

问题搞定:
设备要reset 按加水+电源3秒,手机蓝牙找到,设置网络,就会连接到add-on里注册设备。感谢楼主!

感谢大神,请问这套用起来,要reset加湿器吗?我在路由器上知道加湿器的IP地址,所以我没有reset加湿器。我的是A3/A3s(手机app显示, jd购买写的A3),但是设备开机后:Add-on里的log 只有2-4次 gettime http 请求,和 1883 订阅请求,没有发送 /aw 注册请求。所以我在插件中总是没有设备:
但从HomeAssistant 添加集成 > AIRMX > “Automatic setup(AIRMX addon required)”
提示“Failed to get device list from AIRMX add-on”

看了代码:airmx/airmx-addon/rootfs/i-airmx-cn.py  , 正常应该 有 http 80 /aw 请求由加湿器发出,然后插件会注册这个加湿器 在/data 目录json格式存储,但我的就是没有收到 /aw 请求,也就没设备可以在集成里添加。我用mac 把gateway 和 dns 都设到openwrt ,mac 运行:curl -X GET http://192.168.31.16/gettime
{"time":1733449776}  说明我网络劫持是设对的。求大神指教!

另外:mqqt explorer里 是可以看到 airwater 消息。http://i.airmx.cn 可以看到:AIRMX addon,我也尝试升级Add-on 到0.1.2,也是同样不行。
@app.route("/aw")
def aw() -> dict[str, Any] | str:
    if (path := request.args.get("path")) != "aw/GET/genId":
        app.logger.error(f"Unsupported path {path}")
        raise HTTPException.NotImplemented()

    params = json.loads(request.args.get("params", ""))
    wifi_mac_b = bytearray.fromhex(params["mac"].rjust(12, "0"))
    wifi_mac = int.from_bytes(wifi_mac_b, byteorder="little")
    ble_mac = wifi_mac + 2
    device = Device(
        id=int.from_bytes(wifi_mac_b[:2], byteorder="little"),
        wifi_mac=wifi_mac.to_bytes(6, byteorder="big").hex(),
        ble_mac=ble_mac.to_bytes(6, byteorder="big").hex(),
        key=params["key"],
        type=int(params["type"]),
        ts=int(datetime.now().timestamp()),
    )

    data: dict[str, Any] | None = None
    match device.type:
        case 11:  # A5
            pass
        case 20:  # A3S
            pass
        case 21:  # A3S_V2 / Iris
            data = {
                "awId": device.id,
                "electrolysisLevel4OffTime": 1800,
                "electrolysisLevel2OpenTime": 600,
                "electrolysisLevel3OpenTime": 1200,
                "electrolysisLevel4OpenTime": 1800,
                "electrolysisLevel2OffTime": 600,
                "electrolysisLevel1OpenTime": 60,
                "electrolysisLevel3OffTime": 1200,
                "electrolysisLevel1OffTime": 120,
            }
        case 30:  # A2
            pass
        case _:
            app.logger.error(f"Unsupported device: {device}")
            raise HTTPException.NotImplemented()

    app.logger.info(f"New device registered: {device}")
    devices[device.id] = device

    with open(DEVICE_STORE_PATH, "w") as f:
        json.dump(devices, f, cls=EnhancedJSONEncoder)

    if not data:
        return '{"status":200,"data":{"awId":%d}}' % device.id

    return {"status": 200, "data": data}


@app.route("/gettime")
def gettime() -> dict[str, int]:
    return {"time": int(datetime.now().timestamp())}


回复

使用道具 举报

40

主题

317

帖子

3137

积分

论坛元老

Rank: 8Rank: 8

积分
3137
金钱
2820
HASS币
0
 楼主| 发表于 2024-12-6 11:38:16 | 显示全部楼层
gwiily 发表于 2024-12-1 00:18
域名劫持这里没问题,访问awm.airmx.cn和i.airmx.cn都会跳转到openwrt的管理页面。

端口转发这块搞不定。

你的openwrt管理端口是多少,我忘记标注需要把openwrt默认的80端口改成其他,比如8080端口,才能再转发80口;你需要上网搜索下如何更改openwrt的uhttpd端口,然后再做转发






回复

使用道具 举报

40

主题

317

帖子

3137

积分

论坛元老

Rank: 8Rank: 8

积分
3137
金钱
2820
HASS币
0
 楼主| 发表于 2024-12-6 11:39:37 | 显示全部楼层
453037736 发表于 2024-12-5 09:29
有大神知道是什么原因吗?  socat 80端口显示的是 X

日志记录器: custom_components.airmx.config_flow

你的这个问题也是OpenWRT的管理端口没有改成其他造成的,上网搜索下,把OpenWRT的80端口改成8080后再测试
回复

使用道具 举报

40

主题

317

帖子

3137

积分

论坛元老

Rank: 8Rank: 8

积分
3137
金钱
2820
HASS币
0
 楼主| 发表于 2024-12-6 11:41:53 | 显示全部楼层
453037736 发表于 2024-12-5 15:21
socat 监听80端口,显示X  这个正常吗

你的这个问题也是OpenWRT的管理端口没有改成其他造成的
回复

使用道具 举报

5

主题

42

帖子

489

积分

中级会员

Rank: 3Rank: 3

积分
489
金钱
447
HASS币
0
发表于 2024-12-6 11:42:14 | 显示全部楼层
koalaroot 发表于 2024-10-31 14:46
原作者大神 dext0r 更新了add-on到0.1.2后可以正常通过integration将AirWater A3S添加到HomeAssistant中 ...

大神,请问add-on到0.1.2 我只能 手动pull 到 HA 里,装上后,HA 是认为系统外的的组件。你是如何安装的? 可以把 加湿器开机的LOG 发我对吧下吗?我只看到了 2-4 gettime 请求和 1883请求,没有调用代码中 /aw 的注册请求, 我的LOG如下:

[2024-12-06 11:41:13,092] INFO in i-airmx-cn: Received GET request to /gettime with args: ImmutableMultiDict([])
172.17.0.1 - - [06/Dec/2024 11:41:13] "GET /gettime HTTP/1.1" 200 -
[2024-12-06 11:41:13,098] INFO in i-airmx-cn: Received GET request to /gettime with args: ImmutableMultiDict([])
172.17.0.1 - - [06/Dec/2024 11:41:13] "GET /gettime HTTP/1.1" 200 -
2024-12-06 11:41:13: New connection from 172.17.0.1:48312 on port 1883.
2024-12-06 11:41:13: Client AW_25323 already connected, closing old connection.
2024-12-06 11:41:13: New client connected from 172.17.0.1:48312 as AW_25323 (p2, c0, k30, u'aw_25323').
回复

使用道具 举报

40

主题

317

帖子

3137

积分

论坛元老

Rank: 8Rank: 8

积分
3137
金钱
2820
HASS币
0
 楼主| 发表于 2024-12-6 11:43:15 | 显示全部楼层
jesusya 发表于 2024-12-6 11:32
感谢大神,请问这套用起来,要reset加湿器吗?我在路由器上知道加湿器的IP地址,所以我没有reset加湿器。我 ...

是的,如果你的秒新软件还在登录的状态下,尝试复位秒新设备网络,重新添加,就会自动注册了
回复

使用道具 举报

5

主题

42

帖子

489

积分

中级会员

Rank: 3Rank: 3

积分
489
金钱
447
HASS币
0
发表于 2024-12-6 15:43:56 | 显示全部楼层
dizherui 发表于 2024-12-6 11:43
是的,如果你的秒新软件还在登录的状态下,尝试复位秒新设备网络,重新添加,就会自动注册了 ...

搞定了,多谢,另外hacs装大插件是1.0 config_flow.py 中:
#ADDON_HOSTNAME = "a06532c7-airmx-addon"
#ADDON_HOSTNAME = "669c5eef-airmx-addon"

与,add-on是1.1 , 的名字对不上,我生改代码:ADDON_HOSTNAME = "192.168.31.16",是hacs 有更高版本?
回复

使用道具 举报

2

主题

9

帖子

50

积分

注册会员

Rank: 2

积分
50
金钱
41
HASS币
0
发表于 2024-12-6 16:24:49 | 显示全部楼层
jesusya 发表于 2024-12-6 15:43
搞定了,多谢,另外hacs装大插件是1.0 config_flow.py 中:
#ADDON_HOSTNAME = "a06532c7-airmx-addon"
# ...

这个需要改吗? 改的这个ip是openwrt 的地址 还是 HA的地址
回复

使用道具 举报

5

主题

42

帖子

489

积分

中级会员

Rank: 3Rank: 3

积分
489
金钱
447
HASS币
0
发表于 2024-12-6 18:06:21 | 显示全部楼层
453037736 发表于 2024-12-6 16:24
这个需要改吗? 改的这个ip是openwrt 的地址 还是 HA的地址

改做端口转发服务器 openwrt 的地址,原代码里也是请求 80 和 1883 2个端口,HA add-on 守候的是 25880 和 25883. 或者直接给出 HA docker 下 add-on 的地址 17x.xxx.xxx.xxx 那个,docker 网桥分配的地址
回复

使用道具 举报

10

主题

1386

帖子

4423

积分

论坛元老

Rank: 8Rank: 8

积分
4423
金钱
3037
HASS币
0
发表于 2024-12-7 21:19:34 | 显示全部楼层
原来劫持是这么玩的,学习了,感谢大佬分享。
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-12-27 08:52 , Processed in 0.056151 second(s), 30 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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