Aller au contenu

Messages recommandés

Posté(e)

Normal, en plus la coloration syntaxique te montre bien qu'il y a un souci.... 156_détecteur, c'est quoi ce truc là ? Je suppose que tu voulais mettre seulement 156 ?

Idem pour 162

 

Sinon si tu veux utiliser du texte à la place des ID, ce qui est plus parlant, il faut définir le tableau id et l'utiliser ainsi (en plus il est déjà dans ton exemple) :

	local id = {
		DETECTEUR = 156,
		LUMIERE = 162,
	}

	GEA.add(id["DETECTEUR"], -1, "", {"TurnOn", id["LUMIERE"]})

Ainsi c'est plus parlant, surtout quand tu as beaucoup de règles.

 

PS : attention aux majuscules/minuscules, il faut être très rigoureux, l'ordinateur fait la différence.

 

Posté(e)
Bonjour,
Je voudrais intégrer la gestion de ma piscine dans GEA, mais je bute déjà.
Pour bien faire je dois lancer un cycle court de filtration pour récupérer la température réelle de l'eau, la sonde ne se trouvant pas au niveau du bassin, mais sur le filtre.
J'ai une fonction pour le cycle court, mais je n'arrive pas à récupérer la valeur de la température pour l'utiliser comme déclencheur dans GEA
et ce n'est que le début :(.
 
Au final, voici le fonctionnement voulu:
 
Mode "HIVERS":
si Température Eau>= 5°: (Contrôle toute les 30 min)
1 ou 2 cycle de filtration par jour (de 2 ou 3 heures)
si Température Eau < 5 
mise en route de la Pompe à chaleur et filtration
 
Mode "ETE"
si Température eau>= Consigne: (Contrôle toute les 30 min)
2 cycles de filtration par jour (de 4 ou 6 heures)
Si Température Eau < Consigne
mise en route de la Filtration et de la Pompe à chaleur jusqu'à Eau>Consigne
 
Je compte sur vous pour vos idées, vos conseils ou une solution. Je débute tout juste dans ce domaine et je galère bien :)
Voici le début de mon code:
function config(GEA)
	-- ===================================================
	-- Configuration générale
	-- ===================================================
	GEA.debug = true
	GEA.portables = {26}
    GEA.checkEvery = 10                                             -- Pour Tests, à passer à 30 min
end

function Prise_Temp()
    local Filtre = fibaro.getValue(309, "value")
	if not Filtre then 
        fibaro.call(309, "turnOn")
        print("mise en route du Filtre pour prise de T°")           -- Pour Debug, à supprimer
            fibaro.setTimeout(10000, function()                     -- Pour Tests, à passer à 3 min
            Temp_Pisc = fibaro.getValue(313, "value")
            print ("T° Piscine :", Temp_Pisc)                       -- Pour Debug, à supprimer
			return Temp_Pisc
			end)
	else
		    print("Le Filtre est dèjà en route pour prise de T°")   -- Pour Debug, à supprimer
            Temp_Pisc = fibaro.getValue(313, "value")
            print ("T° Piscine :", Temp_Pisc)                       -- Pour Debug, à supprimer
			return Temp_Pisc
	end
end

function setEvents()
	-- ==========================================================
	-- Règles utilisateur
	-- ==========================================================
	local id = {
    Temp_Eau_Pisc =313,
    P_A_C =310,
    Filtration =309,
	}
    --Temp_Pisc=Prise_Temp()
    GEA.add(true, 0, "Démarrage de GEA PISCINE le #date# à #time#", nil, "Démarrage GEA-Picine")
    GEA.add(true, 0 , "", {{"repeat"}, {"Function", function() return Prise_Temp() end}} )


end

 

Posté(e)

C'est fait et ca fonctionne.

Par contre au fur et à mesure que des lignes vont etre ajouté cela va devenir un livre et pour trouver une erreur , modifié une commande ......ca va devenir compliqué, je me trompe peut-etre.

 

 

gea lumiere.JPG

Posté(e)

Alors tu peux ajouter un autre paramètre à la fonction GEA.add ce qui permet de s'y retrouver plus facilement dans les logs.

	GEA.add(id["DETECTEUR"], -1, "", {"TurnOn", id["LUMIERE"]}, "Allumage auto lumière après mouvement")

Comme tu peux le voir, c'est déjà le cas dans les 4 règles d'exemple que tu as conservé.

 

 

Quand tu as une erreur, le plus simple pour débuter c'est de supprimer toutes les autres lignes pour ne conserver que la ligne en cours d'écriture. Ainsi le débogage sera facilité, les seuls messages affichés dans le log seront ceux qui t'intéressent, tu ne seras pas pollué par les autres règles.

En arrive sans problème à gérer des centaines de règles avec GEA, il faut juste un peu d'organisation, regrouper les règles ensembles par thématique, etc.

 

 

@Eric_95430 euh.... mais ça m'a l'air 1000x trop compliqué tout ça.

Utiliser "Function" OK, mais attention, faut déjà une bonne maitrise de GEA et du LUA avant de se lancer là dedans.

Je ne sais pas trop ce que tu cherches à faire avec ta fonction, mais sans même chercher à la comprendre, quand je vois un gros setTimeout() en plein milieu, ça ne peut pas fonctionner.... ne pas oublier que GEA vérifie toutes les règles de manière séquentielle (de haut en bas) toutes les 30 secondes.

Ton setTimeout() est asynchrone, tu ne maitrises absolument pas quand il va s'exécuter.

  • Thanks 1
Posté(e)

J'ai préféré mettre un titre là où c'est surligné, comme ca je sais où ca commence et où ca termine.

Merci quand meme.

Maintenant je vais réfléchir à un mode d'extinction sans gène.

gea lumiere.JPG

Posté(e)

Il est vrai que le "gros setTimeout()" n'ai pas judicieux, mais j'ai pas d'autres idées.

j'ai tenté de tout faire sous GEA mais c'était pire, je me suis perdu tout seul.

La gestion de cette piscine me paraissait simple, mais en fait, pas si simple pour un débutant.

 

J'ai réussi à lancer ma fonction et récupérer la Température comme ceci:

 

local H_G = 5           -- Température Hors Gel

-- Lancement de la fonction Prise_Temp() et stockage dans le variable 'Temp_Pisc'

GEA.add(true, 0 , "", {{"repeat"},{"VariableCache", "Temp_Pisc", {"Function", function() return Prise_Temp() end}}})

-- Si Temp_Pisc < H_G passage en mode hors-Gel

GEA.add({"VariableCache-", "Temp_Pisc", H_G},10,"Je passe en Hors Gel T° Eau: #value#",{"repeat"},"Passage en Mode Hors-Gel" )

 

Posté(e)

@Guizmo attention du définies ton tableau id 2 fois, il faut le déclarer une seule fois, avant toutes les règles (donc juste au début de la fonction setEvents)... bref comme dans l'exemple.

 

@Eric_95430

Mais ta température, c'est un module ? Donc tu as juste à utiliser la valeur de ce module, je ne comprends pas ta logique avec ta fonction (et je n'ai aucune intention de comprendre pour être honete, c'est 1000x trop complexe)

 

Comme je dis toujours, commencez avec des choses simples, ultra basiques, puis ajouter au fur et à mesure. Partir dès le début avec un truc complexe, ça ne marchera jamais.

Posté(e)

Bonsoir,

 

En espérant que ce message puisse vous aider ;) 

 

Pour @Guizmo 

Un petit exemple de ce que j'ai fait.

-- Allume la lumière du garage si det garage = true
    GEA.add({id["DetMouv_Garage"]}, -1,  "", {"turnOn", id["Eclairage_Garage"]})
-- Eteint la lumière du garage au bout de 3min si pas de mouvement
   GEA.add({"Value", id["DetMouv_Garage"], "false"}, 3*60, "", {"turnOff",id["Eclairage_Garage"]})

Pour @Eric_95430 

Je suis d'accord avec @Lazer. Tu cherches à mon sens à faire qqc de beaucoup trop complexe.

Voici ce que j'ai fait pour ma part (qui reste bien sur à compléter / modifier / améliorer) Domotiser sa piscine :60:

  • Like 3
Posté(e)

Salut. J'ai un doute sur le fonctionnement de ces lignes. La première arrête ma clim si au moins une ouverture est détectée, la seconde relancera la clim si toutes les ouvertures sont fermées.

Pouvez-vous me dire si il y a quelque chose qui cloche? merci.

	-- Arrêt de la climatisation si la baie vitrée droite ou la baie vitrée gauche ou la fenêtre du salon ou la fenêtre de la cuisine  ou la porte d'entrée est ouverte
