Configuration passerelle RF-IR KC868-AG

Bonjour,
Je débute avec Home Assistant et j’ai du mal a comprendre le YAML.
J’ai installé ESP Home sans problème et réussi à configurer la passerelle KC868-AG pour envoyer des codes RF et IR.
Ce que je n’arrive pas à faire c’est de mettre à jour l’état du Switch telec_rf_A1 quand un ordre est reçu en RF par la telecommande afin que l’etat du switch soit à jour dans Home assistant.
J’ai essayé avec un binary_sensor mais je ne suis pas sur que c’est la bonne manière de faire.
La doc de remote.receiver de ESP Home manque d’exemple compréhensible pour moi.

Voici mon code:

esphome:
  name: passerelle-salon
  friendly_name: Passerelle_Salon

esp32:
  board: esp32dev
  framework:
    type: esp-idf

logger:

api:
  encryption:
    key: "dkRzJIqIj1AclAJmrU6cBaGMTnZxCYul0yGN9o+MvvE="

ota:
  - platform: esphome
    password: "557414a450db94e3e454a237ab6ae233"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  ap:
    ssid: "Passerelle-Salon"
    password: "TbNHvJCQjp6P"

captive_portal:

remote_transmitter:
  - id: transmitter_ir
    pin: GPIO2
    carrier_duty_percent: 50%
  - id: transmitter_rf
    pin: GPIO22
    carrier_duty_percent: 100%

remote_receiver:
  - id: receiver_ir
    pin:
      number: GPIO23
      inverted: true
    dump: toshiba_ac
  - id: receiver_rf
    pin:
      number: GPIO13
    dump: raw      #raw  #pronto   #all   #null #boe4  
    # Settings to optimize recognition of RF devices
    tolerance: 25%
    filter: 100us
    idle: 2ms
    buffer_size: 10kb
    #receive_symbols: 250
    #filter_symbols: 200
    

sensor:
  - platform: internal_temperature
    name: "Température ESP interne"
    id: temperature_salon

  - platform: wifi_signal
    name: "Signal Wifi"
    update_interval: 60s  

  - platform: uptime
    name: "Allumé depuis (s)"
    id: uptime_sec

binary_sensor:
  - platform: remote_receiver
    receiver_id: receiver_rf
    name: A1_ON_Rec
    raw: 
      code: [223, -513, 220, -517, 217, -521, 584, -150, 205, -543, 192, -544, 193, -543, 565, -171,
                  185, -560, 550, -185, 171, -575, 539, -192, 164, -581, 535, -198, 157, -585, 532, -196,
                  161, -583, 155, -579, 536, -196, 539, -202, 154, -589, 149, -585, 532, -201, 534, -205, 151]
   

        

switch:

  
  - platform: template
    name: "Télécommande RF A1"
    id: telec_rf_A1
    optimistic: true # Pas de retour d’état matériel, on suppose que ça marche
    restore_mode: RESTORE_DEFAULT_OFF  # Restaure l’état précédent au redémarrage
    turn_on_action:
      - remote_transmitter.transmit_raw:
          transmitter_id: transmitter_rf
          code : [223, -513, 220, -517, 217, -521, 584, -150, 205, -543, 192, -544, 193, -543, 565, -171,
                  185, -560, 550, -185, 171, -575, 539, -192, 164, -581, 535, -198, 157, -585, 532, -196,
                  161, -583, 155, -579, 536, -196, 539, -202, 154, -589, 149, -585, 532, -201, 534, -205, 151]
          repeat: 
            times: 8
            wait_time: 5ms 
      - logger.log: "A1 Allumé!"

    turn_off_action:
      - remote_transmitter.transmit_raw:
          transmitter_id: transmitter_rf
          code : [233, -503, 228, -507, 225, -512, 590, -141, 214, -532, 201, -534, 199, -537, 570, -162,
                  193, -552, 554, -177, 178, -567, 542, -190, 165, -579, 534, -196, 160, -580, 533, -195,
                  160, -582, 154, -579, 535, -197, 536, -200, 534, -204, 530, -207, 148, -592, 145, -586, 151]
          repeat: 
            times: 8
            wait_time: 5ms
      - logger.log: "A1 Eteint!"
      

  - platform: restart
    name: "Redémarrage"

  - platform: template
    name: "Clim Salon ON"
    turn_on_action:
      - remote_transmitter.transmit_toshiba_ac:
          transmitter_id: transmitter_ir
          rc_code_1: 0xB24D3FC050AF  # 23°C

  - platform: template
    name: "Clim Salon OFF"
    turn_on_action:
      - remote_transmitter.transmit_toshiba_ac:
          transmitter_id: transmitter_ir
          rc_code_1: 0xB24D7B84E01F  # OFF

  - platform: template
    name: "Lumière ventilo ON"
    turn_on_action:
      - remote_transmitter.transmit_rc_switch_raw:
          transmitter_id: transmitter_rf
          protocol: 2
          code : '0001001110100010000000011'
          repeat: 
            times: 1
            wait_time: 25ms

Est ce que j’ai la bonne approche ou il faut utiliser une logique différente?
Merci d’avance

Bon, j’ai réussi à trouver grâce à ChaGPT…

Il fallait que je rajoute le on_press:

binary_sensor:
  - platform: remote_receiver
    receiver_id: receiver_rf
    name: A1_ON_Rec
    raw: 
      code: [223, -513, 220, -517, 217, -521, 584, -150, 205, -543, 192, -544, 193, -543, 565, -171,
                  185, -560, 550, -185, 171, -575, 539, -192, 164, -581, 535, -198, 157, -585, 532, -196,
                  161, -583, 155, -579, 536, -196, 539, -202, 154, -589, 149, -585, 532, -201, 534, -205, 151]
    on_press:
      - logger.log: "Code RF A1 ON reçu !"
      - switch.turn_on: telec_rf_A1

switch:
  - platform: template
    name: "Télécommande RF A1"
    id: telec_rf_A1
    optimistic: true # Pas de retour d’état matériel, on suppose que ça marche
    restore_mode: RESTORE_DEFAULT_OFF  # Restaure l’état précédent au redémarrage
    turn_on_action:
      - remote_transmitter.transmit_raw:
          transmitter_id: transmitter_rf
          code : [223, -513, 220, -517, 217, -521, 584, -150, 205, -543, 192, -544, 193, -543, 565, -171,
                  185, -560, 550, -185, 171, -575, 539, -192, 164, -581, 535, -198, 157, -585, 532, -196,
                  161, -583, 155, -579, 536, -196, 539, -202, 154, -589, 149, -585, 532, -201, 534, -205, 151]
          repeat: 
            times: 8
            wait_time: 5ms 
      - logger.log: "A1 Allumé!"

La solution fonctionne mais ne me satisfait pas pleinement car elle active le switch quand le code de la télécommande est reçu et donc le switch renvoie aussi plusieurs fois le code (au risque de mélanger les deux signaux).

J’aurais préféré trouver une solution qui modifie son état sans devoir l’enclencher.
Si quelqu’un a une idée ou un bon conseil de lecture en français pour comprendre la philosophie du YAML ….

Bonjour @Tophe
le yaml n’est pas un langage de programmation, c’est un format de données tout comme l’est le json, le XML.
On l’utilise pour de la configuration et dans le cas de l’ESP il permet de « dire » ce que l’on veut faire, une sorte d’abstraction.
Donc pour ESPHome il faut regarder la doc de chaque élément que tu souhaites utiliser.
Exemple : Switch Component - ESPHome - Smart Home Made Simple

Bob

Pour essayer de t’aider voici un code que j’utilise.
Capteur de température connecter à un ESP32, si Temp > 20°C, onallume la led bleu de l’ESP32, si wifi connecté, j’allume la LEDI05.

switch:
  - platform: gpio
    name: "LedBleu2"
    id: ledbleu2
    pin: 2
  - platform: gpio
    name: "LEDIO5"
    pin: 5
sensor:
  - platform: aht10
    temperature:
      name: "PSalon Temperature"
      accuracy_decimals: 1
      on_value_range:
      - above: 20
        then:
          - switch.turn_on: ledbleu2
      - below: 18 
        then:
          - switch.turn_off: ledbleu2
interval:
  - interval: 10s
    then:
      if:
        condition:
          wifi.connected:
        then:
          - switch.turn_on: ledio5
        else:
          - switch.turn_off: ledio5

Je n’ai rien en remote_receiver !

EDIT:

binary_sensor:
  - platform: esp32_touch
    name: "ESP32 Touch Pad GPIO13"
    pin: GPIO13
    threshold: 1000

Je récupère côté HA « binary_sensor.esp32_touch_pad_gpio13 » qui me permet via une automatisation d’allumer une lampe juste en touchant un élément métalique connecté au GPIO13.

Voila quelques cas d’usage, en espérant que cela puisse t’aider ou te donner des idées :wink:

Bob

Bonsoir Bob,
Merci pour ta réponse, effectivement je commence à comprendre. On décrit ce que l’on veut au final, on ne se préoccupe pas d’écrire le code pour y arriver.

Concernant le changement d’état du Switch sans l’activer je pense avoir trouvé la solution dans la doc switch template . Il faut que j’utilise
- switch.template.publish: id: telec_rf_A1 state: ON
au lieu de:
switch.turn_on: telec_rf_A1

Je vais tester ça

En tout cas merci pour les exemples, je sent que ça va m’aider!

1 « J'aime »