[LUA] Fiabilisation des détecteurs de mouvement PIR chinois

Vous avez créé un script LUA dont vous êtes fier, un .sh génial, un programme Python hors du commun, un Tuto, c'est ici que vous pouvez les partager.
fratton
Messages : 150
Inscription : 19 août 2015, 16:38

[LUA] Fiabilisation des détecteurs de mouvement PIR chinois

Message par fratton »

Si comme moi vous avez des détecteurs de mouvement PIR 433MHz pas cher (7€), vous avez certainement eu des déclenchements intempestifs :?
Ce problème se rencontre en hiver par exemple, lorsqu'un radiateur se met en marche.
Mais j'ai essayé de mettre le détecteur dans un tiroir que je n'ai pas ouvert et en 1 semaine j'ai eu 2 déclenchements, même avec des piles neuves... donc là ça pose quand même problème !

J'ai donc réfléchit au moyen de fiabilisé la détection car j'utilise les PIR pour l'alarme mais aussi pour le chauffage (NEST and co like).

Je me suis dit :
Si un voleur entre chez moi, il va se déplacer et déclenchera au moins 2 fois de suite le même détecteur dans les 30 secondes (j'ai testé et les déclenchement des PIR se font toutes les 5 à 6 secondes) ou alors 2 détecteurs seront déclenchés à la suite (2 détecteurs dans la même pièce).

J'ai donc créer :
- 1 détecteur virtuel qui sera le déclencheur d'alarme et/ou de chauffage avec délais d'extinction à 2 secondes. Pour éviter de surcharger domoticz, la mise à jour se fait uniquement si la dernière mise à jour à plus de 3mn.
- 1 variable texte qui stockera le dernier détecteur déclenché (pour que mon script alarme envoi la zone d'intrusion).
- 1 variable chaîne par détecteur pour stocké l'heure du dernier déclenchement (On)
- Tous les détecteurs on un délais d'extinction de 1 seconde (augmenter si l'on souhaite augmenter la sensibilité, mais rester en dessous de 5s)

Image

Image

Image

Image

Evénement de type LUA / Device

Code : Tout sélectionner

 --------- Tableau des intérupteurs des PIR
local PIR={}
PIR['0']='PIR Salon'
PIR['1']='PIR Salle'
PIR['2']='PIR Bureau'

-- Nom de l'interupteur virtuel de type motion detector
local PIRVirtuel = 'PIR Virtuel'

-- Nom de la variable qui stock le dernier PIR detecté
local PIRVirtuel_detected = 'PIR detected'

-- IP:PORT du serveur Domoticz
local ip = '192.168.1.100:8080'   -- user:pass@ip:port de domoticz

-- Variables
local detection=false
local PIRdeclanche = ' '
local nbdetecteur = 0

commandArray = {}

function timedifference(s)
   year = string.sub(s, 1, 4)
   month = string.sub(s, 6, 7)
   day = string.sub(s, 9, 10)
   hour = string.sub(s, 12, 13)
   minutes = string.sub(s, 15, 16)
   seconds = string.sub(s, 18, 19)
   t1 = os.time()
   t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
   difference = os.difftime (t1, t2)
   return difference
end

function urlencode(str)
   if (str) then
    str = string.gsub (str, "\n", "\r\n")
    str = string.gsub (str, "([^%w ])",
    function (c) return string.format ("%%%02X", string.byte(c)) end)
    str = string.gsub (str, " ", "+")
    end
   return str
end

for key, valeur in pairs(PIR) do
    -- Création de la variable si elle n'existe pas
    if(uservariables['V_'..valeur] == nil) then
        print('PIR Virtuel : création variable V_'..valeur)
        commandArray[tonumber(key)]={['OpenURL']=ip..'/json.htm?type=command&param=saveuservariable&vname=V_'..urlencode(valeur)..'&vtype=2&vvalue='..urlencode(otherdevices_lastupdate[valeur])}
    end
    -- test de fiabilité déclanchement
    local etat=tostring(devicechanged[valeur])
    local last=timedifference(uservariables['V_'..valeur])
    if (etat=='On' and last<30) then
        commandArray['Variable:V_'..valeur]=otherdevices_lastupdate[valeur]
        PIRdeclanche=valeur
        detection=true
    elseif (etat=='On') then
        commandArray['Variable:V_'..valeur]=otherdevices_lastupdate[valeur]
        PIRdeclanche=PIRdeclanche..' '..valeur
    end
    --compte le nombre de detecteur dans les 30 dernière secondes
    if (last<30) then
        nbdetecteur=nbdetecteur+1
    end
end

-- Si plus d'1 detecteur sont sur On 
if (detection==false and nbdetecteur>=2) then
    detection=true
end

-- Mise à jour du detecteur virtuel si la dernière mise à jour à plus de 3mn
if (timedifference(otherdevices_lastupdate[PIRVirtuel])>180 and detection==true) then
    commandArray['Variable:'..PIRVirtuel_detected]=PIRdeclanche
    print('PIR Virtuel Script: '..PIRdeclanche..' detecté ('..nbdetecteur..')')
    commandArray[PIRVirtuel]='On'
end

return commandArray
Après 15 jours de test, je n'est pas eu d'alarme intempestive alors que dans les log j'ai eu 5 déclenchements intempestif (sans véritable intrusion).

Le seul cas qui pourrait arriver est que 2 détecteurs ont un déclenchement intempestif simultanément ce qui me semble être un cas plutôt rare.
Dernière modification par fratton le 23 févr. 2016, 10:18, modifié 1 fois.
Raspberry Pi B+ / RF-Link 433MHz / divers device maison 433MHz et Wifi
hades_75
Messages : 5
Inscription : 18 févr. 2016, 16:56

Re: Fiabilisation des détecteurs de mouvement PIR chinois

Message par hades_75 »

Bonjour,

Je trouve votre approche de fiabilisation très intéressante mais je débute sur les scripts LUA, pourriez vous me dire si votre script est de type script_device_xxxxxxxxx.lua ou script_time_xxxxxxxx.lua ? Merci pour votre aide (je pencherai pour un type time sur le capteur virtuel).
Cordialement

Laurent
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Fiabilisation des détecteurs de mouvement PIR chinois

Message par vil1driver »

salut,

tu peux partir du principe que si tu trouves dans un script ceci devicechanged c'est qu'il s'agit d'un script_device.

et sans abuser c'était précisé ;)
fratton a écrit :(...)
Evénement de type LUA / Device
(...)
fratton utilise certainement l'éditeur intégré, d'où cette façon de préciser le type de script..
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
fratton
Messages : 150
Inscription : 19 août 2015, 16:38

Re: Fiabilisation des détecteurs de mouvement PIR chinois

Message par fratton »

J'ai mis à jour le code avec :

- Création d'une boucle sur les PIR pour éviter la répétition de code
- Création automatique des variables de stockage en fonction du nom des détecteurs.
Raspberry Pi B+ / RF-Link 433MHz / divers device maison 433MHz et Wifi
jml
Messages : 24
Inscription : 08 janv. 2016, 22:18

Re: Fiabilisation des détecteurs de mouvement PIR chinois

Message par jml »

Excellent , merci. Cela me servira.
Mes scripts: github.com/jmleglise
Mon équipement: RFXTRX433E Volet et portail Somfy RTS, chacon IO, Oregon, PIR PT2262 / KMTronic USB relay/Z-WAVE Chinese Neo CoolCam
Mon dernier projet: ma maison location de vacances à Ouistreham sur la plage
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

Re: Fiabilisation des détecteurs de mouvement PIR chinois

Message par deennoo »

Super tuto, par contre quels modeles vous avez ? parce que j'en ai 5 en place et pas un me fait de fausse detection...
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
fratton
Messages : 150
Inscription : 19 août 2015, 16:38

Re: Fiabilisation des détecteurs de mouvement PIR chinois

Message par fratton »

Des PIR Chinois EV1527 récupéré dans une alarme à 30€ :oops:

on trouve les mêmes à 4€93 sur :
http://www.aliexpress.com/item/Free-shi ... 28854.html
Image
Image
Raspberry Pi B+ / RF-Link 433MHz / divers device maison 433MHz et Wifi
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

Re: Fiabilisation des détecteurs de mouvement PIR chinois

Message par deennoo »

OK en voyant la photo du pcb je comprends la différence avec les miens payer 5€ sur ebay, j'ai la fonction : compensation automatique de la température, du coup pas de problème.

Le pcb n'est pas du tout le même, je dois mettre le code par des jumpers.

A vérifier pour les prochains voulant s'équiper.
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
fratton
Messages : 150
Inscription : 19 août 2015, 16:38

Re: Fiabilisation des détecteurs de mouvement PIR chinois

Message par fratton »

Je suppose que tu as des SC2262:

Image

Les modèles comme les miens ont aussi la compensation automatique de la température. Mais ça ne suffit pas, peut être un défaut de série.

le SC1527, c'est la puce qui gère le protocole de transmission de donnée, le code est automatique sur 20bits et interdit les scanner de code.
http://sc-tech.cn/en/hs1527.pdf

Le SC2261, c'est aussi la puce qui gère le protocole de transmission de donnée, le code 10bits est sélectionné manuellement.
http://www.sc-tech.cn/en/sc2262.pdf
Raspberry Pi B+ / RF-Link 433MHz / divers device maison 433MHz et Wifi
Triple0s
Messages : 37
Inscription : 23 sept. 2015, 15:13

Re: Fiabilisation des détecteurs de mouvement PIR chinois

Message par Triple0s »

bonjour,

J'ai un soucis avec le script.

message d'erreur:
Error: EventSystem: in /home/sylvain/domoticz/scripts/lua/script_device_PIR.lua: /home/sylvain/domoticz/scripts/lua/script_device_PIR.lua:24: bad argument #1 to 'sub' (string expected, got nil)

Si je commente le dernier bloc IF plus d'erreur. Je pense que le script n'arrive pas a calculer correctement le temps.

Pouvez vous m'aider
Domoticz sur Linux Mint
boitier RFXtrx 433 (sondes température, température/hygro, zkp1a, chacon, blyss)
Mysensors (Capteurs PIR, Double relais, relais avec bouton)
Répondre