community italiana di domotica personale
 
Integrare TV, decoder, (sinto)amplificatori tradizionali a Home Assistant via Broadlink (v2)

Integrare TV, decoder, (sinto)amplificatori tradizionali a Home Assistant via Broadlink (v2)

SCOPI DEL PROGETTO:
  • Domotizzare una TV e/o un decoder e/o un (sinto)amplificatore (o altri elementi di questa natura)
  • Livello di difficoltà: medio
  • Costo: ridotto (circa 20 € usando Broadlink)
CONCETTI AFFRONTATI:
COMPONENTI SOFTWARE UTILIZZATE:
DISPOSITIVI FISICI UTILIZZATI:
  • Una TV e/o un decoder e/o un (sinto)amplificatore (o altri elementi di questa natura)
  • Un attuatore Broadlink in grado di ricevere/inviare codici infrarossi (eg. RM Mini 4)
PROGETTO INDICATO a UTENTI CON ISTALLAZIONE:
Ambienti Home Assistant HassOS-Supervised-Core
NOTE E DISCLAIMER
  • qualsiasi eventuale modifica agli impianti domestici dev'essere progettata e realizzata SOLO da personale qualificato;
  • qualsiasi modifica non prevista attuata in proprio è a propria responsabilità personale nonché a proprio rischio e pericolo (i contenuti della presenta pagina hanno infatti puro scopo didattico) e fa decadere garanzia, omologazioni e certificazioni di qualità; dei dispositivi interessati;
  • tutte le tecniche descritte si intendono applicate a software e firmware aggiornati alle ultime versioni disponibili;
  • gli articoli di inDomus sono totalmente indipendenti e non sponsorizzati. Se mai questo cambiasse, verrà segnalato chiaramente sulle pagine oggetto di sponsorizzazione;
  • questa pagina è materialmente scritta e manutenuta da più individui: non ci si aspetti né si pretenda un supporto personale. In caso di difficoltà, chiedere supporto alla community sul nostro forum o sulla nostra chat;
  • se hai bisogno di orientarti, c'è la mappa.
Revisione progetto: 3.3
ATTENZIONE: questo progetto è definito “v2” in quanto basato sulla nuova versione del componente software necessario al funzionamento dell’integrazione Broadlink, ovvero “SmartIR“, il quale consente tra le altre cose la definizione dinamica presso la domotica dello stato operativo dell’unità oggetto dell’integrazione.
La versione precedente di questo progetto, qualora interessasse malgrado l’obsolescenza, è disponibile qui.

tv

Abstract

Tra le tante possibilità offerte dalla domotica basata su HUB personale (nel caso di questo progetto, Home Assistant) esiste quella di domotizzare il controllo di sistemi quali TV, decoder (eg. SKY), sintoamplificatori/amplificatori.

Ma che significa domotizzarli? Significa riuscire a controllarne alcune funzioni “chiave” (accensione e spegnimento, regolazione volume/mute, scelta delle sorgenti) tramite strumenti di gestione finale quali smarthphone, tablet, ma sopratutto riuscire a controllare queste funzioni in termini di scenari predefiniti.

Poniamo l’esempio di voler guardare SKY: accendiamo la TV, selezioniamo l’appropriato ingresso HDMI della TV, accendiamo il decoder SKY.

Bene: se TV e Decoder SKY fossero domotizzati potrei definire un’entità che esegua, semplicemente attivandola, le azioni sopra elencate in sequenza, magari utilizzando la voce tramite uno Smart Speaker connesso al mio HUB personale.

Esistono TV, Decoder e (Sinto)amplificatori intelligenti che già offrono la possibilità di essere integrati nativamente tramite Home Assistant (eg. le TV Bravia di Sony, tramite piattaforma specifica, oppure i sintoamplificatori Denon, sempre tramite piattaforma specifica).

Il presente progetto si cura della domotizzazione di TV, Decoder e (Sinto)amplificatori non domotizzabili nativamente: in questo caso, sfrutteremo i segnali infrarossi o in radiofrequenza tramite emettitore Broadlink sulla falsariga di quanto fatto, per esempio, con i condizionatori.

Si parte

Logica del progetto

Partiamo da un ragionamento semplice.
Dato che:

  • Home Assistant è il nostro “ponte di comando” per il controllo della domotica (non sai cos’è? guarda, è fatto così);
  • Home Assistant, tramite un attuatore Broadlink (eg. RM Mini 4) e il componente “SmartIR Media Player“, può inviare segnali infrarossi/radiofrequenza;
  • il TV – Decoder – (sinto)amplificatore è/sono controllabile/i tramite segnali infrarossi o radiofrequenza (solitamente da telecomando),

dunque, è di conseguenza possibile controllare il dispositivo – quale esso sia – tramite Home Assistant e quindi integrarlo al resto della domotica, automazione inclusa.

Analisi

La funzionalità “Media Player” offerte dal componente “SmartIR Media Player” sono quelle di:

  • accensione/spegnimento;
  • canale successivo/precedente;
  • aumento/riduzione/mute volume;
  • scelta della sorgente.

Il componente offre una serie di set di codici pre-confezionati; questo progetto dà per scontato che i codici per dispositivo da domotizzare siano già disponibili allegati al componente. Per effettuare questa verifica, sfogliare l’elenco dei codici disponibili presso questo indirizzo.

In caso i codici non siano disponibili (cosa altamente probabile) non c’è da disperare perché, come anticipato, vedremo più avanti come definire in autonomia un proprio file di configurazione.

Configurazione del dispositivo Broadlink

Per utilizzare il componente “SmartIR” è necessario che l’attuatore (quale sia il modello) sia già configurato e quindi presente sulla nostra Wi-Fi. Per far in modo che l’emettitore infrarosso entri (e resti) dentro la vostra Wi-Fi è sufficiente utilizzare l’app mobile  “e-Control” (per Android e iOS) e seguire le istruzioni a schermo. Alternativamente utilizzare l’app Broadlink (per Android e iOS, ma usarla solo in caso l’attuatore non sia supportato dall’app e-Control): in questo caso provvedere ad eseguire solo la procedura che fornisce all’attuatore le coordinate d’accesso alla Wi-Fi, poi interrompere e non completare la configurazione.

Finita la prima configurazione una tantum sarà poi necessario che l’attuatore Broadlink possegga, all’interno della nostra Wi-Fi, un IP fisso adottando la tecnica del “MAC Binding” sul router. Per farlo, si consiglia la lettura di questa guida.

All’atto dell’assegnare un IP fisso al Broadlink si consiglia di appuntarsi da parte sia l’IP assegnato sia il “MAC Address” (indirizzo fisico) dell’attuatore: entrambe queste informazioni serviranno più avanti.

Componente Broadlink

Il componente “Broadlink” di Home Assistant è utile per creare due “azioni” di sistema i quali avranno funzione, rispettivamente, di invio e ricezione codici infrarossi (e in radiofrequenza, nei modelli supportati).

Tali azioni prendono il nome di:

  • remote.learn_command
  • remote.send_command

