Exploiter un XPATH vide

Échangez ici vos astuces sur la gestion des règles eedomus

Exploiter un XPATH vide

Messagepar ctve » 14 Nov 2016 21:13

Bonjour,

Je suis toujours à la recherche d'une solution pour détecter la perte de la téléphonie aléatoire de ma Livebox.

L'exploitation simple de son API n'est pas possible car le XML fourni quant tout va bien est cohérent avec ce qu'indique la doc de l'API mais, lorsque le téléphone est planté, le XML ne contient plus qu'un code d'erreur avec l'arborescence <root> puis <error>.

Si je fais un XPATH /root/error, je récupère bien ce code d'erreur et ça m'indique donc que la téléphonie est plantée.

Par contre, quand tout va bien, cet XPATH me renvoie une valeur lue vide puisque, dans ce cas, le XML redevient normal et ne comporte plus le <error> dans son arborescence.

Je voudrais donc pourvoir exploiter dans une règle le fait que mon XPATH renvoie une valeur lue vide afin d'en déduire que la téléphonie est rétablie mais je ne trouve pas comment faire.
eedomus+ (après avoir essayé Domoticz, Jeedom et Fibaro HC2), divers modules Fibaro et Qubino, sondes météo Oregon via un RFXLAN, interrupteurs Edisio
ctve
 
Messages : 496
Inscription : 13 Nov 2015
Localisation : Toulon (Var)

Re: Exploiter un XPATH vide

Messagepar Ferritales » 14 Nov 2016 22:45

moi je fais comme cela (pas sur que ca marche pour toi)

concat(/weatherdata/forecast/time[1]/precipitation/@type, '!')

et apres je test les valeurs genre
si ! => ...
si rain! => ....
si snow! => ....
Ferritales
 
Messages : 369
Inscription : 17 Mars 2015

Re: Exploiter un XPATH vide

Messagepar chris17 » 15 Nov 2016 08:00

Bonjour
J'ai moi aussi le problème du téléphone qui se coupe en moyenne 2 à 3 jours après un reboot de la box.
J'ai modifie le script livebox.php afin de recevoir Erreur dans le Xpath quand la ligne est tombée

J' ai créer une variable "toto" qui comprend Erreur et si la $reponse comprend 'error' la valeur retournée dans le Xpath est toto et donc la valeur est Erreur
Je ne sais pas si mon explication est claire voici le code rajoute :

------------------------------------------------------------------------------------------:--------
case 'phonestate':
$response = httpQuery("http://".$myhost."/sysbus/VoiceService/VoiceApplication:listTrunks","POST",'{"parameters":{}}',null,$headers,true);

$toto ="{\"result\":{\"status\":[{\"name\":\"SIP-Trunk\",\"trunk_lines\":[{\"name\":\"LINE1\",\"enable\":\"Erreur\",\"status\":\"Erreur\",\"directoryNumber\":\"+33xxxxxx\",\"event_subscribe_lines\":[{}]}],\"sip\":{\"subscriptionInfo\":[{}]}},{\"name\":\"H323-Trunk\",\"trunk_lines\":[{\"name\":\"LINE3\",\"enable\":\"Disabled\",\"status\":\"Disabled\",\"directoryNumber\":\"\",\"event_subscribe_lines\":[]}],\"h323\":{}}]}}";
$position=strpos($response,'error');
if ($position===False){
echo $response;
}else {
echo $toto;
}
break;
---------------------------------------------------------------
chris17
 
Messages : 9
Inscription : 02 Fév 2016

Re: Exploiter un XPATH vide

Messagepar ctve » 15 Nov 2016 11:06

@chris17

Merci pour ta réponse. Je commençais à croire être le seul chez qui la téléphonie de la LIvebox déc...

Les scripts php ne sont pas trop ma tasse de thé aussi peux-tu me préciser juste une chose.

Si j'ai bien compris, le code que tu me donnes dans ton message est à "ajouter" au script php Livebox existant ? C'est bien ça ?

On peut l'ajouter où ? Après la fin du script existant ? A un endroit particulier ?

Compte-tenu de ta modif du script php Livebox, quelle devient la syntaxe du XPATH que tu utilises ?

Merci d'avance pour ton aide.
eedomus+ (après avoir essayé Domoticz, Jeedom et Fibaro HC2), divers modules Fibaro et Qubino, sondes météo Oregon via un RFXLAN, interrupteurs Edisio
ctve
 
Messages : 496
Inscription : 13 Nov 2015
Localisation : Toulon (Var)

Re: Exploiter un XPATH vide

Messagepar chris17 » 15 Nov 2016 12:00

Le code se rajoute à l'endroit du case 'phonestate': du script livepbox.php
IL faut rajouter la variable $toto ainsi que le test si la réponse contient error
remplacer les xxxxxxxxx par votre numero de téléphone.
Le Xpath ne change pas mais quand la ligne est HS la valeur retournée est Erreur à la place de Enabled

case 'phonestate':
$response = httpQuery("http://".$myhost."/sysbus/VoiceService/VoiceApplication:listTrunks","POST",'{"parameters":{}}',null,$headers,true);

$toto ="{\"result\":{\"status\":[{\"name\":\"SIP-Trunk\",\"trunk_lines\":[{\"name\":\"LINE1\",\"enable\":\"Erreur\",\"status\":\"Erreur\",\"directoryNumber\":
\"+33xxxxxxxx\",\"event_subscribe_lines\":[{}]}],\"sip\":{\"subscriptionInfo\":[{}]}},{\"name\":\"H323-Trunk\",\"trunk_lines\":[{\"name\":\"LINE3\",\"enable\":\"Disabled\",\"status\":\"Disabled\",\"directoryNumber\":
\"\",\"event_subscribe_lines\":[]}],\"h323\":{}}]}}";
$position=strpos($response,'error');
if ($position===False){
echo $response;
}else {
echo $toto;
}
break;
chris17
 
Messages : 9
Inscription : 02 Fév 2016

Re: Exploiter un XPATH vide

Messagepar ctve » 15 Nov 2016 12:21

OK !
Merci pour ces précisions.
Je teste ça dès ce soir et je te tiens au courant.
eedomus+ (après avoir essayé Domoticz, Jeedom et Fibaro HC2), divers modules Fibaro et Qubino, sondes météo Oregon via un RFXLAN, interrupteurs Edisio
ctve
 
Messages : 496
Inscription : 13 Nov 2015
Localisation : Toulon (Var)

Re: Exploiter un XPATH vide

Messagepar ctve » 15 Nov 2016 15:03

@chris17

Je viens de mettre en place ton script et il me renvoie bien "Up" lorsque le téléphone est OK.
Il ne me reste plus qu'à attendre que ça plante pour voir si je reçois bien "error".

Par contre, et malgré mes faibles compétences en php, je crois avoir décelé une faute de frappe dans ton code.

Tu écris en effet : if ($position===False)

N'y a -t-il pas un signe = de trop ?
eedomus+ (après avoir essayé Domoticz, Jeedom et Fibaro HC2), divers modules Fibaro et Qubino, sondes météo Oregon via un RFXLAN, interrupteurs Edisio
ctve
 
Messages : 496
Inscription : 13 Nov 2015
Localisation : Toulon (Var)

Re: Exploiter un XPATH vide

Messagepar chris17 » 15 Nov 2016 15:19

Extrait du site php

WARNING

As strpos may return either FALSE (substring absent) or 0 (substring at start of string), strict versus loose equivalency operators must be used very carefully.

To know that a substring is absent, you must use:

=== FALSE

Pour savoir si une chaine est absente vous devez utiliser " === False"
chris17
 
Messages : 9
Inscription : 02 Fév 2016

Re: Exploiter un XPATH vide

Messagepar ctve » 15 Nov 2016 15:45

OK, on en apprend tous les jours :)

Merci.
eedomus+ (après avoir essayé Domoticz, Jeedom et Fibaro HC2), divers modules Fibaro et Qubino, sondes météo Oregon via un RFXLAN, interrupteurs Edisio
ctve
 
Messages : 496
Inscription : 13 Nov 2015
Localisation : Toulon (Var)

Re: Exploiter un XPATH vide

Messagepar ctve » 17 Nov 2016 09:49

@chris17

Je n'ai pas oublié de venir faire un petit compte-rendu du fonctionnement de ton script modifié ... mais hélas (ou pas !) ma téléphonie ne s'est pas plantée depuis que je l'ai mis en place :lol:
eedomus+ (après avoir essayé Domoticz, Jeedom et Fibaro HC2), divers modules Fibaro et Qubino, sondes météo Oregon via un RFXLAN, interrupteurs Edisio
ctve
 
Messages : 496
Inscription : 13 Nov 2015
Localisation : Toulon (Var)

Re: Exploiter un XPATH vide

Messagepar ctve » 10 Déc 2016 15:24

@chris17

Ca y est enfin, la téléphonie de ma Livebox, qui était stable depuis très longtemps, vient de se planter trois fois en deux jours (et oui, quand on aime, on compte pas !) :mrgreen:

Et je suis heureux de te confirmer que ton script modifié fonctionne à merveille.

Encore merci.
eedomus+ (après avoir essayé Domoticz, Jeedom et Fibaro HC2), divers modules Fibaro et Qubino, sondes météo Oregon via un RFXLAN, interrupteurs Edisio
ctve
 
Messages : 496
Inscription : 13 Nov 2015
Localisation : Toulon (Var)

Re: Exploiter un XPATH vide

Messagepar chris17 » 10 Déc 2016 16:28

Merci pour le retour
chris17
 
Messages : 9
Inscription : 02 Fév 2016


Retour vers Règles et programmations

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 24 invité(s)