Linux Domotica - X10 - Installazione e uso di HEYU e HEYU2

Heyu è un software di automazione domestica per  CM11A, l'interfaccia  costruita da X10company per controllare i dispositivi che comunicano su power line, dunque attraverso il collegamento alla seriale, permette al pc di poter  gestire gli apparati che trasmettono informazioni attraverso la linea elettrica.
Il nome del software "Heyu" deriva dalla frase abbastanza comune: "Hey you,Turn off the lights!!".
Con Heyu è possibile accendere , spegnere, dimmerizzare  i moduli x10,  ottenere la data e l'ora dall'interfaccia CM11, ricevere informazioni sullo stato dei moduli, caricare ed eseguire eventi macro e temporizzati (che vengono memorizzati nella EEPROM dell'interfaccia CM11), monitorare tutti i dati inviati verso o dall' interfaccia.
Per quanto riguarda gli eventi macro e temporizzati (ossia una serie di eventi che accadono al verificarsi di un determinato stato oppure ad una determinata  data o ora della giornata) è possibile far lavorare heyu con crontab per schedulare gli eventi.
Heyu è stato sviluppato su Linux, è adatto a lavorare su sistemi linux, tuttavia alcune directory potrebbero variare a seconda della distribuzione utilizzata.
E' compatibile anche con BSD, FreeBSD,  OpenBSD, OS X, SunOS, Solaris e NEXTSTEP 3.3.

COME INSTALLARE HEYU.
-Scaricare e scompattare i sorgenti.
    E' possibile scaricarle  direttamente da sito web, oppure via shell col comando:
    wget http://heyu.tanj.com/x10_heyu.tgz
    tar -zxvf  x10_heyu.tgz
-Entrare nella directory heyu.dir e  visualizzare i contenuti.
    cd heyu.dir
    ls -l
-Installare il pacchetto.
    ./Configure
    make
    make install

CONFIGURAZIONE DI HEYU.
La configurazione d'esempio che segue è relativa a d un semplice sistema che controlla alcune utenze elettriche collegate ai relativi moduli x10.
Sono stati utilizzati:
- interfaccia seriale CM11 collegata a /dev/ttyS1;
- 2 moduli lampada;
- 1 modulo elettrodomestici;
- 1 modulo ricetrasmettitore;
I parametri fondamentali che vengono modificati nel file di configurazione sono:
#alias degli apparati coi relativi indirizzi
lampada_blu          A 2           # LAMP
lampada_rossa        A 3           # LAMP  
radio                A 4           # APPLIANCE  
ventilatore_grande   A 5           # TRANCEIVER
HOUSECODE            A             # housecode utilizzato
TTY             /dev/ttyS1         # porte seriale a cui è collegata l'interfaccia


UTILIZZARE HEYU.
I principali comandi:
heyu help : visualizza tutti i comandi possibili.
heyu info : visualizza informazioni sullo stato del registro della   CM11, sullo stato dei dispositivi, sull'ora.
Un corretto output di heyu info o heyu2 info è di questo tipo:
Firmware revision Level = 8
Interface clock: Tue,  9:56:35, Julian 157
Housecode = a
0 = off, 1 = on,               unit  16.......8...4..1
Last addressed device =       0x0001 (0001000000000000)
Status of monitored devices = 0x0000 (0000000000000000)
Status of dimmed devices =    0x0000 (0000000000000000)

heyu date : fornisce informazioni sull'ora corrente.
heyu erase : cancella tutti gli eventi macro dalla  EEPROM .
heyu syn : visualizza i sinonimi  disponibili per alcuni comandi.
heyu version : stampa la versione di heyu in uso.
heyu monitor : monitorizza  tutte le attività x10.
heyu  turn HU on : accende il dispositivo con  un determinato indirizzo (per la versione 1.35 o precedenti).
heyu on HU : accende il dispositivo con  un determinato indirizzo (per la versione 2.0Beta ).
heyu  turn HU off: spegne il dispositivo con  un determinato indirizzo (per la versione 1.35 o precedenti).
heyu off HU : spegne il dispositivo con  un determinato indirizzo (per la versione 2.0Beta ).
heyu dim HU level : dimmerizza ad un determinato livello (che va da 1 a 22) un dispositivo con determinato indirizzo.

CREARE EVENTI MACRO E TEMPORIZZATI
Per creare eventi macro con Heyu è possibile operare direttamente con crontab, oppure modificare il file x10sched.conf.
Per esempio se si vuole  scatenare un evento temporizzato  inserire nel file x10sched.conf:
-timer  smtwt..      05/02-12/12 12:30 12:35 a5on      a5off
Con la riga di comando precedente si farà in modo che dal lunedì al venerdi (smtwt..,è neccessario inserire un puntino per i giorni nei quali non si vuole far eseguire l'evento), dal 2 maggio  al 12 dicembre, alle 12.30 si accenda l'utenza con indirizzo a5 e si spenga alle 12.35.
-macro  a5on  0  on a5
Per le macro è neccessario specificare il nome, "a5on"  in questo caso, che dopo 0 secondi di delay pone in posizione on il dispositivo con indirizzo a5.
Ognuno creerà le proprie macro e i propri eventi a seconda delle singole esigenze.
Per rendere effettive le macro e gli eventi temporizzati  è neccessario lanciare il comando heyu upload, che provvederà a caricare gli eventi in EEPROM.
heyu upload check verifica se esiste qualche evento da caricare.
heyu upload status indica se  sono stati  caricati o no degli eventi.

HEYUHELPER.
Heyuhelper è un piccolo programma aggiuntivo che viene installato con heyu 1.35. Heyuhelper viene richiamato da heyu per eseguire comandi esterni basati su eventi x10.
Heyuhelper è uno script shell, che può essere modificato dall'utente.
-esempio script heyuheper.

#!/bin/sh
case $1 in
   a2On)
# Invia una mail all'utente root quando l'unità G4 è stata accesa.
       echo "L'unità G4 è posizione ON" | mail root
       ;;
   a4_on)
       # Attesa di 5 secondi, spegne l'unità a2
       sleep 5
       heyu turn a2 off
       ;;
  # linea di debug.
