Aller au contenu
Lazer

Quick App - Gestionnaire d'Événements Automatique - GEA pour HC3

Recommended Posts

GEA

Gestionnaire d’Événements Automatique

Version 7.11 Beta

 

Voici le célèbre GEA de @Steven porté sur Home Center 3.

 

Cette version de GEA est basée sur la version 6.13, les fonctionnalités sont donc identiques, à quelques différences près documentées plus bas.

 

Ce n'est plus une scène, mais un QuickApp.

 

La notion d'instances multiples des scènes n'a plus lieu d'être, car le QuickApp est mono-instance par nature, mais son principe d'exécution asynchrone du code LUA permet d'obtenir le même résultat, à savoir :

- une boucle automatique de détection des événements à intervalle régulier de 30 secondes

- un déclenchement instantané sur événement (avec le paramètre -1 pour la durée)

 

Au sujet des événements, il n'y a plus besoin (et de toute façon il n'est pas possible) de définir des triggers pour le déclenchement. C'était une opération fastidieuse, car il fallait saisir manuellement les ID des modules dans l'en-tête de la scène.

Cette nouvelle version de GEA détecte donc automatiquement les triggers, et surveille les événements via l'API refreshStates.

Actuellement j'ai positionné cet intervalle de surveillance à 100 ms, c'est à dire un dixième de seconde. Ce n'est donc pas de l'instantanéité absolue, mais ça ne l'était de toute façon pas sur les scènes de la HC2, et ça reste inférieur au seuil de perception humain. Pour l'instant cela n'a posé aucun problème de performance lors de mes tests.... on verra ultérieurement s'il y a lieu de faire évoluer cet intervalle.

 

La syntaxe de GEA est strictement identique à celle de la HC2 :

GEA.add( ... )

 

Pour cette raison, ce topic est ouvert uniquement pour les discussions concernant le développement de GEA, les nouvelles fonctionnalités, et les rapports de bugs constatés.

 

Pour les questions sur l'utilisation et la syntaxe de GEA, se reporter au topic unique "Support GEA" où vous trouverez toute l'aide nécessaire :

 

 

En clair :

  • Une règle GEA fonctionne sur HC2, mais ne fonctionne pas sur HC3 => je viens poster ici pour qu'on puisse corriger le bug :)
  • Autrement : je supprimerai les messages sans préavis, j'ai autre chose à faire que de déplacer les messages postés sur le mauvais topic... avis aux contrevenants:police:

 

Le topic de référence concernant la syntaxe de GEA se trouve ici, comme d'habitude :

 

 

 

 

Changements de GEA pour HC3 par rapport à HC2

 

  • Supprimé :
    • "VirtualDevice", "VD"   => remplacé par "QuickApp" et "QA"
    • "SetrunConfigScenario"  => remplacé par "SetRunModeScenario" et "RunModeScene"
    • "RebootHC2"             => remplacé par "RebootHC3"
    • "ShutdownHC2"           => remplacé par "ShutdownHC3"
    • "Alarm"                 => en attendant le développement du QuickApp Alarm
    • "multiAlarm"            => en attendant le développement du QuickApp multiAlarm
    • "setMode"               => remplacé par "ThermostatMode"

    • "setThermostatSetpoint" => remplacé par "CoolingThermostatSetpoint" et "HeatingThermostatSetpoint"

    • "ThermostatLevel"

    • "ThermostatTime"

    • "DebugMessage"

    • "PluginScenario"
  • Ajouté :
    • "QuickApp"       (alias identique "QA")                 : {"QuickApp", <id_module>, <méthode>, [paramètres]}
    • "DeviceIcon"     (alias identique "CurrentIcon")        : {"CurrentIcon", <id_module>, <no_icon>}
    • "Color"          (alias identique "RGB")                : {"Color", <id_module>, <intensité_rouge>, <intensité_vert>, <intensité_bleu>, <intensité_blanc>}

    • "RunModeScene"   (alias identique "SetRunModeScenario") : {"RunModeScene", <id_scene>} | {"SetRunModeScenario", <id_scene>, <run_valeur>} - <run_valeur> : "manual" | "automatic"
    • "isSceneRunning" (alias identique "RunningScene")       : {"isSceneRunning", <id_scene>}
    • "ThermostatMode"                                        : {"ThermostatMode", <id_thermostat>, <mode>}
    • "ThermostatFanMode"                                     : {"ThermostatFanMode", <id_thermostat>, <fan>}
    • "CoolingThermostatSetpoint"                             : {"CoolingThermostatSetpoint", <id_thermostat>, <valeur>}
    • "HeatingThermostatSetpoint"                             : {"HeatingThermostatSetpoint", <id_thermostat>, <valeur>}
    • "Profile"                                               : {"Profile", <id_profil>}
    • "RebootHC3"                                             : {"RebootHC3"}
    • "SuspendHC3"                                            : {"SuspendHC3"}
    • "ShutdownHC3"                                           : {"ShutdownHC3"}
  • Modifié :
    • "Armed", "Disarmed", "setArmed", "setDisarmed" => Prend l'ID de la zone
  • Amélioré :
    • GEA.portables = {123, "Nokia 3310"} : ID du mobile, ou nom du mobile
    • "Email" : ID du mobile, ou nom de l'utilisateur : {"Email", <id_user>, <"Message du mail">, <"Sujet du mail">} | {"Email", <id_user>, <"Message du mail">}

 

 

Note : les commandes de Reboot, Suspend, et Shutdown ne fonctionnent plus avec le firmware 5.050.13...

 

 

 

Installation

 

Importer le fichier fqa ci-joint.

 

Ne modifier que le contenu de config pour vos propres règles :

 

Screenshot-QuickApp-GEA-HC3-config.thumb.png.17968721af9e78eaa9500645fd3770b1.png

 


 

Mise à jour

 

Copier/coller simplement tout le contenu du fichier LUA téléchargé dans le fichier main du QuickApp.

 

 

Téléchargement

 

 

Modifié par Lazer
  • Like 7
  • Thanks 1

Partager ce message


Lien à poster
Partager sur d’autres sites

salut

 

j'ai une règle GEA qui fonctionne sous HC2 mai pas HC3

 

telegram = {name="Telegram",
                    keepValues = true,
                    control=function(id) return type(fibaro:isSceneEnabled(id)) ~= nil end,
                    action=function(id, args) if (type(id) ~= "table") then id = {id} end
                      for i=1, #id do fibaro:startScene(id[i], json.decode(GEA.getMessage(json.encode(args)))) end
                    end
      },

 Ce code GEA dépend d'une scène 

 

--[[
%% properties
%% globals
--]]



function url_encode(str)
if (str) then
     str = string.gsub (str, "\n", "\r\n")
     str = string.gsub (str, "([^%w %-%_%.%~])",
       function (c) return string.format ("%%%02X", string.byte(c)) end)
   str = string.gsub (str, " ", "+")
end
    return str    
end

function urldecode(s)
  return string.gsub(s, '%%(%x%x)',
    function (hex) return string.char(tonumber(hex,16)) end)
end

function urldecodeTable(tab)
  for k,v in pairs(tab) do
    if type(v) == "string" then
      tab[k] = urldecode(v)
    elseif type(v) == "table" then
      urldecodeTable(v)
    end
  end
end

-- ----------------------------------------------------------
  -- Remplacement des caractères spéciaux
  -- ----------------------------------------------------------
  ReplaceChar=function(s)
    return s:gsub("à ", "à"):gsub("é", "é"):gsub("Ã", "à"):gsub("è", "è"):gsub("î", "î"):gsub("ô", "ô"):gsub("û", "û"):gsub("ù", "ù"):gsub("ê", "ê"):gsub("â","â"):gsub(" ' ", "'")
  end


local debug = true;
local token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
local chat_id = "xxxxxxxxxxxxx"
local url = "https://api.telegram.org/bot"..token.."/sendMessage?chat_id="..chat_id.."&text="

local function log(str) if debug then fibaro:debug(str); end; end
local function errorlog(str) fibaro:debug("<font color='red'>"..str.."</font>"); end

local selfhttp = net.HTTPClient({timeout=2000})

local msg = "<empty>";

if fibaro:args() == nil then
    fibaro:debug("no args");
    return
else
    jMsg = fibaro:args()
    urldecodeTable(jMsg)
    if jMsg[1] == nil or jMsg[1] == "" then
        fibaro:debug("no msg");
        return
    end
    msg = jMsg[1];
  msg = ReplaceChar(msg)
end

url = url .. url_encode(msg);
log(url);

selfhttp:request(url, {
  options={
    headers = selfhttp.controlHeaders,
    data = requestBody,
    method = 'GET',
    timeout = 5000
  },
  success = function(status)
    local result = json.decode(status.data);
    if result.ok == true then
      log("successful");
    else
      errorlog("failed");
      log(status.data);
    end
  end,
  error = function(error)
    errorlog("ERROR")
    log(error)
  end
})

sous GEA

 

--- 108 est ID de la scene LUA
GEA.add(true, 0, "", {  {"Telegram", 108, { "Activation de GEA " }} } )


alors j'ai une erreur 

if fibaro:args() == nil then

, je ne sais pas si ça viens de GEA ou du code  

[20.10.2020] [23:15:15] [ERROR] [SCENE108]: (load):53: attempt to call a nil value (method 'args')

 

 

 

Modifié par 971jmd

Partager ce message


Lien à poster
Partager sur d’autres sites

Waouw merci @Lazer

Me manque plus que la HC3 :-)

Vais tenter de mettre à jour le fichier syntaxe au plus vite. 

 

Est ce que GEA.OPTIONS EST DNCIRE OK ? Pepite mode fainenant qui n'a pas encore lu le code :-)

 

Est ce que fiabaro args existe sous hc3 ? Et attention l'appel des fonctions n'est plus fibaro.args() avec la hc3. Ta scene doit être modifiee

Partager ce message


Lien à poster
Partager sur d’autres sites

@pepite

Je pensais mettre à jour le fichier Syntaxe, mais si tu es motivé, je te laisse faire ;)

 

Normalement GEA.options est toujours OK : à configurer dans le fonction config() comme avant.

Cependant je ne l'ai pas testé... si tu as un exemple concret d'option personnalisée à me donner, je le testerai.

 

 

Là où ça se complique réellement, c'est que fibaro:args() n'existe pas sur HC3, et globalement tout ce qui touche aux scènes.

Clairement, les scènes sur HC3 n'ont aucun intérêt, à part pour faire 2 ou 3 clics en mode bloc.

Même quand on écris une scène en LUA, il est impossible de lui passer des arguments (ou alors je n'ai pas trouvé.... et ce n'est pas documenté). Pour moi cette fonctionnalité n'existe plus.
Donc pour tout ce qui est écriture de code LUA, il faut utiliser les QuickApps et abandonner les scènes. C'est mon avis.

 

En QuickApp, au contraire, ça devient très simple. Il suffit d'écrire la fonction de son choix, avec tous les arguments nécessaires. Sachant qu'on peut appeler n'importe quelle fonction publique d'un QA depuis un autre QA, c'est juste parfait.

fibaro.call(ID_du_QA, "nom_de_la_fonction", argument1, argument2, ...)

 

 

@971jmd

Ton bloc telegram = {name="Telegram", ... tu le positionnes où dans ton code ?

Là je ne vois pas.
Comme je viens de dire à @pepite, normalement il est censé être dans la fonction options()

Et donc il devrait commencer par GEA.options.telegram = {...} sinon je ne vois pas comment il pourrait le prendre en compte.

J'espère juste que tu ne modifies pas directement le code de GEA, il ne faut surtout pas, sinon tu ne pourras plus installer les mises à jours.

J'ai justement séparé exprès le code GEA du code utilisateur dans 2 fichiers distincts.

 

Concernant ta scène, en vertu de ce que j'ai répondu à @pepite tu comprends bien que ce n'est plus possible.

Il te suffit donc de mettre ton code LUA dans une fonction d'un QuickApp, puis il suffit d'appeler cette fonction depuis GEA.

Pour simplifier, dans ton option telegram, au lieu d'appeler fibaro:startScene(), tu utiliseras fibaro.call()

 

PS : vu que tu me présentes directement un cas compliqué, quelque part ça me rassure, ça veut dire que toutes les règles usuelles ont fonctionné du premier coup chez toi ? :)

 

  • Like 3

Partager ce message


Lien à poster
Partager sur d’autres sites

Ça va relancer la vente de hc3

Maintenant que GEA est disponible

 

Envoyé de mon BLA-L29 en utilisant Tapatalk

 

 

 

 

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

 

 

j'ai l'erreur

Ligne 53 du code LUA

 

Modifié par 971jmd

Partager ce message


Lien à poster
Partager sur d’autres sites

telegram = {name="Telegram",....

 

Est placer dans MAIN du QA GEA  ligne 1342

 

gea_7_telegram.zip

 

Modifié par 971jmd

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 3 heures, Lazer a dit :

Je pensais mettre à jour le fichier Syntaxe, mais si tu es motivé, je te laisse faire

Je peux au moins faire ca, avec tout ce que tu as fait pour GEA.

MAis bon, tu sais que je n'ai pas de HC3 alors je risque de te solliciter ;-)

Partager ce message


Lien à poster
Partager sur d’autres sites

@971jmd non désolé ce n'est pas la bonne méthode, ni sur HC3, ni sur HC2 d'ailleurs

Il ne faut pas toucher au code de GEA

Ton option personnalisée doit être dans config() comme expliqué dans mon message précédent

 

Par ailleurs ton numéro de ligne ne sert à rien, à partir du moment où tu as modifié le code de GEA, impossible de comprendre/reproduire chez moi.

 

Commence donc par remettre ta config au propre, tu ne modifies que le fichier config du QuickApp comme expliqué dans le tuto, dans les fonctions config() et setEvents()

 

De toute façon, il faut que tu commences par convertir ta scène dans un QuickApp distinct, qu'on pourra appeler par sa fonction, comme je le disais là aussi dans mon message précédent.

 

 

@pepite : merci :)

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Pourtant ça toujours fonctionné avec la HC2

 

j'ai une autre fonctionne qui est dans GEA depuis un moment (ligne 1308) qui fonctionne très bien avec la HC3

gea_7_telegram.zip

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai toujours grillé les feux rouges, et je suis toujours en vie. Est-ce une raison pour continuer ?

Désolé pour le parallèle douteux, mais si tu veux que je t'aide, fait au moins l'effort de respecter la règle... qui est simple en plus.. et pour ton propre bien.

 

Désolé je n'ai pas le temps, et aucune envie, d'auditer ton code personnalisé. C'est in-maintenable avec les prochaines mises à jours.

  • Like 1
  • Haha 1

Partager ce message


Lien à poster
Partager sur d’autres sites


Désolé ce n'est est pas le but :wacko:

 

Comme j'ai vu qu'il y avait une règle que nous avons développée en assemble (protection),  j'ai pensé que je pouvais ajouter la fonction Telegram 

---GEA.add( condition , -1,   "",{ {"Protection", id["SUSPLMAPEENFANT"], "local", "on"} })
---GEA.add( condition , -1,   "",{ {"Protection", id["SUSPLMAPEENFANT"], "local", "off"}})

 

ok pour une prochaine version avec telegram où on n'aura qu'a placée notre TOKEN et CHAT_ID depuis config:rolleyes: 

Partager ce message


Lien à poster
Partager sur d’autres sites

Mise à part la grillade de feux rouge ;)

 

J'ai une fonction (sceneActivationEvent) qui ne semble pas encor prise en compte dans GEA 7 HC3

 

Modifié par 971jmd

Partager ce message


Lien à poster
Partager sur d’autres sites

Dans les souvenirs, "protection" a ete integree dans les derniered verdions de GEA6.XX, c'est pour cela qu elle fonctionne avec GEA7 :-)

Envoyé de mon BND-L21 en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

"Protection" y est bien, mais je ne l'ai pas testé, donc si tu le fais tu me diras si c'est OK ou non.

D'ailleurs je pense que tu devrais commencer par tester les fonctionnalités standard de GEA pour te faire la main, et valider le bon/mauvais fonctionnement de cette version que je qualifie encore de Beta.

 

sceneActivationEvent fonctionne, je l'ai testé.

Tu peux partager ton code, et éventuellement le message d'erreur ?

 

Ensuite, "Telegram" n'est pas une option standard de GEA.

Il s'agit d'un usage particulier dont tu as le besoin.

Et je n'ai pas de compte Télégram pour tester....

Donc le process est simple : tu développe ton option en utilisant un QuickApp et en mettant ta règle dans le fichier "config" (et non pas "main"), et si ça marche bien et que la demande des utilisateurs est là, on pourra l'intégrer dans le code standard de GEA.

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Pour  "Protection" visiblement il fonctionne bien

 

pour sceneActivationEvent je l'utilise avec le code suivant :

 

---- condition-----
{
    conditions = { {
          id = 87,
        isTrigger = true,
        operator = "anyValue",
        property = "sceneActivationEvent",
        type = "device",
        value = true,
              }
                  
      },
    operator = "any"
  }


----ACTIONS-------

local sa = tonumber(json.encode(sourceTrigger.value))
print("id:"..sa)



---BOUTON 1 et 2
if (sa == 1) then fibaro.call(91, 'toggle') end
if (sa == 2) then fibaro.call(89, 'toggle') end

etc
etc

 

Modifié par 971jmd

Partager ce message


Lien à poster
Partager sur d’autres sites

Hum, encore une fois, je ne vois pas bien où tu positionnes ton code LUA... .Je ne vois rien qui ressemble à des règles GEA.add()

Toi t'es encore en train de jouer à l'apprenti sorcier ;)

 

Il n'y a vraiment rien de compliqué, rien ne change par rapport à GEA pour HC2, sauf qu'il n'y a plus besoin de spécifier les triggers (déclencheurs de scènes)... Justement parce que ce n'est pas une scène !

 

D'ailleurs à ce sujet je me demande bien pourquoi tu mets des conditions = {...}

 

Bref, rien de compliqué, mais là tu ajoutes de la complexité tout seul ;)

 

 

PS : merci pour le retour sur le fonctionnement de "Protection" :)

 

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai testé   onoff

GEA.add({"CentralSceneEvent", 143, 1, "Pressed"},-1, "1 click", {{"OnOff", 21}} )

et ça fonctionne bien (onoff)

 

mai pas 

GEA.add( {"OnOff!", 21, ""}, 30, "Le module 21 est #value#")

 

et j'ai en boucle le message ci-dessous

[21.10.2020] [14:43:07] [DEBUG] [QA_GEA_211]: ... vérification en cours #2 @60s...
[21.10.2020] [14:43:07] [DEBUG] [QA_GEA_211]: @60s [Validation] #2 Démarrage box
[21.10.2020] [14:43:07] [DEBUG] [QA_GEA_211]: @60s [Validation] #3 Détection nouvelle version
[21.10.2020] [14:43:07] [DEBUG] [QA_GEA_211]: @60s [Validation] #4 Détection nouvelle version beta
[21.10.2020] [14:43:37] [DEBUG] [QA_GEA_211]: ... vérification en cours #3 @90s...
[21.10.2020] [14:43:37] [DEBUG] [QA_GEA_211]: @90s [Validation] #2 Démarrage box
[21.10.2020] [14:43:37] [DEBUG] [QA_GEA_211]: @90s [Validation] #3 Détection nouvelle version
[21.10.2020] [14:43:37] [DEBUG] [QA_GEA_211]: @90s [Validation] #4 Détection nouvelle version beta
[21.10.2020] [14:44:00] [ERROR] [QUICKAPP160]: QuickApp crashed
[21.10.2020] [14:44:00] [ERROR] [QUICKAPP160]: main.lua:18: attempt to index a nil value (global 'self')
[21.10.2020] [14:44:07] [DEBUG] [QA_GEA_211]: ... vérification en cours #4 @120s...
[21.10.2020] [14:44:07] [DEBUG] [QA_GEA_211]: @120s [Validation] #2 Démarrage box
[21.10.2020] [14:44:07] [DEBUG] [QA_GEA_211]: @120s [Validation] #3 Détection nouvelle version
[21.10.2020] [14:44:07] [DEBUG] [QA_GEA_211]: @120s [Validation] #4 Détection nouvelle version beta
[21.10.2020] [14:44:37] [DEBUG] [QA_GEA_211]: ... vérification en cours #5 @150s...
[21.10.2020] [14:44:37] [DEBUG] [QA_GEA_211]: @150s [Validation] #2 Démarrage box
[21.10.2020] [14:44:37] [DEBUG] [QA_GEA_211]: @150s [Validation] #3 Détection nouvelle version
[21.10.2020] [14:44:37] [DEBUG] [QA_GEA_211]: @150s [Validation] #4 Détection nouvelle version beta
[21.10.2020] [14:45:00] [ERROR] [QUICKAPP160]: QuickApp crashed
[21.10.2020] [14:45:00] [ERROR] [QUICKAPP160]: main.lua:18: attempt to index a nil value (global 'self')

 

