Aller au contenu

Voir Si Une Lumière Est Allumée Et Tout Éteindre


neliger

Messages recommandés

  • 3 semaines après...

en permettant l'utilisation des toExclude et toInclude, cela permet d'inclure ou d'exclure des devices qui doivent être considérés (ou non) dans le turn off général.

Dans mon exemple, j'ai exclu "Pisc", qui est un WP qui n'est PAS de type light, mais était reconnu comme tel.

J'ai tout essayé, puis je l'ai mis en les exclusions en désespoir de cause.

Ce n'est pas bien, mais cela fonctionne

Petite précision car àla relecture je me dis qu'il y a peut-être une chose àpréciser :

Avec la modification que je propose j'ai gardé la possibilité de forcer l'inclusion ou l'exclusion.

Par contre la détection risque de fonctionner mieux du premier coup pour la majorité.

Pour l'exclusion, bien sur il faudra toujours le spécifier

Sent from my SM-N910F using Tapatalk

Lien vers le commentaire
Partager sur d’autres sites

A mon tour de proposer ma version légèrement modifiée.

 

J'ai principalement ajouté un test de la value de chaque device afin de ne pas envoyer de turnOff inutilement sur le réseau Z-Wave.

Par contre, je n'ai pas testé avec les modules RGBW, je ne sais pas si ils ont une value ou pas.

----------------------------------
-- User Settings
----------------------------------

-- Modules à  exclure et fonction de traitement (pas raccordés à  des lumières)
-- Peut contenir un id ou un mot clés à  chercher dans le nom du module
toExclude = {}
toInclude = {}

----------------------------------
-- DO not change bellow this line
----------------------------------

-- Modules à  exclure ou inclure et fonction de traitement (pas raccordés à  des lumières)
-- Peut contenir un id ou un mot clés à  chercher dans le nom du module
-- toExclude = {72, "Dispo", "Volet", "Bubendorff"}
function shouldExclude(module)
	for _, v in pairs(toExclude) do
		if string.find(module.name, v) ~= nil or module.id == v then return true end
	end
	return false
end

function shouldInclude(module)
	for _, v in pairs(toInclude) do
		if string.find(module.name, v) ~= nil or module.id == v then return true end
	end
	return false
end

-- Récupération de la liste des modules
local HC2 = Net.FHttp("127.0.0.1", 11111)
local payload = "/api/devices"
local response, status, errorCode = HC2:GET(payload)
if tonumber(errorCode) == 0 and tonumber(status) == 200 and response ~= nil and response ~= "" then
	local json = json.decode(response)
	-- Boucle sur les modules
	for _, device in ipairs(json) do
		local ret = fibaro:get(device.id, 'isLight')
		local DeviceType = fibaro:getType(device.id)
		if ((type(ret) == "string" and string.find(ret, "1")) or DeviceType == "rgb_driver" or DeviceType == "com.fibaro.FGRGBW441M" or shouldInclude(device)) and not shouldExclude(device) then
			local DeviceValue = tonumber(fibaro:getValue(device.id, "value"))
			if DeviceValue and DeviceValue > 0 then
				-- Extinction
				local DeviceName = fibaro:getName(device.id)
				local RoomName = fibaro:getRoomNameByDeviceID(device.id)
				fibaro:debug(os.date("%d/%m/%Y").." : Found device "..device.id.." : "..DeviceName.." "..RoomName.." => call turnOff")
				fibaro:call(device.id, "turnOff")
			end
		end
	end
else
	fibaro:debug('<span style="display:inline;color:red;">status='..status..', errorCode='..errorCode..', payload='..payload..', response='..(response or "")..'</span>')
end

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

OK !

Oui effectivement je n'utilise pas la confirmation par double clic, car pour moi l'utilité de ce code, c'est d'être appelé automatiquement par GEA 1 minute après la mise en marche de l'alarme (donc quand on quitte le domicile).

