971jmd Posté(e) le 4 juillet 2016 Signaler Posté(e) le 4 juillet 2016 Pour tester ta ligne, décompose la GEA.add({notVacation, notSick, atWork}, 30, "test1") GEA.add({notVacation, notSick, atWork}, 30, "", {{"VirtualDevice", id["MODE_MAISON"], 6}}) etc
Sakkhho Posté(e) le 4 juillet 2016 Signaler Posté(e) le 4 juillet 2016 merci du support, j'ai edité mon message en meme temps que ta réponse .. pas la faute de fibaro, ni de GEA mais la mienne comme souvent quand ca bug :-)
971jmd Posté(e) le 4 juillet 2016 Signaler Posté(e) le 4 juillet 2016 Ok génial Envoyé de mon iPhone en utilisant Tapatalk
971jmd Posté(e) le 4 juillet 2016 Signaler Posté(e) le 4 juillet 2016 Ok génial Envoyé de mon iPhone en utilisant Tapatalk
pepite Posté(e) le 4 juillet 2016 Signaler Posté(e) le 4 juillet 2016 @jerome, super ca fonctionne Augmente le nombre d'instances de ta scene GEA, tu peux aller jusqu' a 10 ;-) @971jmd -- Si consommation superieure à 40 {"Sensor+", id2["TV___AMPLI"], 40} -- ET si le retour de la variable est true : (variable à false par defaut) {"function",function() return isLongAwayOrNightAllOff_AMPLI end} -- ALORS remise de la variable à false {"function",function() isLongAwayOrNightAllOff_AMPLI = false end}
jerome_clamart Posté(e) le 4 juillet 2016 Signaler Posté(e) le 4 juillet 2016 Pepite, j'ai monté de 2 a 4 les instances et plus de souci . Merci pour ton aide. j'ai une sonde d'inondation FGFS 101, est ce que la ligne ci dessous devait fonctionner ? GEA.add(id["S_INONDATION"], -1, "Alerte sonde d'inondation buanderie #time# le #date#", {{"Armed"}, {"Portable", Mobileid["IPHONE_JEROME"]}}) Je me demande s'il faut "Armed" ou"Value" pour déclencher Merci de votre aide
sebcbien Posté(e) le 4 juillet 2016 Signaler Posté(e) le 4 juillet 2016 @Zebcbien j'essaye de comprendre le code suivant change à true la variable isLongAwayOrNightAllOff_AMPLI qui par defaud est à false isLongAwayOrNightAllOff_AMPLI = false GEA.add(estAwayOrNigh_All_Off, 30*60, "", {{"function",function() isLongAwayOrNightAllOff_AMPLI = true end}}) -- après 30 minutes met long away à true mes la je comprend pas EA.add({{"Sensor+", id2["TV___AMPLI"], 40},{"function",function() return isLongAwayOrNightAllOff_AMPLI end}}, 60, "", {{"function",function() isLongAwayOrNightAllOff_AMPLI = false end}}) Quand gea se charge, il met en mémoire toute les lignes qui ne sont pas -1 (donc pas les instantanées) Au premier chargement donc (save ou boot de la box) il met la variable à false Ensuite la ligne 30*60 va mettre cette variable à true après 30 minutes d'absence (maison en mode nuit ou away) Cette variable ser mise ensuite à false si gea lance un scénario. Si on est en dehors des heures de lancement des scénarios matin et soir, la variable va rester à true indéfiniment, jusqu'a arriver dans les tranches d'heures. J'ai donc prévu de passer à false avec cette ligne dans deux cas: - Si on rentre, et que l'on allume l'ampli "à la main", il va consommer plus de 40W et va donc désactiver la variable isLongAwayOrNightAllOff_AMPLI cela permet de désactiver l'automatisme quand on veut écouter autre chose que la station radio habituelle. - Cela permet aussi d'empècher que si on rentre la maison en dehors des heures prévues et que l'on écoute/regarde quelquechose, que à 17H00, comme la variable à été mise à true, gea ne décide de "changer de poste". Tout ça toujours dans une optique WAF, sentir les besoins et ne pas avoir à sortir son téléphone de sa poche ;-) Si je n'ai pas été assez clair, n'hésite pas :-)
sebcbien Posté(e) le 4 juillet 2016 Signaler Posté(e) le 4 juillet 2016 salut une tout petit question est-que GEA.add({"Time", "14:16", "14:17"}..... peut servir de déclencheur ? Non, d e mémoire, tu dois mettre true comme déclencheur 60 pour la duree et l'heure en option.Il y a des exemples de Steven au début du gea d'origine sur github Sent from my Note4 1
971jmd Posté(e) le 5 juillet 2016 Signaler Posté(e) le 5 juillet 2016 bonjour a tous j'ai une une autre question le code suivant éteint des lampes mai le debug je le trouve pas très optimisée y-a-t-il une autre solution pour info la solution de for i=1 , #groupeLampes do........ fonctionne pas très bien je sous 4.080 EA.add ({"SceneActivation", id["LED_ENTREE"] , 22}, -1, "", { {"turnOff", id["LED_CUISINE"]}, {"turnOff", id["Eclairage_paillasse"]}, {"turnOff", id["COULOIR_CH"]}, {"turnOff", id["COULOIR_BUREAU"]}, {"turnOff", id["PRISE_EXT_PARKING"]}, {"turnOff", id["LAMPE_SALON"]}, {"turnOff", id["SAPIN_NOEL"]}, {"turnOff", id["LED_TV"]}, {"turnOff", id["VENTILO_SALON"]}, {"turnOff", id["LED_ENTREE"]}, {"turnOff", id["EXTERIEUR_AVANT"]}, {"turnOff", id["ECLAIRAGE_PISCINE"]}, {"turnOff", id["CONTRE_NAGE"]}, {"turnOff", id["SPOT_BARBECUE_"]}, {"turnOff", id["AJOUPA"]}, {"turnOff", id["TERRASSE_AR"]}, {"turnOff", id["APPLIQUE_TERRASSE"]}, {"turnOff", id["VENTILE_TERRASSE"]}, {"turnOff", id["VENTIL_2"]}, {"turnOff", id["PRISE_JARDIN"]}, {"turnOff", id["LAMPE_AR"]}, {"turnOff", id["JARDIN"]}, {"turnOff", id["LAMPE_BUGALOW"]}, {"turnOff", id["APPLIQUE_CENTRAL"]}}) Debug [DEBUG] 22:21:02: GEA Version 5.40 : en exécution... [DEBUG] 22:21:02: [ DODO=1 ] sendActions : traitement des actions (ID: 3) [turnOff,154] [turnOff,9] [turnOff,65] [turnOff,55] [turnOff,93] [turnOff,182] [turnOff,86] [turnOff,61] [turnOff,147] [turnOff,50] [turnOff,41] [turnOff,133] [turnOff,131] [turnOff] [turnOff,89] [turnOff,160] [turnOff,107] [turnOff,29] [turnOff,111] [turnOff,137] [turnOff,141] [turnOff,115] [turnOff,45] [turnOff,98] [Global,DODO,0] [DEBUG] 22:21:02: [ DODO=1 ] sendActions : !ACTION! : turnOff (ID: 3) [turnOff,154] [turnOff,9] [turnOff,65] [turnOff,55] [turnOff,93] [turnOff,182] [turnOff,86] [turnOff,61] [turnOff,147] [turnOff,50] [turnOff,41] [turnOff,133] [turnOff,131] [turnOff] [turnOff,89] [turnOff,160] [turnOff,107] [turnOff,29] [turnOff,111] [turnOff,137] [turnOff,141] [turnOff,115] [turnOff,45] [turnOff,98] [Global,DODO,0] [DEBUG] 22:21:02: [ DODO=1 ] sendActions : !ACTION! : turnOff (ID: 3) [turnOff,154] [turnOff,9] [turnOff,65] [turnOff,55] [turnOff,93] [turnOff,182] [turnOff,86] [turnOff,61] [turnOff,147] [turnOff,50] [turnOff,41] [turnOff,133] [turnOff,131] [turnOff] [turnOff,89] [turnOff,160] [turnOff,107] [turnOff,29] [turnOff,111] [turnOff,137] [turnOff,141] [turnOff,115] [turnOff,45] [turnOff,98] [Global,DODO,0] [DEBUG] 22:21:02: [ DODO=1 ] sendActions : !ACTION! : turnOff (ID: 3) [turnOff,154] [turnOff,9] [turnOff,65] [turnOff,55] [turnOff,93] [turnOff,182] [turnOff,86] [turnOff,61] [turnOff,147] [turnOff,50] [turnOff,41] [turnOff,133] [turnOff,131] [turnOff] [turnOff,89] [turnOff,160] [turnOff,107] [turnOff,29] [turnOff,111] [turnOff,137] [turnOff,141] [turnOff,115] [turnOff,45] [turnOff,98] [Global,DODO,0] [DEBUG] 22:21:02: [ DODO=1 ] sendActions : !ACTION! : turnOff (ID: 3) [turnOff,154] [turnOff,9] [turnOff,65] [turnOff,55] [turnOff,93] [turnOff,182] [turnOff,86] [turnOff,61] [turnOff,147] [turnOff,50] [turnOff,41] [turnOff,133] [turnOff,131] [turnOff] [turnOff,89] [turnOff,160] [turnOff,107] [turnOff,29] [turnOff,111] [turnOff,137] [turnOff,141] [turnOff,115] [turnOff,45] [turnOff,98] [Global,DODO,0] [DEBUG] 22:21:02: [ DODO=1 ] sendActions : !ACTION! : turnOff (ID: 3) [turnOff,154] [turnOff,9] [turnOff,65] [turnOff,55] [turnOff,93] [turnOff,182] [turnOff,86] [turnOff,61] [turnOff,147] [turnOff,50] [turnOff,41] [turnOff,133] [turnOff,131] [turnOff] [turnOff,89] [turnOff,160] [turnOff,107] [turnOff,29] [turnOff,111] [turnOff,137] [turnOff,141] [turnOff,115] [turnOff,45] [turnOff,98] [Global,DODO,0]
Steven Posté(e) le 5 juillet 2016 Auteur Signaler Posté(e) le 5 juillet 2016 Tu peux remplacer par ceci : GEA.add({"SceneActivation", id["LED_ENTREE"] , 22}, -1, "", { {"function", function() for _,v in ipairs(fibaro:getDevicesId({properties = {isLight=true}})) do fibaro:call(v, "turnOff") end end } }) 1
sebcbien Posté(e) le 5 juillet 2016 Signaler Posté(e) le 5 juillet 2016 Who jooooli ! Tout un VD en une ligne GEA http://www.domotique-fibaro.fr/index.php/topic/4251-voir-si-une-lumi%C3%A8re-est-allum%C3%A9e-et-tout-%C3%A9teindre/page-13?hl=%2Btoutes+%2Blumieres#entry95409
Steven Posté(e) le 5 juillet 2016 Auteur Signaler Posté(e) le 5 juillet 2016 Cette nouvelle fonction fait gagné par mal de code fibaro:getDevicesId({properties = {isLight=true}})
pepite Posté(e) le 5 juillet 2016 Signaler Posté(e) le 5 juillet 2016 (modifié) oui elle est TOP, Ce qui confirme qu'il faudrait un petit topic reunissant les nouvelles infos API ;-), je vais essayer de l'initier ;-) avec ce code, comment feriez vous pour tester si c'est allumé avant d'eteindre ? Comme ceci ca fonctionnerait les experts ? for _,v in ipairs(fibaro:getDevicesId({properties = {isLight=true, value > 0}})) do fibaro:call(v, "turnOff") end le Maitre a parlé ;-) @jerome Je dirais value, mais un petit conseil, prends l'habitude de regarder le json du module qui regroupe toutes les propriétés http://iphc2/api/devices/iddumodule Modifié le 5 juillet 2016 par pepite 1
sebcbien Posté(e) le 5 juillet 2016 Signaler Posté(e) le 5 juillet 2016 Normalement, si la lampe est éteinte, la box ne renvoie pas l'ordre. Tu peux vérifier en jetant un coup d'œil àla led bleue sur la façade de la box. Demande une extinction d'une lampe éteinte, et la led ne devrait pas clignotter. Avec certaines versions de firmware ca ne fonctionnait pas et c'est pour ça que l'on rajoutait le test, mais ça devrait être réglé maintenant Sent from my Note4
pepite Posté(e) le 5 juillet 2016 Signaler Posté(e) le 5 juillet 2016 ah bon ? cool tu viens de m'apprendre qqch mercii beaucoup @sebcbien Je pensais que l'ordre etait envoye sytematiquement sans test ;-)
Steven Posté(e) le 5 juillet 2016 Auteur Signaler Posté(e) le 5 juillet 2016 Si tu veux faire le contrôle toi même, il faut simplement se baser sur la "value". Si cette dernière est > 0 alors la lampe est allumée. Pour une fois que c'est simple
pepite Posté(e) le 5 juillet 2016 Signaler Posté(e) le 5 juillet 2016 Oui Steven, regarde la proposition de code de mon post modifié ca fonctionnerait ? avec la nouvelle fonction ?
Steven Posté(e) le 5 juillet 2016 Auteur Signaler Posté(e) le 5 juillet 2016 J'avais pas vu le value > 0 Malheureusement, non, cette fonction "getDevicesId" ne permet aucun calcul, elle ne fait que de filtrer les données provenant de http://../api/devices Il faut donc que les valeur soient exactement les mêmes. Pour info, voici la méthode : fibaro.getDevicesId = function(self, filter) if type(filter) ~= 'table' or (type(filter) == 'table' and next(filter) == nil) then return fibaro:getIds(fibaro:getAllDeviceIds()) end local args = '/?' for c, d in pairs(filter) do if c == 'properties' and d ~= nil and type(d) == 'table' then for a, b in pairs(d) do if b == "nil" then args = args .. 'property=' .. tostring(a) .. '&' else args = args .. 'property=[' .. tostring(a) .. ',' .. tostring( .. ']&' end end elseif c == 'interfaces' and d ~= nil and type(d) == 'table' then for a, b in pairs(d) do args = args .. 'interface=' .. tostring( .. '&' end else args = args .. tostring(c) .. "=" .. tostring(d) .. '&' end end args = string.sub(args, 1, -2) return fibaro:getIds(api.get('/devices' .. args)) end 1
Shyrka973 Posté(e) le 5 juillet 2016 Signaler Posté(e) le 5 juillet 2016 Salut Steven, Comment fais-tu pour avoir le code de certaines fonctions de Fibaro ? Merci.
jerome_clamart Posté(e) le 5 juillet 2016 Signaler Posté(e) le 5 juillet 2016 bonjour à tous, @Pepite, je regarde le JSON (lorsque je suis dans GEA, sur la partie droite de mon écran , j'ai les modules et lorsque je passes dessus avec la souris, cela m’indique les méthodes et variables propres au module. Dans le cas dont je parle, j'ai 2 variables mais ce que je ne sais pas c'est laquelle prendre (sauf a faire un test pour voir de façon empirique). pour mon FGFS101 j'ai donc "armed" et "value". Je vais lui mettre les pieds dans l'eau pour voir qui change de valeur. Merci pour ton aide.
971jmd Posté(e) le 5 juillet 2016 Signaler Posté(e) le 5 juillet 2016 Tu peux remplacer par ceci : GEA.add({"SceneActivation", id["LED_ENTREE"] , 22}, -1, "", { {"function", function() for _,v in ipairs(fibaro:getDevicesId({properties = {isLight=true}})) do fibaro:call(v, "turnOff") end end } }) Merci Chef dans une VD j'ai rajouter le code suivant pour m'asuré que la valeur de mes FGD212 est bien à 99% alors OFF if(v.properties.value <= "99") then fibaro:call(v.id, "turnOff"); end
971jmd Posté(e) le 5 juillet 2016 Signaler Posté(e) le 5 juillet 2016 est-il possible avec un code Json, non pas éteindre des lampes comme nous venons de le réaliser mai MODIFIER une propriété ?
pepite Posté(e) le 5 juillet 2016 Signaler Posté(e) le 5 juillet 2016 Regarde la, @jojo l'avait déjà fait : http://www.domotique-fibaro.fr/index.php/topic/3839-modification-des-propri%C3%A9t%C3%A9s-dun-device/
Steven Posté(e) le 5 juillet 2016 Auteur Signaler Posté(e) le 5 juillet 2016 Salut Steven, Comment fais-tu pour avoir le code de certaines fonctions de Fibaro ? Merci. Il n'y a plus de secret à cela. Tu vas télécharger la mise à jour : http://updatehc2.fibaro.com/4.082/ Tu la dezippe et dans opt/fibaro tu trouveras le fichier FibaroSceneAPI.lua qui contient les fonctions fibaro: utilisable en lua. Voilà Ci-dessous copie de la version 4.082 HomeCenter = { PopupService = { publish = function(request) local response = api.post('/popups', request) return response end }, SystemService = { reboot = function() local client = net.HTTPClient() client:request("http://localhost/reboot.php") end, shutdown = function() local client = net.HTTPClient() client:request("http://localhost/shutdown.php") end } } fibaro = {} fibaro.debug = function(self, text) print(text) end fibaro.sleep = function(self, time) __fibaroSleep(time) end function __convertToString(value) if (type(value) == 'boolean') then if (value) then return '1' else return '0' end elseif (type(value) == 'number') then return tostring(value) elseif (type(value) == 'table') then return json.encode(value) end return value end function __assert_type(value, typeOfValue) if (type(value) ~= typeOfValue) then error("Assertion failed: Expected " .. typeOfValue, 3) end end function __fibaro_get_device(deviceID) __assert_type(deviceID, "number") return api.get("/devices/" .. deviceID) end function __fibaro_get_room(roomID) __assert_type(roomID, "number") return api.get("/rooms/" .. roomID) end function __fibaro_get_scene(sceneID) __assert_type(sceneID, "number") return api.get("/scenes/" .. sceneID) end function __fibaro_get_global_variable(varName) __assert_type(varName, "string") return api.get("/globalVariables/" .. varName) end function __fibaro_get_device_property(deviceId, propertyName) return api.get("/devices/" .. deviceId .. "/properties/" .. propertyName) end -- -- getting device properties -- fibaro.get = function(self, deviceID, propertyName) local property = __fibaro_get_device_property(deviceID, propertyName) if (property == nil) then return nil end return __convertToString(property.value), property.modified end fibaro.getValue = function(self, deviceID, propertyName) local value = fibaro:get(deviceID, propertyName) return value end fibaro.getModificationTime = function(self, deviceID, propertyName) local _, modified = fibaro:get(deviceID, propertyName) return modified end -- -- global variables -- fibaro.getGlobal = function(self, varName) local globalVar = __fibaro_get_global_variable(varName) if (globalVar == nil) then return nil end return globalVar.value, globalVar.modified end fibaro.getGlobalValue = function(self, varName) local globalVar = __fibaro_get_global_variable(varName) if (globalVar == nil) then return nil end return globalVar.value end fibaro.getGlobalModificationTime = function(self, varName) local globalVar = __fibaro_get_global_variable(varName) if (globalVar == nil) then return nil end return globalVar.modified end fibaro.setGlobal = function(self, varName, value) __assert_type(varName, "string") local data = {["value"]=tostring(value), ["invokeScenes"]=true} api.put("/globalVariables/" .. varName, data) end -- -- scenes -- fibaro.countScenes = function(self, sceneID) sceneID = sceneID or __fibaroSceneId local scene = __fibaro_get_scene(sceneID) if (scene == nil) then return 0 end return scene.runningInstances end fibaro.isSceneEnabled = function(self, sceneID) local scene = __fibaro_get_scene(sceneID) if (scene == nil) then return nil end return scene.enabled end fibaro.startScene = function(self, sceneID) api.post("/scenes/" .. sceneID .. "/action/start") end fibaro.killScenes = function(self, sceneID) api.post("/scenes/" .. sceneID .. "/action/stop") end fibaro.setSceneEnabled = function(self, sceneID, enabled) __assert_type(sceneID, "number") __assert_type(enabled, "boolean") local data = { id = sceneID, enabled = enabled } api.put("/scenes/" .. sceneID, data) end -- -- other -- fibaro.getRoomID = function(self, deviceID) local dev = __fibaro_get_device(deviceID) if (dev == nil) then return nil end return dev.roomID end fibaro.getSectionID = function(self, deviceID) local dev = __fibaro_get_device(deviceID) if (dev == nil) then return nil end if (dev.roomID ~= 0) then return __fibaro_get_room(dev.roomID).sectionID end return 0 end fibaro.getType = function(self, deviceID) local dev = __fibaro_get_device(deviceID) if (dev == nil) then return nil end return dev.type end fibaro.abort = function(self) os.exit() end fibaro.getSourceTrigger = function(self) return __fibaroSceneSourceTrigger end fibaro.getSourceTriggerType = function(self) return __fibaroSceneSourceTrigger["type"] end fibaro.calculateDistance = function(self, position1, position2) __assert_type(position1, "string") __assert_type(position2, "string") return __fibaroCalculateDistance(position1, position2) end fibaro.call = function(self, deviceID, actionName, ...) deviceID = tonumber(deviceID) __assert_type(actionName, "string") args="" for i, v in ipairs({...}) do args = args .. '&arg' .. tostring(i) .. '=' .. urlencode(tostring(v)) end api.get("/callAction?deviceID=" .. deviceID .. "&name=" .. actionName .. args) end function urlencode(str) if (str) then str = string.gsub (str, "([^%w])", function (c) return string.format ("%%%02X", string.byte(c)) end) end return str end fibaro.getName = function(self, deviceID) __assert_type(deviceID, 'number') local dev = __fibaro_get_device(deviceID) if (dev == nil) then return nil end return dev.name end fibaro.getRoomName = function(self, roomID) __assert_type(roomID, 'number') local room = __fibaro_get_room(roomID) if (room == nil) then return nil end return room.name end fibaro.getRoomNameByDeviceID = function(self, deviceID) __assert_type(deviceID, 'number') local dev = __fibaro_get_device(deviceID) if (dev == nil) then return nil end local room = __fibaro_get_room(dev.roomID) if (dev.roomID == 0) then return "unassigned" else if (room == nil) then return nil end end return room.name end fibaro.wakeUpDeadDevice = function(self, deviceID) __assert_type(deviceID, 'number') fibaro:call(1, 'wakeUpDeadDevice', deviceID) end --[[ Expected input: { name: value, //: require name to be equal to value properties: { //: volume: "nil", //: require property volume to exist, any value ip: "127.0.0.1" //: require property ip to equal 127.0.0.1 }, interface: ifname //: require device to have interface ifname } ]]-- fibaro.getDevicesId = function(self, filter) if type(filter) ~= 'table' or (type(filter) == 'table' and next(filter) == nil) then return fibaro:getIds(fibaro:getAllDeviceIds()) end local args = '/?' for c, d in pairs(filter) do if c == 'properties' and d ~= nil and type(d) == 'table' then for a, b in pairs(d) do if b == "nil" then args = args .. 'property=' .. tostring(a) .. '&' else args = args .. 'property=[' .. tostring(a) .. ',' .. tostring( .. ']&' end end elseif c == 'interfaces' and d ~= nil and type(d) == 'table' then for a, b in pairs(d) do args = args .. 'interface=' .. tostring( .. '&' end else args = args .. tostring(c) .. "=" .. tostring(d) .. '&' end end args = string.sub(args, 1, -2) return fibaro:getIds(api.get('/devices' .. args)) end fibaro.getAllDeviceIds = function(self) return api.get('/devices/') end fibaro.getIds = function(self, devices) local ids = {} for _, a in pairs(devices) do if a ~= nil and type(a) == 'table' and a['id'] ~= nil and a['id'] > 3 then table.insert(ids, a['id']) end end return ids end 1
Messages recommandés