Aller au contenu

Recommended Posts

Mais ch2_ouv doit être un Fgk je suppose.

Donc comment GEA voit le changement d état ?

Je pige pas.

Partager ce message


Lien à poster
Partager sur d’autres sites

le script gea est lancé dès que l'id du fgk (placé dans l'entête) change d'état

gea sais déterminer cela et si -1 l'action est lancée immédiatement

 

tu es sur que ton entête est bonne ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Chaque module a des propriétés autre que "Value" 

 

Exemple : 

properties":{

  • "parameters":[],
  • "associationSet":[],
  • "associationView":[],
  • "zwaveCompany":"Fibargroup",
  • "zwaveInfo":"3,3,42",
  • "zwaveVersion":"2.1",
  • "pollingTimeSec":0,
  • "configured":"true",
  • "dead":"false",
  • "deviceControlType":"20",
  • "deviceIcon":"2",
  • "emailNotificationID":"0",
  • "emailNotificationType":"0",
  • "endPointId":"0",
  • "isLight":"false",
  • "liliOffCommand":"",
  • "liliOnCommand":"",
  • "log":"",
  • "logTemp":"",
  • "manufacturer":"",
  • "markAsDead":"true",
  • "model":"",
  • "nodeId":"21",
  • "parametersTemplate":"221",
  • "productInfo":"1,15,4,0,16,10,2,1",
  • "pushNotificationID":"0",
  • "pushNotificationType":"0",
  • "remoteGatewayId":"0",
  • "saveLogs":"true",
  • "smsNotificationID":"0",
  • "smsNotificationType":"0",
  • "useTemplate":"true",
  • "userDescription":"",
  • "value":"false"

 

Cela permet donc de vérifier directement une ce des propriété.

@ Steven

 

Merci je commence a comprend mai dans l'exemple : 

GEA.add({"Property!", 238, "Location", "0"},

238 et location   c'est quoi 

le !

Partager ce message


Lien à poster
Partager sur d’autres sites

Additionner des conditions? Tu peux préciser?

je trouve pas, il y a tellement de pages!!!

 

je voulais dire:

"si la porte est ouverte" et "que la lumière est allumée" et "que la variable est sur ON" et "que le frigo consomme moins de 60w" alors allumer la lumière X

Partager ce message


Lien à poster
Partager sur d’autres sites

Bon je suis en train de transférer mes scènes dans GEA, encore merci à  tous pour ce travail formidable.

 

Voila je voudrais l'avis d'expert sur ces lignes pour la gestion de ma boucle sanitaire au quotidien. Ma boucle sanitaire me permet de faire circuler de l'eau chaude dans toute la maison en utilisant un petit ballon de 15l et une pompe de circulation. La pompe de circu doit s’allumer en générale 5 minutes après le ballon et ce tout le temps... Pour l'extinction les deux en même temps doivent s'éteindre.

 

Pouvez vous me dire si ce codage est bien cohérant : 

-- ===  Debut gestion Boucle Sanitaire === --
-- Allumage Ballon ECS à  6h les jours du Lundi au samedi
GEA.add(id["BALLON_CIRCU"], 30, "", {{"Inverse"},{"Time", "06:00", "06:02"},{"Days", "Weekdays", "Saturday"},{"turnOn"}})
-- Allumage ballon ECS à  8h30 le dimanche
GEA.add(id["BALLON_CIRCU"], 30, "", {{"Inverse"},{"Time", "08:30", "08:32"},{"Days", "Sunday"}, {"turnOn"}})
-- Allumage ballon ECS à  17h30 tous les jours
GEA.add(id["BALLON_CIRCU"], 30, "", {{"Inverse"},{"Time", "17:30", "17:32"},{"Days", "All"}, {"turnOn"}})
-- Allumage de la pompe de circulation 5min apres l'allumage du Ballon ECS
GEA.add(id["BALLON_CIRCU"], 5*60,"", {{"turnOn", id["POMPE_CIRCU"]}})
-- Extinction boucle sanitaire à  14h le Weekend et lundi
GEA.add(id["BALLON_CIRCU"], 30, "", {{"Time", "14:00", "14:02"},{"Days","Weekend", "Monday"}, {"turnOff"}})
-- Extinction boucle sanitaire à  9h du mardi au vendredi
GEA.add(id["BALLON_CIRCU"], 30, "", {{"Time", "09:00", "09:02"},{"Days","Monday","Tuesday","Wednesday","Thursday","Friday"}, {"turnOff"}})
-- Extinction ballon ECS à  23h30 tous les jours
GEA.add(id["BALLON_CIRCU"], 30, "", {{"Inverse"},{"Time", "23:30", "23:32"},{"Days", "All"}, {"turnOff"}})
-- Extinction de la pompe de circulation en même temps que le ballon ECS
GEA.add(id["BALLON_CIRCU"], -1,"", {{"Inverse"},{"turnOff", id["POMPE_CIRCU"]}})
-- ===  Fin gestion Boucle Sanitaire === --

 

Merci beaucoup.

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour à  tous !!!!!!!

 

bon rien pour moi ne s'est lancé ce matin comme je l'espérais !

 

ce qui est byzarre c'est que dans les logs je vois mon action manuel d'allumage ?!? 7h10 est l'heure à  laquelle j'ai vérifié si c'était lancé (avant que ma chère et tendre ne se lève prendre sa douche ^^) comme ca ne l'était pas j'ai allumé les deux appareil.... Je me demande si c'est pas l'option "inverse" posé en début et non à  la fin... je me suis basé sur l'exemple présent dans GEA pour le sèche serviette...

[DEBUG] 07:10:27: [ 223 | Ballon Circu ] sendActions : traitement des actions (ID:4) [turnOn,225]
[DEBUG] 07:10:27: [ 223 | Ballon Circu ] sendActions : !ACTION! : turnOn (ID:4) [turnOn,225]
[DEBUG] 07:10:27: [ 223 | Ballon Circu ] Done : tache effectuée et suspendue (ID:4) [turnOn,225]

si vous passer par la je veux bien un petit peu d'aide ^^

Partager ce message


Lien à poster
Partager sur d’autres sites

le script gea est lancé dès que l'id du fgk (placé dans l'entête) change d'état