Lien vers le commentaire
Partager sur d’autres sites

Je confirme que ça fonctionne toujours.

Voici le code avec le double click

----------------------------------
-- User Settings
----------------------------------
 
-- Modules àexclure et fonction de traitement (pas raccordés àdes lumières)
-- Peut contenir un id ou un mot clés àchercher dans le nom du module
toExclude = {}
toInclude = {}
 
----------------------------------
-- DO not change bellow this line
----------------------------------
 
-- Modules àexclure ou inclure et fonction de traitement (pas raccordés àdes lumières)
-- Peut contenir un id ou un mot clés àchercher dans le nom du module
-- toExclude = {72, "Dispo", "Volet", "Bubendorff"}
function shouldExclude(module)
	for _, v in pairs(toExclude) do
		if string.find(module.name, v) ~= nil or module.id == v then return true end
	end
	return false
end
 
function shouldInclude(module)
	for _, v in pairs(toInclude) do
		if string.find(module.name, v) ~= nil or module.id == v then return true end
	end
	return false
end

----------------------------------
-- double click pour confirmer
----------------------------------

-- ----------------------------
-- Ne pas toucher --
-- ----------------------------
function confirm(msg, labelId, secondes)
    local current = fibaro:getValue(fibaro:getSelfId(), "ui."..labelId..".value")
    if (current == msg) then
        fibaro:call(fibaro:getSelfId(), "setProperty", "ui."..labelId..".value", " ")
    	return true
    else
        fibaro:call(fibaro:getSelfId(), "setProperty", "ui."..labelId..".value", msg)
        fibaro:sleep(secondes*1000)
        fibaro:call(fibaro:getSelfId(), "setProperty", "ui."..labelId..".value","")
	return fibaro:getValue(fibaro:getSelfId(), "ui."..labelId..".value") == " "
    end
end
 
-- ----------------------------
-- A vous de jouer ---
-- ----------------------------
local label_id = "lblMessage"               -- l'ID du label qui recevra le message
local duree = 4                             -- la durée max entre 2 clique (en seconde)
local message = "Ré-appuyer dans les "..duree.." secondes pour confirmer" -- le message de confirmation

if ( confirm(message, label_id, duree) ) then
    fibaro:log("Confirmé")
	-- votre code ici en cas de confirmation
	-- Récupération de la liste des modules
	local HC2 = Net.FHttp("127.0.0.1", 11111)
	local payload = "/api/devices"
	local response, status, errorCode = HC2:GET(payload)
		if tonumber(errorCode) == 0 and tonumber(status) == 200 and response ~= nil and response ~= "" then
			local json = json.decode(response)
			-- Boucle sur les modules
			for _, device in ipairs(json) do
				local ret = fibaro:get(device.id, 'isLight')
				local DeviceType = fibaro:getType(device.id)
				if ((type(ret) == "string" and string.find(ret, "1")) or DeviceType == "rgb_driver" or DeviceType == "com.fibaro.FGRGBW441M" or shouldInclude(device)) and not shouldExclude(device) then
					local DeviceValue = tonumber(fibaro:getValue(device.id, "value"))
					if DeviceValue and DeviceValue > 0 then
						-- Extinction
						local DeviceName = fibaro:getName(device.id)
						local RoomName = fibaro:getRoomNameByDeviceID(device.id)
						fibaro:debug(os.date("%d/%m/%Y").." : Found device "..device.id.." : "..DeviceName.." "..RoomName.." => call turnOff")
						fibaro:call(device.id, "turnOff")
					end
				end
			end
		else
			fibaro:debug('<span style="display:inline;color:red;">status='..status..', errorCode='..errorCode..', payload='..payload..', response='..(response or "")..'</span>')
		end
else 
     fibaro:log("Annulé")  
     -- votre code ici en cas d'annulation
end
  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

Merci à  Neliger, Lazer, Seb et les autres. Fort utile ce script :-)

 

