récupérer plusieurs données en une fois

Capteurs et actionneurs HTTP

récupérer plusieurs données en une fois

Messagepar thrymartin » 21 Fév 2020 08:53

Bonjour,

le http-capteur est très bien, mais il oblige à envoyer un script autant de fois qu'il ya de capteurs pour convertir une page html en xml pour récupérer une valeur par xpath, donc de faire autant de requêtes, et de générer plusieurs fois le même xml
et éventuellement pour conséquence de saturer un serveur inutilement

Y a t il un moyen pour récupérer ce xml une seule fois (de le mettre dans l'eedomus ? dans une page tiers... ?) pour que le http-capteur puisse y faire appel directement ? donc de ne faire une requete sur le serveur principal qu'une seule fois pour tous les capteurs ?

merci
thrymartin
 
Messages : 920
Inscription : 03 Mars 2019
Localisation : La Réunion

Re: récupérer plusieurs données en une fois

Messagepar merguez07 » 21 Fév 2020 10:29

Bonjour Thrymartin,

regarde mon tuto1 (lien dans ma signature) page 75
tuto 1 -->Programmation des scripts Eedomus
tuto 2 -->SmartDevice
tuto 3 -->Le déclenchement de règles
scripts -->Météo du jour | GH Thermostat | TotalWatt | Detecfire | smartbattery
Skype Eedomus -->lien vers le skype Eedomus
merguez07
 
Messages : 2346
Inscription : 15 Sep 2017
Localisation : Le Teil en Ardèche

Re: récupérer plusieurs données en une fois

Messagepar thrymartin » 21 Fév 2020 13:38

En effet, un seul capteur fera la requête tandis que les autres profiteront du résultat dans le cache.


Voila, c'est exactement ça, et même pour les raisons cités au dessus de cette phrase

Bon, je regarde l'intégration dans le script mobile alerts et le mode d'emploi qui va avec, et convaincre tout le monde de l'intérêt de la chose... j'ai cru comprendre qu'Oregon arrêtait, donc ce n'est pas le moment d'énerver Lacrosse, qui a déjà failli nous couper l'accès web (je pense que tu as suivi l'affaire..)

décidément, ne prend surtout pas ta retraite eedomus :-)

merci encore
thrymartin
 
Messages : 920
Inscription : 03 Mars 2019
Localisation : La Réunion

Re: récupérer plusieurs données en une fois

Messagepar clarinette49 » 21 Fév 2020 16:36

Tout comme toi je m’inquiétais qu'il y ai trop de requêtes sur le serveur mobile alerts si une requête horaire pouvait récupérer toutes le valeurs alors ce serait parfait effectivement.
clarinette49
 
Messages : 748
Inscription : 21 Mai 2019
Localisation : Angers

Re: récupérer plusieurs données en une fois

Messagepar thrymartin » 23 Fév 2020 15:45

Hello,

Il ya un autre intérêt, c'est quand le serveur est longuet à la réponse (maintenance ou problème divers ?), et c'est ce qui provoquait des erreurs de lectures pendant ces fameuses plages de fin de soirée qui se sont produites 3 ou 4 fois pendant quelques heures. J'ai remarqué que la page Web finissait par arriver... (en patientant longtemps), avec les données... et même que parfois, une (seule) valeur se mettait à jour (avec le script)
La, avec le cache, une seul valeur qui sort, et toutes sortent...

j'ai terminé, mais il me reste à tester

EDIT : cette nuit, un truc bizarre, un seul capteur en erreur (c'est pas le capteur, encore cette page mobile alerts qui a des ratés mais que quelques heures vers minuit)
ben voila aussi un truc qui n'arrivera plus avec le script :
si en erreur, alors ya pas de xml de généré, et si le xml = vide alors le cache n'est pas mis à jour
(ça doit être confirmé, il faut que je fasse un test quand la page mobile alerts est inaccessible, sauf si merguez07 peut m'éclairer : quand l'appel à la page https://measurements.... n'aboutit pas, est ce que le script se poursuit (donc ça va écrire la balise [LACROSSE] dedans) ou est-ce qu'on sort du script comme s'il y avait un die ?)
et du coup, ce sera le prochain capteur qui fait la demande et mettra à jour le cache, etc.

je vais mettre le script dans la page ad-hoc mais en fin de discussion, pour test, en attendant d'avoir la réponse à ma question ci-dessus (je peux donner une fausse adresse pour tester, mais la j'ai plus le temps...) : en fait je veux savoir, si la page n'est pas accessible, si ça va m'envoyer un LACROSSE /LACROSSE ou rien pour le test de non-plantage de récupération de valeur...
thrymartin
 
Messages : 920
Inscription : 03 Mars 2019
Localisation : La Réunion

Re: récupérer plusieurs données en une fois

Messagepar merguez07 » 24 Fév 2020 13:24

thrymartin a écrit:si en erreur, alors ya pas de xml de généré, et si le xml = vide alors le cache n'est pas mis à jour
(ça doit être confirmé, il faut que je fasse un test quand la page mobile alerts est inaccessible, sauf si merguez07 peut m'éclairer : quand l'appel à la page https://measurements.... n'aboutit pas, est ce que le script se poursuit (donc ça va écrire la balise [LACROSSE] dedans) ou est-ce qu'on sort du script comme s'il y avait un die ?)
et du coup, ce sera le prochain capteur qui fait la demande et mettra à jour le cache, etc.


Salut mon ami,
Je ne connais pas ton code donc difficile de te répondre. Ce que je peux te dire c'est que si tu interroge un site pas fiable ou saturé le programme va continuer comme si tout aller bien. Alors si tu ne souhaites pas que des infos érronées ou manquantes soient mises en cache il faut le prévoire dans le code.
Il te suffit donc de rajouter un test et si ce dernier n'est pas bon tu sors par un Die avant la mise en cache.

N'hésites pas à m'envoyer ton code si tu veux un appui
tuto 1 -->Programmation des scripts Eedomus
tuto 2 -->SmartDevice
tuto 3 -->Le déclenchement de règles
scripts -->Météo du jour | GH Thermostat | TotalWatt | Detecfire | smartbattery
Skype Eedomus -->lien vers le skype Eedomus
merguez07
 
Messages : 2346
Inscription : 15 Sep 2017
Localisation : Le Teil en Ardèche

Re: récupérer plusieurs données en une fois

Messagepar thrymartin » 24 Fév 2020 13:52

Salut,

en tout cas déjà, merci pour ton aide, ta page sur les plugin/script m'a permis de faire la modification pour la mise en cache des données, sans trop de difficultés
Pour moi ça fonctionne, mais le seul truc qui me gene, c'est que si le $xml est mauvais, bref ne contient pas les données, bref, la lecture html a eu des ratés; je ne veux pas qu'il aille en cache, non plus surtout son "time_last" : donc permettre au prochain capteur d'essayer d'aller récupérer ça.

le script est ici :
viewtopic.php?f=58&t=8879&start=20#p87358

et j'ai recopié bêtement la condition (c'est tout à la fin, avant la mise en cache)
if ( $xml != '' )

pour la mise en cache, mais en fait, ce $xml ne sera jamais nul :
soit le script réussit, et $xml est correct
soit il ya un couac dans la lecture de la page html, en fait j'ai essayé, ça me mets au moins les balises [LACROSSE] (précédé d'un message d'erreur, mais pas sur que ce message aille dans le $xml ?)

le test serait de vérifier dans le $xml qu'il y ait une balise que tous les capteurs Lacrosse vont envoyer, par exemple <releves_avec_date>
(ça va forcement figurer, quelque soit le capteur, la centrale ...)
donc au lieu de tester la valeur nulle pour $xml, je teste que cette chaine est bien dans $xml et si NON, alors die... et je termine par la mise en cache
(ou si elle existe, je mets la mise en cache entre {}

j'ai bon chef ?

EDIT

je propose de remplacer
if ( $xml != '' )

par
if (strpos ( $xml , "<releves_avec_date>" ))

épicétou... (si trouve pas ça renvoi false et donc on sort et comme c'est la fin du script, pas besoin de die

j'envoi comme ça, et tu me diras quand même si ça te semble correct
parce que pour tester, je n'ai que le bac à sable... ça devrait aller parce que strpos n'a pas donné de message d'incompatibilité (stripos si : commande non acceptée), j'en conclue que ça devrait fonctionner ... rereEDIT : ça a bien été mis en cache, ça me semble OK
strpos ne figure pas dans ton aide; à mettre dans "Fonctions sur les chaînes de caractères" ?
thrymartin
 
Messages : 920
Inscription : 03 Mars 2019
Localisation : La Réunion

Re: récupérer plusieurs données en une fois

Messagepar merguez07 » 24 Fév 2020 17:12

j'ai vu ton code. Bien joué.

Pour être puriste pour la recherche de texte tu devrais plutôt mettre le test sous la forme

if (strpos ( $xml , "<releves_avec_date>" ) !== false)

en effet si le texte recherché se trouve en position 0 ton test lira false au lieu de true.

A+
tuto 1 -->Programmation des scripts Eedomus
tuto 2 -->SmartDevice
tuto 3 -->Le déclenchement de règles
scripts -->Météo du jour | GH Thermostat | TotalWatt | Detecfire | smartbattery
Skype Eedomus -->lien vers le skype Eedomus
merguez07
 
Messages : 2346
Inscription : 15 Sep 2017
Localisation : Le Teil en Ardèche

Re: récupérer plusieurs données en une fois

Messagepar thrymartin » 24 Fév 2020 17:44

OK,
d'un autre côté, ça commence toujours par <LACROSSE>

mais je retiens l'info

merci
thrymartin
 
Messages : 920
Inscription : 03 Mars 2019
Localisation : La Réunion

Re: récupérer plusieurs données en une fois

Messagepar merguez07 » 24 Fév 2020 18:44

thrymartin a écrit:d'un autre côté, ça commence toujours par <LACROSSE>


pas faux, mais c'est plus dans le cas où un autre utilisateur veux s'inspirer de ton code dans un autre contexte.
tuto 1 -->Programmation des scripts Eedomus
tuto 2 -->SmartDevice
tuto 3 -->Le déclenchement de règles
scripts -->Météo du jour | GH Thermostat | TotalWatt | Detecfire | smartbattery
Skype Eedomus -->lien vers le skype Eedomus
merguez07
 
Messages : 2346
Inscription : 15 Sep 2017
Localisation : Le Teil en Ardèche

Re: récupérer plusieurs données en une fois

Messagepar thrymartin » 25 Fév 2020 04:04

Bon, tu m'as convaincu, je le rajoute

EDIT : avant de lire ma bafouille, j'ai encore une demande : au cas ou Lacrosse étendrait la difficulté d'accès au serveur via le web (pour l'instant, il ne s'agit que de quelques heures, la nuit, pour certains jours... mais ça commence a ressembler à du récurrent : on était tranquille 3 jours et ça a recommencé hier et cette nuit... ???)
est-ce que // parce que j'ai remarqué (je n'en suis pas sur à 100% mais quand j'étais ... réveillé à ces heures la, en outre mer ça démarre à minuit jusqu'à 4 ou 5h du mat...) et que j'ai essayé, c'était le cas // que via un navigateur, j'arrivais a récupérer les données, mais faut être très PATIENT !!! (je n'ai pas chronométré, mais c'est long avant que la page arrive, mais elle arrive pendant qu'eedomus continue a ne pas recevoir les données)
1 peut-on outrepasser les 40 secondes après lesquelles eedomus nous envoi un message d'erreur (la durée par défaut est de 30 secondes et si on met plus de 40, ça couac quand même à 40)
2 ou sinon, y a t il un moyen avec une page tiers (un espace perso) de récupérer la page avec un délai d'attente de 3 minutes par exemple ? (cela devrait être suffisant).

bon : j'avais écrit ça avant mais c'est un peu embrouillé :-) je vire certains passages ===>

Cette nuit, encore des couacs : de 20h30 à 01h pour 44 appels (9 capteurs)... au lieu de 5 avec le cache...
le script avec cache n'a réussi à éviter qu'une plage horaire de 30' un capteur ayant réussi a récupérer les données au bout d'une heure 30 de perturbation : comme je l'ai prévu, le relais de l'appel au serveur a été passé cycliquement à tous les relevés, dans l'ordre et je n'ai une rupture que sur la seule plage horaire de 30' (c'est ce qui m'a permis de déterminer quel était le capteur qui allait a la peche aux infos). du coup ça me donne une interruption de 1h30 puis de 3h30 au lieu de 5h pour tous les capteurs sauf 1

Bon, j'édite le script, j'attend quelques jours puis je demande des explications à monsieur Lacrosse et en attendant, je vais essayer de convaincre les réfractaires qui chargent les données sans cache et avec une fréquence trop rapprochée.
thrymartin
 
Messages : 920
Inscription : 03 Mars 2019
Localisation : La Réunion


Retour vers Requêtes HTTP

Qui est en ligne ?

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