Aller au contenu

Messages recommandés

Posté(e) (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é par fel-x
  • Like 1
Posté(e)

et pour le coup tu avais raison les timestamp sont des nombres et on peut faire des calculs directement avec, sans passer par tonumber()

Posté(e)

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.

Posté(e)
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.

Posté(e)

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.

Posté(e)

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 ?

  • Thanks 1
Posté(e) (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é par fel-x
Posté(e)
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

Posté(e) (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 à ...

 

 :D

Modifié par fel-x
  • Like 1
  • Thanks 1
  • 1 mois après...
Posté(e)
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 :60:

 

  • Like 3
  • 1 mois après...
Posté(e)

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 ?

Posté(e)

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>}

 

 

Posté(e)

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"]}}

 

 

Posté(e)

ç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.

image.thumb.png.6e84c3d670252dbc731e65538c2c11d2.png

Les trucs que je trouve étrange :

  1. les 2 dernières variables n'ont pas de crayon pour les modifier, alors que la première est également remplie par le code.
  2. 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 ...

×
×
  • Créer...