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

标题: Airmx 秒新加湿器接入HA [打印本页]

作者: dizherui    时间: 2024-10-29 03:35
标题: Airmx 秒新加湿器接入HA
本帖最后由 dizherui 于 2024-12-6 11:45 编辑

原来秒新接入可以通过抓包获取MQTT来控制,在北方夏天用不到加湿器,直到几天前开始供热才发现秒新APP居然不能用了,MQTT服务器也连不上了,不过这个品牌在俄罗斯使用的人应该不少,也有人出了完全本地化的接入,虽然还有点小问题,但至少能简单的控制了。之前的装修贴还没写完,不是因为不更新了,是装修了好几年,中间也发生了很多事,今年才完事。我会慢慢更新整理一下这几年的装修过程,也算是给自己的一个装修日志吧。

我们开始正题
简单翻译成中文的项目地址:https://github.com/DexQueen/Airmx

将秒新加湿器集成到 Home Assistant【自己的接入记录】
该组件通过Home Assistant完全在本地控制Airmx 湿器。但通过HA和原来的AIRMX应用程序同时管理控制是不可能的。只能二选一

接入步骤:

该组件正在测试中,基本操作还是正常的,存在一些小问题!

支持的设备


安装插件

为了使该组件正常工作,需要安装额外的插件。该插件会把发送到服务器的请求重定向{i.airmx.cn,awm.airmx.cn}
安装插件:
运行插件并确保启用自动加载

组件安装

将请求重定向到插件

爱快+Openwrt实现【我没有原作者的硬件环境,所以一下是我个人的重定向方式,有点曲折】
简单的解释下插件
秒新设备会在开机链接到WiFi后,访问Web服务,来确认一些基本信息和确认已联网,并不是单纯的连接到MQTT服务器就可以正常控制,如果访问Web无响应的话,MQTT工作会不正常

为 Home Assistant 添加加湿器

连接之前,请确保所有网络设置均正确。【电脑访问域名显示的是AIRMX addon,MQTT也可以用空用户名可以正常链接,秒新设备面板的WiFi图标常亮】
添加加湿器:
其他








作者: dizherui    时间: 2024-10-29 03:36
------留位------
作者: xfyisheng    时间: 2024-10-29 07:42
德业的有没有大佬维护一下!
作者: syj371856172    时间: 2024-10-29 09:03
感谢楼主大大分享,终于可以不用秒新的app了
作者: koalaroot    时间: 2024-10-31 09:52
加湿器的型号是 AirWater A3S.
HomeAssistant上的 add-on 和 custom_components
以及
网络层面,直接通过网关防火墙做目的地址加端口NAT转换,将访问 i.airmx.cn(82.157.56.105) tcp80 和 awm.airmx.cn(140.143.130.176) tcp1833的流量分别转换给homeassistant的AIRMX add-on的tcp25880 和 tcp25883)
i.airmx.cn(82.157.56.105) tcp80 --> homeassistant tcp25880

awm.airmx.cn(140.143.130.176) tcp1833 --> homeassistant tcp25883
的目的地址加端口NAT转换也是生效的,
访问http://i.airmx.cn:80 可跳转至addon的“AIRMX addon”页面

但从HomeAssistant 添加集成 > AIRMX > “Automatic setup(AIRMX addon required)”
提示“Failed to get device list from AIRMX add-on”

AIRMX add-on 的 log 里
提示“ERROR in i-airmx-cn: Unsupported device: Device” 详细如下:

[2024-10-31 03:25:18,247] ERROR in i-airmx-cn: Unsupported device: Device(id=16324, key='6e96df52139491239fed7d6559094fa', wifi_mac='98cdacb25fc4', ble_mac='98cdacb25fc6', type=20, ts=1730316318)
172.16.104.254 - - [31/Oct/2024 03:25:18] "GET /aw?source=5&reqid=7952815300&awId=&path=aw/GET/genId&params={"mac":"c45fb2accd98","key":"6e96df52139491239fed7d6559094fa","version":"00.01.09","isAnion":1,"type":20}&sig=ee8e0c24dc2c10ec759fd54aaa8c6979 HTTP/1.1" 501 -
[2024-10-31 03:25:18,458] ERROR in i-airmx-cn: Unsupported device: Device(id=16324, key='47e4c16fe79d12371bbec4a5f63092d0', wifi_mac='98cdacb25fc4', ble_mac='98cdacb25fc6', type=20, ts=1730316318)
172.16.104.254 - - [31/Oct/2024 03:25:18] "GET /aw?source=5&reqid=5704099233&awId=&path=aw/GET/genId&params={"mac":"c45fb2accd98","key":"47e4c16fe79d12371bbec4a5f63092d0","version":"00.01.09","isAnion":1,"type":20}&sig=306880f928e81410376aa637e81c42fe HTTP/1.1" 501 -
[2024-10-31 03:25:18,672] ERROR in i-airmx-cn: Unsupported device: Device(id=16324, key='a361d1d5a5dc12333face9d40e9a018b', wifi_mac='98cdacb25fc4', ble_mac='98cdacb25fc6', type=20, ts=1730316318)
172.16.104.254 - - [31/Oct/2024 03:25:18] "GET /aw?source=5&reqid=8604267230&awId=&path=aw/GET/genId&params={"mac":"c45fb2accd98","key":"a361d1d5a5dc12333face9d40e9a018b","version":"00.01.09","isAnion":1,"type":20}&sig=8b5968cc9668120b4bf217057deede2b HTTP/1.1" 501 -
作者: koalaroot    时间: 2024-10-31 14:46
koalaroot 发表于 2024-10-31 09:52
加湿器的型号是 AirWater A3S.
HomeAssistant上的 add-on 和 custom_components
以及

原作者大神 dext0r 更新了add-on到0.1.2后可以正常通过integration将AirWater A3S添加到HomeAssistant中了,但device和所有entities仍然显示Unavailable
作者: koalaroot    时间: 2024-10-31 19:19
koalaroot 发表于 2024-10-31 14:46
原作者大神 dext0r 更新了add-on到0.1.2后可以正常通过integration将AirWater A3S添加到HomeAssistant中 ...

经原作者大神 dext0r 帮忙排查,定位到是DestinationNAT条目的问题
检查发现这条DNAT条目确实缺少了source translation的部分,这是用来解决DestinationNAT过程中,由于防火墙的会话是状态化的,数据报文来回路径不一致会有问题
awm.airmx.cn(140.143.130.176) tcp1833 --> homeassistant tcp25883

NAT条目如图:[attach]64700[/attach]

调整后AIRMX AirWater A3S 接入HomeAssistant 已经正常了

作者: billrice    时间: 2024-11-12 07:31
有个问题
如果在openwet里面做了端口转发,秒新-WEB服务 TCP 80 IPv4-TCP x.x.x.x 25880
那openwrt本身的web不就上不去了么
作者: koalaroot    时间: 2024-11-12 10:04
billrice 发表于 2024-11-12 07:31
有个问题
如果在openwet里面做了端口转发,秒新-WEB服务 TCP 80 IPv4-TCP x.x.x.x 25880
那openwrt本身的we ...

两条NAT目的转换条目是这样的:
i.airmx.cn(82.157.56.105) tcp80 --> homeassistant tcp25880
从内部访问目的地址为i.airmx.cn(82.157.56.105)  且 目的端口为tcp80的会话,转换目的地址为homeassistant ip地址,转换目的端口号为 tcp25880

awm.airmx.cn(140.143.130.176) tcp1833 --> homeassistant tcp25883
从内部访问目的地址为awm.airmx.cn(140.143.130.176) 且 目的端口为tcp1833的会话,转换目的地址为homeassistant ip地址,转换目的端口号为 tcp25883

访问目的地址为openwrt IP地址 且 目的端口为tcp80端口号的会话,并不做转换,不影响访问openwrt本身的web管理页面


作者: daxiong828    时间: 2024-11-17 00:37
要是通过HA和原来的AIRMX应用程序能同时管理就好了
作者: xairt    时间: 2024-11-20 21:23
daxiong828 发表于 2024-11-17 00:37
要是通过HA和原来的AIRMX应用程序能同时管理就好了