Ce qui serait pas mal c'est comme on teste de toute façon l'état avant d'envoyer l'ordre, ce serait de stocker l'état ID:Etat ou la valeur des dimmer par exemple et le stocker dans un tableau.

Ensuite on pourrait avoir un deuxième bouton pour restaurer l'état des éclairages comme il était avant de tout éteindre. Ce serait pas mal en cas de coupure par erreur.

 

Dans la même idée et après avoir installé le générateur d'ID (très utilise aussi!!). Un VD qui serait un générateur d'état. On pourrait sauver l'état des tous les éclairage et éventuellement d'autres devices dans un tableau, le sauvegarder et ensuite l'utiliser pour charger un sénario. Ca permettrait à  un instant T ou on trouve que la maison est bien "configuré" pour une occasion particulière de sauvegarder son état et pouvoir le restaurer à  un autre moment...

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

bon les gars, il faut que je mette la pédale douce pour l'instant.

J'ai énormément de retard à  rattraper et comme le dit Lazer, perso j'utilise peux ce VD, mais si je devais le faire, ce serait pour "faire avancer la science".

Ceci dit, j'ai lu plus haut que le double click n'était pas implémentés chez certains à  cause de GEA.

Et si dans les options de l'instruction GEA on faisait appel 2 fois de suite au bouton, c'est comme s'il y avait un double click ? Comme cela on garde la sécurité du fonctionnement en manuel éventuel ? 

Qui aurait testé ?

Lien vers le commentaire
Partager sur d’autres sites

ou 

i on pourrais faire dans gea function, push button, sleep 1s, push button.

Mais bon, je prèfère pas, les sleep doivent rester exceptionnels

j'ai solutionné l'histoire en rajoutant un deuxième bouton, tout en dessous, "invisible"

Lien vers le commentaire
Partager sur d’autres sites

  • 1 mois après...

je vous confirme, le double click n'est pas incompatible avec GEA, et il n'est pas nécessaire de rajouter un bouton spécial.

il suffit de répéter l'instruction :

cette ligne étteint toutes les lumières systématiquemment (utile que pour le test  :P )

   GEA.add (true, 1, "", {{"VirtualDevice", DeviceID["TOUTES_LUMIERES"], 2}, {"VirtualDevice", DeviceID["TOUTES_LUMIERES"], 2}, {"Repeat"}})
  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

Bon, y'a du nouveau sous les tropiques...

J'ai soumis un bug sur bugzilla: http://bugzilla.fibaro.com/print_bug_page.php?bug_id=3631

le bug est quand on ajoute un nouveau device, que l'on dit bien que le device est lightning/éclairage, eh bien dans la db ce n'est pas mis à  jour (uniquement après un reboot)

Or c'est cette méthode qui est utilisée pour le moment...

je m'en suis rendu comte car mes nouveau devices ne s'éteignaient pas... mais après un reboot c'était de nouveau ok...

Donc un jour ou l'autre en V5, soit demain... huhuhu... :(je ne sais pas si c'est un rire ou une grimace) ça ne fonctionnera plus.

 

Voici la réponse de roszak:

Property isLight is not used any more, if device controls lightning it will get interface <light>.

 

alors j'ai un peu regardé, et je n'ai pas trouvé...

Voici le retour pour un de mes dimmer:

  "interfaces": [
    "energy",
    "power",
    "zwave",
    "zwaveAlarm",
    "zwaveConfiguration",
    "zwaveFirmwareUpdate",
    "zwaveMultiChannelAssociation",
    "zwaveProtection",
    "zwaveSceneActivation",
    "zwaveSwitchAll"
  ],

quelqu'un à  une idée où chercher ?

 

edit: tip: regarder les propriétés du module zwave actif ;-)

ça donne ça:

  "interfaces": [
    "energy",
    "light",
    "power",
    "zwave",
    "zwaveAlarm",
    "zwaveMultiChannelAssociation",
    "zwaveSceneActivation"
  ],

