Domotizzare TV, decoder, (sinto)amplificatori con Broadlink e Home Assistant (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/basso
  • Costo: ridotto (<20 € usando Broadlink RM Mini 3)
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 Broadlink RM Mini 3 (o Broadlink equivalente con emettitore infrarosso)
PROGETTO MAGGIORMENTE INDICATO PER:

Tutti gli ambienti

Note e disclaimer
  • qualsiasi modifica all'impianto elettrico dev'essere effettuata da personale qualificato
  • qualsiasi modifica attuata in proprio è a propria responsabilità personale nonché a proprio rischio e pericolo (la presente guida ha puro scopo didattico)
  • qualsiasi modifica attuata in proprio a un dispositivo ne fa decadere la garanzia.
Revisione progetto: 1.2
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.

Sintoamplificatore

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 3) 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

Prima di configurare il nostro componente presso Home Assistant è necessario che l’attuatore Broadlink (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 scaricare l’applicazione e-Control per Android o per iOS e seguire le istruzioni a schermo. In caso di difficoltà è disponibile il manuale in italiano.

Finita la prima configurazione è necessario che il dispositivo Broadlink possegga, all’interno della nostra Wi-Fi, un IP fisso. Qui è disponibile una guida per capire come impostarlo.

Installazione di SmartIR

Dato che “SmartIR” è un componente aggiuntivo ed esterno a Home Assistant, esso va installato.

In primis è necessario creare una cartella chiamata “custom_components” (se non già presente) dentro la directory principale d’installazione di Home Assistant. Ciò fatto, scaricare il pacchetto .zip dalla pagina GIT del componente e decomprimerlo: sarà poi sufficiente copiare la cartella “smartir” in esso contenuta dentro la directory “custom_components” di cui sopra.

N.b. in caso di installazione in ambito Linux (Raspberry, Ubuntu o altro) dopo la copia di tale cartella è necessario effettuare una correzione dei diritti d’accesso alla cartella, utilizzando il comando “chmod“. Ad esempio:

sudo chmod -R 0777 /home/homeassistant/.homeassistant/custom_components

laddove il path di installazione sia, appunto, “/home/homeassistant/.homeassistant“.

Componente Broadlink

Il componente “Broadlink” di Home Assistant è utile a creare un interruttore il quale, quando configurato, non avrà (almeno nel caso di questo progetto) alcuna particolare funzione se non quella di creare indirettamente due “servizi” di sistema i quali avranno funzione, rispettivamente, di invio e ricezione codici infrarossi (e in radiofrequenza, nei modelli supportati).

Tali servizi prendono il nome di:

  • broadlink.learn
  • broadlink.send

Il primo servizio sarà necessario per l’apprendimento di codici, il secondo per l’invio (utilizzato dalle entità che definiremo in configurazione.

Definiamo dunque presso la configurazione di Home Assistant questo primo switch:

# Esempio di configurazione learner
switch:
  - platform: broadlink
    host: 192.168.1.2
    mac: '00:00:00:00:00:00'
    timeout: 30
    friendly_name: "Attuatore Broadlink"
    type: rm
    switches:
      learner:
        friendly_name: "Learner"
        command_on: ''
        command_off: ''

N.b. I campi “host” e “mac” indicati sono solo d’esempio e andranno quindi valorizzati con IP (fisso) e indirizzo MAC del nostro attuatore Broadlink, così come il campo “type“. I campi “on” e “off” sono lasciati intenzionalmente vuoti.

A questo punto riavviare Home Assistant e, completato il riavvio, sulla colonna di sinistra del frontend selezionare, sotto il menu “Developer Toolsla prima icona a sinistra, ovvero “Services“. Nella lista dei servizi dovrebbero apparire i due servizi di cui sopra.

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 in configurazione un blocco di questo tipo:

smartir: 

media_player:
  - platform: smartir
    name: Hi-fi
    device_code: 1000
    controller_data: ip_del_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 l’indirizzo IP del Broadlink da utilizzare per l’invio dei codici.
controller_command_topic(stringa, opzionale) Topic di comando MQTT collegato alla modalità di controllo tramite servizio “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 – possono essere riciclati dal file di configurazione utilizzato precedentemente con il componente “Broadlink IR Media Player”; in alternativa, è 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 (vedi creazione dello switch learner).

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 i servizi 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 appropiato.

Diciamo quindi di voler definire uno switch (basato su componente “Input Boolean”) 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 +

Assumiamo che le entità in gioco si chiamino rispettivamente input_boolean.airplay (lo switch) e media_player.amplificatore.

L’automazione da definire sarà:

automation:
- alias: "AirPlay"
  hide_entity: true
  initial_state: 'on'
  trigger:
    - platform: state
      entity_id: input_boolean.airplay
      to: 'on'
  condition: []
  action:
    - service: media_player.turn_on
      entity_id: media_player.amplificatore
    - delay: 0:00:05
    - service: media_player.select_source
      data:
        entity_id: media_player.amplificatore
        source: 'AUX'
    - service: media_player.volume_up
      entity_id: media_player.amplificatore
    - service: media_player.volume_up
      entity_id: media_player.amplificatore


Home Assistant Official LogoATTENZIONE: ricorda che sul nostro community FORUM c'è una sezione ad hoc dedica a Home Assistant, per qualsiasi dubbio, domanda, informazione nel merito specifico di queste componenti.

🔻 Clicca QUI per commentare l'articolo. 🔻