CharlesO Posté(e) le 26 septembre 2019 Signaler Posté(e) le 26 septembre 2019 pardon la scene .... httprequest je corrige
CharlesO Posté(e) le 26 septembre 2019 Signaler Posté(e) le 26 septembre 2019 Il y a 5 heures, Steven a dit : Bon allez, je me lance : Tu crées un scène qui DOIT s'appeler httprequest cette scène est un plugin à GEA 6.x (Il est souhaitable de vérifier que la variable global GEA_Plugins existe bien) : --[[ %% properties %% events %% globals --]] -- ========================================================== -- -- Ligne a ajouter pour rendre votre scénarion compatible GEA -- ========================================================== -- if not tools then tools={version="2.00",addstyle="",isdebug=false,log=function(a,b,c)a=tools.tostring(a)for d,e in string.gmatch(a,"(#spaces(%d+)#)")do local f=""for g=1,e do f=f.."."end;a=string.gsub(a,d,"<span style=\"color:black;"..tools.addstyle.."\">"..f.."</span>")end;if tools.isdebug or c then fibaro:debug("<span style=\"color:"..(b or"white")..";"..tools.addstyle.."\">"..a.."</span>")end end,error=function(a,b)tools.log(a,b or"red",true)end,warning=function(a,b)tools.log(a,b or"orange",true)end,info=function(a,b)tools.log(a,b or"white",true)end,debug=function(a,b)tools.log(a,b or"gray",false)end,tostring=function(h)if type(h)=="boolean"then if h then return"true"else return"false"end elseif type(h)=="table"then if json then return json.encode(h)else return"table found"end else return tostring(h)end end,split=function(i,j)local j,k=j or":",{}local l=string.format("([^%s]+)",j)i:gsub(l,function(m)k[#k+1]=m end)return k end,trim=function(n)return n:gsub("^%s*(.-)%s*$","%1")end,deep_print=function(o)for g,p in pairs(o)do if type(p)=="table"then deep_print(p)else print(g,p)end end end,iif=function(q,r,s)if q then return r else return s end end,cut=function(t,u)u=u or 10;if u<t:len()then return t:sub(1,u-3).."..."end;return t end,isNumber=function(v)if type(v)=="number"then return true end;if type(v)=="string"then return type(tonumber(v))=="number"end;return false end,getStringTime=function(w)if w then return os.date("%H:%M:%S")end;return os.date("%H:%M")end,toTime=function(x)local y,z=string.match(x,"(%d+):(%d+)")local A=os.date("*t")local B=os.time{year=A.year,month=A.month,day=A.day,hour=y,min=z,sec=0}if B<os.time()then B=os.time{year=A.year,month=A.month,day=A.day+1,hour=y,min=z,sec=0}end;return B end,getStringDate=function()return os.date("%d/%m/%Y")end,isNil=function(C)return type(C)=="nil"end,isNotNil=function(C)return not tools.isNil(C)end}end if not GEAPlugin then GEAPlugin={}GEAPlugin.version=6.00;local a=fibaro:args()if a then for b,c in ipairs(a)do for d,e in pairs(c)do GEAPlugin[d]=e end end else fibaro:debug("nothing to do")fibaro:abort()end;GEAPlugin.retour=function(f)if GEAPlugin.geamode=="action"then return end;fibaro:startScene(GEAPlugin.geaid,{{gealine=GEAPlugin.gealine},{result=f}})end end -- ========================================================== -- -- Votre code ici -- les paramètres sont utilisable ainsi -- Exemple : {"http", "url", "method", "content"} -- local url = GEAPlugin.param1 -- local method = GEAPlugin.param2 -- ... -- ========================================================== -- -- Code du scenario -- tools.isdebug = true local httpClient = net.HTTPClient() local http = { getHeaders = function(self, user, pwd, content) local headers = {} local c = content or 'application/json' headers['Content-Type'] = c if (user and user ~= "") then headers["Authorization"] = 'Basic '..user..":"..password end if (pwd) and pwd ~= ""then headers["Authorization"] = 'Basic '..password end return headers end, manageReturn = function(self, resp) local response = "OK" print("resp : ", json.encode(resp)) if (type(resp) == "table" and resp.data) then response = tools.trim(json.encode(resp.data)) else response = resp.data end print(response) --GEAPlugin.retour(response) end, getOptions = function(self, m, u, p, c, d) local opt = { method = m, success = function(response) self:manageReturn(response) end, error = function(err) tools.error(' error = ' .. err) end, --GEAPlugin.retour('error = ' .. err) end, ["options"] = {} } local h = self:getHeaders(u, p, c) if (h) then opt.options["headers"] = h end if (d) then opt.options["data"] = d end return opt end, get = function(self, url, user, pwd) print(url, user, pwd) httpClient:request(url, { success = function(response) self:manageReturn(response) end, error = function(err) tools.error(' error = ' .. err) end, options = { method = 'GET' }, }) end, post = function(self, url, user, pwd, content, datas) httpClient:request(url, self:getOptions('POST', user, pwd, content, datas)) end, call = function(self, method, url, user, pwd, content, datas) if (method == "GET") then print("GET") self:get(url, user, pwd) end if (method == "POST") then self:post(url, user, pwd, content, datas) end end, } --GEAPlugin = {} local url = GEAPlugin.param1 or "http://www.perdu.com" local method = GEAPlugin.param2 or "GET" local content = GEAPlugin.param3 local datas = GEAPlugin.param4 local user = GEAPlugin.param5 local pwd = GEAPlugin.param6 http:call(method, url, user, pw , content, datas) tools.debug(method .. " : " .. url) Dans ton GEA tu ajoute simplement cela : GEA.add(true, 30, "", {"httprequest", "http://192.168.1.188/Notification?msg=Bonjour et madamme&lum=15&type=PAC&txt=notif&flash=1"}) Bien évidement, tu modifieras la conditions (true) par celle/ceux que tu as besoin. ok ca marche mais j'ai que le premier mot
971jmd Posté(e) le 26 septembre 2019 Signaler Posté(e) le 26 septembre 2019 (modifié) incroyable teste comme ça GEA.add(true, 30, "", {"httprequest", "http://192.168.1.188/Notification?&lum=15&type=PAC&txt=notif&flash=&msg=Bonjour et madamme"}) j'ai placée le texte a l'arrière Modifié le 26 septembre 2019 par 971jmd
CharlesO Posté(e) le 26 septembre 2019 Signaler Posté(e) le 26 septembre 2019 ok top avec ca : GEA.add(true, 30, "", {"httprequest", "http://192.168.1.188/Notification?msg="..urlencode("raquette télégramme")}) mais il me faut ca apres : &lum=15&type=PAC&txt=notif&flash=1 comment ?
Steven Posté(e) le 26 septembre 2019 Auteur Signaler Posté(e) le 26 septembre 2019 Il faut mettre des + à la place des espacesBonjour+MadameAu lieu deBonjour MadameEnvoyé de mon SM-G935F en utilisant Tapatalk
971jmd Posté(e) le 26 septembre 2019 Signaler Posté(e) le 26 septembre 2019 GEA.add(true, 0, "", {"httprequest", "http://192.168.1.188/Notification?&lum=15&type=PAC&txt=notif&flash=&msg="..urlencode("Bonjour et madamme")})
Steven Posté(e) le 26 septembre 2019 Auteur Signaler Posté(e) le 26 septembre 2019 GEA.add(true, 30, "", {"httprequest", "http://192.168.1.188/Notification?msg="..urlencode("raquette télégramme").. "&lum=15&type=PAC&txt=notif&flash=1"})Envoyé de mon SM-G935F en utilisant Tapatalk
CharlesO Posté(e) le 26 septembre 2019 Signaler Posté(e) le 26 septembre 2019 à l’instant, Steven a dit : GEA.add(true, 30, "", {"httprequest", "http://192.168.1.188/Notification?msg="..urlencode("raquette télégramme").. "&lum=15&type=PAC&txt=notif&flash=1"}) GEA.add(true, 30, "", {"httprequest", "http://192.168.1.188/Notification?msg="..urlencode("raquette télégramme").."&lum=15&type=PAC&txt=notif&flash=1"}) Envoyé de mon SM-G935F en utilisant Tapatalk top top top merci a vous deux !!!! grand prince !
Steven Posté(e) le 26 septembre 2019 Auteur Signaler Posté(e) le 26 septembre 2019 Par contre je préfère prévenir. Le script httprequest est une pure ébauche que j'ai commencé il y a longtemps.Le GET fonctionne bien mais le POST et le PUT n'ont jamais été testé.Dans ton cas, tu utilises le GET donc pas de soucis Envoyé de mon SM-G935F en utilisant Tapatalk 1
Steven Posté(e) le 26 septembre 2019 Auteur Signaler Posté(e) le 26 septembre 2019 Steven j'ai développée une version de GEA alarme plus complète qui tourne nikel depuis 6mois le SP (super programmateur) dispose de 6 programmes et chaque programme dispose d'une heure de DÉBUT et une Heure de FIN je souhaite avoir un avis sur une éventuel possibilité d’intégrée le SP dans la future GEA exemple du programme N1 local P1 = "Blocage inter CH Enfant" local P2 = "Lampe du jardin" local P3 = "VL de la Cuisine O/F" local P4 = ""local P5 = ""local P6 = ""--P1----Mise a jour de la label du programme 1 selon votre choix GEA.add(true, 0, "", {{"Label", id["GEA_ALARM_A"], "v1", P1} })GEA.add( {"Label", id["GEA_ALARM_A"], "nprog", "P1"}, -1, "", {{"Label", id["GEA_ALARM_A"], "information", P1}})----Hologe n°1 programme 1GEA.add({{"Alarm", id["GEA_ALARM_A"]},{"Label", id["GEA_ALARM_A"], "ActifDesac01", "Activé"}}, 0, "Interupteur bloqué" , {{"Label", 337, "Label2", "Bloquée"}})----Hologe n°2 programme 1GEA.add({{"Alarm2", id["GEA_ALARM_A"]}, {"Label", id["GEA_ALARM_A"], "ActifDesac01", "Activé"}}, 0, "Interupteur débloqué", {{"Label", 337, "Label2", "Débloque"}}) et du cotée du code GEA -----Programe 1 alarm = {name = "Alarm", optimize = true, control=function(id) return GEA.options.number.control(id) end, getValue=function(id) if (os.date("%H:%M", GEA.runAt) == fibaro:getValue(id, "ui.lblAlarme.value")) thenlocal days = fibaro:getValue(id, "ui.lblJours.value") days = days:lower() selected = tools.split(days, " ")for i = 1, #selected dofor j = 1, #GEA.trad.week_short doif (GEA.trad.week_short[j] == selected[i]) then if (GEA.traduction.en.week[j]:lower() == os.date("%A"):lower()) thenreturn trueendendendendendreturn falseend,}, alarm2 = {name = "Alarm2", optimize = true, control=function(id) return GEA.options.number.control(id) end, getValue=function(id) if (os.date("%H:%M", GEA.runAt) == fibaro:getValue(id, "ui.lblAlarme2.value")) thenlocal days = fibaro:getValue(id, "ui.lblJours.value") days = days:lower() selected = tools.split(days, " ")for i = 1, #selected dofor j = 1, #GEA.trad.week_short doif (GEA.trad.week_short[j] == selected[i]) then if (GEA.traduction.en.week[j]:lower() == os.date("%A"):lower()) thenreturn trueendendendendendreturn falseend,}, Je regarderais ça dès que j'aurais accès à un ordinateur. Envoyé de mon SM-G935F en utilisant Tapatalk
971jmd Posté(e) le 26 septembre 2019 Signaler Posté(e) le 26 septembre 2019 (modifié) ok merci Modifié le 26 septembre 2019 par 971jmd
Ghoosti Posté(e) le 2 octobre 2019 Signaler Posté(e) le 2 octobre 2019 Bonjour à vous, J'aurai besoin de votre aide et conseils.... J'essaie ceci: local EclHall_Auto = {"Global","EclAutoHall","Automatique"} local ExtinctHallH = GEA.add(true, 3*60, "", {{"TurnOff",id["ECL_HALL_H"]}, {"NotStart"}})-- OFF GEA.add({{"Value", id["ECL_HALL_H"], 50}, EclHall_Auto}, 30, "", {"RestartTask", ExtinctHallH}) GEA.add({{id["MVT_HALL_H"]}, {"Value-", id["LUX_HALL_H"], 10}, EclHall_Auto}, -1, "", {{"Value", id["ECL_HALL_H"], 50}, {"RestartTask", ExtinctHallH}}) le OFF fonctionne MAIS après ~ 4min20 (sur + essais) , une idée.... Merci à vous
pepite Posté(e) le 3 octobre 2019 Signaler Posté(e) le 3 octobre 2019 Bonjour, Ben ca marche, ca reste allumé 1 '20" de plus mais ca éteint :-) Essaie cela sans certitude local ExtinctHallH = GEA.add(id["ECL_HALL_H"], 3*60, "", {{"TurnOff",id["ECL_HALL_H"]}, {"NotStart"}})-- OFF
Steven Posté(e) le 3 octobre 2019 Auteur Signaler Posté(e) le 3 octobre 2019 Imaginons que GEA tourne toutes les 30 secondes en partant de 00h00:00 00h00:00 : 1er tour de GEA --- rien à faire 00h00:01 : Ta 3ème ligne va allumer la lumière sur détection ... il y aura donc 29 secondes avant le prochain tour. 00h00:30 : Ne va rien faire car la lampe est allumée depuis 29s et non pas 30 -- cf ta 2ème ligne 00h01:00 : La lampe est allumée depuis plus de 30s GEA va redémarrer le compteur de 3*60 --> cf ta 2ème ligne 00h04:30 : GEA va éteindre la lampe. Ca c'est le pire scénario car ton détecteur déclenche l'allumage JUSTE après le passage de GEA. Mais si dans ton cas il se déclenche plus ou moins 10 secondes après, tu auras donc bien 4mn et 20s. Tu peux déjà gagner quelques secondes en mettant 0 à la place de 30 sur ta 2ème ligne afin que GEA n'attende pas que ta lampe soit allumée plus de 30s. Voici donc l'explication de ce mystère. 1
Ghoosti Posté(e) le 3 octobre 2019 Signaler Posté(e) le 3 octobre 2019 (modifié) Merci à vous 2 pour vos conseils et l'explications du mystère Vais mettre ça en pratique... Remplacer GEA.add(true, par GEA.add(id["ECL_HALL_H"], n'a rein changé Remplacer le 30 par 0, ok ça fonctionne (-30 sec) Modifié le 3 octobre 2019 par Ghoosti Re après test
pepite Posté(e) le 3 octobre 2019 Signaler Posté(e) le 3 octobre 2019 J'ai pas osé expliquer :-)Mea culpa de flemingite Envoyé de mon BND-L21 en utilisant Tapatalk 1
Ghoosti Posté(e) le 4 octobre 2019 Signaler Posté(e) le 4 octobre 2019 Bonjour, @pepite J'ai vu passer ceci dans un autre poste et cela m’intéresse mais j'ai un message d'erreur suivant j'ai bien essayé de modifier certaines {} mais sans succès, helpppppp voici la ligne 358 GEA.add({"Time", "05:40"}, 30, "", {{"TurnOn", id["ECL_HALL_H"]}, {"Sleep", 1*60, {"TurnOff", id["ECL_HALL_H"]}}, {"Sleep", 2*60, {"TurnOn", id["ECL_HALL_H"]}}, {"Sleep", 3*60, {"TurnOff", id["ECL_HALL_H"]}}) --GEA.add({"Time", "14:55"}, 30, "", {{"ACTION1"}, {"Sleep", 3*60, {"ACTION2}}, {"Sleep", 3*60, {"ACTION3}}, {"Sleep", 3*60, {"ACTION4}}) Merci
ADN182 Posté(e) le 4 octobre 2019 Signaler Posté(e) le 4 octobre 2019 Tu as du faire un mauvais copier coller, si tu regarde bien au niveau du deuxième sleep tu ferme la 1er accolade du coup tu ferme l'action et t'es sleep suivant ne compte pas. Mais ton code dans notepad++ et passe sur chaque accolade pour voir pour elle se ferme ça te permettra de détecter ce genre de problème.Envoyé de mon Nexus 5X en utilisant Tapatalk 1
pepite Posté(e) le 4 octobre 2019 Signaler Posté(e) le 4 octobre 2019 Salut @Ghoosti, @ADN182 a raison, il te manque bien une accolade, qui est bien spécifié dans le message d'erreur FIbaro..pour une fois ;-) Voilà le code corrigé, écrit comme cela ca permet de voir où on s'est trompé quand il y a plusieurs actions. GEA.add( {"Time", "05:40"}, 30, "", { {"TurnOn", id["ECL_HALL_H"]}, {"Sleep", 1*60, {"TurnOff", id["ECL_HALL_H"]} }, {"Sleep", 2*60, {"TurnOn", id["ECL_HALL_H"]} }, {"Sleep", 3*60, {"TurnOff", id["ECL_HALL_H"]} } })
Ghoosti Posté(e) le 4 octobre 2019 Signaler Posté(e) le 4 octobre 2019 Ok, un grand merci à vous 2 @pepite oui bien plus facile comme tu l'as présenté, j'ai encore appris qq chose....
ADN182 Posté(e) le 4 octobre 2019 Signaler Posté(e) le 4 octobre 2019 Hello, J'ai une question comment détecter avec GEA qu'un module RGB est allumé ou éteint ? Sachant que un getvalue retourne 0 quand un program et lancé mais bien une valeur quand il ne s'agit pas d'un program et 0 quand il est éteint. Merci d'avance.
pepite Posté(e) le 4 octobre 2019 Signaler Posté(e) le 4 octobre 2019 Salut @ADN182 Je ferais comme ceci : Hors programme lancé : tu peux récupérer l'état du module RGB GEA.add(id["RGB"], 30, "Je suis allumé", {"ACTIONS"}) Et quand un programme est lancé GEA.add( {"Program", id["RGB"]}, 30, "Programme en cours : {Result}", {ACTIONS} ) En combinant les 2 tu dois pouvoir donc savoir s'il est allumé ou non avec GEA.add({"Or", id["RGB"], {"Program", id["RGB"]}}, 30, "RGB peut-etre allumé ;-) mais non testé je n'en ai pas", {"ACTIONS"}) 1
ADN182 Posté(e) le 4 octobre 2019 Signaler Posté(e) le 4 octobre 2019 Merci Pepite, du coup si je cherche à savoir si il sont éteins plutôt je rajoute un {"Inverse"} comme cela ? : GEA.add({"Or", id["RGB"], {"Program", id["RGB"]}}, 30, "RGB peut-etre allumé ;-) mais non testé je n'en ai pas", {{"Inverse"},{"ACTIONS"}})
971jmd Posté(e) le 4 octobre 2019 Signaler Posté(e) le 4 octobre 2019 salut j'ai tester GEA.add(354, 30, "RGB on") GEA.add({"Or", 354, {"Program", 354}}, 30, "RGB OFF ", {{"Inverse"}}) et ça fonctionne 1
Messages recommandés