Zibase, OR, retour d'Ă©tat et xpath

La solution OpenRemote pour intégrer sa domotique sur des écrans personnalisés (panels). OpenRemote est un logiciel Open Source qui utilisable avec la plupart de nos périphériques mobiles : Archos, Android, iOS, ...

Zibase, OR, retour d'Ă©tat et xpath

Messagede e1000 » 11 Nov 2012, 00:38

Bonjour Ă  tous,

Je suis en train de construire une interface avec Openremote, et j'ai quelques soucis avec les sensors.
J'ai un script PHP sur un serveur linux qui scanne le sensors.xml de ma ZiBase et prépare le fichier xml suivant à partir du zwtab (le but étant d'avoir l'état des actionneurs ZWave sous une forme facilement exploitable) :

Code: Tout sélectionner
<?xml version="1.0" encoding="iso-8859-1"?>
<Peripheriques>
  <ZWave>
    <ZA1>0</ZA1>
    <ZA2>0</ZA2>
    <ZA3>1</ZA3>
    <ZA4>0</ZA4>
    <ZA5>1</ZA5>
    <ZA6>0</ZA6>
    <ZA7>1</ZA7>
    ...
  </ZWave>
</Peripheriques>

Le problème est que je n'arrive pas à récupérer l'état des différents actionneurs sur mon interface.
Mon sensor de type custom traduit off et on (champs 'name') en 0 et 1 (champs 'value') respectivement.
J'ai essayé différentes valeurs pour xpath dans ma commande status :
- //ZA5
- /Peripheriques/ZWave/ZA5
- //Peripheriques/ZWave/ZA5

