Time difference dans un script device

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

Time difference dans un script device

Message par deennoo »

Afin d'apporter de la lumière dans le salon quand on y arrive apres avoir desactivé l'alarme je me suis fait un script qui doit ce declancher si le detecteur d'ouverture envoie ON, mais si on a desactivé l'alarme depuis moins de 10 minutes.

J'ai donc fait ceci :

Code : Tout sélectionner

-- chargement des modules
package.path = package.path..";/home/nico/domoticz/scripts/lua/?.lua"
require "modules"


--recuperation de luminositée exter
Lux = otherdevices_svalues['Luminosite Exterieur']:match("([^;]+)")
Lux = tonumber(Lux)

--depuis combien de temps l'alarme est eteinte
t1 = os.time()
s = otherdevices_lastupdate['Alarme']

-- returns a date time like 2013-07-11 17:23:12



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)


commandArray = {}

--time difference
t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
difference = (os.difftime (t1, t2))
--print('anneee : '..year)
--print('month : '..month)
--print('day : '..day)
--print('hour : '..hour)
--print('minutes : '..minutes)
--print('seconds : '..seconds)
--print('t1 : '..t1)
--print('t2 : '..t2)
--print('s : '..s)
--print('difference : '..difference)

 
if ((otherdevices['Alarme'] == 'Off' and difference > 5 and difference < 600) and (devicechanged['Porte escalier etage'] and Lux <= 300)) then
    
     --allumage
 	 switchOn('Appliques',95)
 	 switchOn('Eclairage Cuisine')
 	 switchOn('Lumiere Salon')

end

return commandArray
Mais c'est l'echec complet, ce scriot fonctionne sans le time difference, pas trop d'idée comment l'inclure.
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
thier
Messages : 807
Inscription : 26 sept. 2015, 10:32
Localisation : charente

Re: Time difference dans un script device

Message par thier »

Et si tu ajoutes print ('t1'..t1) et print('t2'..t2) pour valider la différence de temps?
ta fonction timedifference est mal ecrite. il faut

Code : Tout sélectionner

function timedifference(d)
   s = otherdevices_lastupdate[d]
   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
ensuite tu ajoute avant commandarray
local lastSeen = timedifference(pinpin)
et dans les données tu définis Local pinpin = 'ton device qui change d'état en fonction de alarm on ou off'
PI3+, Buster, Domoticz V2020.2, rflink, zwave, chauffage piloté par qubino, sondes oregon et Vil1d, boite aux lettres détection passage facteur, volets roulants qubino fibaro.
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Time difference dans un script device

Message par vil1driver »

Non non Thier, il n'y a pas d'erreur dans son script..
Tu n'est pas obligé d'utiliser une fonction du moment que tout y est et c'est le cas.

Sinon oui des print des print de tout ;)
S
Difference

J'aurais écrit le script comme toi Deennoo :?
Pour moi il devrait fonctionner
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
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

Re: Time difference dans un script device

Message par deennoo »

he he on avance j'ai ceci qui vient de s'afficher dans les logs a l'execution :

Code : Tout sélectionner

2016-11-17 20:30:19.665 Error: EventSystem: in etage on nuit alarme off: /home/nico/domoticz/scripts/lua/modules.lua:15: attempt to concatenate field '?' (a nil value)
J'investigue

ligne 15 :

Code : Tout sélectionner

year = string.sub(s, 1, 4)
les logs des prints :

Code : Tout sélectionner

2016-11-17 20:30:19.665 LUA: t1 : 1479411019
2016-11-17 20:30:19.665 LUA: t2 : 1479410560
2016-11-17 20:30:19.665 LUA: s : 2016-11-17 20:22:40
2016-11-17 20:30:19.665 LUA: difference : 459
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

Re: Time difference dans un script device

Message par deennoo »

thier a écrit :Et si tu ajoutes print ('t1'..t1) et print('t2'..t2) pour valider la différence de temps?
ta fonction timedifference est mal ecrite. il faut

Code : Tout sélectionner

function timedifference(d)
   s = otherdevices_lastupdate[d]
   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


ensuite tu ajoute avant commandarray
local lastSeen = timedifference(pinpin)
et dans les données tu définis Local pinpin = 'ton device qui change d'état en fonction de alarm on ou off'
idem avec ta methode la ligne year ne passe pas...
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Time difference dans un script device

Message par vil1driver »

