Xiaomi: comment récupérér état capteur de porte avec LUA

Forum dédié à l'intégration de la Gateway ZigBee Xiaomi dans DomoticZ.
Pour les questions concernant les objets ZigBee Xiaomi, merci d'utiliser le forum ZigBee au-dessus.
johnnybravo
Messages : 63
Inscription : 04 mai 2017, 14:15

Xiaomi: comment récupérér état capteur de porte avec LUA

Message par johnnybravo »

Je crois que je deviens dingue, tout doucement..
je m'étais fais une petite alarme en blockly, qui fonctionnait, et suis passé sous LUA que je ne connais pas vraiment.. mais bon, je suis têtu :lol:

En LUA j'avais d'abord un switch virtuel on/off pour simuler une porte ouverte, ça fonctionnait
et puis.. j'ai voulu enlever ce switch virtuel pour y mettre le vrai capteur sur ma porte d'entrée et la.. ça ne fait plus rien :(

Après pas mal d'essais, (et beaucoup trop d'escaliers descendus puis remontés)...
Comment dois-je faire pour récupérer en lua l'état du contact xiaomi "Contact 1 - Front Door " ?


Dans le code ci dessous, AlarmState est lié à l'état du control panel (je mets le code plus bas)
Code sûrement pas joli mais bon..

Code : Tout sélectionner

commandArray = {}
if (devicechanged['Contact 1 - Front Door'] == 'Open' and commandArray['Variable:AlarmState'] == '2') then
    print('Potential breach: Alarm State to 3 and set 5 secondes alarmgrace period on')
    commandArray['Variable:AlarmState'] = '3'
    commandArray['AlarmGracePeriod'] = 'Off AFTER 5' -- physical switch
end
return commandArray


Çi dessous le code lua pour allumer/éteindre l'alarme - sons désactivés car mes enfants ne supportaient plus de les entendre !
Switch est le Switch multifonction de xiaomi

Code : Tout sélectionner

commandArray = {}
 if (devicechanged['Switch'] == 'Click') then
    print('in 5s we will arm the Alarm')
    commandArray['AlarmGracePeriod'] ='On' --
    commandArray['SecurityPanel'] ='Arm Away AFTER 5' -- Give 5 seconds to leave before arming the alarm
    
    commandArray['Variable:AlarmState'] ='2 AFTER 5'
   -- commandArray[#commandArray + 1] = {['Blueway Alarm'] = 'Set Level:30' } --Play soundtrack Accident tone
   -- commandArray[#commandArray + 1] = {['Blueway Alarm'] = 'Off AFTER 1'} --Turn off after 1 second
    
    commandArray['Blueway Gate'] = 'On AFTER 5' --    turn on gateway light to signal alarm is set 
  end
 
 if (devicechanged['Switch'] == 'Double Click') then -- this part is not in use today
    print('we will now immediately activate the alarm in -at home- configuration')
    commandArray['SecurityPanel'] ='Arm Home'
   -- commandArray['Variable:AlarmState']='999'
 end
 
 if (devicechanged['Switch']== 'Long Click') then
    print('we will now immediately deactivate the alarm')
    commandArray['SecurityPanel'] ='Disarm'
    commandArray['Variable:AlarmState'] ='1'
    commandArray['AlarmGracePeriod'] ='On'
   -- commandArray[#commandArray + 1] = {['Blueway Alarm Clock'] = 'Set Level:20'} -- Play soundtrack Enthousiastic 
   -- commandArray[#commandArray + 1] = {['Blueway Alarm Clock'] = 'Off AFTER 1'} --Turn off after 1 second
   commandArray['Blueway Gate'] = 'Off'
 end
return commandArray
eric
Messages : 91
Inscription : 13 mai 2017, 15:37

Re: Xiaomi: comment récupérér état capteur de porte avec LUA

Message par eric »

Si tu es nouveau en LUA je te conseille fortement d'utiliser l'API dzVents c'est beaucoup plus simple et logique


Envoyé de mon iPhone en utilisant Tapatalk
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

Re: Xiaomi: comment récupérér état capteur de porte avec LUA

Message par Neutrino »

Déjà, affiche la valeur que tu souhaites tester :

Code : Tout sélectionner

print("otherdevices['Contact 1 - Front Door']") 
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
johnnybravo
Messages : 63
Inscription : 04 mai 2017, 14:15

Re: Xiaomi: comment récupérér état capteur de porte avec LUA

Message par johnnybravo »

Bonjour et merci pour les conseils :D
Le problème est résolu - mais peut-être avez-vous encore des suggestions ?

Pour le dzvents, j'avais regardé et trouvé ça intéressant, je garde ça sous le coude pour l'étape suivante :)


Mon code précédent avait 2 problèmes
- une erreur dans le nom du contact (une majuscule de trop..)
- et ne retournait pas la valeur de la variable
if (devicechanged['Contact 1 - Front Door'] == 'Open' and commandArray['Variable:AlarmState'] == '2') then

J'ai changé ce code pour plutôt vérifier l'état du panneau de contrôle, cela fonctionne maintenant:
commandArray = {}
local WalkInTime = 5
if (devicechanged['Contact 1 - Front door'] == 'Open' and otherdevices['SecurityPanel'] == 'Arm Away') then
print('Potential breach: Alarm State to 3 and set alarmgrace period on')
commandArray['Variable:AlarmState'] = '3'
commandArray['AlarmGracePeriod'] = 'Off AFTER 10' -- virtual switch
end
return commandArray
Répondre