Temporiser le changement d'état d'une variable LUA

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 <\>.
Nicoweb56
Messages : 42
Inscription : 14 janv. 2019, 19:57

Temporiser le changement d'état d'une variable LUA

Message par Nicoweb56 »

Bonjour à tous

je débute en LUA et je souhaiterai temporiser une sortie en passant obligatoirement par une variable, je compte réutiliser la variable par la suite je ne comprends pas ou est le probleme. C'est bien la variable que je souhaite temporiser et non directement la sortie Piface Q6


Merci d'avance
Pièces jointes
Capture.PNG
Capture.PNG (12.18 Kio) Consulté 4763 fois
thier
Messages : 807
Inscription : 26 sept. 2015, 10:32
Localisation : charente

Re: Temporiser le changement d'état d'une variable LUA

Message par thier »

Enleve ton premier after 10 et remplace ton On par On after 10
PS: utilise les balises code plutot qu'une photo. C'est plus lisible et j'aurai pu écrire la modification.
PI3+, Buster, Domoticz V2020.2, rflink, zwave, chauffage piloté par qubino, sondes oregon et Vil1d, boite aux lettres détection passage facteur, volets roulants qubino fibaro.
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

Re: Temporiser le changement d'état d'une variable LUA

Message par denis_brasseur »

C'est curieux la manière d'utiliser tes variables :

Code : Tout sélectionner

commandArray['Variable:Alarme_Activee = '1'']
C'est effectivement la syntaxe utilisé pour mettre à jour les variables de Domoticz.


Alors dans ces 2 lignes de code, tu travaille avec des variables locales.

Code : Tout sélectionner

local Alarme_Activée = 0
et

Code : Tout sélectionner

if (Alarme_Activée == 1) then
Alors le changement d'état de ta variable devrait simplement être

Code : Tout sélectionner

Alarme_Activee = 1
Si tu utilises les variables de domoticz, il faut effectivement les créer au départ, et l'utilisation de l'état d'une variable sera

Code : Tout sélectionner

if (uservariables['Alarme_Activée']) == 1 then 
Ou bien alors je n'ai pas compris le fonctionnement des variables.
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
thier
Messages : 807
Inscription : 26 sept. 2015, 10:32
Localisation : charente

Re: Temporiser le changement d'état d'une variable LUA

Message par thier »

C'est ça.
PI3+, Buster, Domoticz V2020.2, rflink, zwave, chauffage piloté par qubino, sondes oregon et Vil1d, boite aux lettres détection passage facteur, volets roulants qubino fibaro.
Nicoweb56
Messages : 42
Inscription : 14 janv. 2019, 19:57

Re: Temporiser le changement d'état d'une variable LUA

Message par Nicoweb56 »

Bonjour


Merci pour vos réponses qui m'ont bien aidé, j'ai refondu entièrement mon script. Mon projet consiste à réaliser une alarme activable et désactivable via un lecteur de Tags RFID qui n'est pas étanche et se trouve forcément dans une zone protégée. Il me faut donc une temporisation d'entrée et de sortie pour me laisser le temps d'activer et de désactiver l'alarme avant qu'elle ne s'enclenche.

Aujourd'hui ce script fonctionne (beaucoup grave à vous) mais sans aucune temporisation. J'utilise les uservariables car c'est plus facile pour moi débutant de tester mon script via le tableau des variables utilisateurs que les print variables via le fichier log. De plus à l'avenir je souhaite écrire mes 2 variables ( temporisation entrée et sortie) avec une page de configuration en html.

J'arrive bien à temporiser un "device" du genre commandArray['Piface Q7 Alarme lumineuse'] = 'On AFTER 20' :)
mais pas une "variable" du genre commandArray['Variable:Alarme_activée']= '1 AFTER 20' :evil:

De plus je souhaiterai récupérer la valeur de ces temporisations dans des uservariables (ou éventuellement dans une variable local qui est égale à une uservariables si il faut absolument passer par là) du genre commandArray['Variable:Alarme_activée']= '1 AFTER Variable:Tempo_entrée'

Je débute tout juste en lua et je galère pas mal

merci d'avance

le script :

Code : Tout sélectionner

commandArray = {}

