ESPHome : migration laborieuse depuis Tasmota (fan)

Hello,

Vu que j’aime bien tout casser, il m’a pris l’envie de passer mon Diffuseur Maxcio de Tasmota vers ESPHome.
Il fonctionnait avec ce template.

Avec un simple Tuya Fan ça pourrait fonctionner, si la consception de l’appareil n’était pas douteuse.

En effet, on a DPID 1 qui détermine si oui ou non le diffuseur est allumé, et DPId103 qui détermine le mode turbo ou non.
ça pourrait être simple sauf qu’en plus de renvoyer 0 en mode normal et 1 en mode turbo, ça renvoie 2 quand le diffuseur est éteint.
Du coup j’ai fait un capteur seulement interne pour passer le ventilateur sur off quand DPId103 est sur 2, sauf que du coup même si le ventilateur renvoyé dans Home-Assistant est éteint, pour Google Assistant par exemple le diffuseur est toujours indiqué comme allumé vu que la vitesse est sur 100%, vu que j’ai trois vitesses, la troisième étant éteint, en fait la même chose que 0.
Même en passant la vitesse sur 0% dans Home-Assistant, elle est remise à 100% vu que DPId103 est sur 100%.
Avec Tasmota j’avais ajouté une condition dans le template fan pour que quand dpID103 est sur 2 le ventilateur est bien éteint avec la vitesse à 0, du coup ça fonctionnait.
Outre une lubie, le passage à ESPHome était pour m’éviter d’avoir des switches qui ne servent à rien, je souhaitais avoir directement le ventilateur remonté par ESPHome dans Home-Assistant.

Je pensais utiliser un output template et un speed fan, mais je n’arrive à rien.

Quelqu’un aurait-il une piste (à part revenir à Tasmota) pour solutionner ce souci de vitesse ?
Vu qu’il est impossible d’utiliser des lambda dans write_action (aparemment), je pensais le faire pour agir en fonction de ce qui est dans DPid103 : si 0 50% pour la vitesse, si 1 100% et si 2 c’est 0% en vérifiant également que DPId1 a toujours un état cohérent.

J’ai bien du code avec un output template mais il prend du C++ pour du YAML non valide.

Désolé pour le pavé, j’ai tenté d’aller au plus court mais je ne sais pas trop comment :slight_smile:

Au cas où ça pourrait en inspirer certains, voici le code non-fonctionnel, avec la partie fonctionnelle mais éteint en vitesse maximale commentée.

substitutions:
  piece: Bureau
  sufix: bureau

esphome:
  name: diffuseur-${sufix}
  platform: ESP8266
  board: esp01_1m
  project:
    name: "Nardol.maxcio_diffuser"
    version: "1.0.0"

#web_server:

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_key
  ap:
    password: !secret ap_key

captive_portal:

api:
  password: !secret api_pass

ota:
  password: !secret ota_pass

uart:
  baud_rate: 9600
  tx_pin: GPIO1
  rx_pin: GPIO3

# debug:

logger:
  baud_rate: 0
  level: NONE

tuya:

binary_sensor:
  - platform: "tuya"
    name: Eau Diffuseur ${piece}
    id: eau_diffuseur_${sufix}
    sensor_datapoint: 12
    device_class: "problem"
  - platform: tuya
    name: ""
    id: power
    sensor_datapoint: 1
    internal: true

fan:
  #- platform: tuya
    #name: "Diffuseur ${piece}"
    #id: diffuseur_${sufix}
    #switch_datapoint: 1
    #speed_datapoint: 103
    #speed_count: 3
  - platform: speed
    output: fan_output
    name: "Diffuseur ${piece}"
    speed_count: 2

output:
  - platform: template
    id: fan_output
    type: float
    write_action:
      then:
          - lambda: -|
            if (state == 50) id(turbo).publish(false);
            else if (state == 100) id(turbo).publish(true);
        else:
          switch.turn_off: power

sensor:
  - platform: tuya
    name: ""
    id: turbo
    sensor_datapoint: 103
    internal: true
    #on_value_range:
      #above: 2
      #then:
        #- fan.turn_off: diffuseur_${sufix}

light:
  - platform: tuya
    name: Leds Diffuseur ${piece}
    id: leds_diffuseur_${sufix}
    dimmer_datapoint: 111
    switch_datapoint: 11
    min_value: 1

La partie commentée dans le sensor turbo me permettait au moins de faire en sorte que l’état du ventilateur soit affiché à off dans Home Assistant, mais la vitesse restait désespérément et logiquement à 100% à cause de dpID103.

Home Assistant 2021.8 est de très bon aloi. Maintenant, Google Assistant annonce le diffuseur comme éteint comme il faut malgré sa vitesse à 100%.

Je ne sais pas si on peut vraiment parler de la solution, du coup si quelqu’un a une idée pour rendre tout ça plus propre je reste preneur, en attendant ça rend la chose plus gérable et m’incite d’avantage à mettre également à jour mon deuxième diffuseur :slight_smile: