mercredi, décembre 12 2012

Synchro NTP sur bus KNX via LINKNX

Voici une petite procédure qui permet d'envoyer l'heure et la date à des Groupes GA via LinKNX.

J'utilise cette technique pour synchroniser l'heure de mes Z38i avec un serveur NTP au travers de LinKNX.

1°) Coté ETS j'ai ajouté l'objet 0 heure au GA 7/0/10 pareil avec l'objet date au GA 7/0/11

image GA

2°) Coté serveur j'ai une tache cron qui fait un :

ntpdate ntp.univ-lyon1.fr

3°) Coté linknx j'ai ajouté dans mon xml :

<object type="11.001" id="cur_date" gad="7/0/11" flags="cwtuf">Current Date</object> <object type="10.001" id="cur_time" gad="7/0/10">Current Time</object>

       
   </objects>
   <rules>
       <rule id="cur_time_date">
           <condition type="timer" trigger="true">
               <every>3600</every>
           </condition>
           <actionlist>
               <action type="set-value" id="cur_time" value="now" />
               <action type="set-value" id="cur_date" value="now" />
           </actionlist>
       </rule>
   </rules>

4°) Derrière ça j'ai relancé mon xml avec la commande : linknx -c /var/linknx/monxml.xml

Et hop 3600 seconde plus tard mon Z38I est à jour !

Intégrer du 1wire dans Knxweb avec LUA

Après avoir pas mal galéré à faire fonctionner tout ça je regroupe ici les informations :

1°) Installation de OWFS pour lire les sondes (sources http://loftawattrelos.free.fr)

Tout d’abord, récupérer la source

wget http://sourceforge.net/projects/owfs/files/owfs/2.8p4/owfs-2.8p4.tar.gz

et ensuite, installer ce dont on a besoin

apt-get install libusb-dev perl-base python-dev php5-dev libfuse-dev swig

tar -xzvfowfs-2.8p4.tar.gz cd owfs-2.8p4

./configure –enable-debian –prefix=/usr/local

make

make install

Brancher la clef usb

Connecter le composant DS18B20

Pour lancer le server

owserver -u -p 4304

lancer le serveur web

owhttpd -u -s localhost:4304 -p 8081

et se connecter via votre browser favoris. On y trouve quelque chose sous la forme 81.351F2F000000, c’est la clef usb. Les autres, ce sont les capteurs.

ou via http://localhost:8081/

2°) Créer le gad qui vas recevoir la valeur

<object type="9.xxx" id="temp_ext" gad="7/0/1" init="persist" log="true" flags="crtu">Temp Exterieur</object>

3°) Ajouter le script Lua de jeff2000

<rule id="1wire-read">
<condition type="timer" trigger="true">
<every>2m</every>
</condition>
<actionlist>
<action type="script">
function read1wire(id, objname)
out = io.popen("/usr/local/bin/owread -s localhost:4304 "..id);
value = string.match(out:read("*a"), "0-9.%-+"); 
out:close();
if (value ~= nil) then
set(objname, value);
end
end;
read1wire("28.BB9D4D020000/temperature","Temp_Exterieur");
</action>
</actionlist>
</rule>