--Activation et désactivation de l'alarme
if (devicechanged['Lecteur Tag'] == 'Locked') then
    commandArray['Variable:Alarme_activée']= '1'
end

if (devicechanged['Lecteur Tag'] == 'Unlocked') then
    commandArray['Variable:Alarme_activée']= '0'
    commandArray['Variable:Intrusion_détecteur']= '0'
    commandArray['Variable:Intrusion_capteur']= '0'
    commandArray['Variable:Alarme']= '0'
end



-- Alarme active et Intrusion par détecteur volumétrique
if (uservariables['Alarme_activée']) == 1  and
((devicechanged['Détecteur Mezzanine'] == 'On') or
    (devicechanged['Détecteur bureau'] == 'On') or 
    (devicechanged['Détecteur entree'] == 'On') or
    (devicechanged['Détecteur garage'] == 'On') or
    (devicechanged['Détecteur dépendance 1'] == 'On') or
    (devicechanged['Détecteur dépendance 2'] == 'On')) then
    commandArray['Variable:Intrusion_détecteur']= '1'
end



-- Alarme active et Intrusion par capteur porte
if (uservariables['Alarme_activée']) == 1  and
((devicechanged['Capteur portail garage'] == 'On') or
    (devicechanged['Capteur portail dépendance'] == 'On') or 
    (devicechanged['Capteur porte dépendance'] == 'On') or 
    (devicechanged['Capteur abris jardin'] == 'On')) then
    commandArray['Variable:Intrusion_capteur']= '1'
end



-- Variable alarme
if ((uservariables['Alarme_activée']) == 1  and
(uservariables['Alarme']) == 0) and
((uservariables['Intrusion_détecteur']) == 1 or
    (uservariables['Intrusion_capteur']) == 1) then 
    commandArray['Variable:Alarme']= '1'
end



-- Activation de la sortie Alarme sonore et Alarme Lumineuse
if (uservariables['Alarme']) == 1  then
    commandArray['Piface Q6 Alarme sonnore'] = 'On AFTER Variable:Tempo_sortie'
    commandArray['Piface Q7 Alarme lumineuse'] = 'On'
end

if (uservariables['Alarme']) == 0  then
    commandArray['Piface Q6 Alarme sonnore'] = 'Off'
    commandArray['Piface Q7 Alarme lumineuse'] = 'Off'
end

return commandArray
lost
Messages : 1511
Inscription : 12 nov. 2016, 11:01

Re: Temporiser le changement d'état d'une variable LUA

Message par lost »

Nicoweb56 a écrit : 20 janv. 2019, 14:04 Mon projet consiste à réaliser une alarme activable et désactivable via un lecteur de Tags RFID qui n'est pas étanche et se trouve forcément dans une zone protégée. Il me faut donc une temporisation d'entrée et de sortie pour me laisser le temps d'activer et de désactiver l'alarme avant qu'elle ne s'enclenche.
Bonjour,

Pour la temporisation de sortie, pourquoi ne pas profiter de celle liée au security panel de Domoticz? On n'est pas forcé de l'utiliser (c'est pas le meilleur truc, amha, dans Domoticz) mais juste driver ses états via les évènements du lecteur de tag ce qui permet de profiter du délai d'activation.

Ca fait déjà un sens de réglé.

Pour l'autre sens, pour ma part c'est via le bluetooth que les désactivations se font. Normalement, de la rue c'est bon sauf qd je rentre par la porte de garage (métallique). En pareil cas, l'ouverture de la porte déclenche une exception de 30s (suffisant en pratique pour me détecter en cours d'ouverture, insuffisant pour forcer la porte de service garage/buanderie) sur le seul capteur de mouvement interne au garage.

C'est géré directement via le script d'alarme (qui s'inspire pas mal d'idées du wiki alarme, surtout concernant les conventions de nommage qui facilitent bien les extensions ultérieures sans modif des scripts au coeur du système).

Si tu as un portillon par exemple, tu peux ajouter un capteur d'ouverture dessus qui peut déclencher une exception sur un autre capteur de la zone ou est le lecteur de tag: Un voleur passera par dessus sans ouvrir et n'aura pas la tempo. Un usager "normal" l'aura.

A adapter librement en fct des lieux.

Bon courage!
Répondre