verifier si les portes et fenêtres sont fermées avant activation de l'alarme.

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
revers59
Messages : 13
Inscription : 15 mai 2017, 16:53

verifier si les portes et fenêtres sont fermées avant activation de l'alarme.

Message par revers59 »

Bonjour à tous,

J'essais de comprendre comment fonctionne les scripts LUA mais j'ai un peu de mal, voici mon exemple qui me retourne une erreur du type :

Code : Tout sélectionner

lua:7: 'then' expected near '='

Code : Tout sélectionner

commandArray = {}
if (devicechanged['Xiaomi Wireless Switch'] == 'Click' and
otherdevices['Xiaomi Door Sensor porte entree'] == 'Closed' and
otherdevices['Xiaomi Door Sensor porte jardin'] == 'Closed' and
otherdevices['Xiaomi Door Sensor salle de bain'] == 'Closed') then
commandArray['Domoticz Security Panel'] = 'Arm Away'
elseif commandArray['SendNotification']='Alerte #Alarme non activée car une porte ou fenetre est ouverte!'
end
end
return commandArray
j'ai aussi un peu de mal à comprendre ou placer des 'end'

Un grand merci d'avance pour vos suggestions
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: verifier si les portes et fenêtres sont fermées avant activation de l'alarme.

Message par papoo »

à première vue il y aurait un end de trop
et pas besoin de elseif vu que tu ne donne pas de nouvelle condition
ton code donnerait donc

Code : Tout sélectionner

commandArray = {}
if (devicechanged['Xiaomi Wireless Switch'] == 'Click' and
otherdevices['Xiaomi Door Sensor porte entree'] == 'Closed' and
otherdevices['Xiaomi Door Sensor porte jardin'] == 'Closed' and
otherdevices['Xiaomi Door Sensor salle de bain'] == 'Closed') then
commandArray['Domoticz Security Panel'] = 'Arm Away'
else commandArray['SendNotification']='Alerte #Alarme non activée car une porte ou fenêtre est ouverte!'
end
return commandArray
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

Re: verifier si les portes et fenêtres sont fermées avant activation de l'alarme.

Message par deennoo »

Il serait interessant de faire evoluer ce script en envoyant dans la notification quelle porte ou fenetre est ouverte
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
amelyfred
Messages : 103
Inscription : 29 mai 2016, 18:06

Re: verifier si les portes et fenêtres sont fermées avant activation de l'alarme.

Message par amelyfred »

Salut
J'ai créé ce genre de script qui envoie un notification au cas où une porte est ouverte lors de la mise en route de l'alarme.

Code : Tout sélectionner

        if (devicechanged['Badge Alarme'] == 'On') and otherdevices['Salon : Porte fenêtre'] == 'Open' then
                message = 'Attention la porte fenêtre du salon est ouverte'
                os.execute('/home/pi/domoticz/scripts/shell/envoi_sms_fred.sh "'..message..'"')
                commandArray['Statut Alarme'] = 'Off'
        elseif (devicechanged['Badge Alarme'] == 'On') and otherdevices['Salle à manger : Porte fenêtre'] == 'Open' then
                message = 'Attention la porte fenêtre de la salle à manger est ouverte'
                os.execute('/home/pi/domoticz/scripts/shell/envoi_sms_fred.sh "'..message..'"')
                commandArray['Statut Alarme'] = 'Off'
        elseif (devicechanged['Badge Alarme'] == 'On') and otherdevices['Chambre Parents : Porte fenêtre'] == 'Open' then
                message = 'Attention la porte fenêtre de la chambre est ouverte'
                os.execute('/home/pi/domoticz/scripts/shell/envoi_sms_fred.sh "'..message..'"')
                commandArray['Statut Alarme'] = 'Off'
        elseif (devicechanged['Badge Alarme'] == 'On') then
                commandArray['Statut Alarme'] = 'On'
        elseif (devicechanged['Badge Alarme'] == 'Off') then
                commandArray['Sirène Alarme'] = 'Off'
                commandArray['Statut Alarme'] = 'Off'
        end
        if (devicechanged['Statut Alarme'] =='Off') then
                message = 'Alarme désarmée'
                os.execute('/home/pi/domoticz/scripts/shell/envoi_sms_fred.sh "'..message..'"')
        elseif (devicechanged['Statut Alarme'] =='On') then
                message = 'Alarme armée'
                os.execute('/home/pi/domoticz/scripts/shell/envoi_sms_fred.sh "'..message..'"')
        end