gea sais déterminer cela et si -1 l'action est lancée immédiatement

 

tu es sur que ton entête est bonne ?

 

merci c'est clair et implementé maintenant

on va faire qq test :-)

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour à  tous

 

J'ai passé une partie de la soirée à  essayer de remonter une info de consommation totale de courant, mais je n'ai pas réussi à  trouver comment faire avec GEA

Mon idée serait de remonter des infos de sensibilisation, genre quand le seche linge a tourné en HP, pouvoir envoyer un message pour indiquer le gain qui aurait pu être fait (même si on parle de qqs centimes  :) )

 

Mon idée a été la suivante : comme on a une variable #duration# (par exemple pour une scene où on a le lave linge a l'état running comme l'a fait steven), et du coup les dates aussi de la scene, ca serait de l'utiliser pour aller recuperer les informations dans le panel energy panel avec l'api , genre

http://:@/api/energy/<timestampstart>/<timestampstop>/single/devices/power/<id lave linge> et récupérer les kw dans le json

 

J'ai donc essayé de modifier le code pour me faire cette fonction, mais j'ai lamentablement echoué !

 

Y a t il une autre solution déjà  en place que je n'aurais pas détecté ou suis je le seul à  vouloir faire ce genre d'usine à  gaz ?? :)

 

Bonne journée à  tous

Partager ce message


Lien à poster
Partager sur d’autres sites

Tu cherches a avoir la conso globale ?? Difference HC et HP ? C est ca ?
T as essaye un json decode encode table ;-)

 

@juke94

GEA.add(id["BALLON_CIRCU"], 30, "", {{"Inverse"},{"Time", "06:00", "06:02"},{"Days", "Weekdays", "Saturday"},{"turnOn"}})

Ta syntaxe avec les "Days" n'est pas la bonne,(enfin je crois) tous les jours doivent etre entre les memes guillemets :

 

{"Days", "Weekdays, Saturday"}

 

 Dans ta ligne la condition "id["BALLON_CIRCU"]" signifie : 

--> GEA verifie le value de "ballon CIRCU", s'il est à  0 ou à  1, donc eteint ou allumé

 

Le {"Inverse"} signifie dans ce cas :

--> SI "Ballon Circu" eteint alors....

--> Sans le "Inverse", cela signifierait, si"Ballon CIrcu" allumé alors..

 

"Days", "All" : pas besoin de préciser ca simplifie la ligne GEA

 

Essaie comme ca :

GEA.add(id["BALLON_CIRCU"], 30, "", {{"Inverse"},{"Time", "06:00", "06:02"},{"Days", "Weekdays, Saturday"},{"turnOn"}})

ou comme ca pour tester

