flechg Posté(e) le 11 septembre 2017 Signaler Posté(e) le 11 septembre 2017 Bonsoir a tous voila je voudrais stocker une valeur dans une variable bon ça je sais faire mais la ou ça se complique c est que je voudrais stocker la valeur la plus haute ex j ai une sonde de température et je veux remonter que la valeur au dessus de celle d avant suis je claire par ex 37 degré et après 38 et non si la température tombe en dessous de 37 et ca je sais pas faire merci encore cdt
jjacques68 Posté(e) le 11 septembre 2017 Signaler Posté(e) le 11 septembre 2017 (modifié) Si température > variable alors on mémorise dans la variable. En gros, tu lis la temp, tu compares la variable, si c'est > tu memorises. Modifié le 11 septembre 2017 par jjacques68 2
pepite Posté(e) le 12 septembre 2017 Signaler Posté(e) le 12 septembre 2017 Et voilà, facile non ? ;-) 1
jojo Posté(e) le 12 septembre 2017 Signaler Posté(e) le 12 septembre 2017 @jjacques68 a été "trop" rapide pour répondre. C'est la solution la plus facile à mettre en oeuvre 1
flechg Posté(e) le 12 septembre 2017 Auteur Signaler Posté(e) le 12 septembre 2017 Merci a vous je vais essayer de mettre en place et vous tiens au courant si cela fonctionne comme je veux merci encore cdt
flechg Posté(e) le 14 septembre 2017 Auteur Signaler Posté(e) le 14 septembre 2017 Bonsoir bon je pensais y arriver mais la je suis bloqué dans le mainloop j ai mis fibaro:setGlobal("Temphaute", value) if (tonumber(value) > TempHaute) then TempHaute = tonumber(value) mais j ai un message d erreur please help cdt
jjacques68 Posté(e) le 14 septembre 2017 Signaler Posté(e) le 14 septembre 2017 alors j'ai pas testé mais un truc comme ça devrait le faire : local IdSonde = xx --tu renseignes l'ID de ta sonde local VgName = yy --tu renseignes le nom de ta variable globale avec les "" local ValeurVariable = tonumber(fibaro:getGlobalValue(VgName)) local ValeurSonde = tonumber(fibaro:getValue(IdSonde, "value")) if ValeurSonde > ValeurVariable then fibaro:setGlobal(VgName, ValeurSonde) fibaro:debug("température supérieure = Mise à jour de la VG") else fibaro:debug("température inférieure = rien") end 1
flechg Posté(e) le 14 septembre 2017 Auteur Signaler Posté(e) le 14 septembre 2017 Merci de ton aide j ai un message d erreur line20 attempt to compare number with nil
jjacques68 Posté(e) le 14 septembre 2017 Signaler Posté(e) le 14 septembre 2017 (modifié) Ah ! ?? Ajoutes avant le bloc if ces 2 lignes pour voir le contenu des variables : fibaro:print(ValeurVariable) fibaro:print(ValeurSonde) Oups, désolé, c'est fibaro:debug et non print... Modifié le 14 septembre 2017 par jjacques68 1
flechg Posté(e) le 14 septembre 2017 Auteur Signaler Posté(e) le 14 septembre 2017 (modifié) alors j ai bien la remontée de la variable mais pas de la sonde le problème ne viendrait il pas du fait que c est un esp8266 qui remonte la t° dans un VD message d erreur ligne 8 attempt to compare number with nil désolé du dérangement Modifié le 14 septembre 2017 par flechg
jjacques68 Posté(e) le 14 septembre 2017 Signaler Posté(e) le 14 septembre 2017 Ok alors il faut remplacer la ligne avec le fibaro:get(IdSonde, ...) par une une commande qui va lire la valeur dans le VD. Il faut donc déjà mettre l'id du VD dans la variable IdSonde. Ensuite il me semble que pour récupérer la valeur, c'est un truc comme : fibaro:get(IdSonde, "ui.le_nom_du_label.value") a tester.. attention tu vas récupérer une valeur de type string, et non un chiffre. En plus certainement avec des caractères comme °C derrière... il faudra sans doute traiter ce retour pour en faire une valeur exploitable pour la comparaison avec la VG. 1
flechg Posté(e) le 14 septembre 2017 Auteur Signaler Posté(e) le 14 septembre 2017 effectivement j ai maintenant les deux remontées mais après j ai erreur string j ai essayer string.format("%0.1",TempHaute); mais rien a faire merci encore en tout cas et bonne nuit
jjacques68 Posté(e) le 15 septembre 2017 Signaler Posté(e) le 15 septembre 2017 Quel est le contenu de cette chaîne de caractère ?
flechg Posté(e) le 15 septembre 2017 Auteur Signaler Posté(e) le 15 septembre 2017 Bonjour, la chaîne de caractère remontée est une simple température style 22,00 °C cdt
pepite Posté(e) le 15 septembre 2017 Signaler Posté(e) le 15 septembre 2017 Bonjour, et ceci string.format("%d+",TempHaute); ou string.format("%d+,%d+",TempHaute) 1
flechg Posté(e) le 15 septembre 2017 Auteur Signaler Posté(e) le 15 septembre 2017 bon je reprends parce que la j y comprends plus rien local IdSonde = 747 --tu renseignes l'ID de ta sonde local VgName = "TempHaute" --tu renseignes le nom de ta variable globale avec les "" local ValeurVariable = tonumber(fibaro:getGlobalValue(VgName)) local ValeurSonde = tonumber(fibaro:get(selfId, "setProperty", "ui.lbl1.value", value.. " °C")) fibaro:debug(ValeurVariable) fibaro:debug(ValeurSonde) if ValeurSonde > ValeurVariable then ValeurSonde = string.format("%d+",VgName); fibaro:setGlobal(VgName, ValeurSonde) fibaro:debug("température supérieure = Mise à jour de la VG") else fibaro:debug("température inférieure = rien") end j ai dans le debug la remontée 20,19 erreur ligne 9: attempt to compare number with nil beuhbeuh merci encore
pepite Posté(e) le 15 septembre 2017 Signaler Posté(e) le 15 septembre 2017 Quelle est ta ligne 9 ? ceci non ? if ValeurSonde > ValeurVariable 20.19 c'est ta valeur sonde ? si oui, tu ne dois pas avoir besoin du string.format et dans le debug quelle est ValeurVariable ? elle ne serait pas vide par hasard ? Essaie ceci if ValeurVariable == nil then print("Valeur Variable : nil") elseif ValeurSonde > ValeurVariable then ValeurSonde = string.format("%d+",VgName); fibaro:setGlobal(VgName, ValeurSonde) fibaro:debug("température supérieure = Mise à jour de la VG") else fibaro:debug("température inférieure = rien") end 1
flechg Posté(e) le 15 septembre 2017 Auteur Signaler Posté(e) le 15 septembre 2017 Bon je reprends sur un autre module qui fonctionne bien pour gérer la t° de ma hc2 voila le code la remontée se fait bien dans la variable mais elle ne garde pas la valeur la plus haute mais la valeur actuelle dans le debug j ai la remontée suivante 33,09 (chiffre avec 2 chiffres après la virgule) selfId = fibaro:getSelfId() --sleeptimer = 5 -- minutes between pollning local WEB = Net.FHttp("192.168.1.24",80) -- IP to your espeasy local response ,status, err = WEB:GET("/json?tasknr=1") -- task id on espeasy if (tonumber(status) == 200 and tonumber(err)==0) then local jsonTable = json.decode(response) name = jsonTable.TEMP value = jsonTable.Temperature --fibaro:debug(value) fibaro:log(value) fibaro:call(selfId, "setProperty", "ui.lbl1.value", value.. " °C") fibaro:setGlobal("TempHc2", value) fibaro:debug(TempHc2) fibaro:debug(value) if TempHc2 == nil then print("TempHc2 : nil") elseif value > TempHc2 then value = string.format("%d+",TempHc2); fibaro:setGlobal(TempHc2, value) fibaro:debug("température supérieure = Mise à jour de la VG") else fibaro:debug("température inférieure = rien") end end merci
pepite Posté(e) le 15 septembre 2017 Signaler Posté(e) le 15 septembre 2017 Heu..pour bien comprendre, tu recuperes la temperature de ta HC2 que tu mets dans une variable "TempHC2" si la teperaure actuelle > tampHC2 tu veux mettre à jour la variable TempHC2 sinon pas de mise à jour. C'est bien cela ? 1
flechg Posté(e) le 15 septembre 2017 Auteur Signaler Posté(e) le 15 septembre 2017 Exactement çà Envoyé de mon MHA-L09 en utilisant Tapatalk
jjacques68 Posté(e) le 15 septembre 2017 Signaler Posté(e) le 15 septembre 2017 C'est normal tu fais un premier setGlobal juste après l'avoir insérer dans le label, ça fais double appel ! Moi j'enleverainle premier...Envoyé de mon iPhone en utilisant Tapatalk Pro
pepite Posté(e) le 15 septembre 2017 Signaler Posté(e) le 15 septembre 2017 Ok. Donc il ya plus simple comme code ;-) dans un navigateur tape ca : http://IPHC2/docs Cherche ou se trouve la température de la HC2, de memoire je ne sais plus. Dans settings/diagnostics peut-etre ou inof... et copie le json ici . ensuite le code va ressembler a ca: ce n'est qu'un exemple faut les infos du json local Tempglobale = tonumber(fibaro:getGlobalValue("TempHC2")) local jsonTable = api.get("/settings/info") local Tempactuellehc2 = tonumber(jsonTable.Temp) if Tempactuellehc2 > Tempglobale then fibaro:debug("Temp HC2 actuelle : " ..Tempactuellehc2 .. " - Temp de la globale : " ..Tempglobale) fibaro:setGlobal("TempHC2", Tempactuellehc2) else fibaro:debug("Pas de MAJ de la temp : Tempactuellehc2 < Tempglobale") end 1
jjacques68 Posté(e) le 15 septembre 2017 Signaler Posté(e) le 15 septembre 2017 Ah oui j'y pense pas naturellement à ça, c'est 10 fois plus simple Citation api.get("/settings/info")
flechg Posté(e) le 15 septembre 2017 Auteur Signaler Posté(e) le 15 septembre 2017 Non mais ce n est pas pour ce module là c est un esp que je vais installer et je voudrais récupérer la valeur haute dans la variable@jjacques68 j ai essayé sans le premier setGlobal et la je ne ai pas de remontée dans la variableMerci encore à vous tous Envoyé de mon MHA-L09 en utilisant Tapatalk
flechg Posté(e) le 15 septembre 2017 Auteur Signaler Posté(e) le 15 septembre 2017 je me perds dans les code j y comprends plus rien
Messages recommandés