WISH(x10dev): Driver universali per dispositivi X10 su Linux.

Wish è un progetto nato per creare driver universali per i dispositivi x10.
Questa esigenza è nata vista la diffusione  di questo protocollo e il numero di ditte produttrici di dispositivi ognuna con la propria metodologia di interfacciarsi con la rete x10.

X10 dev crea un dispositivo /dev per ogni unità x10, col risultato che qualsiasi applicazione utente, può essere scritta per comunicare con la rete x10 indipendentemente  dal tipo di tranceiver utilizzato.
Wish può essere gestito via command line, attraverso semplici shell script che utilizzano echo e cat, o attraverso programmi più complicati scritti in Java, Perl o C; inoltre un altro vantaggio è che è possibile seguire tutte le attività x10, per tutti i 16 housecode, attraverso la scrittura sui file di log (x10logd).
Al momento wish supporta PowerLinc Serial, PowerLinc USB, CM11A, e Firecracker/CM17A.
Sono disponibili, con la versione 1 del software i driver per il kernel 2.4.X col supporto per CM11A e SmartHome PowerLink Serial, con la versione 2 di x10dev i driver sono compatibili sia per il kernel 2.4 che per il kernel 2.6.7 e superiori, col supporto per  PowerLinc Serial, PowerLinc USB, CM11A e Firecracker/CM17A.
Le novità con x10dev2 è che vengono utilizzati i driver userspace per comunicare col tranceiver, rendendo così più affidabili i driver e il sistema.

Compilare e installare i driver
Per compilare i driver è neccessario avere le sorgenti del kernel installate nella macchina, così da avere le informazioni neccessarie sul kernel in esecuzione contenute nel file .config.

Scaricare le sorgenti del software e scompattarle in una directory temporanea.
-tar xvzf x10dev-2.1.2.tar.gz
-cd x10dev-2.1.2
-make
-make install
In questo modo verranno copiati i demoni plusbd, cm11ad e pld in /usr/bin, le utilities x10logd e x10 watch, nbread e nbecho in /usr/bin.
I moduli del kernel verranno copiati nella directory corrente del kernel in esecuzione, ad esempio in /lib/modules/2.6.10/kernel/drivers/char/x10.
Caricare i driver.
Una volta installati e compilati i driver devono essere caricati. E' neccessario caricare il device manager che equivale a x10.o per il kernel 2.4 e x10.ko per il kernel 2.6.
Per caricare i driver manualmente eseguire gli script, per il tranceiver utilizzato, che si trovano nella directory example-scripts, oppure  per l'autostart eseguire il comando chkconfig per impostare il caricamento dei driver al runlevel desiderato.
Ad esempio per impostare il caricamento dei driver per la CM11A, al runlevel 5, eseguire: chkconfig --level 5 x10.cma11.
E' possibile startare i driver anche con /etc/init.d/x10.<tranceiver utilizzato> start.
Per caricare i driver userspace:
-per  Serial PowerLinc
modprobe x10
/usr/sbin/pl -device /dev/ttyS0
/usr/sbin/x10logd
-per USB PowerLinc
modprobe x10
/usr/sbin/plusb -device /dev/usb/hiddev0
/usr/sbin/x10logd
-per CM11A
modprobe x10
/usr/sbin/cm11ad -device /dev/ttyS0
/usr/sbin/x10logd
Se i driver per il tranceiver utilizzato sono stati caricati correttamente, si noterà una linea di conferma nei log (/var/log/messages) di questo tipo:  "x10 Transciever module v<version> ([email protected])" .
Stoppare i driver
Per terminare l'esecuzione dei driver x10 è neccessario stoppare tutti i demoni x10 che accedono ai dispositivi eseguendo il comando HUP.
kill -HUP `cat /var/run/x10d.pid`
kill -QUIT `cat /var/run/x10d.logd`
kill -QUIT cat /var/run/x10watch.pid
rmmod x10
Inviare i comandi con wish
I comandi che seguono vengono utilizzati per inviare comandi sia all'housecode sia ad unità singole.
1,on,ON : accende dispositivi singoli o gruppi di dispositivi.
0.off,OFF : spegne dispositivi singoli o gruppi di dispositivi.
-,dim,DIM: diminuisce l'intensità luminosa dei dispositivi singoli, o gruppi di dispositivi, che supportano questo comando.
+,bright,BRIGHT : aumenta l'intensità luminosa dei dispositivi singoli, o gruppi di dispositivi, che supportano questo comando.
status: invia una richiesta sullo stato di unità specifiche.
I comandi che  vengono utilizzati per inviare segnali solamente all'housecode sono:
aon: accende tutti i dispositivi per uno specifico housecode.
aoff: spegne tutti i dispositivi per uno specifico housecode.
uoff: spegne tutti i dispositivi per uno specifico housecode.
pdimhigh: aumenta il livello di intensità luminosa per i dispositivi che supportano questo comando.
pdimhigh: aumenta il livello di intensità luminosa per i dispositivi che supportano la dimmerizzazione.
pdimlow: diminuisce il livello di intensità luminosa per i dispositivi che supportano questo comando.
I comandi che vengono inviati solamente a singole unità:
nothing, null : invia il segnale on ad una specifica unità.
ps#: (preset dim),invia un segnale di dimmerizzazione ad una specifica unità. E' seguito da un parametro che indica il livello percentuale di dimmerizzazione compreso tra 1 e 32 inclusi.
ps1=0%       ps9=26%           ps17=52%      ps25=77%                                                          
ps2=3%       ps10=29%         ps18= 55%     ps26=81%                                      
ps3=6%       ps11=32%         ps19=58%      ps27=84%
ps4=10%     ps12=35%         ps20=61%      ps28=87%
ps5=13%     ps13=39%         ps21=65%      ps29=90%
ps6=16%     ps14=42%         ps22=68%      ps30=94%
ps7=19%     ps15=45%         ps23=71%      ps31=97%
ps8=23%     ps16=48%         ps24=74%      ps32=100%
Alcuni esempi
echo 1 > /dev/x10/a10 : accende l'unità a10.
echo on > /dev/x10/a10 : accende l'unità a10.
echo 0 > /dev/x10/a10 : spegne l'unità a10.
echo off > /dev/x10/a10 : spegne l'unità a10.
echo 1 > /dev/x10/a : accende tutte le unità  sull'housecode a.
echo 0 > /dev/x10/a : spegnetutte le unità sull'housecode a.
echo bri > /dev/x10/a1: invia il comando bright all'unità a1.
echo - > /dev/x10/a1: invia il comando dim all'unità a1.
echo null > /dev/x10/a2:accende l'unità a2
echo aon > /dev/x10/a: accende tutte le unità sull'housecode a.
echo aoff > /dev/x10/a: spegne tutte le unità sull'housecode a.
cat /dev/x10/a1: legge lo stato dell'unità a1, se il risultato è 100 l'unità è sullo stato on, se il risultato è 000 l'unità è sullo stato off.
   [root@localhost le]# echo 1 > /dev/x10/a1
   [root@localhost le]# cat /dev/x10/a1
   100