après environ 8 minutes tu as une différence de 459 secondes, c'est pourtant cohérent.

Est ce que parfois l'info lastupdate ne serait pas correcte ? :|

year ne passe pas parce que c'est la première à traiter s, si tu la places après month, ce sera cette dernière qui sera en erreur..
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
thier
Messages : 807
Inscription : 26 sept. 2015, 10:32
Localisation : charente

Re: Time difference dans un script device

Message par thier »

On a le même problème avec djam ici
viewtopic.php?f=10&t=2684&p=25425&sid=2 ... c1c#p25425
PI3+, Buster, Domoticz V2020.2, rflink, zwave, chauffage piloté par qubino, sondes oregon et Vil1d, boite aux lettres détection passage facteur, volets roulants qubino fibaro.
Jeff
Messages : 1007
Inscription : 17 nov. 2016, 20:54
Localisation : Rennes (35)

Re: Time difference dans un script device

Message par Jeff »

Cela ne doit pas avoir de rapport mais c'est normal que

Code : Tout sélectionner

(devicechanged['Porte escalier etage'] 
n'a pas de comparaison de valeur == 'Off'
Version: 2023.1 sur VM Synology, docker Zwave Js UI (Z-stick GEN5, Fibaro...), Zigbeefordomoticz. Nextion RGB Led Screen
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

Re: Time difference dans un script device

Message par deennoo »

Jeff a écrit :Cela ne doit pas avoir de rapport mais c'est normal que

Code : Tout sélectionner

(devicechanged['Porte escalier etage'] 
n'a pas de comparaison de valeur == 'Off'
Oui ainsi je scrute n'importe quel changement d'etat :
- soit de on a off
- soit de off a on

Tres utile pour un PIR par exemple : une porte que tu laisses ouverte, mais tu as mis l'alarme (pas malin malin on est d'accord), si un malendrain entre et ferme la porte pour comaitre son forfait alors que l'alarme est mise, paf il y a intrusion

Pour en revenir a nos moutons :

Mon premier script a été crée avec l'editeur lua de domoticz, et bien j'ai cree le meme en.lua pour le mettre dans le repertoire script : le probleme est le meme.

On est d'accord que j'ai cree un script device et non script time.

@thier je viens de voir oui.
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

Re: Time difference dans un script device

Message par deennoo »

vil1driver a écrit : Est ce que parfois l'info lastupdate ne serait pas correcte ?
et bien si elle est bonne :

Code : Tout sélectionner

{
ActTime: 1479420906,
ServerTime: "2016-11-17 23:15:06",
Sunrise: "08:03",
Sunset: "17:30",
result: [
{
AddjMulti: 1,
AddjMulti2: 1,
AddjValue: 0,
AddjValue2: 0,
BatteryLevel: 255,
CustomImage: 13,
Data: "Off",
Description: "",
Favorite: 0,
HardwareID: 2,
HardwareName: "Dummy",
HardwareType: "Dummy (Does nothing, use for virtual switches only)",
HardwareTypeVal: 15,
HaveDimmer: true,
HaveGroupCmd: true,
HaveTimeout: false,
ID: "0014093",
Image: "Alarm",
IsSubDevice: false,
LastUpdate: "2016-11-17 21:07:29",
Level: 93,
LevelInt: 14,
MaxDimLevel: 15,
Name: "Alarme",
Notifications: "true",
PlanID: "10",
PlanIDs: [
10
],
Protected: false,
ShowNotifications: true,
SignalLevel: "-",
Status: "Off",
StrParam1: "aHR0cDovLzE5Mi4xNjguMC4yMDE6ODg4OC8/dHRzPUFsYXJtZSUyMGFjdGl2ZXI=",
StrParam2: "aHR0cDovLzE5Mi4xNjguMC4yMDE6ODg4OC8/dHRzPUFsYXJtZSUyMGTpc2FjdGl2ZXI=",
SubType: "AC",
SwitchType: "On/Off",
SwitchTypeVal: 0,
Timers: "false",
Type: "Lighting 2",
TypeImg: "lightbulb",
Unit: 1,
Used: 1,
UsedByCamera: false,
XOffset: "0",
YOffset: "0",
idx: "68"
}
],
status: "OK",
title: "Devices"
}
Par contre j'ai un groupe qui lui aussi s'appelle "Alarme" je va essayer quelque chose tiens
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
Répondre