Page 1 sur 2

Erreur script

Publié : 15 août 2018, 09:57
par banditos
Bonjour,
j'ai récupéré un scrip que j'ai modifié pour contrôler le fonctionnement de mes sondes, mais j'ai une erreur:

Error:EventSystem:in/home/pi/domoticz/scripts/lua/script_time_pile.lua:/home/pi/domoticz/scripts/lua/script_time_pile.lua:56: ']' expected near 'Off'

Merci de votre aide car je n'y connais pas grand chose en script.

PS: j'ai bien créé les inter pour les fonctions ON et OFF



-- script_time_alarme.lua
-- ce script détecte une perte de sonde et coupe le chauffage dans la zone

--------------------------------
------ Variables à éditer ------
--------------------------------

local sonde = 'Cuisine' -- Nom de la sonde de température
local sonde2 = 'Salle de B.' -- Nom de la sonde de température
local sonde3 = 'Extér.Sud' --Nom de la sonde de température
local sonde4 = 'Sonde test' --Nom de la sonde de température


--------------------------------
-- Fin des variables à éditer --
--------------------------------

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 de quand date la dernière relève de température

local lastSeen = timedifference(sonde)
local lastSeen2 = timedifference(sonde2)
local lastSeen3 = timedifference(sonde3)
local lastSeen4 = timedifference(sonde4)

commandArray = {}


-- lance une alarme par zone au dessus du seuil 600s si l'alarme est à OFF et la coupe en dessous si l'alarme est à On