GEA.add(id["BALLON_CIRCU"], 30, "", {{"Inverse"},{"Time", "06:00", "06:02"},{"Days", "Monday, Tuesday, Wednesday, Thursday, Friday, Saturday"},{"turnOn"}})

Partager ce message


Lien à poster
Partager sur d’autres sites

@frederic :

"si la porte est ouverte" et "que la lumière est allumée" et "que la variable est sur ON" et "que le frigo consomme moins de 60w" alors allumer la lumière X

 

Conditions multiples :

local porteouverte = .....
local lumiereallumee = .....
local variableon = .....
local consofrigo = ....
GEA.add({porteouverte, lumiereallumee, variableon, consofrigo}, 30, "", {{"turnOn", id["lumiere"]}})

Partager ce message


Lien à poster
Partager sur d’autres sites

@971jmd :

 

238 et location   c'est quoi 

le !

 

le "!" : signifie "DIFFERENT" de ....

 

Donc dans l'exemple de @steven  on peut traduire par :

--> SI la "Property" "location" est DIFFERENTE de "0" ;-)

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci @pepite, j'ai trouvé la syntaxe tard, tard, tard dans la nuit et après beaucoup d'essai.

Mais, c'est terminé, Scheluder n'est plus, tous est sur GEA.

J'avais presque un peu de peine quand je l'ai supprimé de ma box.

Partager ce message


Lien à poster
Partager sur d’autres sites

Hello

 

j'aimerai en cas d'intrusion que la lampe dimmée passe de 0 à  100 et de 100 à  0 tant que la variable "Intrusion" est valable

je sais pas comment faire ca ..

 

je pense avoir le debut, mais je ne sais pas comment faire le dimming ou alors la faire clignoter.

  	GEA.add({Intrusion}, -1, "", {{"turnOn",id["ECL_CHAMBRE_PARENTS"]}, {"Value", id["ECL_CHAMBRE_PARENTS"], ??? },{Repeat}})

Partager ce message


Lien à poster
Partager sur d’autres sites

 

Si le lave-linge consomme moins de 1.0W (éteint), je coupe la prise. Variable = OFF

Si sa consommation est supérieure à  3.0W (en fonctionnement), Variable = RUNNING

Si sa consommation est entre 1.0 et 2.5 et que la variable = RUNNING alors Variable = Waiting ... Il ne consomme plus donc est terminé

Si la variable est Waiting plus de 30mn alors je rappel qu'il faut ce bouger les fesses.

  -- === Lave-Linge == --
  GEA.add({"Global", "Lave-Linge", "WAITING"}, 30*60, "Le lave-linge est arrêté depuis #duration#", {{"Global", "Karotz", "Le lave-linge est arrêté depuis #durationfull#"},{"VirtualDevice", id["OPENKAROTZ"],"1"},{"Repeat"}})
  GEA.add({"Sensor-", id["LAVE_LINGE"], 1.5}, 2*60, "", {{"turnOff"}, {"Global", "Lave-Linge", "OFF"}}) 
  GEA.add({"Sensor+", id["LAVE_LINGE"], 3}, 2*60, "", {{"Global", "Lave-Linge", "RUNNING"}}) 
  GEA.add({{"Sensor+", id["LAVE_LINGE"], 1},{"Sensor-", id["LAVE_LINGE"], 2.5}, {"Global", "Lave-Linge", "RUNNING"}}, 5*60, "", {{"Global", "Lave-Linge", "WAITING"}})

 

@Steven

Je voulais implanter exactement ce fonctionnement, mais j'ai un doute

si conso < 1.5 alors tu passes la variable sur OFF, donc des que ta machine est à  l'arrêt elle passe à  OFF, ce qui ne laisse pas de temps à  la variable d'etre à  Wainting, donc la ligne de push n'est jamais utilisé si ?

 

ensuite j'ai essayé ca , chez moi

-- Lave Linge
 	GEA.add({"Global", "Lave_Linge", "En Attente"}, 30*60, "Le lave-linge est arrêté depuis #duration#", {"Repeat"})
 	GEA.add({"Sensor-", id["WP_LAVE_LINGE"], 2.5}, 2*60, "", {"Global", "Lave_Linge", "Arret"})   	
	GEA.add({"Sensor+", id["WP_LAVE_LINGE"], 3}, 2*60, "", {{"Global", "Lave_Linge", "Lavage"}}) 
	GEA.add({{"Sensor+", id["WP_LAVE_LINGE"], 1},{"Sensor-", id["WP_LAVE_LINGE"], 2.5}, {"Global", "Lave_Linge", "Lavage"}}, 5*60, "", {{"Global", "Lave_Linge", "En Attente"}})