* ) echo "The arg is \"$1\"" ;;
esac


Monit e  x10biff
Monit e x10 biff sono due programmi demo che vengono  inclusi con heyu,  nelle versioni precedenti alla 2.0.
Monit  permette di accendere o spegnere il monitor del proprio pc,  manualmente o dopo un'attesa di tempo determinabile; simile ad uno screen-saver.
X10biff permette di far lampeggiare una luce ogni qualvolta venga ricevuta una mail.

LE NOVITA' CON HEYU2.
Heyu è disponibile in due versioni: heyu (versione stabile 1.35_3) ed heyu2 (ultima release alpha5.2).
Le caratteristiche di base del software sono comuni a entrambe le versioni, ma con heyu2 vengono introdotte grosse novità.
Una prima differenza è che con heyu versione 2 ogni comando verrà lanciato con la sintassi "heyu2",  piuttosto che "heyu" come nella versione precedente.
Heyu2 può tenere traccia dello stato dei vari moduli sul sistema con lo "state engine", un processo che viene eseguito in background lanciando il comando heyu2 engine; tiene traccia sia dei segnali ricevuti sulla linea elettrica attraverso l'interfaccia CM11, sia quelli inviati attraverso heyu.
Ogni volta che viene fatta una modifica nel file di configurazione bisogna eseguire nuovamente heyu2 engine per rendere effettive le modifiche.
Un'altra novità sono gli SCRIPTS, heyu2 può lanciare scripts o comandi Unix quando riceve in input segnali x10  specifici.
Per poter lanciare script innanzitutto il demone heyu state engine deve essere in esecuzione.
E' importante sapere che Heyu classifica i segnali x10 secondo la loro sorgente:
-sndc, per i segnali  inviati da heyu command line;
-snds, per i segnali inviati da heyu2 command line dall'interno di uno script;
-sndm, per i segnali inviati da una macro temporizzata;
-sndt, per i segnali inviati da una macro scatenata da uno specifico evento.
-rcvi, per i segnali ricevuti sulla linea elettrica.
Heyu state engine può eseguire uno o più script  definiti nella direttiva SCRIPT all'interno del file di configurazione.
Con la nuova versione di heyu è possibile specificare una  directory (coi relativi permessi di scrittura), dove monitorare ciò che accade. Bisognerà specificare la directory  nella direttiva LOGFILE_DIR nel file di configurazione.
Con heyu2 monitor, è possibile visualizzare sia i segnali  x10 ricevuti, che quelli inviati, per monitorare il sistema.
Con heyu2 rimane la possibilità di utilizzare heyuhelper, impostare nella direttiva SCRIPT_MODE  la scelta HEYUHELPER come alternativa a SCRIPTS, in questo caso lo script heyuhelper verrà eseguito ogni volta che  viene ricevuto da heyu un segnale x10 proveniente dall'interfaccia; a differenza  di heyu versione 1.xxx, con heyu2, heyuhelper non viene lanciato ogni volta che viene eseguta una macro.
Altre novità riguardano  la possibilità di poter specificare dove andare a cercare il file di configurazione, se non è situato nelle directory standard, con le opzioni "-c"  oppure  "-s  <pathname>" e vi sono differenze anche per le direttive di configurazione nei file schedulati, utilizzati per lanciare macro.
E' possibile far convivere heyu versione 1.xxx con heyu versione 2, è neccessario che abbiano i file di configurazione locati in directory diverse, inoltre bisognerà eseguire il comando heyu stop, che ferma l'esecuzione dell'heyu_relay attivo, per passare da una versione all'altra senza problemi.
La procedura di installazione è comune alle diverse versioni, così come la configurazione minima per il funzionamento del software.

