Aller au contenu

Messages recommandés

Posté(e)
Bonjour, 
 
Comme conseillé par "PEPITE" je mets a dispo le VD pour activer tous les modules types FGMS / FGK en mode "armed" et remonte une info si un des modules n'est pas passé "armed" idem pour le bouton désactivé, avec push SMS. 
 
Fichier : Alarm.vfib.zip
 
ex : ci-dessous. 
 
post-2213-0-17135000-1435086512_thumb.png
 
-- Pour info -- , 
 
J’ai créé ce module grâce au code de SPEEDY, en modifiant une infime partie. Un grand MERCI à  lui et aux tutos trouvés sur ce forum qui m'ont été d’une aide précieuse ;o)  -- 
 
------------------
 
pour avoir un retour chariot dans chaque étiquette j'ai ajouté le code suivant :
 
nom_de_ma_variable = no_de_ma_variable .. ("\n") .. temp_ID
!! WARNING !!
Fonctionne ==>  via la page "Home" par exemple .... 

Fonctionne PAS ==> en mode débug / Dans le mode avancé de la VD / App smartphone ( iOS ) 

 

------- / 

 

Pour avoir une alert SMS sur le retour de l'etat une fois armed / disarmed. 

-- À ajouter dans le code du bouton "Activé".
fibaro:call(ID_de_votre_mobile, "sendPush","SENSORS"..Not_Armed_Devices_ID)
 
-- À ajouter dans le code du bouton "Désactivé".
fibaro:call(ID_de_votre_mobile, "sendPush","SENSORS"..Not_Disarmed_Devices_ID)

------ / 

 

ci-dessous le code du bouton "Activé"

HC2 = Net.FHttp("127.0.0.1",11111);
 
local debug = false  --Enable debug..
 
local Not_Armed_Devices_ID = ""
 
-- Function for getting status of devices
Get_Devices_Status = function() 
	-- get response from H2 about all your devices
	local response ,status, errorCode = HC2:GET("/api/devices")
 
	-- Look for error
	if errorCode == 0 then
		fibaro:debug("No errors getting devices, decoding answer")
	else
		fibaro:debug("Error, code:" .. errorCode)
   		fibaro:debug("Scene aborted")
	end
 
	-- Decode json string to table
	jsonTable = json.decode(response)   
 
end
 
Arm_Devices = function()
 
	fibaro:debug("Arming devices")
 
	-- Loop trough table and detect sensors..
	for key, id in ipairs(jsonTable) do
 
    	-- If its a sensor then
		if jsonTable[key].type == "com.fibaro.FGMS001" or jsonTable[key].type == "com.fibaro.windowSensor" or jsonTable[key].type == "com.fibaro.doorSensor" then
 
  		if debug then fibaro:debug("Device ID:" .. jsonTable[key].id .. " Type:" .. jsonTable[key].type .. " Name:" .. jsonTable[key].name) end
 
    	--Enable if you want to arm sensor
    	fibaro:call(jsonTable[key].id, "setArmed", "1") 	   
 
    	end  
	end  
end
 
 
Check_Armed_Devices = function()
 
  	fibaro:debug("Checking armed devices")
	-- Loop through the updated table
	for key, id in ipairs(jsonTable) do
 
  		if jsonTable[key].type == "com.fibaro.FGMS001" or jsonTable[key].type == "com.fibaro.windowSensor" or jsonTable[key].type == "com.fibaro.doorSensor" then
 
  			if debug then fibaro:debug("Device ID:" .. jsonTable[key].id .. " Type:" .. jsonTable[key].type .. " Name:" .. jsonTable[key].name) end
    		if debug then fibaro:debug("Armed Status =" .. fibaro:getValue(jsonTable[key].id, "armed")) end
 
    			if tonumber(fibaro:getValue(jsonTable[key].id, "armed")) == 0 then 	
 
        		local temp_ID = jsonTable[key].name
 
        		Not_Armed_Devices_ID = Not_Armed_Devices_ID .. ("\n") .. temp_ID
          		-- Add your actions here if the device is not armed!
 
   				end      
  		end
	end   
end
 
 
Send_Email = function()
 
  	--Use this info to send push about not armed devices
	fibaro:debug("Devices not armed=" .. Not_Armed_Devices_ID )  
 
  	--Enable to send push, you have non enables sensor ID´s in variable above
  	--fibaro:call(2, "sendEmail","SENSORS"..Not_Armed_Devices_ID) -- ID is id# of your mobile 
 
  	-- Affichage des Device non armé 
	fibaro:call(fibaro:getSelfId(), "setProperty", "ui.noarmed.value", Not_Armed_Devices_ID);  	
 
end
 
-- Get current status of devices    
Get_Devices_Status()
 
-- Arm devices
Arm_Devices()
 
-- Wait for everything to get in order
fibaro:sleep(5*1000) -- wait a while..
 
-- Get current status of devices 
Get_Devices_Status()    
 
--Have a look if they are all armed.
Check_Armed_Devices()
 
--Send info to phone
Send_Email()
 
fibaro:debug("Done!") 

ci-dessous le code du bouton "Désactivé"

HC2 = Net.FHttp("127.0.0.1",11111); 
 
local debug = false  --Enable debug..
 
local Not_Disarmed_Devices_ID = ""
 
-- Function for getting status of devices
Get_Devices_Status = function() 
	-- get response from H2 about all your devices
	local response ,status, errorCode = HC2:GET("/api/devices")
 
	-- Look for error
	if errorCode == 0 then
		fibaro:debug("No errors getting devices, decoding answer")
	else
		fibaro:debug("Error, code:" .. errorCode)
   		fibaro:debug("Scene aborted")
	end
 
	-- Decode json string to table
	jsonTable = json.decode(response)   
 
end
 
Disarm_Devices = function()
 
	fibaro:debug("Disarming devices")
 
	-- Loop trough table and detect sensors..
	for key, id in ipairs(jsonTable) do
 
    	-- If its a sensor then
		if jsonTable[key].type == "com.fibaro.FGMS001" or jsonTable[key].type == "com.fibaro.windowSensor" or jsonTable[key].type == "com.fibaro.doorSensor" then
 
  		if debug then fibaro:debug("Device ID:" .. jsonTable[key].id .. " Type:" .. jsonTable[key].type .. " Name:" .. jsonTable[key].name) end
 
    	--Enable if you want to arm sensor
    	fibaro:call(jsonTable[key].id, "setArmed", "0") 	   
 
    	end  
	end  
end
 
 
Check_Disarmed_Devices = function()
 
  	fibaro:debug("Checking Disarmed devices")
	-- Loop through the updated table
	for key, id in ipairs(jsonTable) do
 
  		if jsonTable[key].type == "com.fibaro.FGMS001" or jsonTable[key].type == "com.fibaro.windowSensor" or jsonTable[key].type == "com.fibaro.doorSensor" then
 
  			if debug then fibaro:debug("Device ID:" .. jsonTable[key].id .. " Type:" .. jsonTable[key].type .. " Name:" .. jsonTable[key].name) end
    		if debug then fibaro:debug("Disarmed Status =" .. fibaro:getValue(jsonTable[key].id, "armed")) end
 
    			if tonumber(fibaro:getValue(jsonTable[key].id, "armed")) == 1 then 	
 
        		local temp_ID = jsonTable[key].name
 
        		Not_Disarmed_Devices_ID = Not_Disarmed_Devices_ID .. ("\n") .. temp_ID
          		-- Add your actions here if the device is not armed!
 
   				end      
  		end
	end   
end
 
 
Send_Push = function()
 
  	--Use this info to send push about not armed devices
	fibaro:debug("Devices not Disarmed=" .. Not_Disarmed_Devices_ID )  
 
  	--Enable to send push, you have non enables sensor ID´s in variable above
  	--fibaro:call(YOUR_ID_GOES_HERE, "sendPush", "SENSORS") -- ID is id# of your mobile 
 
  	-- Affichage des Device non armé 
	fibaro:call(fibaro:getSelfId(), "setProperty", "ui.nodiarmed.value", Not_Disarmed_Devices_ID);  	
 
