[RÉSOLU]Erreur dans mon script

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 <\>.
gonzo47
Messages : 19
Inscription : 10 oct. 2017, 16:10

[RÉSOLU]Erreur dans mon script

Message par gonzo47 »

Bonjour,
Afin d'améliorer la gestion de mon chauffage, je repris 2 ou 3 scripts d'ici et j'ai rajouté la gestion de l'ouverture des portes.
Le script marche, mais une erreur apparait, ce qui ralenti l'exécution.

Code : Tout sélectionner

--------------------------------
 ------ Start of edit section ------
 --------------------------------
 local consigne = 'Consigne-SDB'  --Température de consigne
 local hysteresis = 0.5 --Valeur seuil pour éviter que le relai ne cesse de commuter dans les 2 sens
 local sonde = 'SDB' --Nom de la sonde de température
 local thermostat = 'Saison' --Nom de l'interrupteur virtuel du thermostat
 local radiateur = 'Rad-SDB' --Nom du radiateur à allumer/éteindre
 local fenetre = 'Porte_Entree' -- Nom du detecteur de la fenetre
 

 --------------------------------
 -- End of edit section --
 --------------------------------

  commandArray = {}
 --Oregon sensor 'Salon' send temperature every 40s. This will be the execution frequency of this script.
if (devicechanged[sonde]) or (devicechanged[fenetre]) or (devicechanged[consigne]) then
    local temperature = devicechanged[string.format('%s_Temperature', sonde)] --Temperature relevée dans la SDB
    local consigne = tonumber(otherdevices_svalues[consigne])
    local fenetre = tonumber(otherdevices_svalues[fenetre]) -- Récupération de la valeur de la fenetre

    -- print('recup temp')

        if (otherdevices[thermostat]=='On') and (fenetre == 0) then
            print('-- Gestion du thermostat pour le SDB --')
            if (otherdevices[thermostat]=='On') then
                if (temperature < (consigne - hysteresis) ) then
                    print('Allumage du chauffage dans le SDB')
                    commandArray[radiateur]='Off'
     
                elseif (temperature > (consigne + hysteresis)) then
                    print('Extinction du chauffage dans le SDB')
                    commandArray[radiateur]='On'
                end
            end
       
        elseif (fenetre == 15) or (otherdevices[thermostat]=='Off') then
            commandArray[radiateur]='On'
        end         
end  
return commandArray
Dans le log, voici l'erreur qui apparait :
2017-10-10 16:06:25.413 Error: EventSystem: in Chauffage SDB2: [string " --------------------------------..."]:28: attempt to compare nil with number
Malgré cela, le script marche. Mais a chaque changement d'état (ouverture de la porte ou changement de consigne) l'erreur apparaît et l’exécution est longue a venir.

Merci pour votre aide
Dernière modification par gonzo47 le 13 oct. 2017, 17:05, modifié 3 fois.
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Erreur dans mon script

Message par vil1driver »

Salut,

Traduction :
Ligne 28, comparaison entre rien et un nombre = erreur

L'erreur est sans nul doute ici

Code : Tout sélectionner

 local temperature = devicechanged[string.format('%s_Temperature', sonde)] 
Si ton script est de type device l'erreur est logique car il cherche à obtenir la température du device qui vient de changer et ce n'est pas toujours ta sonde..
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
gonzo47
Messages : 19
Inscription : 10 oct. 2017, 16:10

Re: Erreur dans mon script

Message par gonzo47 »

Dsl, je me suis planté dans la copie du script. Celui que j'ai présenté est OK sans erreur.
J'ai édité mon message avec le "bon" script qui présent l'erreur.
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Erreur dans mon script

Message par vil1driver »

Ma réponse reste valable !
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
gonzo47
Messages : 19
Inscription : 10 oct. 2017, 16:10

Re: Erreur dans mon script

Message par gonzo47 »

vil1driver a écrit :Ma réponse reste valable !
Sauf que le premier code n'a pas le message d'erreur... donc je comprend pas pk ca le fait sur celui la et pas sur celui de base (sachant que les deux sont en device)
gonzo47
Messages : 19
Inscription : 10 oct. 2017, 16:10

Re: Erreur dans mon script

Message par gonzo47 »

C'est bon!!

J'ai remplacé la ligne
local temperature = devicechanged[string.format('%s_Temperature', sonde)]
Par
local temperature = tonumber(otherdevices_svalues[sonde])
plus d'erreur ;)

Merci pour ton aide
Répondre