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

    Google Home

    @Lazer Malheureusement non, un raccourci ne peux rien faire d'autre que d'envoyer une phrase à la GH. C'est juste histoire de remplacer un mot par un autre.
  2. Steven

    Google Home

    Le mot que mes enfants adorent mais me demandent d'abord la permission est : "OK Google Ta gueule" Je l'adore aussi
  3. Il y a différents moyens pour optimiser ce genre de problématique. Perso, je ne pense pas que l'optimisation à outrance soit un gain réel. Le %% killOtherInstances ne peut pas être utilisé avec un détecteur car lorsque le détecteur repasse en mode de sommeil (x secondes après la détection), il va déclenché cette même scène et donc tuer la précédente qui faisait tranquillement son travail. Il y a d'autre alternative mais la meilleures reste toujours : celle qui fonctionne. Mais il y a des bonnes idées dans tous ces message ... perso, je ne connaissais pas le %% killOtherInstances. Il n'est pas très judicieux d'avoir une scène qui tourne toutes les 5mn pour rien s'il n'y a pas de détection donc l'usage des triggers serait un plus. Peut-être que le mieux serait d'avoir une scène qui se réveille au changement d'état d'un détecteur et qu'elle dorme 15mn. A la fin des 15mn, elle vérifie qu'elle est bien la dernière à avoir été activé par rapport au autres détecteurs. Cela serait le plus optimisé, à mon avis, mais après cela dépend du nombre de détection et détecteurs à gérer dans une journée. Voilà donc mon avis personnelle sur la question.
  4. Steven

    Google Home

    Excellent, ça fait plaisir
  5. Faut le faire dans les grosses lignes, si la consommation est supérieure à la mise en veille alors on commence le compteur. On sais qu'un déshumidificateur extrait X litres à l'heure donc on utilise que cela. Pas besoin de se prendre la tête avec des calculs compliqué. Vaut mieux prévenir trop tôt que le bac est potentiellement plein que trop tard. Pour le VD d' @OJC, ce n'est malheureusement pas pour moi. Un poêle à pellets est soumis à d'autres contrainte comme le temps d'allumage et d'extinction qui peux être très long. De plus, je réduis la vitesse de combustion si la TV est allumée pour réduire le bruit. Bref, je promet de suivre de prêt tout cela car il y a vraiment un beau travail la derrière. Pour la V3, personnellement, je ne fourni plus de script compatible, hormis GEA (et encore, sans garantie).
  6. Steven

    Fibaro Marketplace

    Mon dieu, je ne me souvenais même plus du nom original
  7. Steven

    Google Home

    Voilà tout ce passe ici : local allLightRoom = {"allume", "éteins", "les lumières"} local allBlindRoom = {"ouvre", "ferme", "les volets"} "allume" permet de faire un turnOn, "éteins" un turnOff ... "les lumières" est le mot magique, le reste de la phrase va permettre de trouver la pièce. Exemple : "OK Google Jarvis allume toutes les lumières du salon" .. ma pièce s'appelle Salon "OK Google Jarvis éteins les lumières des chambres" .. ma pièce s'appelle Chambres(et oui, je sais c'est pas logiques mais c'est LES chambres des enfants) "OK Google Jarvis allume les lumières du sandwich de l'entrée" .. ma pièce s'appelle Entrée Je ne peux pas tester pour les stores, je n'en ai pas, mais j'ai préparé le code. A vous de paramétrer selon vos préférences/habitudes --[[ %% properties %% events %% globals --]] -- ========================================================== -- -- Script pour IFTT (Google Assistant + Webhooks -- input : "javis $" -- webhooks : https://<login>:<password>@<url>/api/scenes/<id scenario>/action/start -- method : post -- content : application/json -- body : {"args":[{"action":" {{TextField}}"}]} -- ========================================================== -- -- Ce script va comparer le texte énoncé à l'assistant -- avec les phrases contenues dans les champs liliCommand -- Il va d'abord chercher dans les modules puis les scénarios -- et finir par les modules virtuels -- Pour les modules virtuels il suffit d'énoncer le nom -- du VD suivis du libellé du bouton, ex : "Chauffage Manuel" -- ========================================================== -- -- Les synonymes permettent de remplacer des énoncés à la volée. -- Si par exemple vour avez une phrase lili "allume le chauffage" -- et que vous souhaitez aussi pouvoir dire "active le chauffage" -- il suffit d'ajouter : -- ["active le chauffage"] = "allume le chauffage", -- Vous pouvez aussi lier des phrases avec de boutons de VD -- Exemple ["ouvre le portail"] = "Portail action", -- va donc cliquer sur le bouton "action" du VD "Portail". -- Il est aussi possible de créer ses propres function -- Exemple : -- ["capture camera salon"] = function() -- fibaro:call(<id camera>, "sendPhotoToUser", <id user>) -- end, local mot_cle_separateur = "et" local allLightRoom = {"allume", "éteins", "les lumières"} local allBlindRoom = {"ouvre", "ferme", "les volets"} local synonymes = { ["ouvre le portail"] = "Portail action", ["diminue le chauffage"] = "Chauffage -1", ["augmente le chauffage"] = "Chauffage +1", ["éteins le jardin"] = "éteins la terrasse", ["allume le jardin"] = "allume la terrasse", ["chauffage automatique"] = "chauffage automatic", ["ouvre les volets"] = "brise-soleil ░ Ouvrir", ["ferme les volets"] = "brise-soleil Fermer ▓", ["stop les volets"] = "brise-soleil stop", ["allume la télé"] = "allume la télévision", ["éteins la télé"] = "éteins la télévision", ["voir le garage"] = "imperihome 2", ["voir l'entrée"] = "imperihome 3", ["dodo"] = "bonne nuit", ["mais tf 1"] = "Freebox TV 1", ["mais france 2"] = "Freebox TV 2", ["mais france 3"] = "Freebox TV 3", ["mais m 6"] = "Freebox TV 6", ["capture caméra salon"] = function() fibaro:call(158, "sendPhotoToUser", 2) end, ["capture caméra terrasse"] = function() fibaro:call(203, "sendPhotoToUser", 2) end, ["capture caméra entrée"] = function() fibaro:call(156, "sendPhotoToUser", 2)end, ["quelle est la température intérieure"] = function() fibaro:call(163, "pressButton", 2) end, ["quelle est la température extérieure"] = function() fibaro:call(163, "pressButton", 4) end, } -- Remplacement des caractères spéciaux -- function replaceChar(s) local sprime = s:gsub("à ", "à"):gsub("é", "é"):gsub("è", "è"):gsub("î", "î"):gsub("ô", "ô"):gsub("û", "û"):gsub("ù", "ù"):gsub("ê", "ê"):gsub("â","â"):gsub(" ' ", "'") return sprime end function trim(s) return (s:gsub("^%s*(.-)%s*$", "%1")) end -- Compare 2 chaines de caractères -- function isEqual(s1, s2) s1 = string.lower(s1) s2 = string.lower(s2) return s1 == s2 or replaceChar(s1) == replaceChar(s2) end -- Recherche un module correspondant -- -- et effectue l'action nécessaire -- function doDevice(device, liliCommand) if (device.properties.liliOnCommand) then if (isEqual(device.properties.liliOnCommand, liliCommand)) then fibaro:call(device.id, "turnOn") return true, device.name elseif (isEqual(device.properties.liliOffCommand, liliCommand)) then fibaro:call(device.id, "turnOff") return true, device.name end end return false end -- Recherche une scène correspondante -- -- et effectue l'action nécessaire -- function doScene(scene, liliCommand) if (isEqual(scene.liliStartCommand, liliCommand)) then fibaro:startScene(scene.id) return true, scene.name elseif (isEqual(scene.liliStopCommand, liliCommand)) then fibaro:killScenes(scene.id) return true, scene.name end return false end -- Recherche un module correspondant -- -- et effectue l'action nécessaire -- function doVirtual(device, liliCommand) local fullname = device.name .. " " for _, v in ipairs(device.properties.rows) do for _, w in ipairs(v.elements) do if (w.caption) then if (isEqual(fullname .. w.caption, liliCommand)) then fibaro:call(device.id, "pressButton", w.id) return true, fullname .. w.caption end end end end return false end function manageRoom(mode, option, phrase) local roomid = findRoomName(phrase:gsub(option[1], ""):gsub(option[2], ""):gsub(option[3], "")) local devices = api.get("/devices/?property="..mode.."&enabled=true&visible=true&roomID="..roomid) for _, v in ipairs(devices) do if (mode == "isLight") then if (phrase:match(option[1])) then fibaro:call(v.id, "turnOn") elseif (phrase:match(option[2])) then fibaro:call(v.id, "turnOff") end else if (phrase:match(option[1])) then fibaro:call(v.id, "open") elseif (phrase:match(option[2])) then fibaro:call(v.id, "close") end end end end function getRooms() local rooms = {} for _, v in ipairs(api.get("/rooms")) do rooms[string.lower(v.name)] = v.id end return rooms end function findRoomName(name) local rooms = getRooms() for k,v in pairs(rooms) do if (name:match(k)) then return v end end return -1 end function split(text) local sep = " " .. mot_cle_separateur .. " " local tx = text local t = {} while (tx:find(sep)) do local pos = tx:find(sep) table.insert(t, tx:sub(1, pos)) tx = tx:sub(pos+sep:len(), tx:len()) end if (tx:len() > 0) then table.insert(t, tx) end return t end -- Lecture des paramètres de cette scène -- local params = fibaro:args() fibaro:debug(json.encode(params)) local action = nil local number = nil if (params) then for _, v in ipairs(params) do if (v.action) then action = v.action end if (v.nombre) then number = tonumber(v.nombre) end end end -- Recherche une action a effectuer -- if (action) then local actions = split(string.lower(replaceChar(trim(action)))) local occurence = number or 1 for j = 1, occurence do for i = 1, #actions do liliCommand = trim(actions[i]) fibaro:debug("Utilisé : " .. liliCommand) if (liliCommand:match(allLightRoom[3])) then manageRoom("isLight", allLightRoom, liliCommand) return end if (liliCommand:match(allBlindRoom[3])) then manageRoom("isBlind", allBindRoom, liliCommand) return end if (synonymes[liliCommand]) then liliCommand = synonymes[liliCommand] if (type(liliCommand) == "function") then liliCommand() return end end local name = "< none >" local done = false local devices = api.get("/devices?&enabled=true") for k = 1, #devices do thisDone, n = doDevice(devices[k], liliCommand) if (thisDone) then name = n done = true end end if (not done) then local scenes = api.get("/scenes") for k = 1, #scenes do thisDone, n = doScene(scenes[k], liliCommand) if (thisDone) then name = n done = true end end end if (not done) then local devices = api.get("/devices?type=virtual_device&enabled=true") for k = 1, #devices do thisDone, n = doVirtual(devices[k], liliCommand) if (thisDone) then name = n done = true end end end if (done) then fibaro:debug("Device reconnue : " .. name) end end end end
  8. Steven

    Fibaro Marketplace

    Reçu et surtout pas répondu :-)
  9. Steven

    Google Home

    J'y travaille
  10. Bonne question C'est très simple. A l'époque les panneaux de chauffage ne fonctionnaient quasiment pas. J'exploite en effet, le jour et la période (impossible sans parcourir toute les valeurs du panneau). Lorsque je ne travaille pas, j'ai un script qui envoi l'information de mon Google Agenda vers ma HC2 et cela me permet de directement dire à mon chauffage que je suis comme un "dimanche". Certaines personnes se plaignaient à l'époque que le panneau de chauffage ne permet que 4 périodes. C'est juste beaucoup plus paramétrable pour quelqu'un qui souhaiterais modifié tout cela. (J'aime m'amuser) En revanche, c'est moins performant et moins simple à mettre en place. Donc si tu as besoin uniquement de la température/humidité le currentTemperature ou currentHumidity est bien plus adapté. Edit : le code que tu as repris est vraiment un vieux code mais il a l'avantage de fonctionner en v.3 et v.4 alors que le api.get() n'existe qu'en v.4 Voilà et encore bravo pour ton VD. Idées / Suggestions. J'ai mis en place chez moi avec GEA une alerte si mon poêle consomme moins de 3W alors qu'il est censé être "En marche" c'est qu'il y a un problème ... dans ton cas, bac d'eau plein (s'il n'y a pas de pompe de relevage). Dans mon cas, problème d'allumage ou autre. Cela peut-être une source d'inspiration. GEA.add( {{"Power-", <id wallplug>, 3},{"Label", <id VD>, "lblRunning", "Oui"}}, 5*60, "Problème de déshumidificateur vérifier le bac") J'ai mis aussi en place un autre script qui va estimé la consommation de pellets par rapport à la consommation électrique et dès que j'estime ne plus en avoir assez, GEA m'envoi une alerte. Voici le script simplifié qui manipule juste une variable global "Poele". Dans ton cas, cela peux aider quelqu'un à vider le bac AVANT qu'il ne soit plein. --[[ %% properties 14 power --]] local id_wallplug = 14 local wattRepos = 5 local consoParHeure = 0.6 -- Only allow one instance of the current scene to run at a time if (fibaro:countScenes() > 1) then fibaro:abort() end while (tonumber(fibaro:getValue(id_wallplug, "power")) > wattRepos) do fibaro:sleep(60000) local oldValue = tonumber(fibaro:getGlobalValue("Poele")) local newValue = 0 newValue = consoParHeure / 60 fibaro:setGlobal("Poele", oldValue + newValue) fibaro:debug("Consommation en cours : " .. newValue .. " par minute") end GEA.add( {"Global+", "Poele", 20}, 5*60, "Veuillez vérifier les pellets")
  11. Steven

    Google Home

    @JossAlf Mon dieux, un revenant De mon côté, il n'y a pas de limitation, mais j'ai aussi constaté ce problème sur des phrase longues. Je pense que cela vient du Google Home. Personnellement, j'ai mis des phrases plus courtes car je n'ai pas trouvé d'autre solution "Ok Google Jarvis Allume la télé et allume l'entrée" fonctionne très bien. Par contre moi aussi si je rajoute quelque chose, j'ai une douce voix qui me dit qu'elle ne sais pas comment m'aider.
  12. Steven

    Google Home

    Je me suis dis que Fibaro ou Stranger Things c'était un peu du pareil au même. Tu sais jamais dans quel monde tu te trouve mais tu fais tout pour t'en sortir.
  13. Steven

    Heating Manager

    Perso, j'avais créé ce bout de code lorsque les panneaux de chauffage était bugé, je ne l'utilise presque plus. C'est à dire que les plages horaires et les températures viennent toujours d'un panneaux de chauffage mais par contre, je le parcours par programmation pour déterminer la température. A savoir que dans le bout de code que je t'ai cité. local datas = {...} est à l'identique de local datas = api.get("/panels/heating/"..<id_panel>).properties Je fais cela pour des raisons simples : Le panneau ne permet que 4 températures ce qui limite certaines personnes (pas moi). Perso, j'ai les enfants une semaine sur deux donc 2 panneaux de chauffage différents (horaires et températures différentes). Si je souhaite géré les congés ou les vacances, cela m'obligerais à en créer 4 en tout. Dans mon cas, c'est simple, je pars du principe que lorsque je suis en congé, je me calque sur le dimanche soit : if (JourChome="OUI") then day = "sunday" end Donc par programmation, on peux faire évoluer selon ces souhaits (et compétences) un panneau de chauffage. Prenons l'exemple de @pepite function userFunction(panel) if (madame_crie_fort) then if (madame_crie_encore_plus_fort) then return 28 end return 25 end return panel.properties.currentTemperature end Par contre, et la je te soutiens à 1000% cela ne sert à rien de faire une usine à gaz pour des choses qui existe déjà. Ce que tu pourrais peut-être faire pour rendre tout le monde content, c'est un truc comme cela : function getSetPoint(ID) local panel = api.get("/panels/heating/" .. ID) if (userFunction) then return userFunction(panel) end return panel.properties.currentTemperature end Tu garde ainsi un code super légé sauf pour ceux qui souhaite s’embêter a implémenter leur propre composante et tant pis pour eux s'ils doivent faire attention au mise à jour. Ils peuvent ainsi créer leurs propres VD et utiliser cette fonction pour aller chercher eux-même les valeurs. Tu ne dénature pas ton code mais ajoute juste une petite dérivation laissant l'utilisateur agir à sa guise. Je dis cela mais je dis rien ... vu que je n'ai qu'un poêle à pellets et que je n'utilise donc pas ton Heating Manager. Par contre, je m'intéresse à son évolution que je trouve géniale ... donc encore félicitations et désolé pour mon grain de sel.
  14. Steven

    Heating Manager

    Juste pour info, j'avais crashé (oui oui c'est bien le terme), un bout de code pour simuler un panneau de chauffage en pure LUA. Je te met ci dessous le code pour te simplifier la tache. local Heating = {confort = 21, normal=20} local datas = {} datas["monday"] = {} datas["monday"]["morning"] = {hour=6; minute=30; temperature=Heating.confort} datas["monday"]["day"] = {hour=8; minute=0; temperature=Heating.normal} datas["monday"]["evening"] = {hour=16; minute=0; temperature=Heating.confort} datas["monday"]["night"] = {hour=23; minute=0; temperature=Heating.normal} datas["tuesday"] = datas["monday"] datas["thursday"] = datas["monday"] datas["friday"] = {} datas["friday"]["morning"] = {hour=6; minute=30; temperature=Heating.confort} datas["friday"]["day"] = {hour=8; minute=0; temperature=Heating.normal} datas["friday"]["evening"] = {hour=15; minute=0; temperature=Heating.confort} datas["friday"]["night"] = {hour=23; minute=0; temperature=Heating.normal} datas["wednesday"] = {} datas["wednesday"]["morning"] = {hour=7; minute=0; temperature=Heating.confort} datas["wednesday"]["day"] = {hour=9; minute=0; temperature=Heating.normal} datas["wednesday"]["evening"] = {hour=12; minute=0; temperature=Heating.confort} datas["wednesday"]["night"] = {hour=23; minute=0; temperature=Heating.normal} datas["saturday"] = {} datas["saturday"]["morning"] = {hour=8; minute=0; temperature=Heating.confort} datas["saturday"]["day"] = {hour=9; minute=0; temperature=Heating.confort} datas["saturday"]["evening"] = {hour=16; minute=0; temperature=Heating.confort} datas["saturday"]["night"] = {hour=23; minute=0; temperature=Heating.normal} datas["sunday"] = datas["saturday"] function getFakeHeatingPanelTemperature() local day = string.lower(os.date("%A")) local hour = tonumber(os.date("%H")) local min = tonumber(os.date("%M")) local now = 0 local temp = 0 local week = {"monday","tuesday","wednesday","thursday","friday", "saturday", "sunday"} for k,v in pairs(week) do if (v == day) then now = k * 100000 + tonumber(hour) * 60 + tonumber(min) end end for k,v in pairs(week) do for l,w in pairs({"morning","day","evening","night"}) do if (now > k*100000+tonumber(datas[v][w].hour)*60+tonumber(datas[v][w].minute)) then temp = datas[v][w].temperature end lasttemp = datas[v][w].temperature end end if (temp == 0) then temp = lasttemp end return temp end function getSetPoint(ID) if (ID == 999) then return getFakeHeatingPanelTemperature() else local panel = api.get("/panels/heating?id=" .. ID) return panel.properties.currentTemperature end end print(getSetPoint(999))
  15. Steven

    Google Home

    J'y connais pas grand chose en routeur ... mais j'ai une solution : @Lazer, help @Lazer, help please
  16. Steven

    Support Gea

    {"CentralSceneEvent, 104, 1, "Pressed"} --- Pour le bouton appuyé une fois {"CentralSceneEvent, 104, 1, "Pressed2"} --- Pour le bouton appuyé deux fois Et il faut ajouté dans l'entête --[[ %% property 104 CentralSceneEvent 1 ]]--
  17. Steven

    Google Home

    Allez, petite mise à jour du script Jarvis. Ma fille de 7 ans voulait pouvoir dire "Jarvis allume la lumière du salon ET éteints la lumière de la cuisine" J'ai donc ajouté un petit morceau de code qui découpe les instructions en me basant sur le ET. Je souhaitais augmenter le chauffage de 2 degrés sans avoir à dire deux fois "Jarvis augmente le chauffage" J'ai donc créer un deuxième applet qui reçoit la même chose que le premier + un numéro. Je peux maintenant dire "Jarvis augmente le chauffage 2 fois" Voici donc le 2ème applets $ : Et le scénario modifié --[[ %% properties %% events %% globals --]] -- ========================================================== -- -- Script pour IFTT (Google Assistant + Webhooks -- input : "javis $" -- webhooks : https://<login>:<password>@<url>/api/scenes/<id scenario>/action/start -- method : post -- content : application/json -- body : {"args":[{"action":" {{TextField}}"}]} -- ========================================================== -- -- Ce script va comparer le texte énoncé à l'assistant -- avec les phrases contenues dans les champs liliCommand -- Il va d'abord chercher dans les modules puis les scénarios -- et finir par les modules virtuels -- Pour les modules virtuels il suffit d'énoncer le nom -- du VD suivis du libellé du bouton, ex : "Chauffage Manuel" -- ========================================================== -- -- Les synonymes permettent de remplacer des énoncés à la volée. -- Si par exemple vour avez une phrase lili "allume le chauffage" -- et que vous souhaitez aussi pouvoir dire "active le chauffage" -- il suffit d'ajouter : -- ["active le chauffage"] = "allume le chauffage", -- Vous pouvez aussi lier des phrases avec de boutons de VD -- Exemple ["ouvre le portail"] = "Portail action", -- va donc cliquer sur le bouton "action" du VD "Portail". -- Il est aussi possible de créer ses propres function -- Exemple : -- ["capture camera salon"] = function() -- fibaro:call(<id camera>, "sendPhotoToUser", <id user>) -- end, local mot_cle_separateur = "et" local synonymes = { ["ouvre le portail"] = "Portail action", ["diminue le chauffage"] = "Chauffage -1", ["augmente le chauffage"] = "Chauffage +1", ["éteins le jardin"] = "éteins la terrasse", ["allume le jardin"] = "allume la terrasse", ["chauffage automatique"] = "chauffage automatic", ["ouvre les volets"] = "brise-soleil ░ Ouvrir", ["ferme les volets"] = "brise-soleil Fermer ▓", ["stop les volets"] = "brise-soleil stop", ["allume la télé"] = "allume la télévision", ["éteins la télé"] = "éteins la télévision", ["voir le garage"] = "imperihome 2", ["voir l'entrée"] = "imperihome 3", ["dodo"] = "bonne nuit", ["mais tf 1"] = "Freebox TV 1", ["mais france 2"] = "Freebox TV 2", ["mais france 3"] = "Freebox TV 3", ["mais m 6"] = "Freebox TV 6", ["capture caméra salon"] = function() fibaro:call(158, "sendPhotoToUser", 2) end, ["capture caméra terrasse"] = function() fibaro:call(203, "sendPhotoToUser", 2) end, ["capture caméra entrée"] = function() fibaro:call(156, "sendPhotoToUser", 2)end, ["quelle est la température intérieure"] = function() fibaro:call(163, "pressButton", 2) end, ["quelle est la température extérieure"] = function() fibaro:call(163, "pressButton", 4) end, } -- Remplacement des caractères spéciaux -- function replaceChar(s) local sprime = s:gsub("à ", "à"):gsub("é", "é"):gsub("è", "è"):gsub("î", "î"):gsub("ô", "ô"):gsub("û", "û"):gsub("ù", "ù"):gsub("ê", "ê"):gsub("â","â"):gsub(" ' ", "'") return sprime end function trim(s) return (s:gsub("^%s*(.-)%s*$", "%1")) end -- Compare 2 chaines de caractères -- function isEqual(s1, s2) s1 = string.lower(s1) s2 = string.lower(s2) return s1 == s2 or replaceChar(s1) == replaceChar(s2) end -- Recherche un module correspondant -- -- et effectue l action nécessaire -- function doDevice(device, liliCommand) if (device.properties.liliOnCommand) then if (isEqual(device.properties.liliOnCommand, liliCommand)) then fibaro:call(device.id, "turnOn") return true, device.name elseif (isEqual(device.properties.liliOffCommand, liliCommand)) then fibaro:call(device.id, "turnOff") return true, device.name end end return false end -- Recherche une scène correspondante -- -- et effectue l action nécessaire -- function doScene(scene, liliCommand) if (isEqual(scene.liliStartCommand, liliCommand)) then fibaro:startScene(scene.id) return true, scene.name elseif (isEqual(scene.liliStopCommand, liliCommand)) then fibaro:killScenes(scene.id) return true, scene.name end return false end -- Recherche un module correspondant -- -- et effectue l action nécessaire -- function doVirtual(device, liliCommand) local fullname = device.name .. " " for k, v in ipairs(device.properties.rows) do for j, w in ipairs(v.elements) do if (w.caption) then if (isEqual(fullname .. w.caption, liliCommand)) then fibaro:call(device.id, "pressButton", w.id) return true, fullname .. w.caption end end end end return false end function split(text) local sep = " " .. mot_cle_separateur .. " " local tx = text local t = {} while (tx:find(sep)) do local pos = tx:find(sep) table.insert(t, tx:sub(1, pos)) tx = tx:sub(pos+sep:len(), tx:len()) end if (tx:len() > 0) then table.insert(t, tx) end return t end -- Lecture des paramètres de cette scène -- local params = fibaro:args() fibaro:debug(json.encode(params)) local action = nil local number = nil if (params) then for k, v in ipairs(params) do if (v.action) then action = v.action end if (v.nombre) then number = tonumber(v.nombre) end end end -- Recherche une action a effectuer -- if (action) then local actions = split(string.lower(replaceChar(trim(action)))) local occurence = number or 1 for j = 1, occurence do for i = 1, #actions do liliCommand = trim(actions[i]) fibaro:debug("Utilisé : " .. liliCommand) if (synonymes[liliCommand]) then liliCommand = synonymes[liliCommand] if (type(liliCommand) == "function") then liliCommand() return end end local name = "< none >" local done = false local devices = api.get("/devices?&enabled=true") for i = 1, #devices do thisDone, n = doDevice(devices[i], liliCommand) if (thisDone) then name = n done = true end end if (not done) then local scenes = api.get("/scenes") for i = 1, #scenes do thisDone, n = doScene(scenes[i], liliCommand) if (thisDone) then name = n done = true end end end if (not done) then local devices = api.get("/devices?type=virtual_device&enabled=true") for i = 1, #devices do thisDone, n = doVirtual(devices[i], liliCommand) if (thisDone) then name = n done = true end end end if (done) then fibaro:debug("Device reconnue : " .. name) end end end end
  18. Steven

    Support Gea

    Alors oui, c'est totalement possible mais je n'ai plus ce genre de bouton, le mien à tenu 2 semaines. Je ne sais plus s'il faut utilisé CentralSceneEvent ou SceneActivation. J'arriverais donc plus t'aider mais c'est 100% faisable.
  19. Steven

    Support Gea

    Et je n'ai pas compris ce que tu souhaites faire par "l'appuie du bouton" ? EDIT : Compris. Tu souhaite que l'appuie sur un bouton d'un VD enclenche une ligne de GEA.Cette fonctionnalité n'existe pas car l'appuie sur un bouton d'un VD ne provoque rien sur la HC2 donc GEA n'est pas capable de capturer cela. Pour cela il faudrait, par exemple, que l'appuie provoque un changement d'une variable global ou d'un label.
  20. Steven

    Support Gea

    Il te manque des accolades sur cette ligne : GEA.Add({"DisableScenario", 103},{"Value+", 129, 10}, 120*60, "Si Puits allumé pendant plus de 2h et Scenario sur Off alors turn On SmartLightBureau", { {"EnableScenario",102} }) GEA.Add({{"DisableScenario", 103},{"Value+", 129, 10}}, 120*60, "Si Puits allumé pendant plus de 2h et Scenario sur Off alors turn On SmartLightBureau", { {"EnableScenario",102} })
  21. Steven

    Google Home

    Je vois 2 soucis : Le premier "allumer la lumière" qui fait une turnOff --- étrange non ? :-) Le deuxième, si tu fais un appel simple au turnOff ou turnOn, ce n'est pas un POST mais un GET que tu dois faire. (Tu peux supprimer le contenu de Body) Le POST est utilisé pour envoyé des arguments à un sénario. Ce que j'utilise pour ma fameuse scène "Jarvis" car c'est une seule scène qui pilote tout les appels IFTTT. Voilà, courage. Une fois que tu auras un applet IFTTT qui fonctionne, tu seras tout bon.
  22. Steven

    Google Home

    http://<IP CHROMECAST>:8008/apps/ Et voilà Tu cherche le mot running et c'est tout bon EDIT : Ca marche qu'avec Youtube
  23. Steven

    Support Gea

    Il manque aussi le 100 à la fin du RGB
  24. Steven

    Support Gea

    Essaie avec ces modifications (en gras) GEA.add({"Sensor+",132,30}, 30, "", { {"DisableScenario", 86}, {"DisableScenario", 102}, {"turnOff",124}, {"turnOff",125}, {"turnOff",53}, {"turnOff",114}, {"turnOff", 119}, {"turnOff", 14}, {"turnOff", 109}, {"rgb", 140, 204, 0, 255, 100} -- {"rgb", <id>, <rouge>, <vert>, <bleu>, <blanc>} }) GEA.add({{"Value+",140, 0},{"Sensor+",132,30}}, 3*60, "RVB 140 allumé depuis 3 mins, extinction", {{"turnOff", 140}}) GEA.add({"Sensor-",132,30}, 30, "TV veille, relance scriplights 86", {{"EnableScenario",86},{"EnableScenario",102}})
  25. @mprinfo Ca c'était en version 3.x en version 4.x ... j'utilise ceci : https://gea.piccand.me/doku.php/vg
×
×
  • Créer...