La prima sarà necessario per l’apprendimento di codici, la seconda per l’invio (utilizzata dalle entità che definiremo in configurazione.

Allo scopo di configurare tali azioni è necessario integrare una tantum il proprio attuatore Broadlink a Home Assistant.
A tal proposito si rimanda alla guida preposta.

NOTA IMPORTANTE: dato che il componente cardine di questa guida, SmartIR Climate, sia appoggia sulle azioni “remote” di cui sopra, va da sé che senza una corretta integrazione Broadlink, il resto della guida non funzionerà. Pertanto, non proseguire senza aver correttamente integrato gli emettitori.

Installazione di SmartIR

Dato che “SmartIR” è un componente aggiuntivo ed esterno a Home Assistant, esso va installato.
Per farlo è possibile farlo manualmente o, più facilmente, tramite HACS.

La breve guida all’installazione di SmartIR è disponibile qui.

Configurazione di SmartIR

A questo punto siamo pronti per definire l’entità di tipo “Media Player” che rappresenterà il nostro dispositivo presso Home Assistant.
Per far ciò è sufficiente inserire nel file di configurazione di Home Assistant un blocco di questo tipo:

smartir: 

media_player:
  - platform: smartir
    name: Hi-fi
    device_code: 1000
    controller_data: nome_della_entità_remote_broadlink
    power_sensor: binary_sensor.stato_accensione

Le variabili si spiegano come segue:

platform (stringa, richiesta) Nome della piattaforma. Dev’essere indicato necessariamente “smartir“.
name (stringa, opzionale) Il nome dell’entità “Media Player” presso Home Assistant.
device_code (intero, richiesto) Rappresenta il file di configurazione in notazione JSON (contenente codici e caratteristiche) che il componente utilizzerà (cercandolo dentro “smartir/codes/media_player“) per “modellare” l’entità. È possibile sceglierlo a monte cercando il proprio dispositivo presso questo elenco.
In caso di assenza del proprio dispositivo, vedremo di definirne uno ad hoc a seguire nel progetto.
controller_data (stringa, richiesta) Rappresenta il nome entità del remote associato al Broadlink (eg. remote.broadlink) ottenuta dall’integrazione del Broadlink con Home Assistant
controller_command_topic (stringa, opzionale) Topic di comando MQTT collegato alla modalità di controllo tramite azione “mqtt.publish“. Prevede che MQTT sia già correttamente configurato e funzionante nel network e presso Home Assistant.
power_sensor (stringa, opzionale) Rappresenta un eventuale sensore binario (on/off) il quale rappresenti lo stato di accensione dell’unità (spiegato a seguire).

Prima di effettuare questa configurazione presso Home Assistant, è necessario essere a conoscenza di:

  • l’IP del Broadlink tramite il quale inviare i codici (campo controller_data);
  • nome del file JSON che rappresenta la configurazione del proprio dispositivo (campo device_code).

Per quanto riguarda il file di configurazione ci si può trovare davanti a varie situazioni diverse:

  • il file è già disponibile assieme al componente SmartIR (vedi elenco);
  • il file personale è già disponibile perché prodotto per il componente legacy “Broadlink IR Media Player”;
  • assenza di file.

Nel primo caso è possibile effettuare la configurazione presso Home Assistant, riavviare e terminare così l’integrazione.
Nel secondo o nel terzo, è necessario creare un nuovo file personale ad hoc prima di terminare la configurazione e riavviare Home Assistant.

File di configurazione personale

Questo paragrafo è d’interesse solo in caso non sia disponibile un file di configurazione preconfezionato (oppure se ne abbia uno costruito per il componente legacy “Broadlink IR Media Player“) relativo al proprio modello di dispositivo.

Sarà quindi necessario costruirne uno ad hoc.

Codici

I codici – se non disponibili tra quelli preconfezionati – è possibile raccoglierli manualmente e manualmente cablarli in un file generato ex-novo.

CATTURA DEI CODICI

A questo spinoso e cruciale argomento abbiamo dedicato una guida ad hoc, la quale in parte è già stata attuata seguendo il presente progetto.

DEFINIZIONE DEL FILE PERSONALE

A questo punto, una volta raccolti i codici, sarà sufficiente creare un nuovo file JSON assegnandoli un qualsiasi nome (numerico) al di fuori dei nomi già presenti assieme al componente “SmartIR” (eg. “7000.json“).

Per definire il file sarà sufficiente ricalcarne uno qualsiasi già esistente, per esempio questo.

Nel file JSON di configurazione non si inseriscono solo i codici relativi alle varie modalità d’uso (blocco “commands“), ma anche le varie caratteristiche dell’unità, quali nome, modello, tipologia di codici in uso eccetera.

Il blocco iniziale appare più o meno così:

{
    "manufacturer": "Produttore",
    "supportedModels": [
      "Mio_modello"
    ],
    "supportedController": "Broadlink",
    "commandsEncoding": "Base64",

I campi sono i seguenti:

manufacturer (stringa, obbligatoria) Indica il produttore del condizionatore.
supportedModels (stringa, obbligatoria) Indica il modello.
supportedController (srtinga, obbligatoria) Indica il modello dell’attuatore (solitamente Broadlink).
commandsEncoding (stringa, obbligatoria) Indica l’encoding. Supporta: “Base64“, “Pronto“, e “HEX“. Per codici raccolti come spiegato in questo progetto tramite Broadlink, solitamente si indica “Base64“.

La seconda parte del file comincia più o meno così:

    "commands": {
        "off": "codice.....",
        "on": "codice.....",
        "sources": {
            "EXT1": "codice.....",
            "EXT2": "codice.....",
            "VGA": "codice.....",
            "HDMI": "codice.....",
            "HDMI Side": "codice.....",
            "AV Side": "codice.....",
            "Channel 1": "codice.....",
            "Channel 11": [
                "codice 1.....",
                "codice 2....."
            ]

In questo blocco si definiscono i due comandi principali legati ad accensione e spegnimento (“on“/”off“) e poi, a seguire, un elenco di sorgenti (“sources“) le quali possono corrispondere all’invio di un singolo codice oppure all’invio di più codici (eg. “Channel 11“). Questo elenco è completamente personalizzabile, sia nei nomi delle sorgenti sia, ovviamente, nei codici.


Una volta completata la compilazione del file, prima di darlo in pasto ad Home Assistant verificarne la correttezza tramite la web app JSONLint.

Fatto ciò, sarà sufficiente copiare il file dentro la cartella “/custom_components/smartir/codes/media_player“, configurare correttamente il campo device_code in configurazione e riavviare Home Assistant per terminare l’integrazione.

Stato di accensione

Cosa fondamentale (e forse aspetto più importante tra la versione legacy e quella nuova del componente), ora è possibile indicare all’entità “Media Player” da dove derivare il proprio stato (acceso/spento), ovvero da quello di un’entità di tipo “Binary Sensor” (sensore binario, on/off).

Tale sensore binario, a sua volta, determinerà il proprio stato on/off in base a varie tecniche: la più classica è quella di utilizzare la misurazione di assorbimento elettrico a monte del dispositivo per determinarne lo stato (0 Watt di assorbimento, spento, >0, acceso).

Pare una banalità, ma non la è: in effetti è ciò che si aspettava da tempo. Si immagini infatti il seguente scenario:

  • Home Assistant che abbia federato le proprie entità con uno smart speaker;
  • Home Assistant dotato di entità “Media Player” che rappresenti il dispositivo controllato tramite infrarossi.

Finché si userà Home Assistant (via frontend o tramite smart speaker) per controllare il dispositivo, tutto bene.
Ma cosa succederà quando e se controllerò l’unità anche tramite il proprio telecomando, o comunque manualmente? Accendendo il dispositivo in questo modo Home Assistant ovviamente non sarà consapevole del cambio di stato dell’unità, di conseguenza lo stato dell’entità che la rappresenta presso l’HUB rimarrà impostata su “spento“, e qualsiasi eventuale comando di spegnimento da Home Assistant e/o dallo smart speaker ovviamente non andrà a buon fine.

Se invece indicherò a Home Assistant dove dedurre lo stato dell’entità le cose cambieranno, perché non appena si accenderà manualmente il dispositivo l’assorbimento in watt (in rapida ascesa) rilevato dal sensore posto a monte del dispositivo stesso farà sì che il sensore binario (opportunamente configurato) ad esso associato viri ad “acceso”, e così di conseguenza anche l’entità presso Home Assistant. Viceversa per lo spegnimento.

Per approfondire questo tema è disponibile un’ampio progetto dedicato alla deduzione dello stato degli elettrodomestici non domotici tramite l’analisi degli assorbimenti elettrici, il quale ci spiega, come definire in configurazione un sensore binario da dare in pasto a “SmartIR” per il fine appena spiegato.

Utilizzo

Ora, se tutto sarà stato effettuato correttamente, presso l’interfaccia di Home Assistant sarà apparsa una nuova voce analoga a questa:

Home Assistant - Media Player

La quale, se si cliccherà sui tre puntini in basso a destra, fornirà dettagli e funzionalità come segue:

Home Assistant - Media Player - Dettaglio TV

Automazione

A questo punto, volendo, sarà possibile utilizzare le azioni dell’entità di tipo “Media Player” per controllare in modo automatico la/le entità di questo tipo.

Poniamo di avere un Raspberry Pi configurato come ricevitore AirPlay collegato l’input AUX di un Amplificatore domotizzato con la tecnica spiegata nel presente progetto. Diciamo di voler automatizzare l’azione di accendere l’amplificatore e di predisporre la sorgente corretta e il volume appropriato.

Diciamo quindi di voler definire uno script il quale, quando azionato:

  • accenda l’amplificatore;
  • attenda un dato tempo tecnico “di accensione” (diciamo 5 secondi)
  • selezioni l’input AUX
  • alzi il volume simulando la pressione (un paio di volte) del tasto Volume +

Lo script da definire sarà:

script:
  sequence:
    - action: media_player.turn_on
      entity_id: media_player.amplificatore
    - delay: 0:00:05
    - action: media_player.select_source
      data:
        entity_id: media_player.amplificatore
        source: 'AUX'
    - action: media_player.volume_up
      entity_id: media_player.amplificatore
    - action: media_player.volume_up
      entity_id: media_player.amplificatore

⚠️ Se di Home Assistant ne sai poco ma sei interessato a capirne di più, ti suggeriamo di partire da qui.

Questa pagina è redatta, manutenuta e aggiornata dallo staff di inDomus, un gruppo di persone molto diverse tra loro che trovi, per domande e supporto, sul forum e sulla chat del sito. Alcuni link sono taggati in qualità di affiliati Amazon e riceviamo un compenso dagli acquisti idonei, utile al sostenimento del sito, ma le nostre recensioni sono tutte indipendenti e non sponsorizzate. Se ti sei perso, a tua disposizione c'è la mappa.