Page 1 sur 1

probleme time difference

Publié : 10 janv. 2016, 21:54
par noisette
Bonjour à tous et bonne année !
j'ai un problème avec un script lua j'ai un retour dans le log :lua:41: attempt to call global 'otherdevices_lastupdate' (a table value)

Code : Tout sélectionner

time=os.date("*t")

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

-- on regarde le dernier releve de temperature
local lastSeen = timedifference (sonde)

commandArray = {}

-- envoi d'un mail si la sonde reste muette
if(lastSeen >= 1800 and lastSeen < 1860) then
commandArray['SendEmail']='Domoticz Alerte#Alerte sonde ' ..zone ..' muette#' ..mail
end
je n'ai rien inventé mais j'aime bien comprendre et la je bloque
ma sonde c'est une sonde oregon, mais peut etre que le otherdevice_lastupdate ne peut faire reference qu'a un capteur virtuel et non pas une sonde
merci pour votre aide

Re: probleme time difference

Publié : 10 janv. 2016, 23:50
par rimram31
Difficile de savoir ce qui t'arrive, ta description est incomplète.

La ligne 41, c'est laquelle dans ton script ? la variable sonde contient quoi ? A priori le nom d'une sonde (chaine de caractères) mais ton extrait ne le montre pas -> local sonde = 'le nom de ma sonde'. Ensuite essaie de voir quel est le contenu de otherdevices_lastupdate(sonde) avec un print pour voir a quoi ca ressemble et petit a petit où peut-être l'erreur.

Re: probleme time difference

Publié : 11 janv. 2016, 14:19
par oula85
Quel est le nom de ta sonde dans Domoticz ?

pour moi il te manque un truc comme ça en haut de ton script

Code : Tout sélectionner

local sonde = 'Temp Salon' -- Nom de la sonde de température

Re: probleme time difference

Publié : 11 janv. 2016, 19:15
par noisette
Merci a tous je vais mettre le script en entier

Code : Tout sélectionner

-- script_time_chauffageSalon.lua

---------------------------------
-------- variable à editer ------
---------------------------------

-- nom de la zone
local zone = 'salon'    --nom de la zone pour affichage dans les logs et alerte mail

-- consignes
local consigne_mat = 22          -- temperature matin
local consigne_conf = 19         -- temperature confort
local consigne_abs = 10          -- temperature lors de l'absence ( hors gel)
local consigne_eco = 17          -- temperature mode eco
local hysteresis = 0.5           -- valeur de l hysteresis

-- capteurs
local sonde = 'Salle de Bain '   -- nom de la sonde de temperature
local mode = 'chauffage'         -- nom de l'inter virtuel on=auto off=hors gel
local boost = 'boost'            -- nom de l'inter pour derogation chauffage

-- periode de chauffage
-- pour 24h mettre debut = 0 et fin = 24h
local debut = 7
local fin = 23

--radiateurs

local radiateur = 'Radiateur SDB' -- nom du radiateur de la piece

-- email
local mail = 'xxx@laposte.net'

------------------------------------
---- fin des variables a editer ----
------------------------------------
time=os.date("*t")

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

-- on regarde le dernier releve de temperature
local lastSeen = timedifference (sonde)
print ( .. lastSeen ..)

commandArray = {}

-- envoi d'un mail si la sonde reste muette
if(lastSeen >= 1800 and lastSeen < 1860) then
commandArray['SendEmail']='Domoticz Alerte#Alerte sonde ' ..zone ..' muette#' ..mail
end

-- si le chauffage est sur on
if(otherdevices [mode]== 'On') then
if ((time.hour>=debut and time.hour< fin) or otherdevices [boost]== 'On')then
-- si la derogation est sur on
consigne = consigne_conf
print('Chauffage ' ..zone.. ' -.CONFORT .-')
else
consigne = consigne_eco
print('Chauffage ' ..zone.. ' -. ECO .-')
end
else
consigne=consigne_abs
print('Chauffage ' ..zone .. ' -. HG .-')
end

-- on recupere la temperature fournit par la sonde
local temperature=tonumber(string.sub(otherdevices_svalues[sonde], 1, 4))

--si la temperature est superieure ou egale a la consigne
--ou si la sonde est muette 10mn sans releve
--on stop le chauffage
if(temperature >= (consigne + hysteresis) or lastSeen > 600)then
commandArray[radiateur]='Set Level 9'
print('Chauffage '..zone ..' -. OFF .-')
-- sinon on chauffe
elseif (temperature <= (consigne - hysteresis))then
commandArray[radiateur]='Set Level 99' 
print('Chauffage '..zone..' -. ON .-')
else
commandArray[radiateur]='Set Level 9'
end
return commandArray
merci pour votre aide j'ai pourtant un nom pour la sonde, peut etre qu'il faut mettre des _ a la place des espaces ?

Re: probleme time difference

Publié : 11 janv. 2016, 19:23
par Neutrino
Bonjour,

Tu as un espace après Salle de Bain à la ligne

Code : Tout sélectionner

local sonde = 'Salle de Bain '   -- nom de la sonde de temperature
                            ^ ICI
C'est normal ?

Re: probleme time difference

Publié : 11 janv. 2016, 19:41
par rimram31
Peut-être/probablement la source de l'erreur car du coup device inconnu => otherdevices_lastupdate retourne nil car non trouvé et erreur en suivant sur le traitement de chaines de caractères.

Re: probleme time difference

Publié : 11 janv. 2016, 21:05
par noisette
pour faire simple j'ai appelé la sonde local sonde = 'salle'
mais c'est toujours pareil
41: attempt to call global 'otherdevices_lastupdate' (a table value)

Re: probleme time difference

Publié : 11 janv. 2016, 21:15
par rimram31
Ce qu'il faut c'est que la sonde ait le nom qu'elle a dans l'interface domoticz, sans ça dz ne la trouvera pas, le tableau otherdevices_lastupdate contient les lastupdate de l'ensemble des devices présents pour les scripts "smart" (time, device ...).

Re: probleme time difference

Publié : 11 janv. 2016, 21:30
par noisette
j ai bien modifie dans dz ????? franchement je seche

Re: probleme time difference

Publié : 11 janv. 2016, 22:54
par noisette
ça y est, erreur de débutant j' ai écris s = otherdevices_lastupdate(d) au lieu de s = otherdevices_lastupdate[d]
merci a tous !
attention au parenthèse et crochet !!!!