Problème comparaison valeurs

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 <\>.
dokho
Messages : 685
Inscription : 28 déc. 2014, 19:32

Problème comparaison valeurs

Message 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.
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Problème comparaison valeurs

Message par vil1driver »

Salut,

Quelle est la ligne 20 ?
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
dokho
Messages : 685
Inscription : 28 déc. 2014, 19:32

Re: Problème comparaison valeurs

Message 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 :)
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Problème comparaison valeurs

Message 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' 
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
dokho
Messages : 685
Inscription : 28 déc. 2014, 19:32

Re: Problème comparaison valeurs

Message par dokho »

Ni l'un, ni l'autre (j'avais déjà essayé le "tonumber") :(
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Problème comparaison valeurs

Message par vil1driver »

C'est pourtant la clé

Ceci ?

Code : Tout sélectionner

if (tonumber(temp_rdc)  < tonumber(consigne_confort - hysteresis))
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
dokho
Messages : 685
Inscription : 28 déc. 2014, 19:32

Re: Problème comparaison valeurs

Message 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 ;)
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Problème comparaison valeurs

Message 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)
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
patrice
Messages : 1720
Inscription : 22 sept. 2014, 21:51

Re: Problème comparaison valeurs

Message par patrice »

bonjour
je fais la police du forum, et je deplace le message dans autre chose que la bibli de scripts et tutos
Raspberry pi 3, Dongle RfxCom et Zigate +, plugin de pipiche, Volets Roulants profalux, contrôle d'éclairage, détecteurs de présence, alarme incendie, pilotage livebox ...
Objectif : WAF > 1
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Problème comparaison valeurs

Message par vil1driver »

merci ;)
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
Répondre