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, ...

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

Messagede thebest28 » 30 DĂ©c 2012, 11:22

J'ai mis ceci pour l'enregistrement : header("Content-Type: application/force-download");

Un grand merci e1000 pour avoir partagé de ton code :) :) :) :)

edit : Il n'y a pas un moyen de forcer l'enregistrement du fichier xml sans que ca m'ouvre une fenetre pour l'enregistrement dans le navigateur?
Dernière édition par thebest28 le 30 Déc 2012, 17:11, édité 1 fois.
_________________
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 paceo » 30 DĂ©c 2012, 16:22

thebest28 a écrit: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 ;)


Salut thebest28,

Pourrai tu stp copier l'intégralité de ton code car de mon côté impossible de faire fonctionner le script (j'ai aussi le souci du ?> qui ferme le php qui n'est pas rouge dans notepad++ :roll: )

Merci :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 thebest28 » 30 DĂ©c 2012, 17:16

paceo a Ă©crit:
thebest28 a écrit: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 :)
En fait le soucis du ?> n'etait pas résolu grace au header . Je l'ai marqué dans le code ou il y avait un soucis.
Le header m'a permis d'afficher le xml sinon j'avais une page blanche.
ps: comment sauvegarder le xml générer dans un fichier xml ? merci d'avance ;)


Salut thebest28,

Pourrai tu stp copier l'intégralité de ton code car de mon côté impossible de faire fonctionner le script (j'ai aussi le souci du ?> qui ferme le php qui n'est pas rouge dans notepad++ :roll: )

Merci :wink:


Hello ,
Pas de soucis , voici le code :

Code: Tout sélectionner
<?php
  $url = "http://localhost/sensors.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;

  // 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\"?> <---c'est ici que ca posait problème , du coup j'ai commenter en bloc
  //   <peripheriques>
  //     <zwave>
  //      <device id="ZA1" etat='0' />
  //      ...
  //      <device id="ZP15" etat='0' />
  //     </zwave>
  //   </peripheriques>
  //
  // Modèle XPath : //device[@id='ZA1']/@etat
  //
*/

header ("Content-Type:text/xml");

//header("Content-Type: application/force-download"); // ENREGISTREMENT DU FICHIER


  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";
?>


Pour résoudre l'enregistrement , il faudrait à la place des echo , mettre tous ca dans une variable mais avec la boucle , je n'y arrive pas pour pouvoir enregistrer automatiquement le xml créer :(
Personne de pro en php par ici svp ???
Merci
_________________
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 paceo » 30 DĂ©c 2012, 18:04

merci :wink: , j'ai essayé ton script mais voila ce que j'obtiens :roll: :

Erreur d'analyse XML : instruction de traitement XML ou texte pas au début d'une entité externe
Emplacement : http://192.168.0.29/openremote/test.php
Numéro de ligne 1, Colonne 5 :

<?xml version="1.0" encoding="iso-8859-1"?>
----^


En +, j suis une bille en php ça aide pas... :mrgreen:
<| 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 thebest28 » 30 DĂ©c 2012, 18:08

paceo a écrit:merci :wink: , j'ai essayé ton script mais voila ce que j'obtiens :roll: :

Erreur d'analyse XML : instruction de traitement XML ou texte pas au début d'une entité externe
Emplacement : http://192.168.0.29/openremote/test.php
Numéro de ligne 1, Colonne 5 :

<?xml version="1.0" encoding="iso-8859-1"?>
----^


En +, j suis une bille en php ça aide pas... :mrgreen:


re test avec ceci :

Code: Tout sélectionner
<?php
  $url = "http://localhost/sensors.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;

  // 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
  //
*/

header ("Content-Type:text/xml");

//header("Content-Type: application/force-download"); // ENREGISTREMENT DU FICHIER


  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";
?>
_________________
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 paceo » 30 DĂ©c 2012, 18:22

thebest28 a Ă©crit:re test avec ceci :

Code: Tout sélectionner
<?php
  $url = "http://localhost/sensors.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;

  // 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
  //
*/

header ("Content-Type:text/xml");

//header("Content-Type: application/force-download"); // ENREGISTREMENT DU FICHIER


  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";
?>


Pareil... :cry:
<| 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 thebest28 » 30 DĂ©c 2012, 19:01

Un dernier pour la route sinon je ne vois pas car moi ca marche bien sur wampserveur , tu es sur quel serveur?

Code: Tout sélectionner
<?php
  $url = "http://localhost/sensors.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;


  for ($i=0;$i<64;$i++) {
    $h[$i]=hexdec(substr($tab,$i,1));
  }
 

  $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]);
  }


  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));
  }


  for ($i=0 ; $i<16 ; $i++) {
    for ($j=0 ; $j<16 ; $j++) {
      $ZZ[$i][15-$j] = substr($Z[$i],$j,1);
    }
  }
header ("Content-Type:text/xml");
  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";
?>
_________________
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 paceo » 30 DĂ©c 2012, 19:32

Toujours la même erreur :evil: , j'y reviendrai à tête reposée car j vois pas non plus :roll: (webstation sur Syno)

Merci encore pour ton aide :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 thebest28 » 30 DĂ©c 2012, 21:05

Et voici la version qui enregistre directement le xml généré dans un fichier xml ;) j'ai galéré toute la journée mais enfin ca fonctionne :)

Code: Tout sélectionner
<?php
  $url = "http://localhost/sensors.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;

  // 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
  //
*/

//header ("Content-Type:text/xml");

//header("Content-Type: application/force-download"); // ENREGISTREMENT DU FICHIER


  $xml_output  = "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n";
  $xml_output .= "<peripheriques>\n";
  $xml_output .= "  <zwave>\n";

  for ($i=0 ; $i<16 ; $i++) {
    for ($j=0 ; $j<16 ; $j++) {
      $xml_output .= "    <device id=\"Z".sprintf("%c",$i+65);
     $xml_output .= $j+1;
     
      $xml_output .= "\" etat='";
      $xml_output .= $ZZ[$i][$j];
      $xml_output .= "' />\n";
    }
  }
  $xml_output .= "  </zwave>\n";
  $xml_output .= "</peripheriques>\n";
 
  file_put_contents ('etatdevicezwave.xml', $xml_output);
?>
_________________
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 paceo » 30 DĂ©c 2012, 22:03

thebest28 a écrit:Et voici la version qui enregistre directement le xml généré dans un fichier xml ;) j'ai galéré toute la journée mais enfin ca fonctionne :)

Code: Tout sélectionner
<?php
  $url = "http://localhost/sensors.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;

  // 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
  //
*/

//header ("Content-Type:text/xml");

//header("Content-Type: application/force-download"); // ENREGISTREMENT DU FICHIER


  $xml_output  = "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n";
  $xml_output .= "<peripheriques>\n";
  $xml_output .= "  <zwave>\n";

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


C'est toi le meilleur!! :D ça marche impec'!
Merciiiii beaucoup pour le travail, ça va simplifier grandement les choses de mon côté :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 thebest28 » 30 DĂ©c 2012, 22:07

De rien , Merci Ă  e1000 surtout :) :) :)
_________________
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 paceo » 31 DĂ©c 2012, 14:01

euh... encore une question :oops: :

Une idée de la syntaxe à renseigner dans le 'XPath Expression' du Sensor pour récupérer l'état d'un module dans le xml? :roll:
J'ai essayé avec: //@device id='ZB10'/@etat
Sans succès...

Merci d'avance :wink:

...et merci Ă  e1000 aussi! :mrgreen:
<| 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

PrécédenteSuivante

Retourner vers OpenRemote

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

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