trackingnewtech Posté(e) le 5 octobre 2014 Signaler Posté(e) le 5 octobre 2014 Bonjour vous connaissez un outil qui permet de trouver la bonne syntaxe pour extraire la valeur qu'on souhaite d'un retour JSON ? Comment fonctionne le Moteur d'expressions JSON ? Mon but est de récupérer la valeur de temp_c dans ce flux json : http://api.wunderground.com/api/xxxxxxxxxxxxxxxxx/conditions/q/FR/Paris.json a+
Nico Posté(e) le 6 octobre 2014 Signaler Posté(e) le 6 octobre 2014 Oui, j'espère qu'aujourd'hui on a cette 4.018...
BenjyNet Posté(e) le 6 octobre 2014 Signaler Posté(e) le 6 octobre 2014 @trackingnewtech T'as un VD sur le site qui récupère les infos de wunderground : http://www.domotique-fibaro.fr/index.php/topic/708-wu-weather-r%C3%A9cup%C3%A9rer-des-donn%C3%A9es-%C3%A0-partir-de-wunderground/?hl=wunderground
trackingnewtech Posté(e) le 6 octobre 2014 Signaler Posté(e) le 6 octobre 2014 +BenjyNet merci je l'avais vu. Mais je fais cette intégration pour tester le plugin de Krikroff et comprendre son fonctionnement. L'intérêt que j'y vois est qu'on peut intégrer son plugin àdes scènes facilement alors qu'avec le plugin virtuel il fait plus pour visualiser des informations.
mulderonline Posté(e) le 6 octobre 2014 Signaler Posté(e) le 6 octobre 2014 Bonjour, J'ai un petit problème pour configurer un device virtuel. Une fois le plugin ajouté et un device ajouté et quand je vais dans avancé pour essayer de le parametrer, je n'ai rien ( que nom piece et genre) Merci de ton aide
Krikroff Posté(e) le 6 octobre 2014 Auteur Signaler Posté(e) le 6 octobre 2014 @trackingnewtech, pour utiliser la valeur temp_c dans ce json il faut simplement utiliser le chemin suivant dans le "Moteur d'expressions" /current_observation/temp_c Ici pas de pattern en particulier puisque le json retourne déjà une valeur de type number ("temp_c": 12.3) Quelques explications sur l'expression: Elle est composée de trois parties dont une obligatoire : Le chemin, puis ensuite en option un Pattern pour extraire une valeur et enfin une Opération pouvant servir d'offset et ainsi ajuster la valeur. Le Chemin: Pour le trouver, il faut simplement suivre l'arborescence du "root" jusqu’à la valeur visée. Le caractère / représente le passage vers une branche "enfant", { "response": { }, "location": { }, "current_observation": { "display_location": { "elevation": "47.00000000" }, "observation_location": { "elevation": "161 ft" }, "estimated": { }, "temperature_string": "54.1 F (12.3 C)", "temp_f": 54.1, "temp_c": 12.3, "relative_humidity": "84%" } } ainsi pour trouver la valeur temp_c il faut descendre du root (/) puis current_observation, rentrer dans current_observation avec (/) puis temp_c soit : /current_observation/temp_c Le Pattern: Dans l'expression un Pattern est représenté par un ensemble {(pattern)}, cf. http://www.lua.org/pil/20.2.html Si la valeur visée est relative_humidity alors l'expression à utiliser est la suivante: /current_observation/relative_humidity {(%d+%.?%d*)[%%]} Une opération: Dans l'expression un opération est représentée par un ensemble (math_func : operatior number) placé soit avant, soit après le Pattern mais toujours après le chemin. Il peut combiner une fonction mathématique (ceil, floor, abs) en plus de l'opération. Des exemples: (abs:+0.75) -> Retourne la valeur absolue du résultat du pattern ajuster par +0.75 (-1.5) -> Ajuste le résultat de -1.5 (floor) -> Retourne l'entier inférieur (ou égal le plus proche) du résultat du pattern
Krikroff Posté(e) le 6 octobre 2014 Auteur Signaler Posté(e) le 6 octobre 2014 @Mulderonline, tu dois très certainement être en remote ? ou port forwarding ? La configuration est visible uniquement en local sur la bêta 1
crazymonster999 Posté(e) le 6 octobre 2014 Signaler Posté(e) le 6 octobre 2014 Wow, que d'activité sur ce sujet !! Après la lecture de tous les échanges, nickel, la récupération de la valeur présente dans un label fonctionne au poil ! Merci Krikroff. Pour répondre @BenjyNet, mon Vitual Device : - Récupère la valeur de la température toutes les x minutes - La stock dans une liste (que j'archive dans une variable globale du genre temp1;temp2;temp3 - Affiche la température min/avg/max de la liste + la variation de température entre le moment présent et -10min, -30min, -1h et -2h - RAZ des valeurs tous les jours à minuit à‡a me permet d'avoir une idée de la courbe de température (une espèce de dérivée grossière) comme on en avait pas encore sur la HC2. A terme, je voudrais l'utiliser pour la gestion de mon chauffage. Exemple, si la température descend dans les combles depuis 1h, je vais pouvoir anticiper l'inertie de la maison, et affiner le temps de chauffe.
BenjyNet Posté(e) le 6 octobre 2014 Signaler Posté(e) le 6 octobre 2014 Oh lala c'est exactement ce que j'étais en train de coder pour trouver l'inertie de ma maison. Si tu pouvais ouvrir un thread pour ton VD, ce serait sympa et permettrait de montrer ce qu'il est possible de faire.
crazymonster999 Posté(e) le 6 octobre 2014 Signaler Posté(e) le 6 octobre 2014 Okay, pas de soucis, j'ai encore quelques petits points à corriger, mais je vais publier ça (bien que le code ne soit pas des plus propre... ). 2
BenjyNet Posté(e) le 7 octobre 2014 Signaler Posté(e) le 7 octobre 2014 @Krikroff Hier soir j'ai changé l'offset sur le module pour rajouter +0.4 et j'ai la box qui arrivait plus àenvoyer les ordres zwave. Obligé de PowerReboot. Après ça, tout est ok, offset pris en compte.
Krikroff Posté(e) le 7 octobre 2014 Auteur Signaler Posté(e) le 7 octobre 2014 Sur le module "enfant" température ou directement dans l'expression dans la configuration du module principale ? Pour le moment tous les modules "enfants" c'est du 100% Fibaro, impossible de corriger un bug pour moi a ce niveau Envoyé de mon iPhone àl'aide de Tapatalk
BenjyNet Posté(e) le 7 octobre 2014 Signaler Posté(e) le 7 octobre 2014 Ouais sur le module enfant, mais bon ça doit venir du buguage de la v4 Par contre j'ai constaté un truc grâce àce plugin, c'est que mes putains de radiateurs qui coûtent un bras régulent vachement la température (précision à+/-0,1°). Grâce aux courbent je peux voir aussi l'inertie de la maison et prévoir les seuils de déclenchement du chauffage. Sais-tu par contre s'il est possible d'avoir une variable globale sous forme d'array ?
Steven Posté(e) le 7 octobre 2014 Signaler Posté(e) le 7 octobre 2014 C'est ici : http://www.domotique-fibaro.fr/index.php/topic/1195-tableau-dans-une-variable-globale/?hl=tableau
crazymonster999 Posté(e) le 7 octobre 2014 Signaler Posté(e) le 7 octobre 2014 Hello, D'après mes recherches, impossible de stocker un array en variable globale. Du coup, j'ai bricolé une fonction pour stocker le contenu d'un array sous forme d'une ligne de caractères, séparés par un caractère au choix. C'est à déclarer avant ton main. --Generate an string from an array, where each value is separated by a "Separator" function recordTableToString(Table,Separator) --fibaro:debug("Separator :"..Separator) local OutputString = Table[1] --init with the first value for i=2,table.getn(Table) do OutputString = OutputString..Separator..Table[i] end fibaro:debug(OutputString) return OutputString end Evidemment, j'ai aussi une fonction pour extraire l'info de la variable globale. -- Split a string depending of a character, and return an array function string:split( inSplitPattern, outResults ) if not outResults then outResults = { } end local theStart = 1 local theSplitStart, theSplitEnd = string.find( self, inSplitPattern, theStart ) while theSplitStart do table.insert( outResults, string.sub( self, theStart, theSplitStart-1 ) ) theStart = theSplitEnd + 1 theSplitStart, theSplitEnd = string.find( self, inSplitPattern, theStart ) end table.insert( outResults, string.sub( self, theStart ) ) return outResults end Utilisation pour enregistrer dans une variable globale : -- Record to Global Var for backup fibaro:setGlobal(GlobalVariableForRecord, recordTableToString(TempTodayArray,";")) Et pour en extraire les données : --Get temp values from Global Var local GlobalVariableForRecord = "Stats_TempCombles" local TempTodayArray --Array of temp values ValueGetFromGlobalVar = fibaro:getGlobalValue(GlobalVariableForRecord) TempTodayArray = ValueGetFromGlobalVar:split(";") --Split data in an array nbReleveTemp = table.getn(TempTodayArray) --Count number of data in the array fibaro:debug(">> ".. nbReleveTemp .." données restorées") Attention cependant, la capacité d'une variable globale est limitée. Je suis allé jusqu'à ~1600 relevés de température enregistrés. Après ça plante... 1
crazymonster999 Posté(e) le 7 octobre 2014 Signaler Posté(e) le 7 octobre 2014 Roh zut, c'est plus propre ton truc Steven Bien vu le coup du json...
Krikroff Posté(e) le 7 octobre 2014 Auteur Signaler Posté(e) le 7 octobre 2014 ... et avec un json.encode vous pouvez stoker jusqu' a 8000 caractères en gros elle est pas belle la vie . 1
BenjyNet Posté(e) le 7 octobre 2014 Signaler Posté(e) le 7 octobre 2014 Remarque : L'offset est bien compté sur l'affichage dans le home mais pas dans le suivi des températures sur les courbes ! Not good
Krikroff Posté(e) le 7 octobre 2014 Auteur Signaler Posté(e) le 7 octobre 2014 C'est pour ça, tu devrais gérer l'offset dans le module principale au niveau de l'expression pour être certain que la valeur prise en compte partout est la valeur corrigée Envoyé de mon iPhone àl'aide de Tapatalk
BenjyNet Posté(e) le 7 octobre 2014 Signaler Posté(e) le 7 octobre 2014 Vivivi mr je vais faire ça.... but is not WAF
Krikroff Posté(e) le 7 octobre 2014 Auteur Signaler Posté(e) le 7 octobre 2014 Ça c'est sur mais bon en même temps pas certain que ma femme ou la tienne décide un jour de créer une sonde virtuelle ! Envoyé de mon iPhone àl'aide de Tapatalk
Steven Posté(e) le 7 octobre 2014 Signaler Posté(e) le 7 octobre 2014 Surtout si c'est pour notifié ta capacité à la combler
Krikroff Posté(e) le 7 octobre 2014 Auteur Signaler Posté(e) le 7 octobre 2014 Mais tu es un grand malade ... 2
Lazer Posté(e) le 7 octobre 2014 Signaler Posté(e) le 7 octobre 2014 Par contre j'ai constaté un truc grâce àce plugin, c'est que mes putains de radiateurs qui coûtent un bras régulent vachement la température (précision à+/-0,1°). Grâce aux courbent je peux voir aussi l'inertie de la maison et prévoir les seuils de déclenchement du chauffage. Tu n'avais pas mis en place les graphs de température sur ton NAS ? On apprend plein de trucs avec les courbes de T°. 1
crazymonster999 Posté(e) le 7 octobre 2014 Signaler Posté(e) le 7 octobre 2014 Est-ce qu'il serait possible àpartir d'un Virtual Sensor d'avoir plusieurs capteurs de température?
Messages recommandés