Une question nous revient régulièrement : “Comment récupérer une information extérieure à la zibase et l’intégrer dans un périphérique virtuel ?”
La zibase sait lire nativement du XML par une requête HTTP, ouvrant d’énorme source d’information sur le web (météo, inondation, trafic,..) mais aussi en interne (carte IPX, caméra IP).
Petite remarque, la zibase ne sait récupérer que des valeurs numériques (pas de texte).
Le XML est un fichier structuré hiérarchiquement avec des balises.
Un exemple vaut mieux qu’un long discours, je vais vous présenter dans cet article comment récupérer des informations météorologique (température, humidité, vent, visibilité..) depuis un site internet (en l’occurrence weather.com).
Nous allons le faire de 2 manières : soit à partir de scénario de la zibase soit via un fichier php (si vous avez la chance de disposer d’un serveur Web chez vous). Chacune à ses avantages et inconvénients.
Mais avant cela, il faut trouver le code de la localité souhaité.
Dans cet article, nous prendrons Paris.
Il suffit d’aller sur le site weather.com, de rechercher votre ville
Puis de repérer le code FRXXXX correspondant dans l’URL de votre navigateur.
L’url pour obtenir les informations météo en XML sera : http://wxdata.weather.com/wxdata/weather/local/FRXX0076?cc=*&unit=m (remplacer le FRXX0076 par celui de votre localité)
En cliquant sur le lien, vous obtiendrez un fichier XML de ce style.
Il regorge d’information, température, humidité, pression atmosphérique, visibilité, vent (vitesse, direction),… j’indiquerai plus loin dans l’article comment récupérer ces différentes données.
Pour cet article nous allons rechercher la température et l’humidité extérieure.
Commençons par créer le scénario « Temp et Hum Ext »
Il sera lancé toutes les 30 minutes (c’est l’intervale de mise à jour des données sur le site).
Dans « Stimuli », « Evenement temporel, Timer : 1800 s ( 30 min x 60s)
Nous allons maintenant lire la température en l’action « Commander par HTTP », mais avant cela il faut indiquer à la Zibase où se trouve l’information dans le fichier XML.
La température se trouve dans la balise <tmp> dans la section <cc> (current condition)
Dans la partie action du scénario, « Calculer / Affecter une chaîne de caractères à une variable » (ici V0) en lui indiquant l’arbre de recherche : d’abord la balise cc, puis tmp.
On récupère maintenant la donnée température depuis internet.
Action : Fonctins spécciales / Commander par HTTP.
Utl : (http://wxdata.weather.com/wxdata/weather/local/FRXX0076?cc=*&unit=m)
N’oubliez pas de cocher « Lire en retour une valeur balisée par » (ici V0).
Cette variable contient l’arbre de recherche et stockera après l’appel la température.
Maintenant que nous avons la température, faisons de même pour l’humidité.
« Affecter une chaîne de caractères à une variable » (ici V1 ) en lui indiquant l’arbre de recherche : d’abord la balise cc, puis hmid.
Reste à alimenter la sonde virtuelle en utilisant l’action « Fonctions spéciales / Alimenter un sonde virtuelle »
Choisir une sonde de type « Thermo-Hygro ».
Entrée (thermo/énergie) I0 : V0 (variable qui contient la température récupérée sur internet)
Coef de conversion sur IO : 10 ( Zibase doit recevoir des températures au dixième de degré. Le coefficient 10 multiplie la température récupérée pour la mettre au dixième de degré)
Canal de la sonde virtuelle : 24 (si vous utilisez plusieurs sondes virtuelles, il faut attribuer un canal à chaque sonde. Il y a 25 canaux disponibles)
Entrée (hygro/puissance) : I1 : V1 (variable qui contient l’humidité).
Il n’y a plus qu’à enregistrer le scénario.
Et de le tester en appuyant sur le bouton :
Puis dans le suivi d’activité.
vous devriez voir les lignes :
Noter la référence de la sonde (ici : OS3391881240)
Allons maintenant créer la sonde virtuelle dans les périphériques
Et mettre dans l’identifiant radio la référence de la sonde (ici : OS3391881240)
La sonde virtuelle est maintenant opérationnelle
Avantages :
Pas besoin d’un équipement supplémentaire (NAS, Serveur Web) pour aller chercher l’information.
Assez facile à mettre en place
Inconvénients :
Le nombre d’instruction possible par scénario, il faut pratiquement un scénario pour alimenter chaque sonde virtuelle.
En premier, il faut déclarer la sonde en mettant l’identifiant radio que vous souhaitez (ici OS65539)
Télécharger le sdk zibase (http://bgarel.free.fr/Zibase/)
Créer un fichier php (ici méteo.php) et copier/coller le code ci-dessous
<?php
require_once(« ./lib/ZiBase.php »);
$weather = simplexml_load_file(« http://wxdata.weather.com/wxdata/weather/local/FRXX0076?cc=*&unit=m« ); # URL pour récupérer la météo
$zibase = new ZiBase(« 192.168.x.x »); # 192.168.x.x : IP de votre zibase
// Temperature exterieure
$zibase->sendVirtualProbeValues(‘65539’,$weather->cc->tmp*10,$weather->cc->hmid); # 65539 : identifiant radio de la sonde sans OS devant, tmp*10 : il faut multiplier la température par 10 car la zibase attend l’information au dixième de degré
?>
Reste à planifier le lancement de ce php, soit via les tâches planifiés de votre serveur Web (cron, tâche planifiée), soit en appelant la page depuis la zibase dans un scénario qui se déclenchera toutes les 30 minutes par exemple
Avantages :
Facile à mettre en place.
Dans un même php, on peut récupérer plusieurs informations.
Inconvénients :
Nécessite un serveur allumé en permanence
Pour terminer, un petit tableau des informations météo disponible sur weather.com et la méthode pour les récupérer soit dans les scénarios soit en php ainsi que le type de périphérique à déclarer
Vent (Vitesse et direction)
– Type périphérique : WGR800
– Scénario
V0=/cc/wind/s ( Vitesse)
Coefficient de conversion = 0.28 (la vitesse est exprimée sur weather.com en m/s et sur zibase en km/h)
V1=/cc/wind/d (direction)
Coefficient de conversion = 0
– Php
$zibase->sendVirtualProbeValues(‘xxxx’’,$weather->cc->wind->s*0.28,$weather->cc->wind->d);
Indice UV
– Type périphérique : UVN800
– Scénario
V0=/cc/uv/i
Coefficient de conversion = 0
– Php
$zibase->sendVirtualProbeValues(‘xxx’,$weather->cc->uv->i);
Pression atmosphérique
– Type périphérique : Pas de préférence
– Scénario
V0=/cc/bar/r
Coefficient de conversion = 0
– Php
$zibase->sendVirtualProbeValues(‘xxx’,$weather->cc->bar->r);
Point de rosée
– Type périphérique : Pas de préférence
– Scénario
V0=/cc/dewp
Coefficient de conversion = 0
– Php
$zibase->sendVirtualProbeValues(‘xxx’,$weather->cc->dewp);
Visibilité
– Type périphérique : Pas de préférence
– Scénario
V0=/cc/vis
Coefficient de conversion = 0
– Php
$zibase->sendVirtualProbeValues(‘xxx’,$weather->cc->vis);
N’hésitez pas à nous faire part des informations que vous aller chercher sur internet et en faire profiter aux autres 🙂
35 Comments
Ma pomme
Super !!!! Je teste dès que j’ai le temps MERCI….
Ma pomme
Super ça marche nickel MERCI !!!!!
Ma Pomme
Par contre j’ai essayé avec wamp et cela ne fonctionne pas, j’ai une erreur ligne 2 du script ??
CARDON
Excellent, efficace !
Pascal
Excellent, j’essaie des que je rentre ce soir
Ma pomme
Il faut faire attention au copier/coller, certains sigles ne fonctionnent pas…..
L’erreur que je rencontre maintenant est la suivante
( ! ) Fatal error: Call to undefined function socket_create() in C:\wamp\www\zibase.php.sdk\lib\ZiBase.php on line 243
Call Stack
# Time Memory Function Location
1 0.0002 365832 {main}( ) ..\meteo.php:0
2 0.1649 567864 ZiBase->sendVirtualProbeValues( ) ..\meteo.php:7
3 0.1649 569080 ZiBase->sendRequest( ) ..\ZiBase.php:507
Pascal STEPHANY
Cela doit venir des guillemets comme souvent dans les copier/coller. Je vais voir avec richard pour faire une archive zip contenant ces fichiers…
MrQuelleGoule
Comment dire : génial et pourquoi je n’y ai pas pensé plus tôt:)
Je met cela en place dès que j’ai 5 minutes. Il faudrait une liste de site web qui délivre du XML sur différents sujets….la météo étant un très bon exemple
Ma Pomme/Pikat
Pascal oui les guillemets sont mal pris en compte mais pour le problème avec un nas cela vient du sdk zibase apparament …..
Effectivement Mrquellegoule d’autres infos seraient sympas mais lesquelles ????
Pascal STEPHANY
Et bien il y a beaucoup de choses sur base de XML comme les cartes IPX, l’Eco-devices, le Koubachi, NetAtmo, et les sites de vigilance, d’horaires, de news, etc…
Arnaud67
Je suis preneur pour une liste avec les liens ….
Super boulot et bravo pour les idées
Marc
Une pure merveille : merci !
Steeve
ma ZiBAse reçoit ceci :
06/11/2013 22:59:18 Received radio ID (INTERNAL Noise=0 Level=0.0/5 Unknown ID=0000 Batt=Ok) Temp Rouen (OS10085)
quelque chose ne passe pas…
BRUNIE
Bonjour,
merci pour cela. Allez vous faire la même chose pour la Fibaro?
Merci
Richard
Steeve,
pour t’aider, peux-tu m’envoyer un mail directement à richard.domotique@gmail.com en me précisant le code de localité et la méthode que tu utilises (scénario ou php) ?
Mable Pugh
Ca ne fonctionne pas tout à fait comme cela.En fait, il faut faire un scénario pour chacunes des sondes.Dans chaque scénario, mettre en déclencheur le périphérique = sonde concerné(e),Puis récupérer les valeurs I0 = temp et I1 = hygro en les affectant (avec ou sans calculs) chacunes à une variable (volatile ou sauvegardée) V0 à V32 (ou plus).Enfin, éventuellement, exécuter une action suivant la valeur de cette variable Vnn.Bref, dans un scénario, les valeurs I0 et I1 sont dépendantes du périphérique déclencheur.
Ma Pomme/Pikat
Si j’ai tout compris on pourrait interroger la carte ipx qui gère le portail à une heure donnée (à 22 heures par exemple) pour savoir si le portail est fermé. Si V0=0 le portail est fermé et si V0=1 alors il est ouvert et la zibase le ferme… c’est possible ça ?
Steeve
Merci Richard pour ton aide avec ma sonde virtuelle 😉
Mais je note une différence actuellement (11h43 de 08/11) entre le fichier XML et la page Web de weather.com pour une même localité : Rouen pour mon cas
http://wxdata.weather.com/wxdata/weather/local/FRXX0085?cc=*&unit=m
http://fr.weather.com/conditions_actuelles/FRXX0085:1:FR
un décalage dans la mise à jour du site ?
Existe-t-il une version française de ces données ?
J’avais lu que les XML n’étaient plus fournis gratuitement par Weather.com ?
cf. http://feedback.weather.com/knowledgebase/articles/35599-why-is-the-weather-com-xml-data-feed-being-retired
Joss
J’ai essayé de faire la même chose avec l’éco devise » pour avoir mon relevé compteur et en choisissant la balise T1_BASE j’obtiens des valeurs complètement aberrantes (sur l’éco Devices j’ai 19399783 et sur la Zibase j’obtiens 1.20 !?)…
En revanche, pas de problème avec la balise de conso instantanée T1_PPAP.
Je pense que je me heurte au maximum accepté par la Zibase pour la valeur d’une variable.
Pascal, tu ne devais pas nous faire un petit tuto avec l’éco Devices pour avoir une remontée sur la Zibase ? Je crois que tu attendais la mise à jour ?
richarddomotiquechard
Steve,
effectivement Weather.com indique sur son site que le XML n’était plus fournis gratuitement.
Mais pour l’instant ça fonctionne 🙂
Sinon il y a Yahoo, mais le flux XML est un peu plus dure à décortiquer :
http://developer.yahoo.com/weather/
Exemple pour Paris :
http://weather.yahooapis.com/forecastrss?w=615702&u=c
Philippe Gros daillon
Bonjour,
J’ai créé le scénario en http, cela fonctionne parfaitement bien; j’ai tout de même un souci :
J’obtiens parfaitement la lecture de la température sur tous supports, mais la lecture de l’humidité uniquement sur ordinateur « PCPAD », je ne l’obtiens ni sur iPad ni sur iPhone.
Jerome
Bonjour,
J’ai créé le scénario en http, mais cela ne fonctionne pas, je obtiens comme retour : » HTTP Client REQ Error: http://wxdata.weather.com/wxdata/weather/local/FRMP2384?cc=*&unit=m »
Je ne comprends pas bien pourquoi la zibase n’arrive pas a accéder à cette page car dans un navigateur cette page s’ouvre bien.
quelle est l’erreur? est ce l’action commander par http, j’ai mis lire en retour une variable balisé par V3 et V3=/cc/uv/i
misterh
Bonjour,
Quelqu’un aurait-il une idée sur cette fameuse erreur:
Fatal error: Call to undefined function socket_create()in
J’ai stocké l’ensemble du dossier « zibase-php-sdk », sur un serveur 1and1;
J’ai complété la ligne public $ip= ‘192.168.1.14’; (adresse de ma zibase) du fichier zibase.php
J’ai créé un ficher eco-devices.php, ou j’ai aussi complété la ligne » public $ip= ‘192.168.1.14’ « )
Ceci me permettra de gérer les valeurs données par l’eco-devices en php et d’alimenter des sondes virtuelles…plus simple que 20 scénarios zibase…
J’ai fouillé un peu sur le web et certains disent qu’il faut activer la fonction socket dans le php.ini mais je ne vois pas trop comment faire sur un serveur comme 1and1.
Voila !!
Julien D.
Bonjour,
Merci pour ce tuto, pour les sondes « temp et hygro », c’est parfait,
Mais pour la suite, je crée le scénario pour le vent, lorsque j’arrive à l’étape « alimenter une sonde virtuelle », la Zibase ne me propose que trois types de sondes, thermomètre THx128, Thermo-Hygro THGR328 et Energie/Watt-metre OWLCM119 ??, donc imposible de selectionner le péripherique WGR800 ???, donc même problème pour la suite.
Merci d’avance de votre aide.
apt34
super tuto fonction nickel merci bcp !
JPP
Super tuto.
En revanche, sur la partie « vent et direction », j’ai noté quelques incohérences:
– la vitesse est exprimée sur weather.com en km/h et sur zibase en m/s (et pas l’inverse comme écrit dans l’article). Le coefficient est donc de 2.8
– la valeur direction fournie par weather.com ne donne pas le bon résultat sur la sonde (ex: « 290 » renvoi « ESE » alors que… ca devrait être plutot WNW) mais là, j’ai PAS LA SOLUTION 🙁 si qqu’un à une réponse
JPP
et je compléterais en mentionnant que le coefficient de conversion de la direction est 0.3333 (et non pas 0 comme indiqué dans le tuto).
Pour étayer mon discours, la page de référence ZIBASE: http://www.zodianet.com/la-toolbox/zibase-variables.html
encore merci malgré ces petites erreurs!
Patrick
donc pour faire clair on doit avoir ca ?
$zibase->sendVirtualProbeValues(‘xxxx’’,$weather->cc->wind->s*2.8,$weather->cc->wind->d*0.333);
patmtp35
bonjour,
un autre endroit pour recup des données climatique en xml , json etc :
http://openweathermap.org/
Salle
Merci beaucoup pour ce tutoriel très clair même pour un néophyte. J’ai mis en place la sonde température et humidité en 15 minutes.
Par contre, seule la température s’affiche sur l’icône de l’appli iPhone, mais pas l’humidité…
Depuis, j’essaie de reproduire la même chose avec l’api netatmo mais je n’arrive pas à construire l’url de requête des mesures de température
Merci de votre aide
XtenZ
Bonjour,
Depuis 1 mois les valeur de weather.com ne remonte plus, dans le suivi de la zibase j’ai également un HTTP Client REQ Error: http://wxdata.weather.com/wxdata/weather/local/FRLO1987?cc=*&unit=m
Est ce qu’il y a une solution ou weather.com ne diffuse plus ses informations par Xml ?
Merci à tous
Steeve
@XtenZ : tu as l’erreur http avec un navigateur aussi ?
Je n’ai pas ce problème avec ma Zibase et ce site… peut être l’interroges tu trop souvent dans la journée, le serveur tente peut-être de limiter tes appels ?…
Xtenz
Merci pour cette réponse, avec un navigateur je vois bien le fichier xml, j’ai meme essayé avec un autre site et meme erreur ( openwrathermap) … Je désespère…
Rémi
Bonjour,
Merci pour ce tuto très utile qui, en plus, propose 2 solutions.
J’ai opté pour la solution PHP. Mais cela ne fonctionne pas tout le temps.
J’accède bien, via un navigateur, au fichier xml (http://wxdata.weather.com/wxdata/weather/local/FRxx0099?cc=*&unit=m), mais mes sondes ne sont que rarement mises à jour (1 fois par jour, alors que cela devrait être toutes les 30mn)
J’ai essayé d’héberger mon php sur free et sur olympe, le comportement reste le même.
Avez vous eu le même style de problème?
Merci
flc85
Vous mettez quoi comme sonde pour la vitesse et direction du vent?