Aller au contenu

Messages recommandés

Posté(e)

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

Posté(e)

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 :-)

Posté(e)

@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}
Posté(e)

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

Posté(e)

 

@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 :-)

Posté(e)

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

  • Upvote 1
Posté(e)

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]

Posté(e)

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
   }	
})

  • Upvote 1
Posté(e) (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é par pepite
  • Upvote 1
Posté(e)

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

Posté(e)

ah bon ? cool tu viens de m'apprendre qqch mercii beaucoup @sebcbien

 

Je pensais que l'ordre etait envoye sytematiquement sans test ;-)

Posté(e)

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  ;)

Posté(e)

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
  • Upvote 1
Posté(e)

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.

Posté(e)

 

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
    
Posté(e)

est-il possible avec un code Json, non pas éteindre des lampes comme nous venons de le réaliser mai MODIFIER une propriété ?

Posté(e)

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
 
  • Upvote 1
×
×
  • Créer...