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.
Stato dell'arte sulle applicazioni e il software disponibile su Linux per interfacciarsi e gestire sistemi domotici basati sullo standard X10