yanael
Messages : 209
Inscription : 16 nov. 2015, 09:16

Re: verifier si les portes et fenêtres sont fermées avant activation de l'alarme.

Message par yanael »

Bonjour
Voilà ce que cela donne en blocky ( du moins une partie du blocky) chez moi :
alarme.jpg
alarme.jpg (304.43 Kio) Consulté 12114 fois

du coup je vais en profiter pour essayer de comprendre vos lua :)
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

Re: RE: Re: verifier si les portes et fenêtres sont fermées avant activation de l'alarme.

Message par deennoo »

amelyfred a écrit :Salut
J'ai créé ce genre de script qui envoie un notification au cas où une porte est ouverte lors de la mise en route de l'alarme.

Code : Tout sélectionner

        if (devicechanged['Badge Alarme'] == 'On') and otherdevices['Salon : Porte fenêtre'] == 'Open' then
                message = 'Attention la porte fenêtre du salon est ouverte'
                os.execute('/home/pi/domoticz/scripts/shell/envoi_sms_fred.sh "'..message..'"')
                commandArray['Statut Alarme'] = 'Off'
        elseif (devicechanged['Badge Alarme'] == 'On') and otherdevices['Salle à manger : Porte fenêtre'] == 'Open' then
                message = 'Attention la porte fenêtre de la salle à manger est ouverte'
                os.execute('/home/pi/domoticz/scripts/shell/envoi_sms_fred.sh "'..message..'"')
                commandArray['Statut Alarme'] = 'Off'
        elseif (devicechanged['Badge Alarme'] == 'On') and otherdevices['Chambre Parents : Porte fenêtre'] == 'Open' then
                message = 'Attention la porte fenêtre de la chambre est ouverte'
                os.execute('/home/pi/domoticz/scripts/shell/envoi_sms_fred.sh "'..message..'"')
                commandArray['Statut Alarme'] = 'Off'
        elseif (devicechanged['Badge Alarme'] == 'On') then
                commandArray['Statut Alarme'] = 'On'
        elseif (devicechanged['Badge Alarme'] == 'Off') then
                commandArray['Sirène Alarme'] = 'Off'
                commandArray['Statut Alarme'] = 'Off'
        end
        if (devicechanged['Statut Alarme'] =='Off') then
                message = 'Alarme désarmée'
                os.execute('/home/pi/domoticz/scripts/shell/envoi_sms_fred.sh "'..message..'"')
        elseif (devicechanged['Statut Alarme'] =='On') then
                message = 'Alarme armée'
                os.execute('/home/pi/domoticz/scripts/shell/envoi_sms_fred.sh "'..message..'"')
        end
Merci.

Simple et efficace.

Il doit y avoir plus simple facile.

Dans mon script alarme j'ai une formule qui regarde tout les detecteurs qui ont un nom commençant par PIR si l'un d'eux change d'etat alors que l'alarme est activé cela sonne.

Il doit y avoir moyen de reutiliser cette formule pour :
Savoir qu'elle porte/fenetre empeche la mise en route de l'alarme et laquelle active l'alarme...je vais chercher
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
revers59
Messages : 13
Inscription : 15 mai 2017, 16:53

Re: verifier si les portes et fenêtres sont fermées avant activation de l'alarme.

Message par revers59 »

Moi j'en suis là maintenant avec mes 3 switchs planqués

le script qui permet de voir si tous les accès sont fermés avant l'activation de l'alarme

Code : Tout sélectionner

commandArray = {}
if (devicechanged['Xiaomi Wireless Switch'] == 'Click' 
    or devicechanged['Xiaomi Wireless Switch etage'] == 'Click' 
    or devicechanged['Xiaomi Wireless Switch garage'] == 'Click') 
    and (otherdevices['Xiaomi Door Sensor porte entree'] == 'Closed' 
    and otherdevices['Xiaomi Door Sensor porte jardin'] == 'Closed' 
    and otherdevices['Xiaomi Door Sensor salle de bain'] == 'Closed' 
    and otherdevices['Xiaomi Door Sensor Cuisine'] == 'Closed' 
    and otherdevices['Xiaomi Door Sensor Salon'] == 'Closed') then
