『瀚思彼岸』» 智能家居技术论坛
标题: 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应用程序同时管理控制是不可能的。只能二选一
接入步骤:
- 安装插件
- 安装组件
- 在路由系统上执行设置或在 ESP8266 上运行专用接入点
- 重置加湿器【可选】
- 为 Home Assistant 添加加湿器
该组件正在测试中,基本操作还是正常的,存在一些小问题!
支持的设备
- AirWater A2【已添加】
- AirWater A3【已添加】
- AirWater A3S【已添加】
- AirWater A3S V2 (Tion Iris)【没测试】
- AirWater A5【没测试】
安装插件
为了使该组件正常工作,需要安装额外的插件。该插件会把发送到服务器的请求重定向{i.airmx.cn,awm.airmx.cn}
安装插件:
运行插件并确保启用自动加载
组件安装
将请求重定向到插件
爱快+Openwrt实现【我没有原作者的硬件环境,所以一下是我个人的重定向方式,有点曲折】
爱快:
- 通过重置再接入,获取当前接入秒新设备的MAC地址
- 使用爱快的 'DHCP静态分配' 把秒新设备的网关和DNS设置成'openwrt'的ip
Openwrt:
- 在Openwrt中设置'自定义挟持域名' awm.airmx.cn > Openwrt_IP;i.airmx.cn > Openwrt_IP
- 在Openwrt中利用Socat插件实现端口的转发,把挟持来的访问转发给正确的HA地址和端口
2.1秒新-MQTT服务 TCP 1883 IPv4-TCP x.x.x.x 25883【1833是秒新系统访问默认的端口不可改,x.x.x.x是你的HA系统IP,25883是插件设置里默认配置的端口】
2.2秒新-WEB服务 TCP 80 IPv4-TCP x.x.x.x 25880【80是秒新系统访问默认的端口不可改,x.x.x.x是你的HA系统IP,25880是插件设置里默认配置的端口】
正确设置后:
- 把你的电脑网关调整到Openwrt后
- 用浏览器访问awm.airmx.cn和i.airmx.cn, 正确的会显示:AIRMX addon
- 用MQTT Explorer 新建链接 地址:awm.airmx.cn 端口1883 用户名和密码为空 正确的会可以正常链接 先不用关闭
- 把秒新机器断电几秒钟后重新上电,WiFi图标不会闪烁而是常亮,在MQTT Explorer中会看到类似airwater/01/0/1/1/*****的订阅地址
简单的解释下插件
秒新设备会在开机链接到WiFi后,访问Web服务,来确认一些基本信息和确认已联网,并不是单纯的连接到MQTT服务器就可以正常控制,如果访问Web无响应的话,MQTT工作会不正常
- 正确设置WiFi
- 这时如果没有做好当前设备的重定向,面板的WiFi图标会闪烁,认为没有正确联网,常亮表示我们搭建的挟持环境已经生效了
- 秒新设备访问的WEB和MQTT服务会劫持并重新转发到本地IP和插件所设置的端口
为 Home Assistant 添加加湿器
连接之前,请确保所有网络设置均正确。【电脑访问域名显示的是AIRMX addon,MQTT也可以用空用户名可以正常链接,秒新设备面板的WiFi图标常亮】
添加加湿器:
- 在 Home Assistant 中,转至设置 > 设备和服务 > 添加集成 > AIRMX(如果未列出,请刷新页面)
- 选择“Automatic setup(AIRMX addon required)”
- 勾选你需要添加设备对应的MAC地址【MAC的后两位可能会与路由里显示的MAC对应不上,确认前5位基本就可确认】
其他- 我并没把原作者的全部信息翻译和复制过来,这只是我在没有原作者硬件环境的情况下,实现的办法
- Openwrt设置80转发之前,需要把Openwrt管理端口的80端口改成其他端口后再做转发
作者: 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¶ms={"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¶ms={"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¶ms={"mac":"c45fb2accd98","key":"a361d1d5a5dc12333face9d40e9a018b","version":"00.01.09","isAnion":1,"type":20}&sig=8b5968cc9668120b4bf217057deede2b HTTP/1.1" 501 -
作者: koalaroot 时间: 2024-10-31 14:46
原作者大神 dext0r 更新了add-on到0.1.2后可以正常通过integration将AirWater A3S添加到HomeAssistant中了,但device和所有entities仍然显示Unavailable
作者: koalaroot 时间: 2024-10-31 19:19
经原作者大神 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
两条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
原来的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
大佬,我现在情况也是这样,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
您好 解决了吗?我也这个情况
作者: 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,也是同样不行。
- @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())}
复制代码
作者: dizherui 时间: 2024-12-6 11:38
你的openwrt管理端口是多少,我忘记标注需要把openwrt默认的80端口改成其他,比如8080端口,才能再转发80口;你需要上网搜索下如何更改openwrt的uhttpd端口,然后再做转发
作者: dizherui 时间: 2024-12-6 11:39
你的这个问题也是OpenWRT的管理端口没有改成其他造成的,上网搜索下,把OpenWRT的80端口改成8080后再测试
作者: dizherui 时间: 2024-12-6 11:41
你的这个问题也是OpenWRT的管理端口没有改成其他造成的
作者: jesusya 时间: 2024-12-6 11:42
大神,请问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 15: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
这个需要改吗? 改的这个ip是openwrt 的地址 还是 HA的地址
作者: jesusya 时间: 2024-12-6 18:06
改做端口转发服务器 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
我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
请问是安卓还是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
我的是ios,安卓不清楚
作者: leol9394 时间: 2024-12-8 22:10
你的是什么型号,如果是A3S的话请看6楼,
楼主的仓库是fork原作者的,airmx加载项版本是0.1.1,原作者的最新版是0.1.2
所以添加加载项的时候请输入 https://github.com/dext0r/airmx
作者: failth 时间: 2024-12-8 22:24
感谢!果然是这个原因 我用的是作者fork的=。=排查了半天 感谢!
另外你的a3s可以开启电解水吗?
作者: gwiily 时间: 2024-12-8 22:37
本帖最后由 gwiily 于 2024-12-8 22:40 编辑
请问怎么升级到0.1.2版本,我在添加项填的地址是对的,但是还是0.1.1版本。
[attach]65844[/attach]
[attach]65843[/attach]
作者: leol9394 时间: 2024-12-8 22:41
可以,我看到配置里已经开了
我的英文版 settings --> devices & services --> devices --> AirWater A3S xxxx --> Ionization
你可以参考一下
作者: leol9394 时间: 2024-12-8 22:55
先卸载0.1.1,然后在加载项商店搜索airmx,点进去应该看到的是0.1.2才对
作者: gwiily 时间: 2024-12-8 23:24
感谢,用起来了。彻底删掉仓库,重新添加就好了。
另外,域名劫持参考32楼,去掉端口转发,直接在openwrt里面将i.airmx.cn和awm.airmx.cn劫持到ha的地址,在addon里面端口配置改为80和1883。然后就可以添加了。
作者: mxy7723 时间: 2024-12-9 18:20
请问是iOS上之前就登陆了账号没退出过吗,我新下载的app貌似没有蓝牙配置网络的地方。
作者: jesusya 时间: 2024-12-10 13:24
是的,如果HA服务器上没看MQTT服务器,1883就空着可以用
作者: jesusya 时间: 2024-12-10 13:30
和原来手机注册设备一样,蓝牙找到新加湿器,然后手机要2。5G网络,然后网下点,最后一步不成功。“往下”点的过程,设备就把注册申请发给了add-on 插件了
作者: fifamanutd 时间: 2024-12-14 20:09
是不是原来的app还是登录状态才能添加新设备,之前以为是手机APP的问题卸载了,现在重新下了又登不上了,没有添加设备选项,搞得不敢贸然重置设备网络
作者: fifamanutd 时间: 2024-12-14 21:43
各位大佬,MQTT Explorer能收到设备的消息,但是在添加集成时报错,有解决办法吗
作者: jesusya 时间: 2024-12-14 23:41
app 我是在登录状态,看看用微信号是否可以登录app
作者: jesusya 时间: 2024-12-14 23:42
看看帖子,也许有帮助,我也遇到过,要重置设备,才会注册设备,才可以添加
作者: 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]
- import json
- from typing import Any
- import logging
- _LOGGER = logging.getLogger(__name__)
- _LOGGER.setLevel(logging.DEBUG)
- from homeassistant.components.humidifier import (
- MODE_AUTO,
- HumidifierDeviceClass,
- HumidifierEntity,
- HumidifierEntityFeature,
- HumidifierAction, # ***改为 显示加湿、空闲、关闭等运行状态
- )
- from homeassistant.components.humidifier.const import MODE_SLEEP
- from homeassistant.config_entries import ConfigEntry
- from homeassistant.const import ATTR_ENTITY_ID
- from homeassistant.core import HomeAssistant, callback
- from homeassistant.helpers import config_validation as cv, device_registry as dr, entity_platform
- from homeassistant.helpers.entity_platform import AddEntitiesCallback
- import voluptuous as vol
- from .airwater.const import AirWaterCommand, AirWaterMode
- from .airwater.device import AirWaterDevice
- from .const import ATTR_COMMAND_DATA, ATTR_COMMAND_ID, DEVICES, DOMAIN, MODE_MANUAL, SERVICE_SEND_COMMAND
- from .entity import AirWaterEntity
- async def async_setup_entry(
- hass: HomeAssistant,
- entry: ConfigEntry,
- async_add_entities: AddEntitiesCallback,
- ) -> None:
- device: AirWaterDevice = hass.data[DOMAIN][DEVICES][entry.entry_id]
- async_add_entities([AirWaterHumidifier(device, entry)])
- platform = entity_platform.async_get_current_platform()
- platform.async_register_entity_service(
- SERVICE_SEND_COMMAND,
- {
- vol.Required(ATTR_ENTITY_ID): cv.entity_id,
- vol.Required(ATTR_COMMAND_ID): vol.Coerce(int),
- vol.Required(ATTR_COMMAND_DATA): cv.string,
- },
- "async_send_command",
- )
- class AirWaterHumidifier(AirWaterEntity, HumidifierEntity):
- _attr_name = None
- _attr_device_class = HumidifierDeviceClass.HUMIDIFIER
- _attr_supported_features = HumidifierEntityFeature.MODES
- _attr_available_modes = [MODE_AUTO, MODE_MANUAL, MODE_SLEEP]
- _attr_translation_key = "humidifier"
- @property
- def is_on(self) -> bool | None:
- return self._device.status.power
- @property
- def current_humidity(self) -> int | None:
- # ***获取 sensor.temperature_humidity_sensor_6510_humidity 的湿度值
- value = self.hass.states.get("sensor.temperature_humidity_sensor_6510_humidity").state # 改为传感器实体ID
- #_LOGGER.debug("AirMX Room Current humidity value: %s", value)
- # 确保湿度值有效,且转换为整数
- if value:
- try:
- #return int(float(value)) # 确保转换为整数
- return round(float(value))
- except ValueError:
- return None
- return None
- @property
- def target_humidity(self) -> int | None:
- #if self.mode == MODE_MANUAL: # ***改为 手动模式也显示仪表盘运作状态
- # return None
- return self._device.status.target_humidity
- @property
- def mode(self) -> str | None:
- return {
- AirWaterMode.SLEEP: MODE_SLEEP,
- AirWaterMode.MANUAL: MODE_MANUAL,
- }.get(self._device.status.mode, MODE_AUTO)
-
- @property # ***改为 显示加湿、空闲、关闭等运行状态
- def action(self) -> HumidifierAction | None:
- if not self.is_on:
- return HumidifierAction.OFF
- if self.current_humidity is not None and self.target_humidity is not None:
- if self.current_humidity < self.target_humidity:
- return HumidifierAction.HUMIDIFYING
- else:
- return HumidifierAction.IDLE
- return None
- async def async_turn_on(self, **kwargs: Any) -> None:
- await self._device.async_turn_on()
- async def async_turn_off(self, **kwargs: Any) -> None:
- await self._device.async_turn_off()
- async def async_set_humidity(self, humidity: int) -> None:
- await self._device.async_set_target_humidity(humidity)
- async def async_set_mode(self, mode: str) -> None:
- await self._device.async_set_mode(
- {
- MODE_SLEEP: AirWaterMode.SLEEP,
- MODE_MANUAL: AirWaterMode.MANUAL,
- }.get(mode, AirWaterMode.AUTO)
- )
- async def async_send_command(self, command_id: int, command_data: str) -> None:
- await self._device.async_send_command(AirWaterCommand(command_id), json.loads(command_data))
- @callback
- def async_write_ha_state(self) -> None:
- super().async_write_ha_state()
- if self.device_info and self.device_info.get("sw_version") != self._device.status.firmware_version:
- self._update_device_info()
- def _update_device_info(self) -> None:
- device_registry = dr.async_get(self.hass)
- device = device_registry.async_get_device({(DOMAIN, self.unique_id)})
- if device:
- 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
开机会默认连入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
修改了默认端口后,会连锁影响openwrt的其他功能吗
作者: haikuoyi 时间: 2025-5-6 14:38
终于连上了
欢迎光临 『瀚思彼岸』» 智能家居技术论坛 (https://bbs.hassbian.com/) |
Powered by Discuz! X3.5 |