end
 
-- Get current status of devices    
Get_Devices_Status()
 
-- Disarm devices
Disarm_Devices()
 
-- Wait for everything to get in order
fibaro:sleep(5*1000) -- wait a while..
 
-- Get current status of devices 
Get_Devices_Status()    
 
--Have a look if they are all armed.
Check_Disarmed_Devices()
 
--Send info to phone
Send_Push()
 
fibaro:debug("Done!")

Voilà , encore un grand merci à  Speedy pour son code.  ;)

 

 

  • Upvote 1
Posté(e)

Ok donc si j'ai bien compris, on ne peut pas custom le texte  :( . Bon bin merci qd même pour le retour. 

 

Super tuto en tt cas  :60: . 

Posté(e)

Salut,

tu peux partager le code stp, ca peut peut-etre interesse quelqu'un ;-)

 

Dont moi d'ailleurs ;-)

 

Merciii

Posté(e)

as-tu essayé en mettant <BR> (avec les < >) dans le texte, làoù tu veux faire ton saut de ligne. Cela fonctionne pour le debug

Posté(e)

bon je n'ai pas pu résister à  tester tt de suite  :P .. et j'ai trouvé la solution à  mon problème. Pour le retour à  la ligne ou retour chariot dans un Label dans mon cas j'ai mis 

variable = variable .. ("\n") .. temp_ID

En mettant ("\n") ==> mon texte dans le label retour à  la ligne pour chaque résultat. Cependant quand on est en mode débug il n'y a pas de retour chariot. Dans le mode avancé de la VD, il y a un retour à  la ligne par rapport à  la taille de la fenêtre,  pour voir un résultat correct il faut tester la VD directement via la page "Home" par exemple .... 

 

Voilà  j'espere que ça pourra aider certain  :)

 

Je finis ma VD et je posterai le code un peu plus tard.  ;)

  • Upvote 2
Posté(e)

Je te montre une autre façon de trouvé les modules à  armer et désarmer que j'ai trouvé et mélangé
en grattant sur le forum ( plus ma sauce)  :D
En mode scène, génial pour un tas de choses.

local TousLesModules = api.get("/devices")
for i = 1, #TousLesModules do
	local theType = TousLesModules[i].type
    local Var_Name = TousLesModules[i].name
  	local Ident = TousLesModules[i].id
    fibaro:debug('ID ' ..Ident..' = '..Var_Name..' - Type = '..theType);
end
fibaro:debug("--------------------");

En mode module virtuel qui fonctionne chez moi
Cette méthode évite de mettre un valeur limite pour la boucle de structation des modules.
Dans l'exemple que tu as donné, les détecteur de porte fonctionnait mais motion_sensor

me remontait des modules qui n'avait rien à  voir avec l'alarme.
Exemple: RFID de mise sous alarme avec un module universel fibaro qui considère les entrées comme motion_sensor
et arme cela si on ne fait pas attention...
 

--Arrêt des portes et des fenêtres
HC2 = Net.FHttp("127.0.0.1",11111);
fibaro:debug('--------------------------------');
local result, status, errorCode = HC2:GET("/api/devices");
local TousLesModules = json.decode(result);
local nbInactif = 0; 
for i = 1, #TousLesModules do
    local theType = TousLesModules[i].type
    local Var_Name = TousLesModules[i].name
  	local Ident = TousLesModules[i].id
	if (theType == 'com.fibaro.doorSensor' or 
		theType == 'com.fibaro.FGMS001') then
		fibaro:call( Ident, "setArmed", "0")
	end 
end  

Trés interressant en mode scène pour repérer les Id des téléphones et tablettes

  • Upvote 1
Posté(e)

Sympa tout cela ;-)

super messieurs,

 

tu peux poster le screeshot d'un label avec le "/n" pour se faire une idee sans avoir a tester ;-)

Ok j'avoue je fais le faineant ;-)

Posté(e)

Bon voilà , j'ai fini le VD que vous trouverez à  dispo.  Le retour à  la ligne fonctionne sur les labels seulement via la page web.  Via l'iPhone ( pas test sur Android) mes champs sont vides, dà» au code suivant ==> ("\n"), qui est interprété de manière différente.  :angry:. Je regarderai cela un peu plus tard. Si une bonne âme peut m'aider sur cette affaire je prends. 

 

Ce module sert à  activer tous les modules types FGMS / FGK en mode "armed" et me remonte une info si un des modules n'est pas passé "armed" idem pour le bouton désactivé. 

 

Je tiens à  préciser que ce n'est pas mon CODE, comme déjà  évoqué au début du post, il a été fait part SPEEDY, que j'ai mis à  ma sauce.

 

@Pilou,  super intéressant, mais dans mon cas pas trop utile pour le moment. ( je le garde dans un coin, car il me servira quand je ferai des évolutions, merci pour ton retour  :D

 

Ci - dessous le résultat. 

post-2213-0-86838000-1434541637_thumb.png

 

Messieurs les ROIS du forum, apparemment je n'ai pas les droits pour upload un fichier vfib.json. une petite aide sur cette partie  :13:

Posté(e)

Fais un test avec une scène, tu verras c'est vraiment génial de voir tout ce que cela retourne.

et trés pratique pour identifier les modules. J'ai trouvé un exemple similaire que j'ai un peu adapté.
(Je ne sais plus qui je dois remercier)

Je l'ai publié ici car cela peut servir un peu partout.
J'ai utilisé cela pour faire un bouton virtuel qui test si on a toujours du courant (super),
en combinant les informations échangées avec Krikroff ( super technicien et développeur),
pour ne pas trop dégradé l'ensemble des pools Fibaro sur la HC2.

Posté(e)

je post le code des boutons. "Activé et Desactivé" en attend l'autorisation d'uploader le ficher complet. Je ne passe pas par la case création d'un VD car il y a un très bon tuto là -dessus le forum. 

 

Dans mon cas 2, boutons + 2 étiquettes pour afficher le résultat de chaque action : 

 

bouton " activé" 

HC2 = Net.FHttp("127.0.0.1",11111);

local debug = false  --Enable debug..

local Not_Armed_Devices_ID = ""

-- Function for getting status of devices
Get_Devices_Status = function() 
	-- get response from H2 about all your devices
	local response ,status, errorCode = HC2:GET("/api/devices")

	-- Look for error
	if errorCode == 0 then
		fibaro:debug("No errors getting devices, decoding answer")
	else
		fibaro:debug("Error, code:" .. errorCode)
   		fibaro:debug("Scene aborted")
	end

	-- Decode json string to table
	jsonTable = json.decode(response)   
    
end

Arm_Devices = function()

	fibaro:debug("Arming devices")
  
	-- Loop trough table and detect sensors..
	for key, id in ipairs(jsonTable) do
	
    	-- If its a sensor then
		if jsonTable[key].type == "com.fibaro.FGMS001" or jsonTable[key].type == "com.fibaro.windowSensor" or jsonTable[key].type == "com.fibaro.doorSensor" then
  
  		if debug then fibaro:debug("Device ID:" .. jsonTable[key].id .. " Type:" .. jsonTable[key].type .. " Name:" .. jsonTable[key].name) end
  	
    	--Enable if you want to arm sensor
    	fibaro:call(jsonTable[key].id, "setArmed", "1") 	   
  
    	end  
	end  
end


Check_Armed_Devices = function()
	
  	fibaro:debug("Checking armed devices")
	-- Loop through the updated table
	for key, id in ipairs(jsonTable) do

  		if jsonTable[key].type == "com.fibaro.FGMS001" or jsonTable[key].type == "com.fibaro.windowSensor" or jsonTable[key].type == "com.fibaro.doorSensor" then
   
  			if debug then fibaro:debug("Device ID:" .. jsonTable[key].id .. " Type:" .. jsonTable[key].type .. " Name:" .. jsonTable[key].name) end
    		if debug then fibaro:debug("Armed Status =" .. fibaro:getValue(jsonTable[key].id, "armed")) end
   
    			if tonumber(fibaro:getValue(jsonTable[key].id, "armed")) == 0 then 	
    			
        		local temp_ID = jsonTable[key].name
        		
        		Not_Armed_Devices_ID = Not_Armed_Devices_ID .. ("\n") .. temp_ID
          		-- Add your actions here if the device is not armed!
          
   				end      
  		end
	end   
end


Send_Email = function()
  	
  	--Use this info to send push about not armed devices
	fibaro:debug("Devices not armed=" .. Not_Armed_Devices_ID )  
  
  	--Enable to send push, you have non enables sensor ID´s in variable above
  	--fibaro:call(2, "sendEmail","SENSORS"..Not_Armed_Devices_ID) -- ID is id# of your mobile 
  
  	-- Affichage des Device non armé 
	fibaro:call(fibaro:getSelfId(), "setProperty", "ui.noarmed.value", Not_Armed_Devices_ID);  	
  
end

-- Get current status of devices    
Get_Devices_Status()

-- Arm devices
Arm_Devices()

-- Wait for everything to get in order
fibaro:sleep(5*1000) -- wait a while..
    
-- Get current status of devices 
Get_Devices_Status()    
    
--Have a look if they are all armed.
Check_Armed_Devices()

--Send info to phone
Send_Email()

fibaro:debug("Done!")

et le bouton "désactivé" 

HC2 = Net.FHttp("127.0.0.1",11111); 

local debug = false  --Enable debug..

local Not_Disarmed_Devices_ID = ""

-- Function for getting status of devices
Get_Devices_Status = function() 
	-- get response from H2 about all your devices
	local response ,status, errorCode = HC2:GET("/api/devices")

	-- Look for error
	if errorCode == 0 then
		fibaro:debug("No errors getting devices, decoding answer")
	else
		fibaro:debug("Error, code:" .. errorCode)
   		fibaro:debug("Scene aborted")
	end

	-- Decode json string to table
	jsonTable = json.decode(response)   
    
end

Disarm_Devices = function()

	fibaro:debug("Disarming devices")
  
	-- Loop trough table and detect sensors..
	for key, id in ipairs(jsonTable) do
	
    	-- If its a sensor then
		if jsonTable[key].type == "com.fibaro.FGMS001" or jsonTable[key].type == "com.fibaro.windowSensor" or jsonTable[key].type == "com.fibaro.doorSensor" then
  
  		if debug then fibaro:debug("Device ID:" .. jsonTable[key].id .. " Type:" .. jsonTable[key].type .. " Name:" .. jsonTable[key].name) end
  	
    	--Enable if you want to arm sensor
    	fibaro:call(jsonTable[key].id, "setArmed", "0") 	   
  
    	end  
	end  
end


Check_Disarmed_Devices = function()
	
  	fibaro:debug("Checking Disarmed devices")
	-- Loop through the updated table
	for key, id in ipairs(jsonTable) do

  		if jsonTable[key].type == "com.fibaro.FGMS001" or jsonTable[key].type == "com.fibaro.windowSensor" or jsonTable[key].type == "com.fibaro.doorSensor" then
   
  			if debug then fibaro:debug("Device ID:" .. jsonTable[key].id .. " Type:" .. jsonTable[key].type .. " Name:" .. jsonTable[key].name) end
    		if debug then fibaro:debug("Disarmed Status =" .. fibaro:getValue(jsonTable[key].id, "armed")) end
   
    			if tonumber(fibaro:getValue(jsonTable[key].id, "armed")) == 1 then 	
    			
        		local temp_ID = jsonTable[key].name
        		
        		Not_Disarmed_Devices_ID = Not_Disarmed_Devices_ID .. ("\n") .. temp_ID
          		-- Add your actions here if the device is not armed!
          
   				end      
  		end
	end   
end


Send_Push = function()
  	
  	--Use this info to send push about not armed devices
	fibaro:debug("Devices not Disarmed=" .. Not_Disarmed_Devices_ID )  
  
  	--Enable to send push, you have non enables sensor ID´s in variable above
  	--fibaro:call(YOUR_ID_GOES_HERE, "sendPush", "SENSORS") -- ID is id# of your mobile 
  
  	-- Affichage des Device non armé 
	fibaro:call(fibaro:getSelfId(), "setProperty", "ui.nodiarmed.value", Not_Disarmed_Devices_ID);  	
  
end

-- Get current status of devices    
Get_Devices_Status()

-- Disarm devices
Disarm_Devices()

-- Wait for everything to get in order
fibaro:sleep(5*1000) -- wait a while..
    
-- Get current status of devices 
Get_Devices_Status()    
    
--Have a look if they are all armed.
Check_Disarmed_Devices()

--Send info to phone
Send_Push()

fibaro:debug("Done!")

@MasterBT : regarde à  la ligne 60 il y a toutes la ligne pour le retour chariot.  ;)  à‡a peut peut-être t'aider. 

Posté(e)

@rhani c'est bien, mais pour les néophytes...
Juste une remarque, mais pas méchante.

Tu testes la connexion pour voir si tout s'est bien passé ( Je l'ai vu un peu partout).
A quoi cela sert-il ? Ca fonctionne àtous les coups ! et de toute façon si ca gaze pas, on a plus qu'àjeter la box.
Pour un appel distant, OK...
:2:

Posté(e)

La critique est constructive du moment quelle reste positive  :) si qui est le cas. donc je ne vois rien de mal dans ta critique. 

 

Ben pour tous dire je ne suis pas un développeur et je ne comprends pas tt dans le code. Donc si il y a moyen, apparement oui, d’optimiser le code, faut pas hésiter à  le soumettre. 

 

L'intérêt que j'ai pour le check est : Si il y a pas tt les modules armed/disarmed alors ça l'indique le dans un label. Pour mes connecteurs de fenêtre par exemple cela veut dire dans mon cas, la fenêtre n'est pas fermée. 

 

c'est vraie que l'option optimisée du code serait : avant de basculer les door_senor ou window_sensor en Armed ==> vérifier s'ils sont tous en mode normal 

Si oui ==> bascule les tous en armed /  si ce n’est pas le cas, ==> alors envoi une notification par Push ou mail.

 

Mais je ne suis pas dev :( .  

Posté(e)

sympa le code, peut-etre tres utilse ;-) et merci le "/n" ;-) c'est tres agreable à  la vue lol

 

Pour l'optimiser, juste un "if" de plus ;-)

 

merci beaucoup

Posté(e)

Petite mise à  jour, du code avec un " SendPush" sur les 2 boutons (Activé / Desactié ) vers la ligne 75. 

-- À ajouter dans le code du bouton "Activé".
fibaro:call(ID_de_votre_mobile, "sendPush","SENSORS"..Not_Armed_Devices_ID)

-- À ajouter dans le code du bouton "Désactivé".
fibaro:call(ID_de_votre_mobile, "sendPush","SENSORS"..Not_Disarmed_Devices_ID)

	
Posté(e)

merci beaucoup rahany.

 

Pour que ce soit plus simple, mets ton VD avec tes explications dans ton 1er Post et le code ;-)

 

du beau boulot, a tester ;-)

Posté(e) (modifié)

merci beaucoup rahany.

 

Pour que ce soit plus simple, mets ton VD avec tes explications dans ton 1er Post et le code ;-)

 

du beau boulot, a tester ;-)

 

 

Je viens de suivre ton conseil. merci 

Modifié par Moicphil
Bonjour, merci de ne pas citer un message positionné juste au dessus.
  • Upvote 1
×
×
  • Créer...