Séquences IR et optimisation ESPHome?

Bonjour

J’utilise des ESP avec des émetteurs IR (Kincony 868-AG) pour contrôler les appareils style STB qui ne disposent pas d’autre mode de pilotage malheureusement. Je fais ma capture avec ESPHome qu’ensuite j’utilise en émission pour contrôler mes STB.
Tout cela fonctionne sans soucis mais j’aimerais aussi coder mes favs dans l’ESP directement. J’ai parcouru la doc ESPHome mais je ne suis pas sûr que cela soit faisable. Je voudrais pouvoir avoir un switch que j’appelle par exemple Chaine 1 qui va composer 123 sur le décodeur suivi de OK et ainsi de suite pour chacun de mes favoris. Ce switch se contenterait de faire une impulsion sur les switchs existants avec une courte pause entre chaque pulse pour éviter le téléescopage des codes à l’émission IR.
A l’heure actuelle (cf mon code ci-dessous), chaque touche est codée sur un switch et cela fonctionne nickel pour les commandes individuelles.
Une idée si cela est faisable dans ESPHome ou pas ?

Merci bien pour vos idées, suggestions,

Vincèn

substitutions:
  friendly_name: kincony-k868-ag

esphome:
  name: $friendly_name

esp32:
  board: esp32dev
  framework:
    type: arduino

logger:

web_server:

ota:

wifi:
  networks:
  - ssid: !secret wifi_ssid
    password: !secret wifi_passwd
  - ssid: !secret wifi_puppy
    password: !secret wifi_puppy_passwd
  ap:
    ssid: $friendly_name

captive_portal:

api:
  reboot_timeout: 120min
  
sensor:
  - platform: wifi_signal
    name: $friendly_name WiFi Signal
    update_interval: 60s
  - platform: uptime
    name: $friendly_name Uptime
    filters:
      - lambda: return x / 60.0;
    unit_of_measurement: minutes

remote_receiver:
  id: ir_receiver
  pin:
    number: GPIO23
    inverted: True
  idle: 25ms
  dump: all
  tolerance: 50%

remote_transmitter:
  pin: GPIO2
  carrier_duty_percent: 50%

switch:
  - platform: template
    name: "Power"
    turn_on_action:
      - remote_transmitter.transmit_pronto:
          data: "0000 006D 000B 0000 0020 0021 0020 0021 0040 0041 0020 0021 0020 0021 0040 0021 0020 0021 0020 0041 0020 0021 0040 0021 0020 06C3"
  - platform: template
    name: "TV Power"
    turn_on_action:
      - remote_transmitter.transmit_pronto:
          data: "0000 006D 000A 0000 0020 0021 0040 0021 0020 0041 0020 0021 0020 0021 0040 0041 0040 0041 0020 0021 0040 0041 0020 06C3"
  - platform: template
    name: "A/V"
    turn_on_action:
      - remote_transmitter.transmit_pronto:
          data: "0000 006D 000B 0000 0020 0021 0040 0021 0020 0041 0020 0021 0020 0021 0040 0021 0020 0041 0020 0021 0020 0021 0020 0021 0040 06C3"
  - platform: template
    name: "Red"
    turn_on_action:
      - remote_transmitter.transmit_pronto:
          data: "0000 006D 000A 0000 0020 0021 0020 0021 0040 0041 0020 0021 0020 0021 0040 0041 0020 0021 0040 0021 0020 0041 0040 06C3"
  - platform: template
    name: "Green"
    turn_on_action:
      - remote_transmitter.transmit_pronto:
          data: "0000 006D 000B 0000 0020 0021 0041 0020 0020 0041 0020 0021 0020 0021 0040 0041 0020 0021 0040 0021 0020 0021 0020 0041 0020 06C3"
  - platform: template
    name: "Yellow"
    turn_on_action:
      - remote_transmitter.transmit_pronto:
          data: "0000 006D 000B 0000 0020 0021 0020 0021 0040 0041 0020 0021 0020 0021 0040 0041 0020 0021 0020 0021 0040 0021 0020 0041 0020 06C3"
  - platform: template
    name: "Blue"
    turn_on_action:
      - remote_transmitter.transmit_pronto:
          data: "0000 006D 000A 0000 0020 0021 0040 0021 0020 0041 0020 0021 0020 0021 0040 0041 0020 0021 0020 0021 0040 0041 0040 06C3"
  - platform: template
    name: "Mute"
    turn_on_action:
      - remote_transmitter.transmit_pronto:
          data: "0000 006D 000B 0000 0021 0020 0020 0021 0040 0041 0021 0020 0020 0021 0040 0041 0020 0021 0040 0021 0020 0021 0020 0021 0020 06C3"
  - platform: template
    name: "TV"
    turn_on_action:
      - remote_transmitter.transmit_pronto:
          data: "0000 006D 000A 0000 0020 0021 0040 0021 0020 0041 0020 0021 0020 0021 0040 0041 0020 0021 0040 0041 0040 0041 0020 06C3"
  - platform: template
    name: "EPG"
    turn_on_action:
      - remote_transmitter.transmit_pronto:
          data: "0000 006D 000A 0000 0020 0021 0040 0021 0020 0041 0020 0021 0020 0021 0040 0041 0020 0021 0040 0041 0020 0021 0040 06C3"
  - platform: template
    name: "Settings"
    turn_on_action:
      - remote_transmitter.transmit_pronto:
          data: "0000 006D 000B 0000 0020 0021 0020 0021 0040 0041 0020 0021 0020 0021 0040 0041 0020 0021 0040 0021 0020 0041 0020 0021 0020 06C3"
  - platform: template
    name: "i"
    turn_on_action:
      - remote_transmitter.transmit_pronto:
          data: "0000 006D 000B 0000 0020 0021 0040 0021 0020 0041 0020 0021 0020 0021 0040 0021 0020 0041 0020 0021 0020 0021 0040 0041 0020 06C3"
  - platform: template
    name: "Vol +"
    turn_on_action:
      - remote_transmitter.transmit_pronto:
          data: "0000 006D 000A 0000 0020 0021 0020 0021 0040 0041 0020 0021 0020 0021 0040 0021 0020 0041 0040 0021 0020 0041 0040 06C3"
  - platform: template
    name: "Vol -"
    turn_on_action:
      - remote_transmitter.transmit_pronto:
          data: "0000 006D 000B 0000 0020 0021 0040 0021 0020 0041 0020 0021 0020 0021 0040 0021 0020 0041 0041 0020 0020 0041 0021 0020 0020 06C3"
  - platform: template
    name: "CH +"
    turn_on_action:
      - remote_transmitter.transmit_pronto:
          data: "0000 006D 000B 0000 0020 0021 0020 0021 0040 0041 0020 0021 0020 0021 0040 0041 0020 0021 0020 0021 0020 0021 0040 0021 0020 06C3"
  - platform: template
    name: "CH -"
    turn_on_action:
      - remote_transmitter.transmit_pronto:
          data: "0000 006D 000B 0000 0020 0021 0040 0021 0020 0041 0020 0021 0020 0021 0040 0021 0020 0041 0040 0021 0020 0021 0020 0041 0020 06C3"
  - platform: template
    name: "Up"
    turn_on_action:
      - remote_transmitter.transmit_pronto:
          data: "0000 006D 000B 0000 0020 0021 0020 0021 0040 0041 0020 0021 0020 0021 0040 0041 0020 0021 0020 0021 0020 0021 0040 0041 0020 06C3"
  - platform: template
    name: "Down"
    turn_on_action:
      - remote_transmitter.transmit_pronto:
          data: "0000 006D 000B 0000 0020 0021 0040 0021 0020 0041 0021 0020 0020 0021 0040 0041 0020 0021 0020 0021 0020 0021 0021 0020 0040 06C3"
  - platform: template
    name: "Left"
    turn_on_action:
      - remote_transmitter.transmit_pronto:
          data: "0000 006D 000C 0000 0021 0020 0021 0020 0040 0041 0020 0021 0020 0021 0040 0041 0021 0020 0020 0021 0021 0020 0020 0021 0020 0021 0020 06C3"
  - platform: template
    name: "Right"
    turn_on_action:
      - remote_transmitter.transmit_pronto:
          data: "0000 006D 000A 0000 0020 0021 0040 0021 0020 0041 0020 0021 0020 0021 0040 0041 0040 0041 0040 0041 0020 0021 0020 06C3"
  - platform: template
    name: "OK"
    id: "ok"
    turn_on_action:
      - remote_transmitter.transmit_pronto:
          data: "0000 006D 000A 0000 0020 0021 0020 0021 0040 0041 0020 0021 0020 0021 0040 0041 0040 0041 0020 0021 0040 0021 0020 06C3"
  - platform: template
    name: "Home"
    turn_on_action:
      - remote_transmitter.transmit_pronto:
          data: "0000 006D 000B 0000 0020 0021 0040 0021 0020 0041 0020 0021 0020 0021 0040 0021 0020 0021 0020 0041 0020 0021 0040 0041 0020 06C3"
  - platform: template
    name: "Return"
    turn_on_action:
      - remote_transmitter.transmit_pronto:
          data: "0000 006D 000C 0000 0020 0021 0020 0021 0040 0041 0020 0021 0020 0021 0040 0021 0020 0021 0020 0041 0020 0021 0020 0021 0020 0021 0020 06C3"
  - platform: template
    name: "APP"
    turn_on_action:
      - remote_transmitter.transmit_pronto:
          data: "0000 006D 000B 0000 0020 0021 0040 0021 0020 0041 0020 0021 0020 0021 0040 0041 0020 0021 0020 0021 0040 0021 0020 0021 0020 06C3"
  - platform: template
    name: "PIP"
    turn_on_action:
      - remote_transmitter.transmit_pronto:
          data: "0000 006D 000A 0000 0020 0021 0020 0021 0040 0041 0020 0021 0020 0021 0040 0041 0040 0041 0020 0021 0020 0021 0040 06C3"
  - platform: template
    name: "Menu"
    turn_on_action:
      - remote_transmitter.transmit_pronto:
          data: "0000 006D 000A 0000 0020 0021 0020 0021 0040 0041 0020 0021 0020 0021 0040 0021 0020 0021 0020 0041 0040 0041 0041 06C3"
  - platform: template
    name: "Rewind"
    turn_on_action:
      - remote_transmitter.transmit_pronto:
          data: "0000 006D 000A 0000 0020 0021 0040 0021 0020 0041 0020 0021 0020 0021 0040 0021 0020 0041 0040 0041 0020 0021 0040 06C3"
  - platform: template
    name: "Play/Pause"
    turn_on_action:
      - remote_transmitter.transmit_pronto:
          data: "0000 006D 000B 0000 0020 0021 0020 0021 0040 0041 0020 0021 0020 0021 0040 0021 0020 0021 0020 0041 0040 0041 0020 0021 0020 06C3"
  - platform: template
    name: "Forward"
    turn_on_action:
      - remote_transmitter.transmit_pronto:
          data: "0000 006D 000B 0000 0020 0021 0040 0021 0020 0041 0020 0021 0020 0021 0040 0021 0020 0041 0040 0021 0020 0021 0021 0020 0020 06C3"
  - platform: template
    name: "1"
    id: "d1"
    turn_on_action:
      - remote_transmitter.transmit_pronto:
          data: "0000 006D 000C 0000 0020 0021 0020 0021 0040 0041 0020 0021 0020 0021 0040 0021 0020 0021 0020 0021 0020 0021 0020 0021 0020 0041 0020 06C3"
  - platform: template
    name: "2"
    id: "d2"
    turn_on_action:
      - remote_transmitter.transmit_pronto:
          data: "0000 006D 000B 0000 0020 0021 0040 0021 0020 0041 0021 0020 0020 0021 0040 0021 0020 0021 0020 0021 0020 0021 0020 0041 0040 06C3"
  - platform: template
    name: "3"
    id: "d3"
    turn_on_action:
      - remote_transmitter.transmit_pronto:
          data: "0000 006D 000C 0000 0020 0021 0020 0021 0040 0041 0020 0021 0020 0021 0040 0021 0020 0021 0020 0021 0020 0021 0020 0041 0020 0021 0020 06C3"
  - platform: template
    name: "4"
    id: "d4"
    turn_on_action:
      - remote_transmitter.transmit_pronto:
          data: "0000 006D 000B 0000 0020 0021 0040 0021 0020 0041 0020 0021 0020 0021 0040 0021 0020 0021 0020 0021 0020 0041 0040 0021 0020 06C3"
  - platform: template
    name: "5"
    id: "d5"
    turn_on_action:
      - remote_transmitter.transmit_pronto:
          data: "0000 006D 000B 0000 0020 0021 0020 0021 0040 0041 0020 0021 0020 0021 0040 0021 0020 0021 0020 0021 0020 0041 0040 0041 0020 06C3"
  - platform: template
    name: "6"
    id: "d6"
    turn_on_action:
      - remote_transmitter.transmit_pronto:
          data: "0000 006D 000B 0000 0020 0021 0040 0021 0020 0041 0020 0021 0020 0021 0041 0020 0020 0021 0020 0021 0020 0041 0020 0021 0040 06C3"
  - platform: template
    name: "7"
    id: "d7"
    turn_on_action:
      - remote_transmitter.transmit_pronto:
          data: "0000 006D 000C 0000 0020 0021 0020 0021 0040 0041 0020 0021 0020 0021 0040 0021 0020 0021 0021 0020 0021 0040 0021 0020 0021 0020 0020 06C3"
  - platform: template
    name: "8"
    id: "d8"
    turn_on_action:
      - remote_transmitter.transmit_pronto:
          data: "0000 006D 000B 0000 0020 0021 0040 0021 0020 0041 0020 0021 0020 0021 0040 0021 0020 0021 0020 0041 0040 0021 0020 0021 0020 06C3"
  - platform: template
    name: "9"
    id: "d9"
    turn_on_action:
      - remote_transmitter.transmit_pronto:
          data: "0000 006D 000B 0000 0020 0021 0020 0021 0040 0041 0020 0021 0020 0021 0040 0021 0020 0021 0020 0041 0040 0021 0020 0041 0020 06C3"
  - platform: template
    name: "0"
    id: "d0"
    turn_on_action:
      - remote_transmitter.transmit_pronto:
          data: "0000 006D 000C 0000 0020 0021 0040 0021 0020 0041 0020 0021 0020 0021 0040 0021 0020 0021 0020 0021 0020 0021 0020 0021 0020 0021 0020 06C3"
  - platform: template
    name: "Resize"
    turn_on_action:
      - remote_transmitter.transmit_pronto:
          data: "0000 006D 000B 0000 0020 0021 0020 0021 0040 0041 0020 0021 0020 0021 0040 0021 0020 0041 0040 0041 0020 0021 0020 0021 0020 06C3"
  - platform: template
    name: "Keyboard"
    turn_on_action:
      - remote_transmitter.transmit_pronto:
          data: "0000 006D 000B 0000 0020 0021 0040 0021 0020 0041 0021 0020 0020 0021 0040 0021 0020 0041 0020 0021 0040 0021 0020 0021 0020 06C3"

Bon en fait j’ai trouvé une solutiion assez simple mais pas du tout optimisée qui marche correctement:

switch:
  - platform: template
    name: "BBC One"
    turn_on_action:
    - switch.turn_on: d1
    - switch.turn_off: d1
    - delay: 0.1s
    - switch.turn_on: d7
    - switch.turn_off: d7
    - delay: 0.1s
    - switch.turn_on: d1
    - switch.turn_off: d1
    - delay: 0.1s
    - switch.turn_on: ok
    - switch.turn_off: ok

Par contre ça va être bourrin pour coder une petite centaine de chaines mais je vois pas trop d’autre solution…

Salut,

J’ai pas d’idée si c’est la bonne méthode, ça parait quand même bien compliqué ton idée. Je chercherai plutot à faire un truc qui permet d’avoir le code des touches d’un coté, l’émission de l’autre et essayer de faire jouer la recombinaisons de touches en 1 fois plutôt que touche par touche
Par exemple : pour 1 +2 =>
"0000 006D 000C 0000 0020 0021 0020 0021 0040 0041 0020 0021 0020 0021 0040 0021 0020 0021 0020 0021 0020 0021 0020 0021 0020 0041 0020 06C3" + "0000 006D 000B 0000 0020 0021 0040 0021 0020 0041 0021 0020 0020 0021 0040 0021 0020 0021 0020 0021 0020 0021 0020 0041 0040 06C3"

Sinon tu peux aussi ajouter le fait que les switch se désactivent seuls par exemple :

switch:
- platform: gpio
  name: "Dragonportail Relay 1"
  pin: GPIO12
  id: relay_1
  on_turn_on:
    - delay: 1s
    - switch.turn_off: relay_1

Idée originale effectivement mais bon cela ne change pas grand chose au fait qu’il faut tous se les cogner un par un :frowning: Je me demande si je pourrais pas gérer ça côté HA dans un fichier et envoyer les données dynamiquement à ESPHome…

Oui merci :wink: Effectivement je les ai supprimé de mon code et ça marche aussi bien :sunglasses:

Techniquement, tu vas de toutes façons pas avoir d’autres moyens que de te ‹ cogner › les commandes. Au même titre que tu le ferai en vrai. Le seul truc que tu peux gagner c’est le faire de faire moins long à renseigner (ce qui n’est pas forcement compatible avec plus simple).

Un fichier que tu interprétera à quel moment ? J’y vois de points d’attention :

  • Tu n’as pas forcement une place folle sur les devices
  • Il va falloir se cogner l’interpréteur du fichier

Oui justement c’est pour cela que je voudrais déplacer la chose dans HA au lieu de le garder dans ESPHome sans compter que cela optimiserait le système quand j’ai plusieurs exemplaires du même produit à piloter :wink:
Pour le fichier oui c’est qu’une idée pour le moment mais comme je sais que tu peux pousser des données de HA vers ESPHome dynamiquement facilement, je me dis que c’est la voie à explorer :wink:

Moi j’irai plus sur un truc à base de groupes HA.

  • D’un coté tu fais tes commandes unitaires.
  • De l’autre un groupe 123OK, avec les commandes unitaires ordonnées (1, 2, 3, OK)

Et tu joues le groupe pour faire la séquence (d’où l’intérêt de gérer le stop auto des switchs)

J’y vois 2 avantages :

  • tu peux corriger les commandes individuelles sans avoir à tout réécrire
  • tu peux ajouter une nouvelle commande assez facilement

Le seul truc pas clair, c’est la gestion de la séquence : comment s’assurer que switch1+switch2 est bien chainée en switch1 PUIS switch2 et pas un mélange genre switch1 EN MÊME TEMPS QUE switch2

Ah oui astucieux mais malheureusement pas possible car les commandes sont déclenchées en parallèle dans un groupe et du coup ça fait un bordel au niveau IR :frowning:

Bon après quelques essais avec les favs codés en dur dans ESPHome c’est clairement pas la solution car j’arrive à la limite de RAM de l’ESP trop vite :frowning:
Du coup je pensais à la solution suivante: créer un service avec un paramètre qui est le numéro à composer (côté HA j’appelle le service avec le numéro à composer) et ESPHome compose dynamiquement les numéros en fonction du numéro reçu de HA). Ma question à 1 Million: est-ce possible de faire une telle logique dans ESPHome ? En gros dépiauter le nombre pour en récupérer les chiffres individuels et balancer les codes IR correspondants ? ou je lui en demande trop ? Si c’est faisable je suppose que c’est avec les lambdas ? :frowning: