Aller au contenu

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


Lazer

Messages recommandés

QuickApp "GEA Alarm" lié à GEA

 

Screenshot-QuickApp-GEA-Alarme.png.db762b2a413d0a33267b6fbb50caa980.png
 

Ce QuickApp Alarme pour HC3 remplace les modules virtuels Alarme de @Steven et MultiAlarme de @drboss sur la HC2.

 

Il faut importer autant de fois le QuickApp que nécessaire, et il permet de programmer un réveil simple ou des réveils multiples :

 

Screenshot-QuickApp-GEA-Alarme-Simple.png.3b7fa0a92977c890252a7a3d1286d141.png

 

Exemple avec horaires différents pour la semaine et le week-end :

 

Screenshot-QuickApp-GEA-Alarme-Multiple.png.409cab2a4938f6e7391697a3c5886f9b.png

 

On peut ainsi programmer une semaines complète avec 7 horaires différents si on le souhaite.

Cela permet de modifier à tout instant l'heure des scénarios depuis le QuickApp sans avoir à modifier la configuration de GEA, simplement depuis l'interface Web ou l'application mobile.

 

Le QuickApp fonctionne ainsi :

  • H+ / H- = Ajoute / enlève une heure
  • [ ] = désactive l'heure
  • M+ / M- =  ajoute/enlève une minute
  • Lu, Ma, Me, Je, Ve, Sa, Di = Active ou désactive le jours en question
  • Choix Alarme : permet de sélectionner le réveil à régler

 

Le choix du nombre de réveils se fait en modifiant la variable "Nombre_Alarme" dans le QuickApp :

(ne pas toucher aux autres variables _HeureX et _JoursX situées en dessous, elles seront automatiquement créées ainsi que les labels)

 

Screenshot-QuickApp-GEA-Alarme-Variables.thumb.png.4159bd47417858ea9ac50e44398b5eca.png

 

 

Utilisation dans les scénarios GEA :

-- Syntaxe :
{"Alarm", <id_qa>}              -- Vérifie si la période (jour et heure) configurée sur n'importe quelle alarme de GEA_Alarm est atteinte
{"Alarm", <id_qa>, <id_alarme>} -- Vérifie si la période (jour et heure) configurée sur l'alarme spécifiée de GEA_Alarm est atteinte

-- Exemples :
GEA.add( {"Alarm", id["QA_ALARM"]}   , 0, "Debout fainéant", {{"TurnOn", id["LUMIERE"]}, {"Open", id["VOLET"]}})
GEA.add( {"Alarm", id["QA_ALARM"], 2}, 0, "Debout fainéant", {{"TurnOn", id["LUMIERE"]}, {"QuickApp", id["PLAYER"], "play"}})

id["QA_ALARM"] est l'identifiant du QuickApp GEA Alarme

Il est possible d'avoir plusieurs GEA Alarm puisque chacun est identifié par son... identifiant !

 

Astuce : on peut modifier les programmations horaires depuis GEA à l'aide de la fonction setTime() :

-- Réglage de l'heure de l'alarme n°2 sur 22h22 :
GEA.add( {CONDITION}, 30, "", {"QuickApp", id["QA_ALARM"], "setTime", 2, "22:22"})

-- Désactivation de l'alarme n°2 :
GEA.add( {CONDITION}, 30, "", {"QuickApp", id["QA_ALARM"], "setTime", 2, "--:--"})

 

 

Icones :

 

Le QuickApp est de type "binary sensor", ainsi on peut configurer 2 icônes pour identifier d'un coup d’œil si un réveil est actif (= horaire programmé) ou non :

 

  • GEA_Alarm_Red.png
  • GEA_Alarm_Green.png
  • GEA_Alarm_NB.png

 

 

Téléchargement 

 

 

 

Modifié par Lazer
Lien vers le commentaire
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
Lien vers le commentaire
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

Lien vers le commentaire
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
Lien vers le commentaire
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 ;-)

Lien vers le commentaire
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 :)

 

Lien vers le commentaire
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
Lien vers le commentaire
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: 

Lien vers le commentaire
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.

 

Lien vers le commentaire
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
Lien vers le commentaire
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" :)

 

Lien vers le commentaire
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
Lien vers le commentaire
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.

Lien vers le commentaire
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)

 

Lien vers le commentaire
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

Lien vers le commentaire
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}})
 
 
Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...