GEA.add({"Or", {"Value",id["BAIE_VITREE_SALON_DROITE"],true}, {"Value",id["BAIE_VITREE_SALON_GAUCHE"],true},{"Value",id["FENETRE_SALON"],true},{"Value",id["FENETRE_CUISINE"],true},{"Value",id["PORTE_ENTREE"],true}}, 30, "",{"ThermostatMode", id["CLIM_SALON"], "Off"}) -- Arrêt
    
    -- Relance Climatisation en Mode Automatique
    GEA.add({"Or", {"Value",id["BAIE_VITREE_SALON_DROITE"],false}, {"Value",id["BAIE_VITREE_SALON_GAUCHE"],false},{"Value",id["FENETRE_SALON"],false},{"Value",id["FENETRE_CUISINE"],false},{"Value",id["PORTE_ENTREE"],false}}, 30, "", {{"Inverse"},{"RestartTask",{climsalon1,climsalon2,climsalon3,climsalon4,climsalon5,climsalon6,climsalon7,climsalon8,climsalon9,climsalon10,climsalon11,climsalon12,climsalon13,climsalon14,climsalon15,climsalon16,climsalon17,climsalon18,climsalon19,climsalon20,climsalon21,climsalon22,climsalon23,climsalon24,climsalon25,climsalon26,climsalon27}}}) -- Relance

 

Posté(e)

Il faut enlever le "Or" dans la seconde règle, non ? Parce que tu veux une condition "Et" en fait (qui est la condition booléenne par défaut quand on met plusieurs conditions, il faut qu'elles soient toutes valides)

  • Thanks 1
Posté(e)

Hello, I am wondering if it is possible to run different GEA devices on my HC3. For example a GEA device for the kitchen, a separate GEA device for the living room etc etc.?

 

And I am further struggling with the folllowing (which I am nor sure is even possible or work), defining and combining local:

 

local Home = {"Global", "HomeStatus", "Home"}
local Away = {"Global", "HomeStatus", "Away"}

local Asleep = {"Global", "PresenceStatus", "Asleep"}
local Awake = {"Global", "PresenceStatus", "Awake"}

 

local HomeAwake = {Home, Awake} and how to apply this in the following code:


GEA.add({
{"Global", "HomeStatus", "Home"}, 
{"Global", "PresenceStatus", "Awake"}},
1, "", 
{{"Hue", id["Snk_Lght"], "bri", "30"},
{"Hue", id["Ktchn_Dry"], "bri", "50"},
{"Hue", id["Ktchn_Smll"], "bri", "50"}})

 

Thank you :)

 

Posté(e) (modifié)

I confirm you can have multiple independent GEA instances, each one runs in it's own QuickApp.

 

This rule alone looks OK :

GEA.add({
{"Global", "HomeStatus", "Home"}, 
{"Global", "PresenceStatus", "Awake"}},
1, "", 
{{"Hue", id["Snk_Lght"], "bri", "30"},
{"Hue", id["Ktchn_Dry"], "bri", "50"},
{"Hue", id["Ktchn_Smll"], "bri", "50"}})

Which should be the same as :

local Home = {"Global", "HomeStatus", "Home"}
local Away = {"Global", "HomeStatus", "Away"}
local Asleep = {"Global", "PresenceStatus", "Asleep"}
local Awake = {"Global", "PresenceStatus", "Awake"}

local HomeAwake = {Home, Awake}

GEA.add(HomeAwake,
1, "",
{{"Hue", id["Snk_Lght"], "bri", "30"},
{"Hue", id["Ktchn_Dry"], "bri", "50"},
{"Hue", id["Ktchn_Smll"], "bri", "50"}})

Just replace the GEA condition by the HomeAwake variable.

It is useful if you intend to use the same condition multiple times in the other rules.

 

Modifié par Lazer
Posté(e)

Pour la migration vers HC3, j'ai une règle GEA qui ne fonctionne pas.

La ligne éclairage extérieure ne marche pas. A savoir que celle en dessous fonctionne.

Je n'ai pas trouvé la fenêtre de débug comme sur la HC2. J'ai bien une icône en bas a gauche qui ouvre une fenêtre en bas mais rien n'y apparait.

function config(GEA)
	-- ===================================================
	-- Configuration générale
	-- ===================================================
	GEA.debug = true
	GEA.portables = {25}
end

