Aller au contenu

Steven

Membres confirmés
  • Compteur de contenus

    4 434
  • Inscription

  • Dernière visite

  • Jours gagnés

    201

Tout ce qui a été posté par Steven

  1. 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é.
  2. 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
  3. Steven

    Balance connecté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.
  4. Steven

    Recup Json Alarme / Lua / VD

    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 ?
  5. Steven

    Support Gea

    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}")
  6. Steven

    Support Gea

    Nope. Just use WeatherLocal instead
  7. Steven

    Recup Json Alarme / Lua / VD

    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
  8. Steven

    Support Gea

    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
  9. La fonction "Sleep" de la v6 lance un setTimeout au lieu d'un fibaro:sleep() il n'y a donc plus de limitation.
  10. Steven

    Recup Json Alarme / Lua / VD

    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.
  11. Steven

    Support Gea

    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. Steven

    Support Gea

    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 }
  13. Steven

    Support Gea

    Oui c'est bien cela.
  14. Steven

    Support Gea

    Le 596 value ne doit pas être sous %%global mais sous %%properties dans l'entête
  15. Steven

    Support Gea

    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
  16. Steven

    Support Gea

    @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.
  17. Steven

    Support Gea

    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 }
  18. Steven

    Support Gea

    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 },
  19. Steven

    Support Gea

    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.
  20. Steven

    Support Gea

    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).
  21. Steven

    Support Gea

    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=
  22. Steven

    Support Gea

    @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 ?
  23. Steven

    Support Gea

    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
  24. Steven

    Support Gea

    Merci, je l'ai mis sur la 1ere page dans la section avec les VD
  25. Steven

    Support Gea

    Exactement, je vais changer le post précédent au cas ou quelqu'un d'autre copie ces lignes. Bien joué.
×
×
  • Créer...