donc c bon.

 

YAPLUKAmodifier/adapter le VD et YFOKON teste ;-)

Lien vers le commentaire
Partager sur d’autres sites

donc quand on demande la liste des devices, voici le retour pour un de mes dimmer:

"id": 1965,
    "name": "Salle a Manger",
    "roomID": 2,
    "type": "com.fibaro.multilevelSwitch",
    "baseType": "com.fibaro.binarySwitch",
    "enabled": true,
    "visible": true,
    "isPlugin": false,
    "parentId": 1964,
    "remoteGatewayId": 0,
    "viewXml": false,
    "configXml": false,
    "interfaces": [
      "light",
      "zwave",
      "zwaveConfiguration",
      "zwaveFirmwareUpdate",
      "zwaveMultiChannelAssociation",
      "zwaveSceneActivation",
      "zwaveSwitchAll"
    ],
    "properties": {
      "zwaveCompany": "Fibargroup",
      "zwaveInfo": "3,3,52",
      "zwaveVersion": "2.2",
      "pollingTimeSec": 0,
      "configured": "true",
      "dead": "false",
      "deviceControlType": "23",
      "deviceIcon": "15",
      "emailNotificationID": "0",
      "emailNotificationType": "0",
      "endPointId": "0",
      "isLight": "true",
      "liliOffCommand": "",
      "liliOnCommand": "",
      "log": "",
      "logTemp": "",
      "manufacturer": "",
      "markAsDead": "true",
      "model": "",
      "nodeId": "102",
      "parametersTemplate": "235",
      "productInfo": "1,15,1,0,16,10,2,2",
      "pushNotificationID": "0",
      "pushNotificationType": "0",
      "remoteGatewayId": "0",
      "saveLogs": "true",
      "sceneActivation": "0",
      "smsNotificationID": "0",
      "smsNotificationType": "0",
      "switchAllMode": "SWITCH_ALL_INCLUDED_IN_THE_ALL_ON_ALL_OFF_FUNCTIONALITY",
      "useTemplate": "true",
      "userDescription": "",
      "value": "0"
    },
    "actions": {
      "getParameter": 1,
      "reconfigure": 0,
      "setParameter": 2,
      "setValue": 1,
      "turnOff": 0,
      "turnOn": 0,
      "updateFirmware": 1
    },
    "created": 1446762296,
    "modified": 1446762296,
    "sortOrder": 484
  }

on a donc bien properties.islight=true

mais on a aussi 

"interfaces": ["light", ...
 
Pour les ceusque qui ont du temps, je vous propose de jeter un coup d'oeil, par exemple avec les devices qui vous posent problème..
Moi j'ai vite fait le tour, et a part les rgbw, tous mes modules qui contrôlent des lampes on light dans interfaces. (wallplug, dimmers)
 
Manière simple: via le toolkit, click droit et show raw data
Lien vers le commentaire
Partager sur d’autres sites

T'es trop fort :)

 

Je confirme, j'ai ajouté un dimmer il y a quelques semaines, qui a bien le property->light, mais n'a pas le islight=true (qui sera ajouté au prochain reboot si j'ai bien suivi).

 

C'est pas la première fois que Fibaro modifie son API, c'est vraiment galère....

En même temps la nouvelle API est plus logique, c'est dans <interfaces> qu'on retrouve toutes les possibilités de chaque module, c'est ce dont je me sert pour le VD Domocharts.

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

T'es trop fort :)

 

Je sais :rolleyes: , ma femme me le dit souvent :rolleyes: , mais elle ajoute qu'il ne me manque que l'humilité pour être parfait... huhuuuu  ;)  :P  :D  :D  :2:  :2:

et là  je lui réponds... mais à  quoi ça sert d'être parfait si on doit être humble ?  :P

  • Upvote 2
Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...