function setEvents()
	-- ==========================================================
	-- Règles utilisateur
	-- ==========================================================

	local id = {
    -- Garage --
    	Porte_Garage = 78,
	-- Extérieur --
    	Detecteur_Allee = 70,
    	Detecteur_Terrasse = 72,
    	Detecteur_Entree = 68,
    	Ecl_Terrasse = 65,
        Spot_Allee = 74,
		Guirelande = 82,
    	--Halogene_Entree = 122,
    -- Interne --
     --	  Lapinou = 44,
     --   Xiaomi_vacuum = 201,
	}

	GEA.add(true, 0, "Démarrage de GEA le #date# à #time#", nil, "Démarrage GEA")
	GEA.add({"Info+", "serverStatus", os.time()-120}, 0, "Box redémarrée le #date# à #time#", nil, "Démarrage box")
	GEA.add({"Info", "updateStableAvailable", true}, 24*60*60, "Une nouvelle version Stable est disponible", nil, "Détection nouvelle version stable")
	GEA.add({"Info", "updateBetaAvailable", true}, 24*60*60, "Une nouvelle version BETA est disponible", nil, "Détection nouvelle version beta")

    GEA.add( {{"Value", id["Detecteur_Allee"], 1}, {"(Time)", "Sunset", "Sunrise"}}, -1, "", {"TurnOn", {id["Spot_Allee"], id["Ecl_Terrasse"], id["Guirelande"]}, 1*60}, "Eclairage allée")
    GEA.add({id["Porte_Garage"], {"Time", "20:00", "08:00"}}, 60*60, "La porte du garage est ouverte depuis #duration#", {"Repeat"})

end

 

Posté(e) (modifié)
GEA.add( {id["Detecteur_Allee"], {"(Time)", "Sunset", "Sunrise"}}, -1, "", {"TurnOn", {id["Spot_Allee"], id["Ecl_Terrasse"], id["Guirelande"]}, 1*60}, "Eclairage allée")

@gorn Essai avec cette ligne.

Pour le debug, il faut mettre true à la ligne 68 et 69 dans le main.

Modifié par fredokl
  • Like 1
Posté(e) (modifié)
Il y a 3 heures, fredokl a dit :

          

@gorn Essai avec cette ligne.

Pour le debug, il faut mettre true à la ligne 68 et 69 dans le main.

salut

 

Je souhaiterais connaître ou comprendre la ligne de code 

 

je comprends: si détection entre le coucher et lever du soleil alors allume { id [ "Spot_Allee" ], id [ "Ecl_Terrasse " ], id [ "Guirelande" ]},

 

Mais là je sais pas à quoi ça correspond    1 * 60 }, "Eclairage allée" )          

 

et et à quoi correspond dans la condition : (Heure) ?

 

merci d'avance 

 

 

 

 

 

Modifié par 971jmd
Posté(e)

 

 

 GEA.add( {id["Detecteur_Allee"], {"(Time)", "Sunset", "Sunrise"}}, -1, "", {"TurnOn", {id["Spot_Allee"], id["Ecl_Terrasse"], id["Guirelande"]}, 5*60}, "Eclairage allée")

Si je le traduit en phrasé, c'est : Si détection allée, pendant la période du coucher au lever du soleil , j'allume le spot allée, éclairage terrasse, guirelande pendant 5x60s (dans l'exemple précédent c'était 1x60s) et je met "Eclairage allée" dans le débug

  • Like 1
Posté(e)

J'aurais dût exporter mon GEA de temps en temps...

Parce que je sèche a nouveau sur des règles que j'avais fait. On ne m'y prendra plus!

 

Pourquoi ça ne fonctionne pas? (et me dites pas que c'est parce que l'on est lundi :2:)

GEA.add( {{"Days", "Saturday", "Sunday"}, {"(Time)", "08:30"}}, 30, "", {"TurnOn", {id["Prise_Sapin"]}, 1*60}, "Eco énergie prise")    
GEA.add( {{"Days", "Saturday", "Sunday"}, {"(Time)", "00:15"}}, 30, "", {"TurnOff", {id["Prise_Sapin"]}, 1*60}, "Eco énergie prise")
    

 

Posté(e)
Il y a 13 heures, gorn a dit :

Pour la migration vers HC3, j'ai une règle GEA qui ne fonctionne pas.

La ligne éclairage extérieure ne marche pas. A savoir que celle en dessous fonctionne.

 


GEA.add( {{"Value", id["Detecteur_Allee"], 1}, {"(Time)", "Sunset", "Sunrise"}}, -1, "", {"TurnOn", {id["Spot_Allee"], id["Ecl_Terrasse"], id["Guirelande"]}, 1*60}, "Eclairage allée")

 

