Page 1 sur 2

Problème comparaison valeurs

Publié : 27 déc. 2016, 22:17
par dokho
Bonsoir,

J'ai créé, en piochant à droite et gauche, un script pour gérer mon chauffage mais j'ai une erreur:

Code : Tout sélectionner

"Error: EventSystem: in /home/pi/dev-domoticz/scripts/lua/script_time_chauffage_chaudiere.lua: ...domoticz/scripts/lua/script_time_chauffage_chaudiere.lua:20: attempt to compare string with number" 
Je comprends l'erreur: il semblerait que je tente de comparer du texte avec du numérique.

En tâtonnant je pense avoir trouvé où se situe l'erreur: la valeur "hysteresis".

Ceci dit impossible de trouver/comprendre comment résoudre ça car ... ça me semble pourtant bon :(


Voici le script:

Code : Tout sélectionner

local consigne_confort = string.match(otherdevices_svalues['Consigne_Confort'], "(%d+%.*%d*)")
local consigne_eco = string.match(otherdevices_svalues['Consigne_Eco'], "(%d+%.*%d*)")
local consigne_absent = string.match(otherdevices_svalues['Consigne_Absent'], "(%d+%.*%d*)")
local hysteresis = 0.5
local temp_rdc = otherdevices_svalues['Moyenne_RDC']:match("([^;]+)")
local temp_etage = otherdevices_svalues['Moyenne_Etage']:match("([^;]+)")
local temp_maison = otherdevices_svalues['Moyenne_Maison']:match("([^;]+)")


commandArray = {}

t1 = os.date("%H:%M")

if (otherdevices['Mode_Confort'] == 'On')
then

if (otherdevices['Chaudiere'] == 'Off')
then
if (temp_rdc < (consigne_confort - hysteresis))
then
commandArray['Chaudiere']='On'
end

elseif (otherdevices['Chaudiere'] == 'On')
then
if (temp_rdc > (consigne_confort + hysteresis))
then
commandArray['Chaudiere']='Off'
end
end

elseif (otherdevices['Mode_Eco'] == 'On')
then

if ((t1>=uservariables["CHAUFFAGE_STOP2"]) and (t1<uservariables["CHAUFFAGE_START2"]))
then
if (otherdevices['Chaudiere'] == 'Off')
then
if (temp_etage < (consigne_eco - hysteresis))
then
commandArray['Chaudiere']='On'
end

elseif (otherdevices['Chaudiere'] == 'On')
then
if (temp_etage > (consigne_eco + hysteresis))
then
commandArray['Chaudiere']='Off'
end
end

elseif ((t1>=uservariables["CHAUFFAGE_STOP1"]) and (t1<uservariables["CHAUFFAGE_START4"]))
then
if (otherdevices['Chaudiere'] == 'Off')
then
if (temp_rdc < (consigne_eco - hysteresis))
then
commandArray['Chaudiere']='On'
elseif (otherdevices['Chaudiere'] == 'Off')
then
if (temp_rdc > (consigne_eco + hysteresis))
then
commandArray['Chaudiere']='Off'
end
end
end
end
end
return commandArray
Les "consignes" sont des "dummy thermostats" et les temp_(rdc/etage/maison) sont des "dummy temperature".


Si une âme charitable pouvait m'indiquer (et surtout m'expliquer) d'où vient le problème de string / nombre :)


Merci.

Re: Problème comparaison valeurs

Publié : 27 déc. 2016, 22:23
par vil1driver
Salut,

Quelle est la ligne 20 ?

Re: Problème comparaison valeurs

Publié : 27 déc. 2016, 22:35
par dokho
Salut vil1driver,

C'est celle ci:

Code : Tout sélectionner

if (temp_rdc < (consigne_confort - hysteresis))
si je remplace par:

Code : Tout sélectionner

if (temp_rdc < consigne_confort)
Ca passe comme une lettre à la poste :)

Re: Problème comparaison valeurs

Publié : 27 déc. 2016, 23:01
par vil1driver
Et avec ceci ?

Code : Tout sélectionner

if (temp_rdc < tonumber(consigne_confort - hysteresis))
Ou alors simplement ceci

Code : Tout sélectionner

local hysteresis = '0.5' 

Re: Problème comparaison valeurs

Publié : 27 déc. 2016, 23:10
par dokho
Ni l'un, ni l'autre (j'avais déjà essayé le "tonumber") :(

Re: Problème comparaison valeurs

Publié : 27 déc. 2016, 23:16
par vil1driver
C'est pourtant la clé

Ceci ?

Code : Tout sélectionner

if (tonumber(temp_rdc)  < tonumber(consigne_confort - hysteresis))

Re: Problème comparaison valeurs

Publié : 27 déc. 2016, 23:28
par dokho
Impeccable :)

Je n'ai plus qu'à modifier les autres occurrences dans le script.

Ce qui est étrange c'est que sans l'hysteresis ça fonctionne nickel: donc consigne_confort et temp_rdc sont bien des valeurs numériques ?
Pourquoi y-a-t-il besoin d'un tonumber devant temp_rdc ?


Merci vil1driver en tout cas ;)

Re: Problème comparaison valeurs

Publié : 27 déc. 2016, 23:38
par vil1driver
Non dans ton script seul l'hysteresis est un numérique, les temps et consignes sont des chaînes.

Juste pour la forme peux tu également tester ceci

Code : Tout sélectionner

if (tonumber(temp_rdc)  < consigne_confort - hysteresis)

Re: Problème comparaison valeurs

Publié : 28 déc. 2016, 11:16
par patrice
bonjour
je fais la police du forum, et je deplace le message dans autre chose que la bibli de scripts et tutos

Re: Problème comparaison valeurs

Publié : 28 déc. 2016, 11:22
par vil1driver
merci ;)