HEYU2 COMANDI

Heyu2 fa una distinzione tra i comandi, nasce la classificazione di administrative command, state command e directive command.

I comandi "administrative" vengono utilizzati per controllare alcune caratteristiche o visualizzare informazioni dalla CM11 ed offrire  alcune informazioni su heyu .
heyu2 date : fornisce informazioni sull'ora corrente.
heyu2 erase : cancella tutti gli eventi macro dalla  EEPROM della CM11.
heyu2 info : visualizza informazioni sullo stato del registro della   CM11, sullo stato dei dispositivi, sulla data e l'ora corrente, l'housecode in uso, lo stato degli eventi schedulati già uplodati.
heyu2 help: visualizza la lista di  tutti i comandi disponibili.
heyu2 syn : visualizza i sinonimi  disponibili per alcuni comandi.
heyu2 <etichetta_scene>: esegue una scene o un usersyn (user-defined synonym) dal file di configurazione .
heyu2 show: visualizza alcune informazioni sul file di configurazione e sullo stato del sistema. Inoltre verranno visualizzati i vari parametri del comando disponibili per la release utilizzata.
heyu2 upload: legge le macro, i timers e i triggers e li uploda nella EEPROM della CM11.
heyu2 catchup: legge i file contenuti nella EEPROM quando viene uplodata una schedulazione, esegue in ordine tutte le macro stabilite per la data corrente.
heyu2 monitor: monitorizza  tutte le attività x10.
heyu2 engine: Avvia o riavvia  l'heyu state engine, un processo che rimane in background e tiene lo stato dei moduli basati su segnali x10 inviati e ricevuti.
heyu2 initstate[H]: se non viene spefificato l'house code imposta l'intera tabella di stato x10 a zero; se viene specificato l'house code inizializza la tabella di stato per quel determinato housecode a zero.
heyu2 reset: resetta il contatore dell'interfaccia CM11A e imposta l'housecode di default. Se viene specificato l'housecode come parametro, verrà impostato quello specificato.
heyu2 stop: stoppa l'esecuzione del relay_daemon e ferma le operazioni di monitoraggio.
heyu2 setclock: legge l'ora dal sistema e la carica all'interno della CM11.
heyu2 newbattery: resetta la batteria della CM11A a zero.
heyu2 purge:cancella le macro in sospeso,  che sono state chiamate ma non eseguite.
heyu2 clear: pulisce il registro di stato della CM11 per l'housecode controllato.
heyu2 version:  stampa la versione di heyu in uso.
heyu2 utility syscheck: visualizza informazioni sull'ora, calendario, timezone ottenute dal sistema attraverso heyu.
heyu2 utility  suntable [yyyy]: crea un file  suntable_yyyy.txt che viene memorizzato nell'hard disk , contenente una tabella giornaliera di Dawn e Dusk  per l'anno yyyy specificato.
I comandi "state" visualizzano, in diversi formati, lo stato di ciascun modulo.Per la maggior parte delle volte i comandi state vengono richiamati dagli script, è neccessario, per l'esecuzione di questo tipo di comandi che heyu state engine sia in esecuzione.
heyu_state  Hu :  il parametro richiesto è l'indirizzo (housecode_unitcode) di una sola unità.
L'output del comando può essere(esempio basato sull'unità a1):
a1On   a1Off    a1Dimm   ad indicare lo stato acceso/spento/dimmerizato  di per un determinato HU;
a1Addr  a1Unaddr  ad indicare lo stato indirizzato o non indirizzato per un determinato HU;
I comandi direct vengono utilizzati per trasmettere istruzioni ai moduli sulla linea elettrica attraverso l'interfaccia CM11A.
heyu2 on HU : accende il dispositivo con  un determinato indirizzo
heyu2 off HU : spegne il dispositivo con  un determinato indirizzo  
heyu2  dim  HU <level> : dimmerizza le unità al livello selezionato    (1-22)
heyu2  dimb  HU <level>: dimmerizza le unità al livello   selezionato (1-22) dopo la luminosità massima
heyu2  bright  HU <level>: imposta la luminosità della lampadina al livello desiderato (1-22)
heyu2  brightb  HU <level>:  imposta la luminosità della lampadina al livello desiderato (1-22), dopo la luminosità massima.
heyu2  lightson  H:accende  tutte le luci con quel determinato house-code
heyu2  lightsoff  H : spegne  tutte le luci con quel determinato house-code        
heyu2  allon  H: accende tutte le unità con quel determinato house code
heyu2  alloff  H: spegne tutte le unità con quel determinato house code
heyu2  turn  HU <comando>: cambia lo stato dell'unità   on|off|up|down
heyu2  _turn  HU <command>: cambia lo stato dell'unità, non disponibile per le macro  
heyu2 preset  HU <level>: preseleziona il livello di default  per l'unità (1-32),non disponibile per le macro
heyu2 _preset  HU <level> :  preseleziona il livello di default  per l'unità (1-32),non disponibile per le macro
heyu2 preset_level  <level>:   preseleziona il livello di default  per l'unità (1-32)
heyu2 status  HU: restituisce lo stato dell'unità (disponibile per i moduli two-way)
heyu2  _status  HU :restituisce lo stato dell'unità (disponibile per i moduli two-way, non disponibile per le macro)
heyu2 status_on  HU:Status Acknowledge ON
heyu2 status_off  HU:Status Acknowledge OFF
heyu2 kill_all_hc: invia il segnale off a tutti i dispositivi.
SCRIPT
E' possibile utilizzare la caratteristica di heyu2 di supportare la  direttiva SCRIPT, per creare un semplice sistema per la gestione della casa.
Per poter eseguire gli script , innanzitutto, il file di configurazione deve contenere la direttiva:
SCRIPT_MODE SCRIPTS.
Ogni avvenimento può essere loggato utilizzando la direttiva: LOG_FILE /<path> nel file di configurazione.