Attention lors du passage HC2 => HC3, les modules ne prennent plus la même valeur (propriété value dans le JSON du module, visible via l'API)

Sur HC2, Fibaro avait mal fait les choses, les détecteurs binaires (mouvement, ouverture, etc) prenaient les valeurs "0" et "1" (chaines de caractères contenant un nombre), tandis que sur HC3 c'est plus logique, on trouve des valeurs true et false (booléennes)

De même, sur HC2 les multilevel (dimmer, volet, etc) avaient une valeur entre 0 et 99 mais sous forme de chaine de caractère (donc entre guillemets), tandis que sur HC3 c'est une vraie valeur numérique.

C'est une différence fondamentale, donc il faudra adapter les valeurs dans tes règles GEA.

 

Pour voir les valeurs des modules, tu peux utiliser l'API HTTP pour voir le JSON du module directement depuis ton navigateur, connaissant son ID :

http://.../api/devices/ID

Et tu cherches la valeur de la  propriété value

 

La syntaxe qui t'a été donnée est une écriture abrégée, les 2 conditions suivantes sont identiques :

-- écriture complète corrigée :
GEA.add({"Value", id["Detecteur_Allee"], true}, -1, ...)
-- écriture abrégée :
GEA.add(id["Detecteur_Allee"], -1, ...)

 

Il y a 2 heures, gorn a dit :

 


 GEA.add( {id["Detecteur_Allee"], {"(Time)", "Sunset", "Sunrise"}}, -1, "", {"TurnOn", {id["Spot_Allee"], id["Ecl_Terrasse"], id["Guirelande"]}, 5*60}, "Eclairage allée")

Si je le traduit en phrasé, c'est : Si détection allée, pendant la période du coucher au lever du soleil , j'allume le spot allée, éclairage terrasse, guirelande pendant 5x60s (dans l'exemple précédent c'était 1x60s) et je met "Eclairage allée" dans le débug

Voilà c'est exactement ça.

Et même, on pourrait être encore plus précis, vu que la durée = -1, c'est donc un déclenchement instantané, donc ta phrase aurait pu commencer par "Dès qu'il y a une détection dans l'allée, ..."

 

il y a 38 minutes, gorn a dit :

J'aurais dût exporter mon GEA de temps en temps...

Parce que je sèche a nouveau sur des règles que j'avais fait. On ne m'y prendra plus!

 

Pourquoi ça ne fonctionne pas? (et me dites pas que c'est parce que l'on est lundi :2:)


GEA.add( {{"Days", "Saturday", "Sunday"}, {"(Time)", "08:30"}}, 30, "", {"TurnOn", {id["Prise_Sapin"]}, 1*60}, "Eco énergie prise")    
GEA.add( {{"Days", "Saturday", "Sunday"}, {"(Time)", "00:15"}}, 30, "", {"TurnOff", {id["Prise_Sapin"]}, 1*60}, "Eco énergie prise")
    

 

Ton écriture de Days est mauvaise, voir la doc de syntaxe (comme sur HC2, ça n'a pas changé) :

{"Days", "Saturday, Sunday"}

Tu n'as pas besoin des parenthèses autour de "Time", les parenthèses ne sont utiles que dans les déclenchement instantanés (donc avec durée = -1) pour exclure la condition du déclenchement (comme sur HC2, ça n'a pas changé)

De plus, évite les conditions Time avec une heure précise à la minute près, en cas de freeze de la HC3 (constaté par quelques utilisateurs de façon aléatoire), GEA pourrait manquer le bon moment. Préfère une durée de 2 ou 3 minutes par sécurité :

{"Time", "00:15", "00:16"}

 

Posté(e)

Merci @Lazer, en effet le JSON est true/false

image.png.2bd483fbabfb5486fd70e50959d050e5.png

 

Concernant ma ligne, en effet le days était mal écrit, c'est de nouveau fonctionnel :

GEA.add( {{"Days", "Monday, Tuesday, Wednesday, Thursday, Friday"}, {"Time", "00:00", "00:31"}}, 30, "", {"TurnOff", {id["Prise_Sapin"]}}, "Eco énergie prise OFF")

Si je pousse le vice plus loin, concernant les notifications, ce que j'ai écrit passe dans le débug. Si je veux un push, il faut que je rajoute ça à la fin de mon code non? :

, nil, "Push eco energie"

 

Et si je veux rajouter un trigger de plus qui est une variable globale, je rajoute dans les conditions un {"Global", "Presence", "present"} j'ai bon?

Posté(e)

Non le Push c'est toujours le 3ème argument.

Dans ton cas tu as laissé "", donc une chaine vide, donc pas de notification.

Voilà :

GEA.add( {{"Days", "Monday, Tuesday, Wednesday, Thursday, Friday"}, {"Time", "00:00", "00:31"}}, 30, "Push eco énergie", {"TurnOff", {id["Prise_Sapin"]}}, "Eco énergie prise OFF")

 

Pour ta condition de variable globale, oui c'est ça.

Attention à la terminologie, dans cette règle cette condition n'est pas un "trigger" (= déclencheur), mais juste une condition.

Elle serait un trigger si elle était utilisé dans une règle à déclenchement instantané (avec une durée = -1)

×
×
  • Créer...