if (lastSeen > 600 ) and (otherdevices['Sonde cuisine HS'] == 'Off') then
commandArray['Sonde cuisine HS']='On'
end
if (lastSeen2 > 600 ) and (otherdevices['Sonde salle de B HS'] == 'Off') then
commandArray['Sonde Salle de B HS']='On'
end
if (lastSeen3 > 600 ) and (otherdevices['Sonde Exte.SUD HS'] == 'Off') then
commandArray['Sonde Exter.Sud HS']='On'
end
if (lastSeen4 > 600 ) and (otherdevices['Sonde test HS] == 'Off') then
commandArray['Sonde test HS']='On'
end
if (lastSeen < 600 ) and (otherdevices['Sonde cuisine HS'] == 'On') then
commandArray['Sonde cuisine HS']='Off'
end
if (lastSeen2 < 600 ) and (otherdevices['Sonde Salle de B HS'] == 'On') then
commandArray['Sonde Salle de B HS']='Off'
end
if (lastSeen3 < 600 ) and (otherdevices['Sonde Exté.SUD HS'] == 'On') then
commandArray['Sonde Exté.SUD HS']='Off'
end
if (lastSeen4 < 600 ) and (otherdevices['Sonde test HS'] == 'On') then
commandArray['Sonde test HS']='Off'
end




return commandArray

Re: Erreur script

Publié : 15 août 2018, 11:24
par lmet
Bonjour,
Il manque une ' après 'Sonde test HS sur cette ligne :

Code : Tout sélectionner

if (lastSeen4 > 600 ) and (otherdevices['Sonde test HS] == 'Off') then

Re: Erreur script

Publié : 15 août 2018, 12:08
par Fredok
Bonjour, je fait presque la même chose avec mes capteurs de températures mais je stocke la liste des capteurs qui ne répondent pas depuis au moins 2h=14400s dans capteur virtuel type texte (nom du capteur 'Check_list')
Voici le script time qui s'effectue tous les jours a midi

Code : Tout sélectionner

heur=os.date('*t')
--check_list (si les capteurs de temperature n'emmettent pas pendant plus de 2h ==> Erreur)
-- liste des capteurs a chécker
local capteurs_temp={'Garage2_Temp_Humi(GW)','Garage1_TEMP_HUM(GW)','Temp_Bureau1(Oregon BB02)','Garage1_Temp_Conduit(GW)','Garage1_Temp_Tampon(GW)','Garage1_Temp_chaudiere(GW)','Garage1_DeriveeTemp_Conduit(GW)','Garage1_Temp_melangeur(GW)','Grenier_Temps_panneau_solaire','Temp_Congelateur','SDB2_Cresta','Temp_grenier(oregon CD)','Temp_poele_bois(oregon CB)','Temp_Congel_cuisine','Temp_cuisine_gw','Salle_A_Manger_Temp','Temp_chambre2(gw)','Exterieure_TempHum','TV_Temp','Bureau2_TEMP','entree_temp(gw)','Netatmo_Temperature'}
if (heur["min"] == 0) and (heur["hour"] == 12) then
    print('check list')
    for i,v in ipairs(capteurs_temp) do 
        if timeDiffDevice(v)>14400 then
            text=v..' ne répond pas'
            print(text)
            commandArray[#commandArray+1]={['UpdateDevice'] = otherdevices_idx['Check_list']..'|0|'..text }
        end
    end
end
bye...

Re: Erreur script

Publié : 15 août 2018, 13:10
par vil1driver
Salut,

@Frefok, ton script ne permet de stocker le nom que d'un seul capteur.. Check_List s'auto écrase
Il vaudrait mieux sortir l'update de la boucle et faire en sorte que text s'incrémente

Re: Erreur script

Publié : 15 août 2018, 16:29
par Fredok
Bonjour, cela fonctionne très bien voici le log du capteur
2018-08-15 12:00:00 Temp_chambre2(gw) ne répond pas
2018-08-15 12:00:00 Temp_cuisine_gw ne répond pas
2018-08-15 12:00:00 Temp_Congel_cuisine ne répond pas
2018-08-15 12:00:00 Garage1_DeriveeTemp_Conduit(GW) ne répond pas
2018-08-15 12:00:00 Garage1_Temp_Conduit(GW) ne répond pas
2018-08-14 12:00:00 Temp_chambre2(gw) ne répond pas
2018-08-14 12:00:00 Temp_cuisine_gw ne répond pas
2018-08-14 12:00:00 Temp_Congel_cuisine ne répond pas
2018-08-14 12:00:00 Garage1_DeriveeTemp_Conduit(GW) ne répond pas
2018-08-14 12:00:00 Garage1_Temp_Conduit(GW) ne répond pas
2018-08-13 12:00:00 Temp_chambre2(gw) ne répond pas
2018-08-13 12:00:00 Temp_cuisine_gw ne répond pas
2018-08-13 12:00:00 Temp_Congel_cuisine ne répond pas
2018-08-13 12:00:00 Garage1_DeriveeTemp_Conduit(GW) ne répond pas
2018-08-13 12:00:00 Garage1_Temp_Conduit(GW) ne répond pas
2018-08-12 12:00:00 Temp_chambre2(gw) ne répond pas
2018-08-12 12:00:00 Temp_cuisine_gw ne répond pas
2018-08-12 12:00:00 Temp_Congel_cuisine ne répond pas
2018-08-12 12:00:00 Garage1_DeriveeTemp_Conduit(GW) ne répond pas
2018-08-12 12:00:00 Garage1_Temp_Conduit(GW) ne répond pas
2018-08-11 12:00:00 Temp_chambre2(gw) ne répond pas
2018-08-11 12:00:00 Temp_cuisine_gw ne répond pas
2018-08-11 12:00:00 Temp_Congel_cuisine ne répond pas
2018-08-11 12:00:00 Garage1_DeriveeTemp_Conduit(GW) ne répond pas
2018-08-11 12:00:00 Garage1_Temp_Conduit(GW) ne répond pas
Le type de capteur virtuel est "général, text"
@+

Re: Erreur script

Publié : 15 août 2018, 18:17
par vil1driver
Si c'est l'historique qui t'intéresse, et non ce qu'il affiche, OK, je n'ai rien dis ;)

Re: Erreur script

Publié : 15 août 2018, 21:55
par banditos
lmet a écrit :Bonjour,
Il manque une ' après 'Sonde test HS sur cette ligne :

Code : Tout sélectionner

if (lastSeen4 > 600 ) and (otherdevices['Sonde test HS] == 'Off') then

Merci,
j'ai rectifié mais maintenant j'ai ça:

Error: EventSystem: in /home/pi/domoticz/scripts/lua/script_time_pile.lua: /home/pi/domoticz/scripts/lua/script_time_pile.lua:22: bad argument #1 to 'sub' (string expected, got nil)

Re: Erreur script

Publié : 16 août 2018, 00:56
par lmet
Franchement tu gagnerais à utiliser l'éditeur interne de Domoticz comme décrit ici
Pour l'erreur précédente tu aurais eu l'erreur de syntaxe en direct sur l'interface.
Pour celle que tu décris tu verrais que la ligne 22 correspond à :

Code : Tout sélectionner

year = string.sub(s, 1, 4)
donc que "s" vaut "nil" alors qu'il s'attend à une chaine.
Peut-être voir du coté de 'Cuisine' comme sonde ?

Re: Erreur script

Publié : 16 août 2018, 09:04
par banditos
Merci de votre aide,

Cuisine, Salle de B, Extérieur.Sud, Voisinage et sonde test sont bien des sondes

Re: Erreur script

Publié : 16 août 2018, 09:46
par vil1driver
Salle de B ou Salle de B. ?

Extérieur.Sud ou Extér.Sud ?

sonde test ou Sonde test ?

De la rigueur..

Une bonne pratique est d'éviter les accents et caractères spéciaux

Une autre est d'ajouter des print dans le code pour aider à trouver le moment où ça coince