-SCRIPT  b2 on :: /bin/echo "E' stata rilevata una presenza"> > | /bin/mail -s "E' stata rilevata una presenza" <indirizzo a cui inviare la mail>
B2 potrebbe essere  l'indirizzo di un  sensore di presenza, il quale se impostato in posizione on, a causa di un movimento rilevato, invia una mail a un'indirizzo stabilito per avvisare l'utente.

E' possibile utilizzare degli alias per identificare un'utenza piuttosto che l'indirizzo, questo comporta una maggiore comprensione del file di configurazione.
ALIAS luce_ingresso  A1
SCRIPT luce_ingresso on :: /bin/echo "La luce dell'ingresso è accesa" | /bin/mail -s "La luce dell'ingresso è accesa" <indirizzo a cui inviare la mail>


Con questo meccanismo è possibile inviare mail per ogni evento che accade all'interno dell'abitazione, in modo da poter tener sotto controllo gli eventi che si desidera monitorare.
SCENE e USERSYN
Scene e usersyn(user-defined synonyms), sono due nuove direttive disponibili con heyu2, con le quali è possibile creare semplici "scenari".
All'attuale versione i due comandi sono praticamente identici, l'unica piccola differenza è la loro visualizzazione nel comando show.
heyu2 show s :visulizzerà le scene attive.
heyu2 show u :visulizzerà gli usersyn attivi.
E' neccessario specificare l'etichetta, seguita da una sequenza di comandi; il formato per entrambe è simile:
SCENE    Label  comando1; comando2; comando3; ...
USERSYN    Label  comando1 <args>; comando2 <args>; comando3 <args>; ...
Il <comando> , può essere sostituito, per entrambe sia con l'indirizzo, sia con un alias.Vengono supportati anche parametri posizionali, come $1, $2, che vengono sostituiti con i valori dati in input al momento dell'esecuzione.
SCENE  scene_esempio on a2; on a4; off a2
SCENE  scene_esempio2 on lampada_blu; on a4; off  lampada_blu
USERSYN  usersyn_esempio3  on a1;  on a4; off a1
USERSYN usersyn_parametri    dim lampada_blu $1; bright lampada_blu $2; off lampada_blu
Per eseguire scene ed usersyn, lanciare il comando  heyu2  <label> [$1] [$2].

