Page 1 sur 1

[RÉSOLU]Erreur dans mon script

Publié : 10 oct. 2017, 16:16
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

Re: Erreur dans mon script

Publié : 10 oct. 2017, 18:21
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..

Re: Erreur dans mon script

Publié : 10 oct. 2017, 19:47
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.

Re: Erreur dans mon script

Publié : 10 oct. 2017, 19:55
par vil1driver
Ma réponse reste valable !

Re: Erreur dans mon script

Publié : 10 oct. 2017, 20:03
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)

Re: Erreur dans mon script

Publié : 10 oct. 2017, 21:36
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