fel-x Posté(e) le 18 avril Signaler Posté(e) le 18 avril (modifié) ok, je veux dire que pour récupérer la valeur d'une propriété dans le json d'un device tu dois faire un appel API. voici mon test (remplace juste par l'ID correct chez toi) function QuickApp:TestTempDelay() local deviceID = XXX -- ton id["SALON_TMP"] local dev = api.get("/devices/" .. deviceID) if not dev or not dev.properties or not dev.properties.lastChanged then hub.debug("Test pour jojo", "lastChanged non trouvé dans le JSON du device " .. deviceID) return end local lastChanged = dev.properties.lastChanged local now = os.time() local difference = now - lastChanged hub.debug("Test pour jojo", "Il s'est passé " .. difference .. " secondes depuis la dernière modification de température") end Modifié le 18 avril par fel-x 1
fel-x Posté(e) le 18 avril Signaler Posté(e) le 18 avril et pour le coup tu avais raison les timestamp sont des nombres et on peut faire des calculs directement avec, sans passer par tonumber()
jojo Posté(e) le 18 avril Signaler Posté(e) le 18 avril oui mais ce que fait ta fonction, c'est ce que devrait faire GEA avec l'instruction GEA.add ({"Property-", id["SALON_TMP"], "lastChanged", {"Function", function() return os.time() end}-5*3600}, 0, "", {"Email", "admin", "Valeur de SALON_TMP inchangée depuis 5 heures.\nLe #date# à #time#.", "Valeur inchangée"}) et qui ne veut pas fonctionner, et je ne comprends pas pourquoi. (en pur LUA c'est comme ta proposition, mais alors il faudrait y mettre un settimeout() pour le faire tourner en boucle, hors GEA le fait par défaut toutes les 30 secondes). Et pourquoi je veux faire cela ? Car La température retourneé par mon thermostat tire parfois droit sans que le noeud soit mort. Une simple coupure de son alim le remet d'applond. Et j'aimerais bien en être informé autrement qu'en le voyant par hasard sur DomoCharts.
fel-x Posté(e) le 18 avril Signaler Posté(e) le 18 avril il y a 2 minutes, jojo a dit : oui mais ce que fait ta fonction, c'est ce que devrait faire GEA avec l'instruction GEA.add ({"Property-", id["SALON_TMP"], "lastChanged", {"Function", function() return os.time() end}-5*3600}, 0, "", {"Email", "admin", "Valeur de SALON_TMP inchangée depuis 5 heures.\nLe #date# à #time#.", "Valeur inchangée"}) et qui ne veut pas fonctionner, et je ne comprends pas pourquoi. Comme je le disais, même si tu parviens à récupérer os.time() par GEA, je ne crois pas que ça va fonctionner car GEA ne connait pas la préférence 'lastChanged"; il n'est pas prévu dans le code de GEA qu'il aille puiser cette préférence dans les JSON des devices. C'est certainement possible mais il faut alors demander à @Lazer de l'implémenter pour toi. Ce n'est pas parce qu'une préférence existe et qu'elle est exposée par l'API que GEA peut la lire. Du moins c'est comme ça que je le conçois.
jojo Posté(e) le 18 avril Signaler Posté(e) le 18 avril oui, mais je ne crois pas que GEA a une liste exhaustive des "Property". De plus l'erreur est au niveau de la fonction os.time(), qui quand je supprime le +5*3600, ne me fait pas d'erreur.
fel-x Posté(e) le 18 avril Signaler Posté(e) le 18 avril Attends, je pense que tu dois mettre le calcul dans la fonction car GEA retourne une valeur, mais ne fait pas de calcul lui-même. {"Function", function() return os.time() - 5*3600 end} comme ça la soustraction est faite dans la fonction non ? 1
fel-x Posté(e) le 18 avril Signaler Posté(e) le 18 avril (modifié) il y a 12 minutes, jojo a dit : oui, mais je ne crois pas que GEA a une liste exhaustive des "Property". Si tu dis vrai, alors ça devrait marcher avec {"Property+", id["SALON_TMP"],"lastChanged", {"Function", function() return os.time() - 5*3600 end}... Modifié le 18 avril par fel-x
jojo Posté(e) le 18 avril Signaler Posté(e) le 18 avril il y a 30 minutes, fel-x a dit : Attends, je pense que tu dois mettre le calcul dans la fonction car GEA retourne une valeur, mais ne fait pas de calcul lui-même. {"Function", function() return os.time() - 5*3600 end} comme ça la soustraction est faite dans la fonction non ? très bonne idée, ça passe,mais je ne sais pas le tester car la température change très souvent de 0.1 °C Mais du coup, comme j'ai également des difficultés de concentration pour des choses binaires, je dois mettre "Property+" ou "Property-" avec dans ma fonction <os.time()-5*3600> ou <os.time()+5*3600> ? MERCI de ton aide
fel-x Posté(e) le 18 avril Signaler Posté(e) le 18 avril (modifié) Moi je traduis "if lastChanged < os.time() - 5*3600" par 'lastChanged a eu lieu il y a plus de 5 heures" Donc je dirais d'employer "Property-" puisque la syntaxe GEA explique ceci : "Property-" = Si la valeur de la propriété "lastChanged" du module ... est INFERIEURE à ... Modifié le 18 avril par fel-x 1 1
fel-x Posté(e) le 24 mai Signaler Posté(e) le 24 mai Le 01/03/2026 à 21:39, fel-x a dit : "Monthly" ne fonctionne pas comme prévu @Lazer (et les autres) si jamais ça peut aider pour une prochaine mise à jour, j'ai identifié la cause probable de l'échec de "Monthly" ! Il lui manque isBoolean = true J'ai inséré ça à la ligne 1534 de main.lua (v7.39) et depuis mes conditions basées sur "Monthly" fonctionnent 3
Lazer Posté(e) le 25 mai Signaler Posté(e) le 25 mai Top, bien vu, c'est exactement ça Merci pour le partage
jojo Posté(e) samedi à 11:54 Signaler Posté(e) samedi à 11:54 Bonjour à TOUS. Je souhaite faire ceci : GEA.add({"VariableQA+", id["GESTION_CHAUFFAGE"], "TisunChaudiereSolaireOff", {"Value", id["TISUN_TMP"]}}, c'est à dire, si : la vairableQA "TisunChaudiereSolaireOff" du module id["GESTION_CHAUFFAGE"] est supérieure à la valeur du module id["TISUN_TMP"]. Or la syntaxe GEA prévoit 3 arguments : Citation {"Value" , <id module>, <valeur max>} (idem pour VariableQA) Je souhaiterais donc juste récupérer la valeur du module id["TISUN_TMP"].. Comment faire ?
Lazer Posté(e) samedi à 17:04 Signaler Posté(e) samedi à 17:04 Je pense que la syntaxe telle que tu l'as écrit est OK.
jojo Posté(e) il y a 20 heures Signaler Posté(e) il y a 20 heures je pensais aussi, mais ça ne fonctionne pas et du coup j'ai lu la syntaxe en détail qui dit clairement : que "Value" attend 3 paramètres et qu'il fait un = avec le 3° : cfr exemple Citation -- CONDITIONS : GEA.add( {"Value" , 73, 50}, 30, "", {ACTIONS} ) -- Si la valeur du module 73 est égale à 50 \\ If value of device 73 is equal to 50 Et toit comment fais-tu alors ? P.S. : du coup, j'ai vu une coquille dans la syntaxe : Citation -- SYNTAXE : {"Value" , <id module>, <valeur max>} {"Value+", <id module>, <valeur max>} {"Value-", <id module>, <valeur max>} {"Value!", <id module>, <valeur max>}
Lazer Posté(e) il y a 18 heures Signaler Posté(e) il y a 18 heures Non, ça devrait fonctionner, exemple cette condition que j'ai dans une de mes règles, bon il y a 2 Value imbriqués, mais c'est le second qui importe ici, on ne fait que lire sa valeur, pour la comparer au premier : {"Value+", id["TEMPERATURE_JARDIN"], {"Value", id["TEMPERATURE_CHAMBRE"]}} Note : et ça fonctionne dans les actions, exemple ici pour mémoriser la valeur d'un dimmer dans une variable cache : {"VariableCache", "maVariable", {"Value", id["DIMMER"]}}
jojo Posté(e) il y a 6 heures Signaler Posté(e) il y a 6 heures ok, merci pour les exemples, je refais mes tests
jojo Posté(e) il y a 2 heures Signaler Posté(e) il y a 2 heures ça ne fonctionne pas,et je ne vois pas la cause... règle GEA : GEA.add({"Value+", id["TISUN_TMP"], {"VariableQuickApp", id["GESTION_CHAUFFAGE"], "TisunChaudiereSolaireOff"}}, {{"TurnOff", id["CHAUDIERE_SOLAIRE"]}, {"Email", "admin", "Ordre CHAUDIERE_SOLAIRE OFF\ntempérature ballon Tisun : °C\nlimite : °C.\nle #date# à #time#.", "Ordre CHAUDIERE_SOLAIRE OFF"}}) (j'ai vérifié manuellement les id, et ils sont bons) voici le code du QA GESTION_CHAUFFAGE qui crée/met à jour la variable TisunChaudiereSolaireOff : -- température Chaudière_SolaireON/OFF self:setVariable("TisunChaudiereSolaireOn", Chaud_Solaire_Tmp[Chauf_Maison_Mode][1]) self:setVariable("TisunChaudiereSolaireOff", Chaud_Solaire_Tmp[Chauf_Maison_Mode][2]) et la variable semble bien créée. Les trucs que je trouve étrange : les 2 dernières variables n'ont pas de crayon pour les modifier, alors que la première est également remplie par le code. il dit que ce sont des variables de texte, alors que ce sont des nombres. Je suppose que GEA fait la conversion ... Je sais, ce n'est plus du GEA et ça doit être une bêtise, mais je ne la voit pas ...
Messages recommandés