cat /dev/x10/a:legge lo stato di tutte le unità sull'housecode a.
   [root@localhost le]# cat /dev/x10/a
       1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16
   A: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000

cat /dev/x10/status:legge e stampa lo stato di tutte le 256 unità.
   [root@localhost le]# cat /dev/x10/status
       1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16
   A: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
   B: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
   C: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
   D: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
   E: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
   F: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
   G: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
   H: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
   I: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
   J: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
   K: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
   L: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
   M: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
   N: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
   O: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
   P: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000

Utilities
-X10LOGD
X10logd è un utilities che permette di visualizzare i log dei driver x10.E' installata di default in /usr/sbin/x10logd.
I parametri di default di x10logd sono:
debug=off
x10log=/dev/x10/log
log file=/var/log/x10.log
pid file=/var/run/x10logd.pid
Il formato dell'output di x10logd è : <mese><giorno_mese><hh:mm:ss><hostname><T(transmit)/R(receive)><housecode_unitecode>
Jul  8 10:44:28 localhost T A1
Jul  8 10:44:28 localhost T A ON
Jul  8 10:44:34 localhost T A1
Jul  8 10:44:34 localhost T A OFF
Jul  8 10:54:39 localhost T A1
Jul  8 10:54:39 localhost T A ON

-Non-Blocking Read Utility (NBREAD)
Nbread è un utility che permette a uno shell script di leggere lo stato dei dispositivi e restiturlo sotto forma di stringa. E' installato di default in /usr/bin/nbread; come parametri accetta il nome del dispositivo di cui si vuol stampare lo stato.
[root@localhost le]#nbread /dev/x10/a1
100

-X10 WATCH
X10 watch è un utility che esegue un'azione a seguito di un cambiamento di stato di un dispositivo x10; ogni stato diverso da OFF viene considerato come on.Questa utility potrebbe non essere disponibile per l'utente root. E' installata di default in /usr/bin/nbecho.
La sintassi di x10watch è: x10watch <dispositivo> [-0 <azione off>] [-1 <azione on>] [-t <tag>] [-p <secondi>]
[le@localhost ~]$  x10watch /dev/x10/a1 -1 /dev/x10/a2 -d3
watching /dev/x10/a1, interval=5, on=/dev/x10/a2, off=(null)
data=100
currentstatus=100
Waiting for data from /dev/x10/a1...

Problemi durante l'utilizzo del software
Uno dei maggiori problemi riscontrati è stato quello di non trovare disponibili i device all'interno della directory /dev/x10 una volta riavviata la macchina.
Questo comportava una riesecuzione dello script makedev.sh all'interno della directory scripts.
Il problema è stato risolto inserendo lo script makedev.sh all'interno di /etc/rc.local in modo che venga eseguito all'avvio dalla macchina.

Privacy Policy