print('AlarmPanel Arm Away')
commandArray['Domoticz Security Panel'] = 'Arm Away'
commandArray['SendNotification']='Alerte #Alarme armee en absence!'
commandArray['Xiaomi Wireless Switch'] = 'Off'
commandArray['Xiaomi Wireless Switch etage'] = 'Off'
commandArray['Xiaomi Wireless Switch garage'] = 'Off'
elseif
(devicechanged['Xiaomi Wireless Switch'] == 'Click' 
    or devicechanged['Xiaomi Wireless Switch etage'] == 'Click'
    or devicechanged['Xiaomi Wireless Switch garage'] == 'Click') then
commandArray['Xiaomi Wireless Switch'] = 'Off'
commandArray['Xiaomi Wireless Switch etage'] = 'Off'
commandArray['Xiaomi Wireless Switch garage'] = 'Off'
commandArray['SendNotification']='Alerte #Alarme non activée car une porte ou fenêtre est ouverte!'
end

return commandArray
le script qui permet d'éteindre l'alarme

Code : Tout sélectionner

commandArray = {}
if (devicechanged['Xiaomi Wireless Switch'] == 'Double Click' 
    or devicechanged['Xiaomi Wireless Switch etage'] == 'Double Click' 
    or devicechanged['Xiaomi Wireless Switch garage'] == 'Double Click') then
commandArray['Domoticz Security Panel'] = 'Disarm'
commandArray['SendNotification']='Alerte #Alarme desarmee!'
commandArray['Xiaomi Wireless Switch'] = 'Off'
commandArray['Xiaomi Wireless Switch etage'] = 'Off'
commandArray['Xiaomi Wireless Switch garage'] = 'Off'
commandArray['Xiaomi Gateway Alarm Ringtone'] = 'Off'
end
return commandArray
le script blocky pour être informé d'une intrusion en cas d'abscence
Image


Comme l'alarme xiaomi sonne que quelques secondes j'ai opté pour ça pour la faire sonner plus longtemps :

dans une scene :

Image


et une scene temporise en ARM away uniquement pour pouvoir rentrer chez soi :)
Celle ci n'est pas utilisée dans mon Arm Home

Image

Reste à faire :
j'a aussi un petit raspberry pi qui gère les video et la musique sous la TV relié à un ampli, il faut que je trouve le moyen de reproduire wles action d'alimentation de l'appli Yatse qui fait du CEC : veille et CEC: Activation pour pouvoir allumer l'ampli si une porte ou une fenêtre s'ouvre en mon absence car l'alarme xiaomi seule ne me convient pas forcement.
chaosgreg
Messages : 1
Inscription : 25 juin 2017, 22:11

Re: verifier si les portes et fenêtres sont fermées avant activation de l'alarme.

Message par chaosgreg »

Salut, je te propose une partie de ma fonction, qui permet de vérifier si mes portes sont ouverte ou fermer et me le notifie par sms (seulement les portes ouvertes).
Il te suffit de mettre les capteurs à vérifier dans la variable

Code : Tout sélectionner

--===========================================================--
--============= Liste des capteurs à vérifier ===============--
--===========================================================--

local capteurs = { "Porte entrée/couloir", "Porte terrasse" }

--===========================================================--
--===========================================================--
--===========================================================--

local message

function verifcapteur()

	local capteurp = ' '
	local dooropen = 0
	
	print("Vérification des capteurs...")

	for cle, valeur in ipairs(capteurs) do
        	if otherdevices[valeur] == 'Open' then
            	capteurp = capteurp..' -> '..valeur..' '
            	dooropen = dooropen + 1
        	end
    	end

	if (dooropen == 1) then
	message = "Attention ! La porte :"..capteurp.."est ouverte"
	return true
	
	elseif (dooropen >= 2) then
	message ="Attention ! Les portes :"..capteurp.."sont ouvertes"
	return true
	
	else
	message = "Aucune portes ouvertes détecté"
	return false
	end
        
        print(message)
end
Tu peux mettre un "return message" à la fin pour que la fonction retourne le message de la variable directement ou un if avec un "return true ou false" selon l'état.

[Edit]
J'ai modifier le code en ajoutant un return, la fonction retourne "true" si au moins une porte est ouverte et "false" si tout est fermé. Tu peux également récupéré le message dans la variable "message".
Wolfen38
Messages : 1983
Inscription : 19 oct. 2017, 14:49

Re: verifier si les portes et fenêtres sont fermées avant activation de l'alarme.

Message par Wolfen38 »

revers59 a écrit : dans une scene :

Image


et une scene temporise en ARM away uniquement pour pouvoir rentrer chez soi :)
Celle ci n'est pas utilisée dans mon Arm Home

Image
Salut,

j'ai le problème de durée de sonnerie avec mon gateway, il sonne 10secondes puis s'arrete.

Je commence juste en domoticz et je ne sais pas comment faire, entre autre utiliser les scenes.

Tu pourrais m'expliquer stp ?

Pour le moment j'ai juste ce scenario :

Image
Jeff
Messages : 1007
Inscription : 17 nov. 2016, 20:54
Localisation : Rennes (35)

Re: verifier si les portes et fenêtres sont fermées avant activation de l'alarme.

Message par Jeff »

Merci pour la fonction @chaosgreg, je cherchais depuis un bon moment à faire ce type de script, j'avais utilisé blocky mais je préfère le lua.
J'ai rajouté une condition de plus pour mes capteurs de porte qui sont ceux de mon alarme avec des états différents (Etat : Normal / Alarm)

Je partage à mon tour pour aider.

Code : Tout sélectionner

-- script_device_ouvrants.lua
--
-- ce script permet de tester si une porte ou fenetre est ouverte en actionnant l'alarme

-- chargement des modules
package.path = package.path..";/home/jeff/domoticz/scripts/lua/?.lua"
require "modules"

--------------------------------
------ Tableau à éditer ------
--------------------------------
local capteurs = {"Fenetre Parents","Fenetre Alexi","Fenetre Ch.Bleue", "Fenetre Leane", "Porte entree","Porte service","Porte garage"}
local Escalier2 = 'Escalier2' -- sert à tester, à remplacer par le device "Alarm"
local ouvrant = 'Ouvrant'
local message
local etat
--------------------------------
-- Fin du tableau à éditer --
--------------------------------

--------------------------------
------ Début fonction ------
--------------------------------

function verifcapteur()
	
   local capteurp = ' '
   local ouvrantopen = 0
   
   print("Vérification des capteurs ...")

   for cle, valeur in ipairs(capteurs) do
           if otherdevices[valeur] == 'Open' or otherdevices[valeur] == 'Alarm' then
               capteurp = capteurp..' -> '..valeur..' '
               ouvrantopen = ouvrantopen + 1
           end
       end

   if (ouvrantopen == 1) then
   message = "Attention ! L'ouvrant :"..capteurp.."est ouvert"
   --return true
   etat = true
   return message
   
   
   elseif (ouvrantopen >= 2) then
   message ="Attention ! Les ouvrants :"..capteurp.."sont ouverts"
   etat = true
   return message
   
   else
   message = "Aucun ouvrant ouvert détecté"
   etat = false
   return message
   end
        
   --print(message)
end

--------------------------------
------ Fin de fonction ------
--------------------------------

commandArray = {}

-- condition test, à remplacer par Alarm == 'Away'
if devicechanged[Escalier2] == 'On' or devicechanged[Escalier2] == 'Off' then
	verifcapteur()
		
		if (etat == true) then
		print(message)
		--commandArray[ouvrant]='On'
		switchOn(ouvrant)
		print('Ouvrant ouvert')
		
		elseif (etat == false) then
		print(message)
		switchOff(ouvrant)
		print('Ouvrant fermé')
		end
end
return commandArray
Version: 2023.1 sur VM Synology, docker Zwave Js UI (Z-stick GEN5, Fibaro...), Zigbeefordomoticz. Nextion RGB Led Screen
Répondre