Un point que je n’avais pour l’instant pas abordé dans mes différents articles sur le 1-wire :
- Premiers pas avec le 1-wire et owserver sous Debian Wheezy
- Découvertes des sondes DS18B20 et DS18B20PAR
- Capteur d’ouverture de fenêtres avec un DS2406
- Capteur d’ouverture de fenêtres avec un DS2401
Je n’ai pas abordé le contrôle du 1-wire en PHP.
Pour faire quoi ?
Une grosse usine à gaz !
Utiliser PHP pour interroger les sondes 1-wire, c’est tout simplement ce qu’il y’a de plus logique dans mon projet, vue que je souhaite une interface à la knxweb2 mais home made.
L’affichage d’une température sur un plan et toute autre utilisation des mesures se fera par PHP.
Quels paquets php à installer ?
Comme vu dans la phase de découverte, owserver est désormais disponible en package compilé pour Debian Wheezy.
Pour les librairies PHP, il existe deux paquets aux noms semblables : libow-php5 et libownet-php.
Quelle différence ? La question a été posée au contributeur du package, voici sa réponse :
libownet-php ne peut que communiquer avec owserver, qui, lui-même pourra communiquer avec d’autres owserver et/ou matériel 1-wire.
libow-php5 est un wrapper autour de la bibliothèque C qui permet de communiquer directement avec le matériel 1-wire.
Alors on installe libownet-php.
Ce qui a pour effet d’installer un fichier php de class au chemin suivant :
/usr/share/php/OWNet/ownet.php
Une page d’exemple est disponible au chemin suivant :
/usr/share/doc/libownet-php/examples/ownet_example.php
Cet exemple fait référence à un fichier bcadd.php, il s’agit d’un hack car certaines versions distribuées de php ne permettent pas l’utilisation de cette fonction, fournir cette fonction par un include permet de contourner le problème. Evidemment, sous Debian Wheezy hébergement maison, ce qu’il y’a de plus classique, pas de problème avec bcadd, donc le « require » ne sera pas utilisé.
Récupérer des valeurs en PHP
Pour ce test, j’ai placé sur mon bus 1-wire :
- 1x DS18B20 : sonde de température à l’extérieur.
- 1x DS18B20+PAR : sonde de température à l’intérieur.
- 1x DS2406 : capteur d’ouverture de fenêtre.
- 1x DS2401 : capteur d’ouverture de fenêtre.
L’ensemble des fonctions ownet php sont visibles sur la page du projet :
http://owfs.org/index.php?page=ownet-php
Je récupère le fichier ownet.php, sans quoi on obtient forcément l’erreur suivante :
PHP Fatal error: Class 'OWNet' not found
Et mon index.php
<?php require "ownet.php"; $ow=new OWNet("tcp://127.0.0.1:4304"); ?> Température extérieure : <? $temp_ext = $ow->read("/28.EA54B5030000/temperature"); // Décommenter la ligne suivante pour avoir les détails du composant //var_dump($ow->dir("/28.EA54B5030000",OWNET_MSG_READ,true)); echo $temp_ext; // ------------------ ?> <br /> Température intérieure : <?php $temp_int = $ow->get("/28.919277030000/temperature",OWNET_MSG_READ,false); // Décommenter la ligne suivante pour avoir toutes les infos sur la température //var_dump($ow->get("/28.919277030000/temperature",OWNET_MSG_READ,true)); echo $temp_int; // ------------------ ?> <br /> Fenêtre DS2406 : <?php $fenetre_ds2406 = $ow->read("/12.D0457D000000/sensed.A"); // Décommenter la ligne suivant pour avoir toutes les infos sur le PIO A //var_dump($ow->get("/12.D0457D000000/sensed.A",OWNET_MSG_READ,true)); echo ($fenetre_ds2406)?"ouverte":"fermée"; // ------------------ ?> <br /> Fenêtre DS2401 : <?php $fenetre_ds2406 = $ow->presence("/01.DC4343140000"); // Décommencer la ligne suivante pour avoir les détails, minimaliste car c'est une présence //var_dump($ow->dir("/01.DC4343140000",OWNET_MSG_READ,true)); echo ($fenetre_ds2406)?"fermée":"ouverte"; // ------------------ ?> <br />
J’ai laissé les lignes var_dump commentées, elles peuvent servir de débogage.
Le port 4304 à adapter selon votre serveur owserver ( /etc/owfs.conf ).
A noter, comme vue dans mon article sur le DS2406, sensed.A retourne un 1 lorsque l’ILS est ouvert, 0 lorsque qu’un aimant est à proximité, ce qui pourrait porter à confusion.
Read et Get sont sur un bateau
Les read et le get, syntaxé comme ceci, apportent le même résultat.
$ow->get("/28.919277030000/temperature",OWNET_MSG_READ,false); $ow->read("/28.919277030000/temperature");
D’après la doc de owfs.org le get parcourt chaque valeur de l’élément désiré et y applique une fonction/constante.
Tandis que le read, récupère la valeur demandée, point final.
Dans mes tests, et pour une requête de température il s’avère que le get ne retourne pas toujours de valeurs.
Il semble fonctionner à un niveau plus « bas » que le read.
Donc la fonction read est à privilégier.
Et maintenant ?
L’insertion des données dans une base MySQL, pour un prochain article.
Pingback: Insérer les valeurs 1-wire dans une base MySQL | Domolio, la domotique et pas que…
Pingback: Suvi de la consommation d'eau avec des compteurs à impulsions en 1-wire | Domolio, la domotique et pas que…