原来的airmx都登录不了了吧
作者: furong600    时间: 2024-11-24 22:28
赞赞赞!刚才把秒新加湿器打开发现app登录不上了。一查,跑路了。。。
还好有大佬分享方案,感谢
作者: wzguzi    时间: 2024-11-27 22:55
本帖最后由 wzguzi 于 2024-11-27 23:38 编辑

秒新A3S,按教程一步步来,MQTT Explorer也已经看到了airwater的一些信息,不过最后在添加设备的时候失败,说是“Device was not found”,有大佬帮忙看看啥问题么。
鹅。。最后自己发现问题还是在端口转发上,zone选错了。。。搞定了,谢谢楼主信息

作者: gwiily    时间: 2024-12-1 00:18
域名劫持这里没问题,访问awm.airmx.cn和i.airmx.cn都会跳转到openwrt的管理页面。

端口转发这块搞不定。

方法1.用socat转发,80端口的转发显示x,浏览器访问也不行。
[attach]65583[/attach]

方法2.用openwrt自带的端口转发,参考楼上的设置。也不行,浏览器访问不了。
[attach]65582[/attach]


作者: leol9394    时间: 2024-12-3 22:52
wzguzi 发表于 2024-11-27 22:55
秒新A3S,按教程一步步来,MQTT Explorer也已经看到了airwater的一些信息,不过最后在添加设备的时候失败, ...

大佬,我现在情况也是这样,a3s,mqtt也已经能看到了,但还是device was not found
请问下你这里说的zone指的是什么?
作者: smallsb    时间: 2024-12-4 14:02
支持啊 我的加湿器终于有救了 过几天闲了搞搞
作者: 453037736    时间: 2024-12-5 09:29
有大神知道是什么原因吗?  socat 80端口显示的是 X
[attach]65758[/attach]
日志记录器: custom_components.airmx.config_flow
来源: custom_components/airmx/config_flow.py:75
集成: AIRMX (文档, 问题)
首次出现: 2024年12月2日 13:49:26 (5 次总计出现)
上次记录: 09:26:28

Cannot connect to host a06532c7-airmx-addon:80 ssl:default [DNS server returned answer with no data]
Traceback (most recent call last):
  File "/usr/local/lib/python3.12/site-packages/aiohttp/resolver.py", line 105, in resolve
    resp = await self._resolver.getaddrinfo(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
aiodns.error.DNSError: (1, 'DNS server returned answer with no data')

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/lib/python3.12/site-packages/aiohttp/connector.py", line 1335, in _create_direct_connection
    hosts = await self._resolve_host(host, port, traces=traces)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/aiohttp/connector.py", line 989, in _resolve_host
    return await asyncio.shield(resolved_host_task)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/aiohttp/connector.py", line 1020, in _resolve_host_with_throttle
    addrs = await self._resolver.resolve(host, port, family=self._family)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/aiohttp/resolver.py", line 114, in resolve
    raise OSError(None, msg) from exc
OSError: [Errno None] DNS server returned answer with no data

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/config/custom_components/airmx/config_flow.py", line 75, in async_step_select_device
    await self._async_discover_wifi_devices()
  File "/config/custom_components/airmx/config_flow.py", line 211, in _async_discover_wifi_devices
    response = await http.get(f"http://{ADDON_HOSTNAME}/_devices")
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/aiohttp/client.py", line 663, in _request
    conn = await self._connector.connect(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/aiohttp/connector.py", line 538, in connect
    proto = await self._create_connection(req, traces, timeout)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/aiohttp/connector.py", line 1050, in _create_connection
    _, proto = await self._create_direct_connection(req, traces, timeout)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/aiohttp/connector.py", line 1341, in _create_direct_connection
    raise ClientConnectorDNSError(req.connection_key, exc) from exc
aiohttp.client_exceptions.ClientConnectorDNSError: Cannot connect to host a06532c7-airmx-addon:80 ssl:default [DNS server returned answer with no data]
作者: 453037736    时间: 2024-12-5 13:35
gwiily 发表于 2024-12-1 00:18
域名劫持这里没问题,访问awm.airmx.cn和i.airmx.cn都会跳转到openwrt的管理页面。

端口转发这块搞不定。

您好 解决了吗?我也这个情况
作者: 453037736    时间: 2024-12-5 15:21
socat 监听80端口,显示X  这个正常吗
作者: 之于    时间: 2024-12-5 23:36
有没有人用原作者的ESP8266的方式啊,烧录固件后可以配网,加湿器也连接到这个这个网络,但是访问i.airmx.cn不会显示AIRMX addon
作者: jesusya    时间: 2024-12-6 11:32
本帖最后由 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,也是同样不行。
  1. @app.route("/aw")
  2. def aw() -> dict[str, Any] | str:
  3.     if (path := request.args.get("path")) != "aw/GET/genId":
  4.         app.logger.error(f"Unsupported path {path}")
  5.         raise HTTPException.NotImplemented()

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

  18.     data: dict[str, Any] | None = None
  19.     match device.type:
  20.         case 11:  # A5
  21.             pass
  22.         case 20:  # A3S
  23.             pass
  24.         case 21:  # A3S_V2 / Iris
  25.             data = {
  26.                 "awId": device.id,
  27.                 "electrolysisLevel4OffTime": 1800,
  28.                 "electrolysisLevel2OpenTime": 600,
  29.                 "electrolysisLevel3OpenTime": 1200,
  30.                 "electrolysisLevel4OpenTime": 1800,
  31.                 "electrolysisLevel2OffTime": 600,
  32.                 "electrolysisLevel1OpenTime": 60,
  33.                 "electrolysisLevel3OffTime": 1200,
  34.                 "electrolysisLevel1OffTime": 120,
  35.             }
  36.         case 30:  # A2
  37.             pass
  38.         case _:
  39.             app.logger.error(f"Unsupported device: {device}")
  40.             raise HTTPException.NotImplemented()

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

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

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

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


  48. @app.route("/gettime")
  49. def gettime() -> dict[str, int]:
  50.     return {"time": int(datetime.now().timestamp())}
复制代码



作者: dizherui    时间: 2024-12-6 11:38
gwiily 发表于 2024-12-1 00:18
域名劫持这里没问题,访问awm.airmx.cn和i.airmx.cn都会跳转到openwrt的管理页面。

端口转发这块搞不定。

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







作者: dizherui    时间: 2024-12-6 11:39
453037736 发表于 2024-12-5 09:29
有大神知道是什么原因吗?  socat 80端口显示的是 X

日志记录器: custom_components.airmx.config_flow

你的这个问题也是OpenWRT的管理端口没有改成其他造成的,上网搜索下,把OpenWRT的80端口改成8080后再测试
作者: dizherui    时间: 2024-12-6 11:41
453037736 发表于 2024-12-5 15:21
socat 监听80端口,显示X  这个正常吗

你的这个问题也是OpenWRT的管理端口没有改成其他造成的
作者: jesusya    时间: 2024-12-6 11:42
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').

作者: dizherui    时间: 2024-12-6 11:43
jesusya 发表于 2024-12-6 11:32
感谢大神,请问这套用起来,要reset加湿器吗?我在路由器上知道加湿器的IP地址,所以我没有reset加湿器。我 ...

是的,如果你的秒新软件还在登录的状态下,尝试复位秒新设备网络,重新添加,就会自动注册了
作者: jesusya    时间: 2024-12-6 15:43
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 有更高版本?
作者: 453037736    时间: 2024-12-6 16:24
jesusya 发表于 2024-12-6 15:43
搞定了,多谢,另外hacs装大插件是1.0 config_flow.py 中:
#ADDON_HOSTNAME = "a06532c7-airmx-addon"
# ...

这个需要改吗? 改的这个ip是openwrt 的地址 还是 HA的地址
作者: jesusya    时间: 2024-12-6 18:06
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 网桥分配的地址
作者: 隔壁的王叔叔    时间: 2024-12-7 21:19
原来劫持是这么玩的,学习了,感谢大佬分享。
作者: failth    时间: 2024-12-8 20:54
jesusya 发表于 2024-12-6 11:32
问题搞定:
设备要reset 按加水+电源3秒,手机蓝牙找到,设置网络,就会连接到add-on里注册设备。感谢楼主 ...

我reset了 然后怎么连wifi呢?
作者: leol9394    时间: 2024-12-8 21:04
终于接入成功了,感谢楼主和jesusya,之前一直失败,原因是不知道需要重置A3S,不重置的话A3S不会向HA的那个加载项去注册,不注册的话,在添加A3S的时候,设备列表中会找不到它,显示device was not found

另外还怕重置了之后无法连回原来的wifi,根据原作者的介绍,A3S默认连接的wifi名是miaoxin,密码是miaoxin666。这就意味着家里要特意单独开一个wifi去给A3S连,这是我不愿意的。
但是楼主和jesusya提醒,可以用原来的那个AIRMX秒新app通过蓝牙给重置后的A3S设置wifi,试了一下,果然如此。
打开那个app,有各种报错也不用管,在顶栏有个下拉框,点击后里面有一个添加新设备,APP会用蓝牙搜索A3S,这里就可以进行设置。
按照提示一步步下去,虽然最终还是有报错,但是看到机器上那个wifi图标常亮了,就证明wifi已经设置成功了,就可以退出这个app了

另外关于流量劫持,如果家里的路由器支持自定义DNS的话,可以省去端口转发那一步。
因为HA里面AIRMX的加载项是支持修改端口的,默认的25880可以改成80,25883改成1883
A3S连接的地址和端口其实只有两个:
i.airmx.cn:80
awm.airmx.cn:1883
假设家里部署HA的地址是192.168.1.10,修改完加载项的默认端口后,只要让i.airmx.cn和awm.airmx.cn解析出来是192.168.1.10就可以了,也就是说
i.airmx.cn:80 --> 192.168.1.10:80 (加载项的web端口)
awm.airmx.cn:1883 --> 192.168.1.10:1883 (加载项的mqtt端口)
作者: failth    时间: 2024-12-8 21:32
leol9394 发表于 2024-12-8 21:04
终于接入成功了,感谢楼主和jesusya,之前一直失败,原因是不知道需要重置A3S,不重置的话A3S不会向HA的那 ...

请问是安卓还是ios的秒新app 我怎么找不到重置后添加网络的地方 谢谢!
作者: failth    时间: 2024-12-8 22:03
本帖最后由 failth 于 2024-12-8 22:05 编辑

求助:我现在电脑连接i.airmx.cn,awm.airmx.cn都能正常显示airmx addon,然后mqtt里面也能看到设备。
重置了机器后,新建了miaoxin的wifi,也自动连接了,但是还是无法添加,自动添加就显示Failed to get device list from AIRMX addon
[attach]65842[/attach]
作者: leol9394    时间: 2024-12-8 22:05
failth 发表于 2024-12-8 21:32
请问是安卓还是ios的秒新app 我怎么找不到重置后添加网络的地方 谢谢!

我的是ios,安卓不清楚
作者: leol9394    时间: 2024-12-8 22:10
failth 发表于 2024-12-8 22:03
求助:我现在电脑连接i.airmx.cn,awm.airmx.cn都能正常显示airmx addon,然后mqtt里面也能看到设备。
重置 ...

你的是什么型号,如果是A3S的话请看6楼,
楼主的仓库是fork原作者的,airmx加载项版本是0.1.1,原作者的最新版是0.1.2
所以添加加载项的时候请输入 https://github.com/dext0r/airmx
作者: failth    时间: 2024-12-8 22:24
leol9394 发表于 2024-12-8 22:10
你的是什么型号,如果是A3S的话请看6楼,
楼主的仓库是fork原作者的,airmx加载项版本是0.1.1,原作者的 ...

感谢!果然是这个原因 我用的是作者fork的=。=排查了半天 感谢!
另外你的a3s可以开启电解水吗?
作者: gwiily    时间: 2024-12-8 22:37
本帖最后由 gwiily 于 2024-12-8 22:40 编辑
leol9394 发表于 2024-12-8 22:10
你的是什么型号,如果是A3S的话请看6楼,
楼主的仓库是fork原作者的,airmx加载项版本是0.1.1,原作者的 ...

请问怎么升级到0.1.2版本,我在添加项填的地址是对的,但是还是0.1.1版本。
[attach]65844[/attach]


[attach]65843[/attach]




作者: leol9394    时间: 2024-12-8 22:41
failth 发表于 2024-12-8 22:24
感谢!果然是这个原因 我用的是作者fork的=。=排查了半天 感谢!
另外你的a3s可以开启电解水吗? ...

可以,我看到配置里已经开了
我的英文版 settings --> devices & services --> devices --> AirWater A3S xxxx --> Ionization
你可以参考一下
作者: leol9394    时间: 2024-12-8 22:55
gwiily 发表于 2024-12-8 22:37
请问怎么升级到0.1.2版本,我在添加项填的地址是对的,但是还是0.1.1版本。

先卸载0.1.1,然后在加载项商店搜索airmx,点进去应该看到的是0.1.2才对
作者: gwiily    时间: 2024-12-8 23:24
leol9394 发表于 2024-12-8 22:55
先卸载0.1.1,然后在加载项商店搜索airmx,点进去应该看到的是0.1.2才对

感谢,用起来了。彻底删掉仓库,重新添加就好了。
另外,域名劫持参考32楼,去掉端口转发,直接在openwrt里面将i.airmx.cn和awm.airmx.cn劫持到ha的地址,在addon里面端口配置改为80和1883。然后就可以添加了。
作者: mxy7723    时间: 2024-12-9 18:20
leol9394 发表于 2024-12-8 22:05
我的是ios,安卓不清楚

请问是iOS上之前就登陆了账号没退出过吗,我新下载的app貌似没有蓝牙配置网络的地方。
作者: jesusya    时间: 2024-12-10 13:24
leol9394 发表于 2024-12-8 21:04
终于接入成功了,感谢楼主和jesusya,之前一直失败,原因是不知道需要重置A3S,不重置的话A3S不会向HA的那 ...

是的,如果HA服务器上没看MQTT服务器,1883就空着可以用
作者: jesusya    时间: 2024-12-10 13:30
failth 发表于 2024-12-8 20:54
我reset了 然后怎么连wifi呢?

和原来手机注册设备一样,蓝牙找到新加湿器,然后手机要2。5G网络,然后网下点,最后一步不成功。“往下”点的过程,设备就把注册申请发给了add-on 插件了
作者: fifamanutd    时间: 2024-12-14 20:09
jesusya 发表于 2024-12-10 13:30
和原来手机注册设备一样,蓝牙找到新加湿器,然后手机要2。5G网络,然后网下点,最后一步不成功。“往下 ...

是不是原来的app还是登录状态才能添加新设备,之前以为是手机APP的问题卸载了,现在重新下了又登不上了,没有添加设备选项,搞得不敢贸然重置设备网络
作者: fifamanutd    时间: 2024-12-14 21:43
各位大佬,MQTT Explorer能收到设备的消息,但是在添加集成时报错,有解决办法吗
作者: jesusya    时间: 2024-12-14 23:41
fifamanutd 发表于 2024-12-14 20:09
是不是原来的app还是登录状态才能添加新设备,之前以为是手机APP的问题卸载了,现在重新下了又登不上了, ...

app 我是在登录状态,看看用微信号是否可以登录app
作者: jesusya    时间: 2024-12-14 23:42
fifamanutd 发表于 2024-12-14 21:43
各位大佬,MQTT Explorer能收到设备的消息,但是在添加集成时报错,有解决办法吗 ...

看看帖子,也许有帮助,我也遇到过,要重置设备,才会注册设备,才可以添加
作者: aistcx    时间: 2024-12-22 13:05
按32楼方式 已成功。 A3s的话需要重置加湿器,用手机app重新添加设备才会注册。但是不知道控制里的wud是什么功能
作者: jesusya    时间: 2024-12-23 19:41
本帖最后由 jesusya 于 2024-12-24 13:28 编辑

A3湿度内置传感器是加湿器周边的湿度,比真正室内的湿度搞10%,看着不准的湿度心里很别扭,下改了下插件代码:/airmax/humidifier.py ,查找*** 可以看到我更改的地方
[attach]66291[/attach][attach]66292[/attach]

  1. import json
  2. from typing import Any

  3. import logging

  4. _LOGGER = logging.getLogger(__name__)
  5. _LOGGER.setLevel(logging.DEBUG)

  6. from homeassistant.components.humidifier import (
  7.     MODE_AUTO,
  8.     HumidifierDeviceClass,
  9.     HumidifierEntity,
  10.     HumidifierEntityFeature,
  11.     HumidifierAction,   # ***改为 显示加湿、空闲、关闭等运行状态
  12. )
  13. from homeassistant.components.humidifier.const import MODE_SLEEP
  14. from homeassistant.config_entries import ConfigEntry
  15. from homeassistant.const import ATTR_ENTITY_ID
  16. from homeassistant.core import HomeAssistant, callback
  17. from homeassistant.helpers import config_validation as cv, device_registry as dr, entity_platform
  18. from homeassistant.helpers.entity_platform import AddEntitiesCallback
  19. import voluptuous as vol

  20. from .airwater.const import AirWaterCommand, AirWaterMode
  21. from .airwater.device import AirWaterDevice
  22. from .const import ATTR_COMMAND_DATA, ATTR_COMMAND_ID, DEVICES, DOMAIN, MODE_MANUAL, SERVICE_SEND_COMMAND
  23. from .entity import AirWaterEntity


  24. async def async_setup_entry(
  25.     hass: HomeAssistant,
  26.     entry: ConfigEntry,
  27.     async_add_entities: AddEntitiesCallback,
  28. ) -> None:
  29.     device: AirWaterDevice = hass.data[DOMAIN][DEVICES][entry.entry_id]
  30.     async_add_entities([AirWaterHumidifier(device, entry)])

  31.     platform = entity_platform.async_get_current_platform()
  32.     platform.async_register_entity_service(
  33.         SERVICE_SEND_COMMAND,
  34.         {
  35.             vol.Required(ATTR_ENTITY_ID): cv.entity_id,
  36.             vol.Required(ATTR_COMMAND_ID): vol.Coerce(int),
  37.             vol.Required(ATTR_COMMAND_DATA): cv.string,
  38.         },
  39.         "async_send_command",
  40.     )


  41. class AirWaterHumidifier(AirWaterEntity, HumidifierEntity):
  42.     _attr_name = None
  43.     _attr_device_class = HumidifierDeviceClass.HUMIDIFIER
  44.     _attr_supported_features = HumidifierEntityFeature.MODES
  45.     _attr_available_modes = [MODE_AUTO, MODE_MANUAL, MODE_SLEEP]
  46.     _attr_translation_key = "humidifier"

  47.     @property
  48.     def is_on(self) -> bool | None:
  49.         return self._device.status.power

  50.     @property
  51.     def current_humidity(self) -> int | None:
  52.         # ***获取 sensor.temperature_humidity_sensor_6510_humidity 的湿度值
  53.         value = self.hass.states.get("sensor.temperature_humidity_sensor_6510_humidity").state # 改为传感器实体ID
  54.         #_LOGGER.debug("AirMX Room Current humidity value: %s", value)

  55.         # 确保湿度值有效,且转换为整数
  56.         if value:
  57.             try:
  58.                 #return int(float(value))  # 确保转换为整数
  59.                 return round(float(value))
  60.             except ValueError:
  61.                 return None

  62.         return None

  63.     @property
  64.     def target_humidity(self) -> int | None:
  65.         #if self.mode == MODE_MANUAL:     # ***改为 手动模式也显示仪表盘运作状态
  66.         #    return None

  67.         return self._device.status.target_humidity

  68.     @property
  69.     def mode(self) -> str | None:
  70.         return {
  71.             AirWaterMode.SLEEP: MODE_SLEEP,
  72.             AirWaterMode.MANUAL: MODE_MANUAL,
  73.         }.get(self._device.status.mode, MODE_AUTO)
  74.    
  75.     @property   # ***改为 显示加湿、空闲、关闭等运行状态
  76.     def action(self) -> HumidifierAction | None:
  77.         if not self.is_on:
  78.             return HumidifierAction.OFF
  79.         if self.current_humidity is not None and self.target_humidity is not None:
  80.             if self.current_humidity < self.target_humidity:
  81.                 return HumidifierAction.HUMIDIFYING
  82.             else:
  83.                 return HumidifierAction.IDLE
  84.         return None

  85.     async def async_turn_on(self, **kwargs: Any) -> None:
  86.         await self._device.async_turn_on()

  87.     async def async_turn_off(self, **kwargs: Any) -> None:
  88.         await self._device.async_turn_off()

  89.     async def async_set_humidity(self, humidity: int) -> None:
  90.         await self._device.async_set_target_humidity(humidity)

  91.     async def async_set_mode(self, mode: str) -> None:
  92.         await self._device.async_set_mode(
  93.             {
  94.                 MODE_SLEEP: AirWaterMode.SLEEP,
  95.                 MODE_MANUAL: AirWaterMode.MANUAL,
  96.             }.get(mode, AirWaterMode.AUTO)
  97.         )

  98.     async def async_send_command(self, command_id: int, command_data: str) -> None:
  99.         await self._device.async_send_command(AirWaterCommand(command_id), json.loads(command_data))

  100.     @callback
  101.     def async_write_ha_state(self) -> None:
  102.         super().async_write_ha_state()

  103.         if self.device_info and self.device_info.get("sw_version") != self._device.status.firmware_version:
  104.             self._update_device_info()

  105.     def _update_device_info(self) -> None:
  106.         device_registry = dr.async_get(self.hass)
  107.         device = device_registry.async_get_device({(DOMAIN, self.unique_id)})
  108.         if device:
  109.             device_registry.async_update_device(device.id, sw_version=self._device.status.firmware_version)
复制代码



作者: lichao    时间: 2024-12-23 21:26
大神,秒新还有一个新风PRO或者pro 1s 能想想办法通过这种方式接入ha吗?
作者: 冰红茶    时间: 2025-2-13 17:10
没有搞懂,请问怎么让加湿器连上家里的路由器?现在完全不能控制了吧
作者: silenuszhi    时间: 2025-2-18 12:31
冰红茶 发表于 2025-2-13 17:10
没有搞懂,请问怎么让加湿器连上家里的路由器?现在完全不能控制了吧

开机会默认连入miaoxin这个ssid,密码miaoxin666。

原来的repo里面给了ha有蓝牙的方法,
https://github.com/dext0r/airmx

这里我添加了个用windows电脑的方法。
https://github.com/silenuszhi/airmx/tree/add_pc_ap_support

作者: cloverstd    时间: 2025-2-24 10:59
能告知下 token 的具体规则吗?
我是秒新新风,我现在可以劫持 mqtt,但是只能读,不能控制,因为有 sig,由于 app 没法用了,我就抓不到 sign_key 了
秒新新风也没有按照加湿器一样的方式把 sign_key 给发送到服务器去
我现在有 sig 和生成方式,如果能知道 token 的规则,我就可以枚举出来我的 sign_key 了
所以能不能告知下 token 的具体规则,比如是大小写字母数字,长度之类的
作者: wangziyu5208    时间: 2025-2-27 11:58
dizherui 发表于 2024-12-6 11:38
你的openwrt管理端口是多少,我忘记标注需要把openwrt默认的80端口改成其他,比如8080端口,才能再转发80 ...

修改了默认端口后,会连锁影响openwrt的其他功能吗
作者: haikuoyi    时间: 2025-5-6 14:38
终于连上了




欢迎光临 『瀚思彼岸』» 智能家居技术论坛 (https://bbs.hassbian.com/) Powered by Discuz! X3.5