Configurare homebridge

Apple qualche anno fa ha introdotto sui propri dispositivi mobili la funzione HomeKit. Con questa funzione il cellulare può interagire con dispositivi compatibili offrendo la possibilità del controllo vocale attraverso Siri oppure automatizzando le azioni quando si verificano determinate condizioni.

Apple HomeBrigde

Ho cercato in internet se esiste un sistema opensource in grado di interagire con Apple IOS e ho trovato HomeBrigde. Installando su Linux nodejs e il programma npm è possibile avere a disposizione uno strumento altamente configurabile per costruire qualsiasi tipo di dispositivo.

HomeBridge è un ambiente aperto e la comunità di sviluppatori è molto attiva: sono disponibili moltissimo plug-ins per aprire il cancello, accendere la luce, controllare la TV.

L’installazione non è complicata bastano pochi passaggi. Nell’esempio ho ideato una funzione che accende è spegne il Line-IN di un PC a cui ho collegato una radio. Tramite SIRI del mio iPhone posso così accedere o spegnere la radio.

E’ possibile installarlo su un pc Linux (io uso come distribuzione Ubuntu) ma funziona nello stesso modo anche su un raspberry (distribuzione raspian).


Ambiente

Installare i seguenti pacchetti

$ sudo apt-get install nodejs
$ sudo apt-get install libavahi-compat-libdnssd-dev

Installazione

$ sudo npm install -g homebridge --unsafe-perm homebridge homebridge-http
$ sudo npm install -g --unsafe-perm homebridge-config-ui-x

chiudere e riaprire il terminale per rileggere l’ambiente.

Primo avvio

Lanciando il comando homebridge per la prima volta vengono create le directory di ambiente solitamente si trovano in $HOME/.homebridge

ATTENZIONE: non è ancora il momento di abbinare il cellulare!

$ homebridge

esempio di esecuzione homebridge

Premendo la sequenza di tasti CTRL + C si termina il programma

Entrando nella directory $HOME/.homebridge dobbiamo creare il nostro file di configurazione. Potete trovare il file di esempio qui sotto

File di configurazione

cd $HOME/.homebridge
$ vi config.json

Potete usare il file di configurazione che trovare qui sotto cambiando il codice PIN con uno vostro personale

{
  "bridge": {
    "name": "Casa mia",
    "username": "CC:25:AD:E3:CE:33",
    "port": 51827,
    "pin": "036-95-412"
  },
  "description": "Domotica della casa.",
  "accessories": [
  {
    "accessory": "Http",
    "name": "stereo",
    "switchHandling": "realtime",
    "http_method": "GET",
    "on_url": "http://192.168.1.100/radio/?Radio=on",
    "off_url": "http://192.168.1.100/radio/?Radio=off",
    "status_url": "http://192.168.1.100/radio/?Radio=status",
    "status_on": "ON",
    "status_off": "OFF",
    "username" : "",
    "password" : ""
  }
 ],
  "platforms": [
  {
   "platform": "config",
   "name": "Config",
   "port": 4000,
   "sudo": false
  }
 ]
}

L’esecutore dei comandi

Come ho anticipato il programma effettua una GET al web server che ha indirizzo IP 192.168.1.100. Il web server ha una scheda audio e ho collegato una radio alla porta LINE-IN. L’esempio di codice che riporto attiva o disattiva la porta LINE-IN.

<?php

/* Il file crea e imposta al suo interno lo stato della porta audio LineIN
lo stato può essere on oppure off
lo script /root/shell/loquendo_allarmi.sh
interpreta correttamente il file in modo da non cambiare lo stato
della porta

Questo php e' utilizzato da homekit per accendere e spegnere la radio
con il comando "accendi/spegni stereo"
*/

$FILE = "/tmp/audio.stato";

$Radio = LeggiVar("Radio"); // assume valori on|off

switch ($Radio) {
  case "on":
    exec("amixer sset "Line" on > /dev/null");
    $fh = fopen ( $FILE ,"w+");
    fwrite ($fh , $Radio );
    fclose ($fh);
    break;
  case "off":
    exec("amixer sset "Line" off > /dev/null");
    $fh = fopen ( $FILE ,"w+");
    fwrite ($fh , $Radio );
    fclose ($fh);
    break;
  case "status":
    $fh = fopen ( $FILE ,"rb");
    $buffer = fgets($fh, 4096);
    switch ($buffer){
      case "off":
      echo ("0");
      break;
    case "on":
      echo("1");
      break;
    }
    fclose ($fh);
    break;
  default:
    echo("Parametro errato");
    break;
  } // end switch


//----------------------------------------------------------

function LeggiVar($NomeVariabile){
  unset($OUT);
  if (isset($_POST[$NomeVariabile])) $OUT = $_POST[$NomeVariabile];
  if (isset($_GET[$NomeVariabile])) $OUT = $_GET[$NomeVariabile];
  return (isset($OUT)?$OUT:null);
}

?>

Un altro esempio di attuatore usando un ESP8266 lo troverete presto su questo sito.

 

In caso di problemi

In caso di problemi di compatilibilità io sono riuscito a risolvere disinstallando e reinstallando in questo modo:

$ sudo npm uninstall homebridge
$ sudo /bin/rm -r /usr/lib/node_modules/homebridge/ /usr/lib/node_modules/homebridge-http/
$ sudo rm /usr/bin/homebridge /usr/bin/homebridge-config-ui-x

A questo punto eseguire l’installazione come indicato sopra

Messaggi di errore

Se dopo aver scansionato il codice QR nell’applicaizone Casa non appare il dispositivo ma appare il messaggio

Per aggiungere questo accessorio alla tua abitazione devi prima inizializzarlo

Occorre cancellare la directory persist che si trova in $HOME/.homebridge
Riavviare homebridge e tentare nuovamente l’assegnazione del dispositivo.

Piattaforma WEB di gestione

Per attivare la piattaforma di gestione web occorre modificare il file di configurazione (vedi la sezione platform del file di configurazione che ho riportato). Per non avere noie con eventuali webserver ho usato la porta TCP 4000. Dopo il riavvio di homebridge è possibile accedere all’interfaccia mediante browser all’indirizzo http://[ip_vostro_server]:4000
Utente predefinito : admin
password predefinita: vuota
Il file con username e password si trova in $HOME/.homebridge/auth.json Consiglio di tener via una copia di questo file prima del cambio della password (non si sa mai che la si possa dimenticare).

Da questa interfaccia è anche possibile attivare i dispositivi anziché usare il comando vocale però occorre attivare Homebridge in modalità “insicura” com il comando

$ homebridge -I

 

SalvaSalva

SalvaSalva

SalvaSalva

SalvaSalva

SalvaSalva