Integration irrisense 2

Bonjour,

je reprend un sujet reddit dont le propriétaire ne donne plus de signe de vie : l'intégration irrisense 2 de Aiper.

Voici la discussion d'origine : https://www.reddit.com/r/homeassistant/s/QnpUwsMxWH

Le développeur a en fait fait du rétro engineering de l'application, et je dois avouer que ça fonctionne pas trop mal.

Seuls bemol : la connexion : étant donné que AWS iot ne gère qu'une seule connexion simultanée, il faut redémarrer home assistant pour se reconnecter si on a utilisé l'application Aiper.

L'autre gros défaut, mais qui n'est pas du à l'intégration : les doses sont archies mal calibrées. J'ai donc étalonné la bête avec un pluviomètre (à 10/11m de distance environ) et mis les bonnes valeurs dans le fichier /homeassistant/custom_components/aiper_irrisense/const.py

N'ayant pas encore installé d'environnement de dev, voici mes modifs :

# waterYield presets — wire floats mapped from the app's three-step selector.
# The app displays these as "3 mm / 6 mm / 13 mm" but the on-wire floats are
# 0.1 / 0.25 / 0.5 (confirmed in WrPanelWorkInfoViewModel.startWork$start,
# APK line 1846). Device firmware appears to silently drop off-preset values.
WATER_YIELD_MINI: Final = 0.1     # UI: "1 mm?"
WATER_YIELD_VERY_LOW: Final = 0.5     # UI: "2 mm"
WATER_YIELD_LOW: Final = 1.25     # UI: "5 mm"
WATER_YIELD_MEDIUM: Final = 2.4  # UI: "10 mm"
WATER_YIELD_HIGH: Final = 3.1     # UI: "15 mm"
WATER_YIELD_VERY_HIGH: Final = 4.5     # UI: "20 mm"
WATER_YIELD_PRESETS: Final = (WATER_YIELD_MINI, WATER_YIELD_VERY_LOW, WATER_YIELD_LOW, WATER_YIELD_MEDIUM, WATER_YIELD_HIGH, WATER_YIELD_VERY_HIGH)

et ensuite :

# ---- Dose / Duration labels (shown in the HA Select) ----------------------
# The Aiper app displays the three waterYield presets as "3 mm / 6 mm / 13 mm"
# and the three point_time presets as "1 min / 5 min / 10 min". We keep the
# exact same labels so HA users see identical vocabulary and so automation
# YAML reads naturally ("dose: 6 mm").
#
# These dicts are authoritative for two directions:
#   * label → wire value  (Select → _publish_cmd)
#   * wire value → label  (incoming MQTT snapshot → status banner)
# Neither direction tolerates floats beyond the three presets — the firmware
# silently drops off-preset values (see coordinator._snap_to_preset).
WATER_YIELD_LABELS: Final[dict[float, str]] = {
    WATER_YIELD_MINI:   "1 mm",
    WATER_YIELD_VERY_LOW:    "2 mm",
    WATER_YIELD_LOW:    "5 mm",
    WATER_YIELD_MEDIUM: "10 mm",
    WATER_YIELD_HIGH:   "15 mm",
    WATER_YIELD_VERY_HIGH:   "20 mm",
}

N'hésitez pas à poser des questions autant sur l'appareil (je commence à bien cerner la bête
) que sur l'intégration, pour le peu que j'ai pu y toucher.

Pour info, j'utilise le mode ligne, plutôt que le mode zone, car le mode zone innonde devant l'arroseur, sans délivrer la bonne dose en périphérie éloignée...

Pour ceux que ça intéressent, j'ai écris un article complet sur ce produit : [Article] Arrosage intelligent avec l'Irrisense 2 d'Aiper