Modifié par 971jmd

Partager ce message


Lien à poster
Partager sur d’autres sites

OK, mais euh.... main.lua => ligne 18 => c'est du commentaire, donc impossible d'avoir un crash LUA sur cette ligne là
Remet le code officiel que j'ai partagé STP, ensuite relance ton test, et dis moi sur quelle ligne apparait réellement l'erreur.

Partager ce message


Lien à poster
Partager sur d’autres sites

j'ai supprimée QA GEA et Réinstallée QA GEA

 

et colée le code ; 

GEA.add( {"OnOff!", 21, ""}, 30, "Le module 21 est #value#")

 

[21.10.2020] [15:18:30] [ERROR] [QUICKAPP212]: QuickApp crashed
[21.10.2020] [15:18:30] [ERROR] [QUICKAPP212]: main.lua:1718: bad argument #1 to 'lower' (string expected, got boolean)
[21.10.2020] [15:18:56] [ERROR] [QUICKAPP212]: QuickApp crashed
[21.10.2020] [15:18:56] [ERROR] [QUICKAPP212]: main.lua:1718: bad argument #1 to 'lower' (string expected, got boolean)
[21.10.2020] [15:19:01] [ERROR] [QUICKAPP212]: QuickApp crashed
[21.10.2020] [15:19:01] [ERROR] [QUICKAPP212]: main.lua:1718: bad argument #1 to 'lower' (string expected, got boolean)
[21.10.2020] [15:20:01] [ERROR] [QUICKAPP212]: QuickApp crashed
[21.10.2020] [15:20:01] [ERROR] [QUICKAPP212]: main.lua:1718: bad argument #1 to 'lower' (string expected, got boolean)
[21.10.2020] [15:21:02] [ERROR] [QUICKAPP212]: QuickApp crashed
[21.10.2020] [15:21:02] [ERROR] [QUICKAPP212]: main.lua:1718: bad argument #1 to 'lower' (string expected, got boolean)
[21.10.2020] [15:22:01] [ERROR] [QUICKAPP212]: QuickApp crashed
[21.10.2020] [15:22:01] [ERROR] [QUICKAPP212]: main.lua:1718: bad argument #1 to 'lower' (string expected, got boolean)

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Nickel, voici la version 7.01 avec ce bug corrigé.

Par contre je ne m'explique pas.... je pense que ce bug devait également exister avec GEA v6 sur HC2.

 

PS : ce n'est pas le QuickApp complet, juste le code du fichier main à copier/coller à la place du tiens. Ainsi, cela ne touche pas à ton fichier config qui contient tes règles utilisateurs.

 

GEA v7.01.lua

Partager ce message


Lien à poster
Partager sur d’autres sites

autre chose qui ne fonctionne pas bien

 

le ID 98 s'ouvre main pas le 95

GEA.add( {"SceneActivation"873}, -1"", {{"Open"9895}})
 
si j'inverse
 
le ID 95 s'ouvre main pas le 98
GEA.add( {"SceneActivation"873}, -1"", {{"Open"9598}})
 
 

Partager ce message


Lien à poster
Partager sur d’autres sites

pareille pour le STOP

GEA.add( {"SceneActivation"875}, -1"", {{"Stop"9598}})

Partager ce message


Lien à poster
Partager sur d’autres sites

×