Errori comuni con heyu
Errori abbastanza comuni quando si lavora con heyu, riguardano problemi di comunicazione con la seriale.
Il comando utile per verificare che sia possibile la comunicazione con la seriale è heyu info,  se  si ottengono  output come i seguenti, c'è un problema con la configurazione e la comunicazione con la seriale.
Invalid status response (was 0 bytes instead of 14)
HEYU: No response from the CM11A.  Program exiting.


Version:1.35_3
Using the config file /etc/x10.conf
HEYU: bad housecode in config, alias LOG_DIR
Trying to lock (/var/lock/LCK..heyu.writettyS1)
/var/lock/LCK..heyu.writettyS1 is locked
xwrite() called, count=1
xread() called, count=14, timeout = 3
Alarm!
xread() returning 0 byte(s). The first is 8b
re checking for poll
xread() called, count=1, timeout = 2
Alarm!
xread() returning 0 byte(s). The first is 84
re entering get status
xwrite() called, count=1
xread() called, count=14, timeout = 3
Alarm!
xread() returning 0 byte(s). The first is 8b
re checking for poll
xread() called, count=1, timeout = 2
Alarm!
xread() returning 0 byte(s). The first is 60
re entering get status
xwrite() called, count=1
xread() called, count=14, timeout = 3
Alarm!
xread() returning 0 byte(s). The first is 8b
Invalid status response (was 0 bytes instead of 14)
HEYU: No repsonse from the CM11A.  Program exiting.



Verificare che la CM11 sia collegata realmente alla seriale specificata nel file di configurazione, e controllare i relativi permessi.
Se l'output rimane invariato verificare quali processi relativi ad heyu sono attivi col comando ps -aux |grep heyu; eseguire il comando heyu stop, per terminare l'esecuzione del demone heyu_relay  e killare i processi.
Digitare il comando heyu list per verificare su quali file heyu va a scrivere.
[root@localhost root]# heyu list
Version=1.35_3
SPOOLDIR=/var/tmp/
LOCKDIR=/var/lock

Cancellare i file temporanei di heyu da /var/tmp e il file  .mon  da /var/lock.
Ogni volta che si effettua una modifica sul file di configurazione è neccessario renderla effettiva eseguendo il comando heyu2 engine, un errore abbastanza comune eseguendo questa operazione è:
Only master heyu channel can restart state engine.
Per risolvere eseguire il comando heyu2 stop e rieseguire l'engine.

Privacy Policy