[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

Re: Fiabilisation des détecteurs de mouvement PIR chinois

Message par fratton »

Je pencherais plus a un problème de nom de l'interrupteur virtuel, un problème d'espace ?

local PIRVirtuel = 'PIR Virtuel'
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 »

J'y avais pensé aussi mais même en mettant un _ celà ne fonctionne pas.
voici le code ui n'est qu'un copier/coller du code au début de sujet:

Code : Tout sélectionner

 --------- Tableau des intérupteurs des PIR
local PIR={}
PIR['0']='PIR_Entree'
PIR['1']='PIR_Amis'
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.14:8081'   -- 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..' detecte ('..nbdetecteur..')')
     commandArray[PIRVirtuel]='On'
end

return commandArray
ainsi que mes variables
Image

et le message d'erreur:
2016-06-14 19:22:11.319 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)

qui disparait si je commente le dernier IF
Domoticz sur Linux Mint
boitier RFXtrx 433 (sondes température, température/hygro, zkp1a, chacon, blyss)
Mysensors (Capteurs PIR, Double relais, relais avec bouton)
fratton
Messages : 150
Inscription : 19 août 2015, 16:38

Re: Fiabilisation des détecteurs de mouvement PIR chinois

Message par fratton »

Attention, l'interrupteur virtuel n'est pas une variable !
La commande otherdevices_lastupdate ne fonctionne pas sur une variable.
PIRVIRTUEL.jpg
PIRVIRTUEL.jpg (48.67 Kio) Consulté 9926 fois
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 »

j'ai bien le PIR_Virtuel déclaré en tant ue capteur motion virtuel ;)

Image
Domoticz sur Linux Mint
boitier RFXtrx 433 (sondes température, température/hygro, zkp1a, chacon, blyss)
Mysensors (Capteurs PIR, Double relais, relais avec bouton)
fratton
Messages : 150
Inscription : 19 août 2015, 16:38

Re: Fiabilisation des détecteurs de mouvement PIR chinois

Message par fratton »

Remplace :

Code : Tout sélectionner

if (timedifference(otherdevices_lastupdate[PIRVirtuel])<180 and detection==true) then
par

Code : Tout sélectionner

if (detection==true) then
pour voir si tu as toujours l'erreur
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 »

cela fonctionne:

2016-06-14 19:54:59.457 LUA: PIR Virtuel Script: PIR_Entree detecte (1)
2016-06-14 19:54:59.458 EventSystem: Script event triggered: /home/sylvain/domoticz/scripts/lua/script_device_PIR.lua
Domoticz sur Linux Mint
boitier RFXtrx 433 (sondes température, température/hygro, zkp1a, chacon, blyss)
Mysensors (Capteurs PIR, Double relais, relais avec bouton)
fratton
Messages : 150
Inscription : 19 août 2015, 16:38

Re: Fiabilisation des détecteurs de mouvement PIR chinois

Message par fratton »

met un

Code : Tout sélectionner

print('PIRVirtuel Last update : ' .. otherdevices_lastupdate[PIRVirtuel])
avant

Code : Tout sélectionner

return commandArray
et regarde les log pour voir si tu as bien une date qui apparaît
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 »

Oui j'ai bien une date.

Par contre celle ci n'est pas mise à jour malgré des détections.
Domoticz sur Linux Mint
boitier RFXtrx 433 (sondes température, température/hygro, zkp1a, chacon, blyss)
Mysensors (Capteurs PIR, Double relais, relais avec bouton)
Triple0s
Messages : 37
Inscription : 23 sept. 2015, 15:13

Re: Fiabilisation des détecteurs de mouvement PIR chinois

Message par Triple0s »

bon j'ai trouvé la source du problème,
regarde ton code:

Code : Tout sélectionner

if (timedifference(otherdevices_lastupdate[PIRVirtuel])>180 and detection==true) then
et mon code:

Code : Tout sélectionner

if (timedifference(otherdevices_lastupdate[PIRVirtuel])<180 and detection==true) then
vois tu la différence ?

Va savoir pourquoi ????? :o :o
J'ai fais du copier/coller normalement :roll:
Domoticz sur Linux Mint
boitier RFXtrx 433 (sondes température, température/hygro, zkp1a, chacon, blyss)
Mysensors (Capteurs PIR, Double relais, relais avec bouton)
itcitc77
Messages : 73
Inscription : 30 mai 2016, 06:17

Re: Fiabilisation des détecteurs de mouvement PIR chinois

Message par itcitc77 »

fratton a écrit :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
bonjour je viens de recevoir mon detecteur, je n'ai pas de notice, comment le faire reconnaitre dans domoticz, domoticz a bien detecté le pir mais celui si reste a on, si quelqu'un pouvais m'aider
merci d'avance
Domoticz, CustomPage,
Pi3 RFXCom + Razberry;Z-Stick Gen5
Répondre