avec une variable Lave_Linge qui peut prendre 'Lavage', 'En attente', 'Arret'

 

mais j'ai ca

[ERROR] 15:07:54: line 315: bad argument #1 to 'lower' (string expected, got nil)


qui chez moi est la ligne


if (string.lower(arg[i][1]) == "repeat") then repeating = true end

je ne vois pas ou est l'erreur.

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut @Steven,

 

J'ai modifié la fonction GEA.match ainsi:

GEA.match = function(s, p)
  if (type(s) == "nil") then
    return type(p) == "nil"
  end
  s = tostring(s)
  p = tostring(p):gsub("%%", "%%%%"):gsub("-", "%%-")
  local words = GEA.split(p, "|")
  for i = 1, #words do
    if (not GEA.regexFullAllow) then
      if (string.find(s, GEA.trim(words[i]), 1, true)) then 
        return true 
      end
    else
      if (string.match(s, GEA.trim(words[i]))) then 
        return true
      end
    end
  end 
  return false
end

Pour faire simple, quand "regexFullAllow" est à  "false", j'utilise "string.find" à  la place "string.match" pour chercher la chaine de caractère puisque "GEA.match" ne retourne que true ou false.

Il faut savoir que "string.find" prend un 4ième paramètre:

- true: recherche de string,

- false (par défaut): recherche de pattern

 

J'ai aussi modifié les deux lignes dans la fonction "GEA.sendActions" pour utiliser "string.find":

if (GEA.match(entry[GEA.keys["PARAMS"]][i][3], "inc%+")) then

devient:


if (string.find(entry[GEA.keys["PARAMS"]][i][3], "inc+", 1, true)) then

et:

else if (GEA.match(entry[GEA.keys["PARAMS"]][i][3], "dec%-")) then

devient:

elseif (string.find(entry[GEA.keys["PARAMS"]][i][3], "dec-", 1, true)) then

Pour l"instant, je tourne avec cette modif. On verra dans quelques jours.

 

Une réflexion:

Peut-être qu'il faudrait créer un fonction GEA.find pour différencier avec GEA.match car dans cette ligne:

if (GEA.match(type, "door_sensor|water_sensor|motion_sensor|com.fibaro.FGMS001|com.fibaro.doorSensor|com.fibaro.waterSensor|com.fibaro.motionSensor"))  then

on n'a clairement pas besoin de recherche de pattern mais GEA.match peut quand même en faire si on a activé "regexFullAllow".

"GEA.match" pour les propres recherches de l'utilisateur selon s'il a activé "regexFullAllow"

"GEA.find" pour les propres recherches de GEA (voir exemple au dessus) ou remplacer ces "GEA.match" par "string.find".

 

Je vais porter ces modifs et tester.

Modifié par Shyrka973
  • Upvote 2

Partager ce message


Lien à poster
Partager sur d’autres sites

 @Pepite

 

Merci d'avance pour ton aide

GEA.add({"Property!", 238, "Location", "0"},.....

238 c'est quoi 

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonsoir,

 

bon, avec ce code, il ne se passe rien du tout...

 

local userLocation = {"Function", function() return fibaro:getValue(238, 'Location') end}
local EmplacementMaison1 = "48.84745534593;2.4532449245453"
local EmplacementBureau1 = "48.81907202982484;2.3286187648773193"


-- Localisation EmplacementSeb
local DistanceMaison1 = {"Function", function() return fibaro:calculateDistance(userLocation, EmplacementMaison1) end}
local DistanceBureau1 = {"Function", function() return fibaro:calculateDistance(userLocation, EmplacementBureau1) end}




GEA.add(DistanceBureau1, 30, "", {{"Global", "DistanceBureau", "#value#"}, {"Label", id["DISTANCE"], "Label2", "#value# m"}})
GEA.add(DistanceMaison1, 30, "", {{"Global", "DistanceMaison", "#value#"}, {"Label", id["DISTANCE"], "Label1", "#value# m"}})




-- message maison
GEA.add({"Global-", "DistanceMaison", "100"}, 30, "Je suis à  moins de #value# m à  #time# de la maison", {{"MaxTime", "1"}})

J'ai en debug

 

[DEBUG] 23:33:40: 

[ Function ] Add Autostart : ajout de la tache pour 30 secondes (ID:1) [Global,DistanceBureau,#value#] [Label,56,Label2,#value# m]
[DEBUG] 23:33:40: [ Function ] Add Autostart : ajout de la tache pour 30 secondes (ID:2) [Global,DistanceMaison,#value#] [Label,56,Label1,#value# m]
[DEBUG] 23:33:40: [ DistanceMaison=100 ] Add Autostart : ajout de la tache pour 30 secondes (ID:3) [MaxTime,1]
[DEBUG] 23:33:40: GEA Version 5.32 : en exécution...
[DEBUG] 23:38:40: Durée des traitements : 0s nouveau délai : 30s / tourne depuis 5m

Une idée. Pourquoi il ne se passe rien...?

Partager ce message


Lien à poster
Partager sur d’autres sites

essaye avec le mode bloc et bascule en LUA et tu auras un autre chiffre que ID238 -----  fibaro:getValue(238, 'Location') end})

 

moi mon ID est 251 mai quand je réalise en mode bloc et bascule en LUA j'ai comme chiffre 2  -----  fibaro:getValue(22, 'Location') end}

--[[
%% properties
2 Location
%% globals
--]]

local startSource = fibaro:getSourceTrigger(); if ( ( (fibaro:calculateDistance(fibaro:getValue(2, "Location"), "xx.xxxxxxx;-xx.xxxxxxx") <= 30 and fibaro:calculateDistance(fibaro:getValue(2, "PreviousLocation"), "xx.xxxxxxx;-xx.xxxxxxxx") > 30) ) or startSource["type"] == "other"

Partager ce message


Lien à poster
Partager sur d’autres sites

Pour moi c'est ok ! Merci @Pépite ! 

J'attend pour voir niveau des jours mais ca me parait bien parti !!

Partager ce message


Lien à poster
Partager sur d’autres sites

en fait, j'ai bien la récupération de ma localisation. C'est le calcul de la distance qui ne se fait pas.

 

  1. -- Localisation EmplacementSeb
    
    local DistanceMaison1 = {"Function", function() return fibaro:calculateDistance(userLocation, EmplacementMaison1) end}
    local DistanceBureau1 = {"Function", function() return fibaro:calculateDistance(userLocation, EmplacementBureau1) end}
    
    GEA.add(DistanceBureau1, 30, "", {{"Global", "DistanceBureau", "#value#"}, {"Label", id["DISTANCE"], "Label2", "#value# m"}})
    GEA.add(DistanceMaison1, 30, "", {{"Global", "DistanceMaison", "#value#"}, {"Label", id["DISTANCE"], "Label1", "#value# m"}})
    
    -- message maison
    GEA.add({"Global-", "DistanceMaison", "100"}, 30, "Je suis à  moins de #value# m à  #time# de la maison", {{"MaxTime", "1"}})

Edit: j'ai changé la ligne 

 

  1. local userLocation = {"Function", function() return fibaro:getValue(238, 'Location') end}
  2. en mettant
  3. local userLocation = {"Function", function() return fibaro:getValue(238, "Location") end}
    et ca me remonte en distance #value#

Partager ce message


Lien à poster
Partager sur d’autres sites

@sakkho : 

C'est la fonction "repeat" qui semble chez toi posé un souci d’après l'erreur citée !!

 

dans ta troisième ligne je vois des '{' en trop par rapport à  ta deuxième ligne !!! mais bon je pense pas que cela pose problème !

Partager ce message


Lien à poster
Partager sur d’autres sites

j'avais modifié comme ceci 

la 1ere ligne ne semble pas posé problème car si je laisse que celui ci - pas d'erreur

 	GEA.add({"Global", "Lave_Linge", "En Attente"}, 30*60, "Le lave-linge est arrêté depuis #duration#",{{"Global", "Lave_Linge", "En Attente"}, {"Repeat"}})
	GEA.add({"Sensor-", id["WP_LAVE_LINGE"], 2}, 2*60, "", {"Global", "Lave_Linge", "Arret"})   	
	GEA.add({"Sensor+", id["WP_LAVE_LINGE"], 3}, 2*60, "", {"Global", "Lave_Linge", "Lavage"}) 
	GEA.add({{"Sensor+", id["WP_LAVE_LINGE"], 1},{"Sensor-", id["WP_LAVE_LINGE"], 2.5}, {"Global", "Lave_Linge", "Lavage"}}, 5*60, "", {"Global", "Lave_Linge", "En Attente"})
  

Partager ce message


Lien à poster
Partager sur d’autres sites

×