-
Compteur de contenus
4 434 -
Inscription
-
Dernière visite
-
Jours gagnés
201
Tout ce qui a été posté par Steven
-
Moi aussi ça me va très bien. Je rajouterais juste dans les commentaires de chaque méthode la description des valeurRs attendues (data dans l'exemple) ainsi que le retour de chaque méthode. Sinon c'est parfait pour moi. Bien joué.
-
TasksS2 permet de lancer des tâches Tasker situé sur ton téléphone. Ce n'est pas une version autonome de tasker pour S2/S3. Et ne réagis pas à la voix. Pour la voix, je n'ai jamais regardé et j'ai donc aucune idée
-
Pour moi, le seul repère utile sur un pèse personne est la graisse viscérale (la plus dangereuse) hors Withings/Nokia a préféré le bulletin météo Apparemment, c'est plus vendeur de lire qu'il va pleuvoir plutôt que "bouge tes fesses" car tes artères vont souffrir. Et franchement @Sakkhho c'est dégoûtant de ta part de sortir ce genre de VD avant les fêtes.
-
C'est qu'il n'a pas de retour de la requête. Question bête tu as bien remplacé IPALARME : local url = "http://IPALARME/action/sensorListGet" Par l'adresse IP de ton alarme ?
-
Try this GEA.add ({{"WeatherLocal!", "Temperature", ""},{"WeatherLocal!",""},{"Time", "15:56"}}, 0, "We are #datefull# it is #value[1]# degrees and the time is #value[2]#") or GEA.add ({"Time", "15:56"}}, 0, "We are #datefull# it is {weatherlocal, temperature} degrees and the time is {weatherlocal}")
- 12 330 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
Nope. Just use WeatherLocal instead
- 12 330 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
Tu peux tout faire dans un scénario LUA : local url = "http://IPALARME/action/sensorListGet" function checkDoors(result) local open = false result:gsub("(.-)Door Contact(.-)name : \"(.-)\"(.-)cond : \"(.-)\"", function(a,b,c,d,e) if (e == "Open") then open = true print(c .. " est ouvert") end end) if (open) then -- traitement ici end end local http = net.HTTPClient() http:request(url, { options = { method = 'GET', headers = {["Content-Type"] = "application/json"}}, success = function(response) checkDoors(response) end, error = function(response) log(" ERROR !!! " .. response) end, }) Bien évidement, non testé. Courage
-
v.6.03 29 décembre 2017 add : #datefull# dans les messages pour obtenir "dimanche 23 décembre 2017" fix : Correction du code pour {"Weather"} add : {"WeatherLocal"} ... identique à {"Weather"} mais retourne les conditions météos selon votre langue @MAM78 Je te laisse intégré le code pour SONOS et le tester s'il te plait. Si @pepite peux aussi le tester par la suite ce serait cool. Comme cela on aura le retour de plusieurs configurations. Si c'est tout bon, on aura une 6.04
- 12 330 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
GEA scene de vie
Steven a répondu à un(e) sujet de flamalex dans Actionneurs & Ouvrants (Portail, volets, piscines, ...)
La fonction "Sleep" de la v6 lance un setTimeout au lieu d'un fibaro:sleep() il n'y a donc plus de limitation. -
En récupérant le flux, il suffirait de faire un code du style : local result = "/*-secure-{ senrows : [{no : \"1\", type : \"Remote Controller\", area : \"1\", zone : \"1\", name : \"User\", attr : \"Personal Att\", cond : \"\", battery : \"\", tamp : \"\", bypass : \"No\"},{no : \"2\", type : \"Remote Keypad\", area : \"1\", zone : \"2\", name : \"Entrance\", attr : \"\", cond : \"\", battery : \"\", tamp : \"\", bypass : \"No\"},{no : \"3\", type : \"Door Contact\", area : \"1\", zone : \"3\", name : \"Veranda\", attr : \"Entry\", cond : \"Open\", battery : \"\", tamp : \"\", bypass : \"No\"},{no : \"4\", type : \"IR Sensor\", area : \"1\", zone : \"4\", name : \"Couloir\", attr : \"Entry\", cond : \"\", battery : \"\", tamp : \"\", bypass : \"No\"},{no : \"5\", type : \"IR Sensor\", area : \"1\", zone : \"5\", name : \"Salon\", attr : \"Entry\", cond : \"\", battery : \"\", tamp : \"\", bypass : \"No\"},{no : \"6\", type : \"IR Sensor\", area : \"1\", zone : \"6\", name : \"Palier\", attr : \"Entry\", cond : \"\", battery : \"\", tamp : \"\", bypass : \"No\"},{no : \"7\", type : \"Door Contact\", area : \"1\", zone : \"7\", name : \"Porte Principale\", attr : \"Entry\", cond : \"\", battery : \"\", tamp : \"\", bypass : \"No\"}]}*/" local open = false result:gsub("(.-)Door Contact(.-)name : \"(.-)\"(.-)cond : \"(.-)\"", function(a,b,c,d,e) if (e == "Open") then open = true print(c .. " est ouvert") end end) if (open) then -- traitement ici end L'exemple ne prend en compte que les contacteurs de porte.
-
J'avais juste fait une proposition. N'ayant pas de Sonos, je ne peux pas me permettre de fournir un script que je ne pourrais jamais tester.
- 12 330 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
Je ne parle pas de GEA.language .. si tu regardes la méthode que je t'avais proposée, elle prend en paramètre "langue" GEA.options.sonostts = { name = "Sonos TTS", action = function(vd_id, button_id, message, langue, volume) local _f = fibaro local _x ={root="x_sonos_object",load=function(b)local c=_f:getGlobalValue(b.root)if string.len(c)>0 then local d=json.decode(c)if d and type(d)=="table"then return d else _f:debug("Unable to process data, check variable")end else _f:debug("No data found!")end end,set=function(b,e,d)local f=b:load()if f[e]then for g,h in pairs(d)do f[e][g]=h end else f[e]=d end;_f:setGlobal(b.root,json.encode(f))end,get=function(b,e)local f=b:load()if f and type(f)=="table"then for g,h in pairs(f)do if tostring(g)==tostring(e or"")then return h end end end;return nil end} _x:set(tostring(vd_id), { tts = {message=message, duration='auto', language=langue, volume=volume} }) _f:call(vd_id, "pressButton", button_id) end }
- 12 330 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
Oui c'est bien cela.
- 12 330 réponses
-
- 1
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
Le 596 value ne doit pas être sous %%global mais sous %%properties dans l'entête
- 12 330 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
sonoslanguage n'est utilisé que pour le TTS et est déjà inclus sous "langue" sonosfoldername : cela ne sert pas à grand chose, il suffit de mettre le chemin complet avec le nom du fichier dans "filename" Restons minimaliste
- 12 330 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
@MAM78, @pepite Cela va vous plaire ceci : GEA.add(true, 0, "Nous sommes le #datefull# la température ext. est de {WeatherLocal, Temperature}° - météo : {WeatherLocal}#") GEA.add(true, 0, "La lampe est : {turnOn, 73}") Résultat [DEBUG] 11:56:45: Nous sommes le vendredi 22 décembre 2017 la température ext. est de 4.3° - météo : nuageux# [DEBUG] 11:56:45: La lampe est : false Donc dans les messages, il est possible d'y mettre une condition qui sera traduite à la volée afin de connaitre sa valeur. Cela ouvre plein de possibilité car avant on avait par exemple #duration# et si je change on pourra faire "Durée : {Duration}" ... mais aussi GEA.add({"Duration+", 50}, 30, "Durée suppérieur à 50") Je vais sérieusement y réfléchir tout en gardant l'ancien mode (pour compatibilité) ET le future.
- 12 330 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
Un peu prêt comme cela : GEA.options.sonosmp3 = { name = "Sonos MP3", action = function(vd_id, button_id, filename, volume) local _f = fibaro local _x ={root="x_sonos_object",load=function(b)local c=_f:getGlobalValue(b.root)if string.len(c)>0 then local d=json.decode(c)if d and type(d)=="table"then return d else _f:debug("Unable to process data, check variable")end else _f:debug("No data found!")end end,set=function(b,e,d)local f=b:load()if f[e]then for g,h in pairs(d)do f[e][g]=h end else f[e]=d end;_f:setGlobal(b.root,json.encode(f))end,get=function(b,e)local f=b:load()if f and type(f)=="table"then for g,h in pairs(f)do if tostring(g)==tostring(e or"")then return h end end end;return nil end} _x:set(tostring(vd_id), { stream = {stream=filename, source="local", duration="auto", volume=volume} }) _f:call(vd_id, "pressButton", button_id) end } GEA.options.sonostts = { name = "Sonos TTS", action = function(vd_id, button_id, message, langue, volume) local _f = fibaro local _x ={root="x_sonos_object",load=function(b)local c=_f:getGlobalValue(b.root)if string.len(c)>0 then local d=json.decode(c)if d and type(d)=="table"then return d else _f:debug("Unable to process data, check variable")end else _f:debug("No data found!")end end,set=function(b,e,d)local f=b:load()if f[e]then for g,h in pairs(d)do f[e][g]=h end else f[e]=d end;_f:setGlobal(b.root,json.encode(f))end,get=function(b,e)local f=b:load()if f and type(f)=="table"then for g,h in pairs(f)do if tostring(g)==tostring(e or"")then return h end end end;return nil end} _x:set(tostring(vd_id), { tts = {message=message, duration='auto', language=langue, volume=volume} }) _f:call(vd_id, "pressButton", button_id) end }
- 12 330 réponses
-
- 1
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
Il faudrait pouvoir mettre {"Weather"} à la fin de tes paramètres ... exemple : {"transpose!", GEA.traduction.en.WeatherCondition, GEA.trad.WeatherCondition, {"weather"}, ""} Ainsi GEA va le transformer automatiquement. Sinon il faut ajouter dans ton code la ligne qui va chercher la bonne valeur. transpose = {name="transpose", getValue=function(Value, Table1, Table2) if (type(Value)=="table") then Value = GEA.getOption(Value).getValue() end for i = 1, #Table1 do if Table1[i] == Value then return Table2[i] end end return "" end },
- 12 330 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
C'est normal, le #value[1]# retourne la valeur de la condition et la condition est "true". Si tu veux que "transpose" soit capable d'être exploité ainsi, il faut le déplacer dans les conditions et donc changer action=function() par getValue=function() Mais attention, pour qu'une condition soit valide elle doit donc retourner une valeur qui puisse être comparée avec quelque chose. {"transpose", "B", {"A", "B", "C"}, {"a", "b", "c"}, <valeur attendue>} Comme on ne connait pas la valeur attendue, on peut tricher en utilisant la négation {"transpose!", "B", {"A", "B", "C"}, {"a", "b", "c"}, ""} On aura donc au final GEA.add({"transpose!", "B", {"A", "B", "C"}, {"a", "b", "c"}, ""}, 0, "Test", {"Popup", "Info", "Titre", "Retour = #value[1]#"}, "Test Transpose") Ce genre de traitement n'étant ni une condition, ni un action, mais une transformation, ce n'est pas vraiment inclus dans les mécanismes de GEA alors il faut tricher un peu.
- 12 330 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
Si la table 1 est égale à la valeur ? alors retourne la table 2 ... bizarre tous cela Voici ma proposition : transpose = { name = "Transpose", action = function(value, tabEn, tabFr) for k, v in pairs(tabEn) do if (v:lower() == value:lower()) then return tabFr[k] end end end } print( transpose.action("B", {"A", "B", "C"}, {"a", "b", "c"} ) ) On parcours le tableau 1 en récupérant l'indice de chaque éléments (k) ainsi que sa valeur (v). On compare la valeur (v) avec la value souhaitée. Si elle correspond, on retourne la valeur du tableau 2 selon le même indice (k).
- 12 330 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
getValue=function() est utilisé pour les conditions alors que action=function() est utilisé pour les actions. Hors tu as mis en getValue et tu utilise ton transpose dans les actions. Pour tester, remplace juste ton getValue= par action=
- 12 330 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
@MAM78 Il y a de bonnes idées dans ta proposition, comme le #datefull# qui peut être utilisé par tout le monde. Pour les #WeatherCondition# et #tempsext#, ils sont déjà inclus dans GEA. GEA.add( { {"Weather!", ""}, {"Weather!", "Temperature" , ""} }, .., "Condition : #value[1]# - Temperature : #value[2]#" ) Les conditions météo seront en anglais (puisque Fibaro nous empêche de mettre la bonne locale), mais dans ce cas, je préfère mettre en place un mécanisme de traduction plutôt que quelque chose de très spécifique ... par exemple #translate(weather, #value[2]#)# mais cela semble compliqué à l'usage. Je me suis donc posé la question "Pourquoi ne pas renvoyer la valeur directement dans la bonne langue ?". A ce jour, cela demanderait aux utilisateurs de changer leurs lignes car la plus part on déjà {"Weather", "rain"}. Mais, rien n'empêche de créer une option {"WeatherLocal", ...} ce qui me semble être une idée acceptable ? Après, modifier GEA pour en fin de compte appeler un script externe, je n'y vois pas trop d’intérêt. Pourquoi ne pas tout faire dans le script ou dans GEA ? Donc, vu qu'on a tout pour déterminer, la météo, la température et prochainement le datefull) ... ce qui nous manque c'est la possibilité d'intégrer directement ton script SONOS au sein même de GEA {"SonosMP3", ...} {"SonosTTS", ...} ce qui ne semble pas très compliqué et qui aurait une véritable plus-valu pour GEA. Qu'en penses-tu ?
- 12 330 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
GEA s'execute toutes les 30 seconds, il n'est donc pas le meilleure pur cela. Par contre, il y a l'api : local ids = "36,39" -- local ids = table.concat(fibaro:getDevicesId({interface="power"}),",") local result = api.get("/energy/now/now/summary-graph/devices/power/"..ids)[1][2] Qui pourrait répondre à tes attentes
- 12 330 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
Merci, je l'ai mis sur la 1ere page dans la section avec les VD
- 12 330 réponses
-
- 1
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
Exactement, je vais changer le post précédent au cas ou quelqu'un d'autre copie ces lignes. Bien joué.
- 12 330 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :