Page 2 sur 4

Re: Fiabilisation des détecteurs de mouvement PIR chinois

Publié : 14 juin 2016, 19:09
par fratton
Je pencherais plus a un problème de nom de l'interrupteur virtuel, un problème d'espace ?

local PIRVirtuel = 'PIR Virtuel'

Re: Fiabilisation des détecteurs de mouvement PIR chinois

Publié : 14 juin 2016, 19:31
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

Re: Fiabilisation des détecteurs de mouvement PIR chinois

Publié : 14 juin 2016, 19:41
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é 9928 fois

Re: Fiabilisation des détecteurs de mouvement PIR chinois

Publié : 14 juin 2016, 19:45
par Triple0s
j'ai bien le PIR_Virtuel déclaré en tant ue capteur motion virtuel ;)

Image

Re: Fiabilisation des détecteurs de mouvement PIR chinois

Publié : 14 juin 2016, 19:51
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

Re: Fiabilisation des détecteurs de mouvement PIR chinois

Publié : 14 juin 2016, 19:56
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

Re: Fiabilisation des détecteurs de mouvement PIR chinois

Publié : 14 juin 2016, 20:01
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

Re: Fiabilisation des détecteurs de mouvement PIR chinois

Publié : 14 juin 2016, 20:09
par Triple0s
Oui j'ai bien une date.

Par contre celle ci n'est pas mise à jour malgré des détections.

Re: Fiabilisation des détecteurs de mouvement PIR chinois

Publié : 15 juin 2016, 21:39
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:

Re: Fiabilisation des détecteurs de mouvement PIR chinois

Publié : 25 sept. 2016, 11:54
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