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

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

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

[复制链接]

0

主题

5

帖子

66

积分

注册会员

Rank: 2

积分
66
金钱
61
HASS币
0
发表于 2024-12-8 23:24:38 | 显示全部楼层
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。然后就可以添加了。
回复

使用道具 举报

0

主题

1

帖子

16

积分

新手上路

Rank: 1

积分
16
金钱
15
HASS币
0
发表于 2024-12-9 18:20:56 | 显示全部楼层
leol9394 发表于 2024-12-8 22:05
我的是ios,安卓不清楚

请问是iOS上之前就登陆了账号没退出过吗,我新下载的app貌似没有蓝牙配置网络的地方。
回复

使用道具 举报

5

主题

42

帖子

489

积分

中级会员

Rank: 3Rank: 3

积分
489
金钱
447
HASS币
0
发表于 2024-12-10 13:24:45 | 显示全部楼层
leol9394 发表于 2024-12-8 21:04
终于接入成功了,感谢楼主和jesusya,之前一直失败,原因是不知道需要重置A3S,不重置的话A3S不会向HA的那 ...

是的,如果HA服务器上没看MQTT服务器,1883就空着可以用
回复

使用道具 举报

5

主题

42

帖子

489

积分

中级会员

Rank: 3Rank: 3

积分
489
金钱
447
HASS币
0
发表于 2024-12-10 13:30:06 | 显示全部楼层
failth 发表于 2024-12-8 20:54
我reset了 然后怎么连wifi呢?

和原来手机注册设备一样,蓝牙找到新加湿器,然后手机要2。5G网络,然后网下点,最后一步不成功。“往下”点的过程,设备就把注册申请发给了add-on 插件了
回复

使用道具 举报

0

主题

2

帖子

20

积分

新手上路

Rank: 1

积分
20
金钱
18
HASS币
0
发表于 2024-12-14 20:09:49 | 显示全部楼层
jesusya 发表于 2024-12-10 13:30
和原来手机注册设备一样,蓝牙找到新加湿器,然后手机要2。5G网络,然后网下点,最后一步不成功。“往下 ...

是不是原来的app还是登录状态才能添加新设备,之前以为是手机APP的问题卸载了,现在重新下了又登不上了,没有添加设备选项,搞得不敢贸然重置设备网络
回复

使用道具 举报

0

主题

2

帖子

20

积分

新手上路

Rank: 1

积分
20
金钱
18
HASS币
0
发表于 2024-12-14 21:43:00 | 显示全部楼层
各位大佬,MQTT Explorer能收到设备的消息,但是在添加集成时报错,有解决办法吗
2024-12-14_213438.png
2024-12-14_213631.png
回复

使用道具 举报

5

主题

42

帖子

489

积分

中级会员

Rank: 3Rank: 3

积分
489
金钱
447
HASS币
0
发表于 2024-12-14 23:41:48 | 显示全部楼层
fifamanutd 发表于 2024-12-14 20:09
是不是原来的app还是登录状态才能添加新设备,之前以为是手机APP的问题卸载了,现在重新下了又登不上了, ...

app 我是在登录状态,看看用微信号是否可以登录app
回复

使用道具 举报

5

主题

42

帖子

489

积分

中级会员

Rank: 3Rank: 3

积分
489
金钱
447
HASS币
0
发表于 2024-12-14 23:42:58 | 显示全部楼层
fifamanutd 发表于 2024-12-14 21:43
各位大佬,MQTT Explorer能收到设备的消息,但是在添加集成时报错,有解决办法吗 ...

看看帖子,也许有帮助,我也遇到过,要重置设备,才会注册设备,才可以添加
回复

使用道具 举报

0

主题

2

帖子

16

积分

新手上路

Rank: 1

积分
16
金钱
14
HASS币
0
发表于 5 天前 | 显示全部楼层
按32楼方式 已成功。 A3s的话需要重置加湿器,用手机app重新添加设备才会注册。但是不知道控制里的wud是什么功能
回复

使用道具 举报

5

主题

42

帖子

489

积分

中级会员

Rank: 3Rank: 3

积分
489
金钱
447
HASS币
0
发表于 4 天前 | 显示全部楼层
本帖最后由 jesusya 于 2024-12-24 13:28 编辑

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

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)


回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-12-27 09:07 , Processed in 0.195555 second(s), 32 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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