Besoin d'aide: Interface ESP32/RFLINK avec Home assistant

Bonjour à tous

J’ai suivi les tuto expliquant comment faire un pont RF432 vers Home assistant à base d’ESP32.
GitHub - cpainchaud/RFLink32: RFLink for ESP, with MQTT client

Je reçois donc les messages typés RFLink via MQTT.
Soit ce type de messages:
Télécommande:

20;3A;NewKaku;ID=007ddec6;SWITCH=1;CMD=ON;

Mesure de la station météo:

20;05;Alecto V4;ID=5a90;TEMP=008e;HUM=29;BAT=OK;

Donc mon problème est de parser les différents messages et de les envoyer soit vers un sensor soit vers une automatisation.
J’ai identifié plusieurs méthodes qui seraient possibles, certaines existent peut être mais je ne sais pas… et j’aimerai savoir si il en existe une simple, efficace et universelle (pour toutes sorte de message)…

1/ automation avec trigger sur mqtt et condition sur la payload (fonctionne)

- id: RFcmdDecode
  alias: RFcmdDecode
  description: 'Decodage cmd RFLink32'
  trigger:
  - platform: mqtt
    topic: /ESPrf/msg
  condition:
    condition: template
    value_template: "{{ 'NewKaku;ID=007ddec6' in trigger.payload }}"
  action:
  - service: light.toggle
    target:
      entity_id: light.extended_color_light_6

Cette méthode fonctionne bien avec la télécommande mais, malheureusement, je n’ai pas réussi à la faire fonctionner avec un sensor car même si on peut trigger un sensor, la condition qui suit le trigger semble rejetée par HA.

2/ Connexion du topic mqtt aux intégrations RFLINK existante
Je ne vois pas quelle adresse mettre dans la déclaration RFLINK ni comment déclarer le topic…

3/ Conditions dans l’intégration mqtt
Par exemple, le trigger mqtt: Automation Trigger - Home Assistant
semble avoir tout ce qu’il faut pour ne se déclencher que sur certaines conditions mais… je peine à trouver le moyen de l’utiliser.
J’ai testé ces approches:

template:
  - trigger:
    - platform: mqtt
      topic: /ESPrf/msg
      value_template: "{{ trigger.payload.split(';')[3] }}"
      payload: ID=5a90
    sensor:
      - name: Temp_ext_rflinlk
        unit_of_measurement: "°C"
        state: >
            {% set temp_hexa = trigger.payload.split(';')[4].split('=')[1] -%}
            {{ temp_hexa | int( temp_hexa, 16)  / 10 }}

avec payload: ID=5a90 ou payload: "ID=5a90"
Mais ne fonctionne pas.
Ou cette approche:

template:
  - trigger:
    - platform: mqtt
      topic: /ESPrf/msg
      value_template: "{{ 'Alecto V4;ID=5a90' in trigger.payload }}"
    sensor:
      - name: Temp_ext_rflinlk
        unit_of_measurement: "°C"
        state: >
            {% set temp_hexa = trigger.payload.split(';')[4].split('=')[1] -%}
            {{ temp_hexa | int( temp_hexa, 16)  / 10 }}

Mais là encore pas de résultats.

4/ Script de parsing du message avec écriture dans une variable puis trigger en fonction de la variable
Le petit script python qui attend vos réponses est le suivant:

# A tester avec la commande
#   python .\RFlinkSensor.py "20;05;Alecto V4;ID=5a90;TEMP=008e;HUM=29;BAT=OK;"
#   python .\RFlinkSensor.py "20;AF;LaCrosse-TX141THBv2;ID=0078;TEMP=006f;BAT=OK;"

import sys
try:
    mytempChar = sys.argv[1].split('TEMP=')[1]
    mytempHexa = mytempChar.split(';')[0]
    mytempNum = int(mytempHexa,16) /10.
    print(mytempNum)
except:
    print("An exception occurred")

Evidemment, il faudrait faire en sorte que ce script parse le message pour tout type de source (télécommande, mesure,…).

5/ Faire en sorte que l’ESP32 envoie du jison plutôt que ce message.
Je crois qu’il y a des exemples montrant comment utiliser simplement un message en jison.
Et à relire le code du mqtt trigger ici: core/trigger.py at dev · home-assistant/core · GitHub
Je me rends compte qu’il est possible que cette fonction n’accepte que du jison… (ma compréhension du python est limitée)

    def mqtt_automation_listener(mqttmsg):
        """Listen for MQTT messages."""
        payload = mqttmsg.payload

        if value_template is not None:
            payload = value_template.async_render_with_possible_json_value(
                payload,
                error_value=None,
            )

        if wanted_payload is None or wanted_payload == payload:
            data = {
                **trigger_data,
                "platform": "mqtt",
                "topic": mqttmsg.topic,
                "payload": mqttmsg.payload,
                "qos": mqttmsg.qos,
                "description": f"mqtt topic {mqttmsg.topic}",
            }

            with suppress(ValueError):
                data["payload_json"] = json.loads(mqttmsg.payload)