Il problema
I tre pensili motorizzati della mia cucina si aprono e chiudono solo con un telecomando a infrarossi dedicato: nessuna app, nessun’integrazione, e se il telecomando si perde o si scarica non c’è modo di azionarli. Volevo poterli controllare da Home Assistant e, soprattutto, a voce (Alexa, Google Home), anche per motivi di accessibilità.
Catturare il segnale originale
I tre pensili non distinguono i comandi per codice: condividono tutti lo stesso segnale IR, ed è per questo che basta un solo telecomando per gestirli tutti. A decidere quale pensile si muove non è il contenuto del segnale, ma verso quale ricevitore viene puntato il raggio.
Questo significa che mi è bastato decodificare il segnale una sola volta. Ho collegato un ricevitore IR a un ESP32 e usato il componente remote_receiver di ESPHome in modalità “dump” per registrare i timing grezzi (impulsi e pause) generati premendo un pulsante qualsiasi del telecomando originale. Il segnale si è rivelato un protocollo RC Switch tipo 6: 111000001101 per “giù” e 111000001110 per “su”, ciascuno ripetuto 10 volte per ogni pressione.
Per essere sicuro di aver catturato il codice giusto, ho piazzato un trasmettitore IR proprio accanto al ricevitore e gli ho fatto rilanciare il codice appena decodificato: se il ricevitore lo riconosceva come identico all’originale, la cattura era verificata. Fatto questo test “a circuito chiuso”, non mi serviva più il telecomando fisico: il ricevitore IR aveva esaurito il suo compito, e nel circuito finale non l’ho più montato.
Il circuito
Niente PCB vero e proprio: ho saldato un circuito piuttosto grezzo su una basetta millefori (preforata). Il ricevitore IR usato per la decodifica si trovava su un setup temporaneo e separato: non è necessario nel circuito finale. La basetta montata in cucina contiene solo l’ESP32 e tre stadi di trasmissione indipendenti, uno per pensile e ciascuno sul proprio pin GPIO, ognuno terminato con un proprio connettore a 2 pin. Dato che il codice è lo stesso per tutti, a decidere quale pensile si muove non è il codice, ma quale LED viene acceso, ognuno puntato sul ricevitore del proprio pensile: così posso cablare, scollegare o debuggare un pensile alla volta senza toccare gli altri.
Il ricevitore IR della fase di decodifica non è montato su questa basetta: è servito solo a imparare il codice una volta. Alimentazione 5V/GND condivisa (non mostrata).
Calibrazione
I motori dei pensili non riportano la posizione: l’entità “cover” di Home Assistant si basa interamente sul tempo (la piattaforma time_based di ESPHome, senza sensori di finecorsa). Ho calibrato il tempo di apertura/chiusura di ogni pensile singolarmente: 9 secondi per quello sinistro, 8 per quello centrale, 9 per quello destro. Ognuno ha un meccanismo leggermente diverso, quindi i tempi non sono tutti uguali.
Il risultato
L’adattatore espone tre pensili motorizzati come entità cover in Home Assistant, controllabili da smartphone, da automazioni o a voce con Alexa e Google Home. Il telecomando originale, ovviamente, continua a funzionare in parallelo: il codice IR non è mai cambiato, è stato solo replicato.
Rilasciato sotto licenza MIT su Gitea.