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¶m=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
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 (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

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
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
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 ?????
J'ai fais du copier/coller normalement

Re: Fiabilisation des détecteurs de mouvement PIR chinois
Publié : 25 sept. 2016, 11:54
par itcitc77
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