Rien Ă  faire :(

Toutes les commandes envoyées depuis la tablette fonctionnent, donc je ne pense pas que ça vienne d'openremote sur mon serveur linux, mais plutôt de la config.

Ai-je oublié quelquechose ? Des idées ?
Merci de m'aider à dépatouiller tout ça.
<| ZiBase2 | Karotz | IPX800 | Chacon | Somfy RTS | EZMotion | Edimax 3030IWN |>
<| Everspring AN-157-6 ST-814 SP-814 SM-103 | Fibaro FGD-211 FGS-221 FGS-211 |>
e1000
P'tit Dieu de domotique
 
Messages: 183
Inscription: 14 Avr 2012, 13:27

Re: Zibase, OR, retour d'Ă©tat et xpath

Messagede Guillaume.C » 11 Nov 2012, 01:05

La bonne ligne c'est //Peripheriques/ZWave/ZA5

par contre les ... dans ton fichier c'est pas bon, ca peut générer une erreur dans xpath si le xml n'est pas conforme

par ailleurs n'oublie pas le polling interval sans qui le retour ne marche pas

guillaume
Avatar de l’utilisateur
Guillaume.C
Dieu de domotique
 
Messages: 202
Inscription: 29 AoĂ» 2010, 08:05
Localisation: Paris

Re: Zibase, OR, retour d'Ă©tat et xpath

Messagede e1000 » 11 Nov 2012, 21:40

Merci pour la réponse.
Les "..." c'était juste pour ne pas copier l'intégralité du fichier :wink:
Normalement, toutes les syntaxes sont correctes, mais même avec //Peripheriques/ZWave/ZA5 ça ne marchait pas.

J'ai testé en changeant mon xml pour avoir :

Code: Tout sélectionner
<?xml version="1.0" encoding="iso-8859-1"?>
<peripheriques>
  <zwave>
    <device id="ZA1" etat='0' />
    etc.


Ça ne marchait pas plus (avec le xpath adapté, naturellement : //device[@id='ZA5']/@etat)

En fouillant dans les logs, j'avais des tonnes d'erreurs, mais liées à d'autres devices/sensors de l'interface pour lesquels j'avais mis n'importe quoi lors du développement de l'interface.
J'étais sûr des quelques périphériques que je voulais tester, mais je pensais pas que les autres pouvaient empêcher le tout de fonctionner :?
J'ai tout corrigé dans le designer, et là ça marche (avec la seconde version du xml, mais ça devrait fonctionner avec la première).

Conclusion : OpenRemote est une bête susceptible ! S'assurer que tous les périphériques enregistrés dans l'interface soient correctement configurés, sinon rien ne marche !

Merci encore.
<| ZiBase2 | Karotz | IPX800 | Chacon | Somfy RTS | EZMotion | Edimax 3030IWN |>
<| Everspring AN-157-6 ST-814 SP-814 SM-103 | Fibaro FGD-211 FGS-221 FGS-211 |>
e1000
P'tit Dieu de domotique
 
Messages: 183
Inscription: 14 Avr 2012, 13:27

Re: Zibase, OR, retour d'Ă©tat et xpath

Messagede paceo » 14 Nov 2012, 13:30

Salut e1000, :D

Je suis également en train de réaliser mon interface sur OpenRemote et je serai très intéressé par ton script permettant de récupérer l'état des modules Zwave via le sensors.xml.

J'utilise actuellement un fichier php pour vérifier l'état de mes modules Zwave (et chacon) mais cela implique de créer un scénario pour chaque actionneur (telco, interrupteur,etc...) pour mettre à jour mon fichier php selon la méthode décrite par Guillaume.C ici: http://zibase.alwaysdata.net/zor-un-switch-onoff-avec-retour-detat/

Peut tu m'en dire un peu plus stp? :roll:
<| ZiBase 2| Karotz | Kira128 | Light Manager | Chacon | Zwave | Oregon Scientific | Logitech Harmony 900 | Synology | Calybox 220 | Edimax | OWL | OpenRemote |>
Avatar de l’utilisateur
paceo
Guru de domotique
 
Messages: 140
Inscription: 11 Mai 2012, 16:55
Localisation: Istres, FRANCE

Re: Zibase, OR, retour d'Ă©tat et xpath

Messagede e1000 » 14 Nov 2012, 17:03

J'ai pas le script sous la main, je le posterai plus tard. Attention c'est du bricolage, hein, le code n'est pas beau... mais il marche (en même temps, c'est juste du décalage et masquage binaire, pas de quoi casser trois pattes à un canard :mrgreen: ).

Pour patienter, le principe est le suivant :
- récupérer le sensors.xml
- récupérer l'objet zwtab : <zwtab>0404000000000000000000000000000000000000000000000000000000000000</zwtab>
- à partir des 16 mots de 16 bits (1 bit par périphérique), en hexa, codé en little endian, isoler chaque bit et l'attribuer à un périphérique
- sauvegarder le tout.

Concrètement :
Code: Tout sélectionner
<zwtab>Ax.Ay.Bx.By.Cx.Cy ... Nx.Ny.Ox.Oy.Px.Py</zwtab>

Chaque octet d'indice x contient les 8 bits de poids faible, suivi d'un octet d'indice y qui contient les 8 bits de poids fort (principe du little endian).

Prenons un exemple avec les 4 premiers octets :
Code: Tout sélectionner
<zwtab>042A0018 ...</zwtab>

Ax = 04, Ay = 2A, Bx = 00, et By = 18.
On traduit ça en binaire :
Code: Tout sélectionner
0000 0100    0010 1010    0000 0000    0001 1000 ...
`---\/---'   `---\/---'   `---\/---'   `---\/---'
1er octet     2e octet     3e octet     4e octet


Numérotons ces bits (de 1 à 16, volontairement, et poids fort en tête) :
- Pour Ax :
Code: Tout sélectionner
<a8> <a7> <a6> <a5> <a4> <a3> <a2> <a1>
  0    0    0    0    0    1    0    0

- Pour Ay :
Code: Tout sélectionner
<a16> <a15> <a14> <a13> <a12> <a11> <a10>  <a9>
   0     0     1     0     1     0     1     0

- Pour Bx :
Code: Tout sélectionner
<b8> <b7> <b6> <b5> <b4> <b3> <b2> <b1>
  0    0    0    0    0    0    0    0

- Pour By :
Code: Tout sélectionner
<b16> <b15> <b14> <b13> <b12> <b11> <b10>  <b9>
   0     0     0     1     1     0     0     0

... et ainsi de suite pour les mots C, D, E ...

Tu l'auras compris, le périphérique ZA3 correspond au bit a3, le périphérique ZB4 correspond au bit b4, etc.
Donc dans l'exemple ci-dessus, les périphériques ZA3, ZA10, ZA12, ZA14, ZB4 et ZB5 sont actifs.

VoilĂ  pour le principe, Ă  plus tard pour le code :wink:

PS : Naturellement, le principe est strictement le même pour la x10tab et donc utilisable pour récupérer l'état de tous les périphériques (X10, Chacon, volets roulants Somfy RTS, etc.)

A+
e1000
<| ZiBase2 | Karotz | IPX800 | Chacon | Somfy RTS | EZMotion | Edimax 3030IWN |>
<| Everspring AN-157-6 ST-814 SP-814 SM-103 | Fibaro FGD-211 FGS-221 FGS-211 |>
e1000
P'tit Dieu de domotique
 
Messages: 183
Inscription: 14 Avr 2012, 13:27

Re: Zibase, OR, retour d'Ă©tat et xpath

Messagede e1000 » 14 Nov 2012, 19:43

Et voici le code (explications dans les commentaires) :

Code: Tout sélectionner
<?php
  $url = "http://localhost/domo/zibase.xml"; //adapter avec l'adresse de votre sensors.xml
  $rss_file = file_get_contents($url);
  $xml = new SimpleXMLElement($rss_file);
  $tab = $xml->zwtab; // remplacer zwtab par x10tab pour lire l'Ă©tat des pĂ©riphĂ©riques X10

  // On rĂ©cupère les 64 quartets et on remplit le tableau h (hexa)
  // <Ax><Ay><Bx><By> ... <Px><Py>
  //
  for ($i=0;$i<64;$i++) {
    $h[$i]=hexdec(substr($tab,$i,1));
  }
 
  // On gĂ©nère une chaine de caractères "binaire" en little endian
  // <a7>...<a0><a15>...<a8><b7>...<b0><b15>...<b8><c7>... etc.
  //
  $chaine='';
  for ($i=0;$i<64;$i++) {
    $w[$i]=($h[$i]&1);      // bit 0
    $x[$i]=($h[$i]&2)/2;   // bit 1
    $y[$i]=($h[$i]&4)/4;   // bit 2
    $z[$i]=($h[$i]&8)/8;   // bit 3
    $chaine.=sprintf("%b%b%b%b",$z[$i],$y[$i],$x[$i],$w[$i]);
  }

  // On gĂ©nère 16 chaines (1 par pĂ©riphĂ©rique) en big endian
  // Les 16 bits sont rĂ©ordonnĂ©s poids fort en tĂŞte
  // 1 tableau = 1 famille
  // Z[0]  = <a15>...<a8><a7>...<a0> (famille ZA)
  // Z[1]  = <b15>...<b8><b7>...<b0> (famille ZB)
  // ...
  // Z[15] = <p15>...<p8><p7>...<p0> (famille ZP)
  //
  for ($i=0;$i<16;$i++) {
    $Z[$i] =sprintf("%s",substr($chaine,$i*16+8,4));
    $Z[$i].=sprintf("%s",substr($chaine,$i*16+12,4));
    $Z[$i].=sprintf("%s",substr($chaine,$i*16,4));
    $Z[$i].=sprintf("%s",substr($chaine,$i*16+4,4));
  }

  // Pour chacune des 16 familles ZX on gĂ©nère 16 pĂ©riphĂ©riques ZZ
  // ZZ[0][0]  = pĂ©riphĂ©rique ZA1 ... ZZ[0][15]  = pĂ©riphĂ©rique ZA16
  // ...
  // ZZ[15][0] = pĂ©riphĂ©rique ZP1 ... ZZ[15][15] = pĂ©riphĂ©rique ZP16
  //
  for ($i=0 ; $i<16 ; $i++) {
    for ($j=0 ; $j<16 ; $j++) {
      $ZZ[$i][15-$j] = substr($Z[$i],$j,1);
    }
  }

  // On gĂ©nère le fichier xml "Ă  la mano" pour les 256 pĂ©riphĂ©riques ZWave
  // Format :
  //    <?xml version=\"1.0\" encoding=\"iso-8859-1\"?>
  //   <peripheriques>
  //     <zwave>
  //      <device id="ZA1" etat='0' />
  //      ...
  //      <device id="ZP15" etat='0' />
  //     </zwave>
  //   </peripheriques>
  //
  // Modèle XPath : //device[@id='ZA1']/@etat
  //
  echo "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n";
  echo "<peripheriques>\n";
  echo "  <zwave>\n";

  for ($i=0 ; $i<16 ; $i++) {
    for ($j=0 ; $j<16 ; $j++) {
      echo "    <device id=\"Z".sprintf("%c",$i+65);
      echo $j+1;
      //echo ">";
      echo "\" etat='";
      echo $ZZ[$i][$j];
      echo "' />\n";
    }
  }
  echo "  </zwave>\n";
  echo "</peripheriques>\n";
?>


Évidemment, le code vaut ce qu'il vaut, hein, je ne suis pas codeur.
Quand j'aurai le temps je l'adapterai peut-ĂŞtre pour utiliser DOM.

Enjoy
e1000
<| ZiBase2 | Karotz | IPX800 | Chacon | Somfy RTS | EZMotion | Edimax 3030IWN |>
<| Everspring AN-157-6 ST-814 SP-814 SM-103 | Fibaro FGD-211 FGS-221 FGS-211 |>
e1000
P'tit Dieu de domotique
 
Messages: 183
Inscription: 14 Avr 2012, 13:27

Re: Zibase, OR, retour d'Ă©tat et xpath

Messagede paceo » 14 Nov 2012, 20:46

Super! :D

Merci pour le code et ces explications qui vont m’être très utile car ton "bricolage" dépasse déjà largement le cadre de mes compétences! :mrgreen:

Je vais voir si je peux l'adapter à mon installation, ce serai quand même moins "usine à gaz" que de mettre à jour un php à l'aide de scénarios. :wink:
<| ZiBase 2| Karotz | Kira128 | Light Manager | Chacon | Zwave | Oregon Scientific | Logitech Harmony 900 | Synology | Calybox 220 | Edimax | OWL | OpenRemote |>
Avatar de l’utilisateur
paceo
Guru de domotique
 
Messages: 140
Inscription: 11 Mai 2012, 16:55
Localisation: Istres, FRANCE

Re: Zibase, OR, retour d'Ă©tat et xpath

Messagede e1000 » 15 Nov 2012, 17:39

Petite modif sur le code :

Remplacer les 4 premières lignes
Code: Tout sélectionner
  $url = "http://localhost/domo/zibase.xml"; //adapter avec l'adresse de votre sensors.xml
  $rss_file = file_get_contents($url);
  $xml = new SimpleXMLElement($rss_file);
  $tab = $xml->zwtab; // remplacer zwtab par x10tab pour lire l'Ă©tat des pĂ©riphĂ©riques X10


Par celles-ci :
Code: Tout sélectionner
  $url = "http://localhost/domo/zibase.xml";  //adapter avec l'adresse de votre sensors.xml
  $table = "zwtab";  // remplacer zwtab par x10tab pour lire l'Ă©tat des pĂ©riphĂ©riques X10

  $dom_doc = new DomDocument('1.0', 'iso-8859-1'); // iso-8859-1 ou utf-8 selon le codage que vous utilisez
  $dom_doc->load($url);
  $tab = $dom_doc->getElementsByTagName($table)->item(0)->nodeValue;


C'est un peu plus propre qu'avec SimpleXML.
<| ZiBase2 | Karotz | IPX800 | Chacon | Somfy RTS | EZMotion | Edimax 3030IWN |>
<| Everspring AN-157-6 ST-814 SP-814 SM-103 | Fibaro FGD-211 FGS-221 FGS-211 |>
e1000
P'tit Dieu de domotique
 
Messages: 183
Inscription: 14 Avr 2012, 13:27

Re: Zibase, OR, retour d'Ă©tat et xpath

Messagede thebest28 » 18 DĂ©c 2012, 15:49

hello et merci pour ton partage , j'ai essayé ton script mais voila ce que j'obtiens quand j'appel le script :

// // // // ... // // // // // Modèle XPath : //device[@id='ZA1']/@etat // echo "\n"; echo "\n"; echo " \n"; for ($i=0 ; $i<16 ; $i++) { for ($j=0 ; $j<16 ; $j++) { echo " "; echo "\" etat='"; echo $ZZ[$i][$j]; echo "' />\n"; } } echo " \n"; echo "\n"; ?>

Une idée peut etre.
Merci d'avance :)
_________________
RF 642 / 4 detect mvt CH54503 chacon /
detect mvt exterieur chacon / VISONIC - NEXTK985MCW / douille coco / cod18 / sd18
1 télécommande kr18 / dio chacon / 5 prise chacon 3500W / 3 tyxia delta dore 461 / 3 module ON/OFF chacon 1000W / sirène FOCUS MD-214R / 2 oregon scientific THGR810
/ cam edimax 7010ptz / itach ir wifi / logiciel HC-SKIPPER / Zibase / Roomba 780
thebest28
Dieu de domotique
 
Messages: 1261
Inscription: 20 Juil 2011, 14:16
Localisation: Liège

Re: Zibase, OR, retour d'Ă©tat et xpath

Messagede e1000 » 25 DĂ©c 2012, 23:33

Hello,

Là ça ressemble à du php non interprété.
Quelle config pour ton serveur http ?
Apache ?
T'as bien activé le module php ?
<| ZiBase2 | Karotz | IPX800 | Chacon | Somfy RTS | EZMotion | Edimax 3030IWN |>
<| Everspring AN-157-6 ST-814 SP-814 SM-103 | Fibaro FGD-211 FGS-221 FGS-211 |>
e1000
P'tit Dieu de domotique
 
Messages: 183
Inscription: 14 Avr 2012, 13:27

Re: Zibase, OR, retour d'Ă©tat et xpath

Messagede thebest28 » 27 DĂ©c 2012, 14:39

e1000 a Ă©crit:Hello,

Là ça ressemble à du php non interprété.
Quelle config pour ton serveur http ?
Apache ?
T'as bien activé le module php ?

j'ai essayé sur mon nas et sur wamp mais idem.
Oui j'ai bien activé le php, je m'en sers beaucoup avec la zibase.
C'est bizarre en fait car quand je colle ton code dans notepad++ , le ?> qui ferme le php n'est pas rouge comme habituellement et comme le <?php du début qui est bien rouge lui , mais il est rose.
Jamais eu ce soucis auparavant.
Merci de ton aide :)
_________________
RF 642 / 4 detect mvt CH54503 chacon /
detect mvt exterieur chacon / VISONIC - NEXTK985MCW / douille coco / cod18 / sd18
1 télécommande kr18 / dio chacon / 5 prise chacon 3500W / 3 tyxia delta dore 461 / 3 module ON/OFF chacon 1000W / sirène FOCUS MD-214R / 2 oregon scientific THGR810
/ cam edimax 7010ptz / itach ir wifi / logiciel HC-SKIPPER / Zibase / Roomba 780
thebest28
Dieu de domotique
 
Messages: 1261
Inscription: 20 Juil 2011, 14:16
Localisation: Liège

Re: Zibase, OR, retour d'Ă©tat et xpath

Messagede thebest28 » 30 DĂ©c 2012, 00:38

J'ai résolu mon problème en rajoutant header ("Content-Type:text/xml"); avant la ligne echo "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n";
Si jamais d'autres ont le meme soucis :)

ps: comment sauvegarder le xml générer dans un fichier xml ? merci d'avance ;)
_________________
RF 642 / 4 detect mvt CH54503 chacon /
detect mvt exterieur chacon / VISONIC - NEXTK985MCW / douille coco / cod18 / sd18
1 télécommande kr18 / dio chacon / 5 prise chacon 3500W / 3 tyxia delta dore 461 / 3 module ON/OFF chacon 1000W / sirène FOCUS MD-214R / 2 oregon scientific THGR810
/ cam edimax 7010ptz / itach ir wifi / logiciel HC-SKIPPER / Zibase / Roomba 780
thebest28
Dieu de domotique
 
Messages: 1261
Inscription: 20 Juil 2011, 14:16
Localisation: Liège

Suivante

Retourner vers OpenRemote

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 3 invités

Copyright © 2011 - Touteladomotique.com - Tous droits rĂ©servĂ©s
Les blogs partenaires : Abavala, Domo-Blog, Domotique34, Maison et Domotique