Page 1 sur 1

Notification dans script LUA

Publié : 26 mars 2018, 16:59
par andromede
Bonjour,

J'utilise le script de DumpDos (que je remercie) pour connaitre mon volume de pellet restant dans ma cuve.

Jusque là, tous va bien, cela fonctionne au top.
J'essai maintenant d'être averti lorsque le niveau est trop bas, et là c'est le drame !!

J'ai essayer en rajoutant les 4 dernière lignes, mais j'ai toujours ce message d'erreur:

71: attempt to compare nil with number

Quelqu'un pourrait m'aider ?

Code : Tout sélectionner

---------------------------------------------------------------------------
-- script_device_cuve_volumerREC.lua --------------------------------------
-- DumpDos 2016 -----------------------------------------------------------
---------------------------------------------------------------------------
-- Ce script permet la conversion d'une hauteur en volume en fonction de --
-- la largeur et la longueur d'une cuve -----------------------------------
---------------------------------------------------------------------------
-- Il peut être utilisé pour une cuve , un bassin ou toute autre ----------
-- utilisation qui s'y prêterai -------------------------------------------
---------------------------------------------------------------------------


-------------------------------------------------------------------------------------------------------------
----------------------------------------- Variables à Editer ------------------------------------------------
-------------------------------------------------------------------------------------------------------------

local Hauteur_Eau = '60'                -- Hauteur maximale de l'eau en cm
local Marge_Capteur = '1'               -- Marge de vôtre capteur par rapport à la surface de l'eau en cm
local Longueur = '65'                   -- Longueur de la cuve en cm
local Largeur = '29'                    -- Largeur de la cuve en cm
local Distance = 'Distance'        -- Nom du capteur de hauteur
--local Distance = '9'        -- Nom du capteur de hauteur
local Domoticz_url = '192.168.0.56:8080' -- Adresse IP:port de Domoticz
local Afficheur = '12'                   -- IDx de l'afficheur du niveau

-------------------------------------------------------------------------------------------------------------
-------------------------------------- Fin des Variables à Editer -------------------------------------------
-------------------------------------------------------------------------------------------------------------


commandArray = {}
-- Détection du changement de valeur --
if (devicechanged[Distance]) then
   
   -- Valeur distance relevée --
   Mesure_Capteur = tonumber(otherdevices_svalues['Distance'])
   
   -- Inversion de la valeur relevée --
   local Niveau_Eau = Hauteur_Eau - ( Mesure_Capteur - Marge_Capteur )
   
   -- Vérification niveau minimum --
   if Niveau_Eau <= ( 0 ) then
 
      -- Incrémentation du volume à 0 --
      local Volume = ( 0 )
      
      -- Mise a jour de l'afficheur --
      local url = Domoticz_url..'/json.htm?type=command&param=udevice&idx='..Afficheur..'&nvalue=0&svalue='..Volume
      commandArray[1]={['OpenURL']=url }
      
   -- Vérification niveau minimum --   
   elseif Niveau_Eau > ( 0 ) then
   
      -- Calcul de l'aire --
      local Aire = ( Longueur * Largeur)
   
      -- Calcul du volume --
      local Volume_Brut = ( Aire * Niveau_Eau )
   
      -- Conversion de Cm3 à L --
      local Volume_Brut_Litres = Volume_Brut / 1000
   
      -- Arrondi à l'unité --
      local Volume = math.ceil( Volume_Brut_Litres )
      
      -- Mise a jour de l'afficheur --
      local url = Domoticz_url..'/json.htm?type=command&param=udevice&idx='..Afficheur..'&nvalue=0&svalue='..Volume
      commandArray[1]={['OpenURL']=url }
   end

if (Volume<20) and (Volume>10) then
commandArray['SendNotification']='Poêle: niv. <20% !'
elseif (Volume<10) then
commandArray['SendNotification']='Poêle: niv. <10% !'
end

end
return commandArray

Re: Notification dans script LUA

Publié : 26 mars 2018, 21:02
par Tonio16
Salut

Tu dois déclarer volume avec les autres variables au début du script. Comme c'est dans le script, ce n'est valable que dans la boucle où il est utilisé la première fois. (Si j'ai birn compris)

Pour ta condition, je l'écrirais ainsi:

if (Volume<10) then
commandArray['SendNotification']='Poêle: niv. <10% !'
elseif (Volume<20) then
commandArray['SendNotification']='Poêle: niv. <20% !'
end

Re: Notification dans script LUA

Publié : 26 mars 2018, 21:57
par andromede
J’essaie de récupéré la variable "Arrondi à l'unité", elle est le volume final résultant d'une suite d'opération.

Je n'eut peut donc la déclarer avant.

J'ai essayer ta modif, mais cela ne fonctionne pas.

En tout cas, merci de te pencher sur mon problème !!

Re: Notification dans script LUA

Publié : 26 mars 2018, 22:13
par Tonio16
andromede a écrit :J’essaie de récupéré la variable "Arrondi à l'unité", elle est le volume final résultant d'une suite d'opération.

Je n'eut peut donc la déclarer avant.

J'ai essayer ta modif, mais cela ne fonctionne pas.

En tout cas, merci de te pencher sur mon problème !!
L'erreur 71 dit que ta variable est vide car quand tu l'utilises, elle n'est valable que localement, quand le script sort du then ou du elseif, volume n'existe plus. Recherche lua et local dans google pour de meilleure explication.
Pour resoudre ton probleme, creer par exemple une autre variable en début de script qui predra la valeur de l'arrondi. Tu utilises cette nouvelle variable pour ton if de fin.

Ma modif ne devait pas resoudre ton probleme, je trouvais juste le code plus propre.

Re: Notification dans script LUA

Publié : 26 mars 2018, 22:56
par andromede
Merci de m'avoir aiguiller, j'ai changer ma valeur volume en variable globale et cela fonctionne.

Encore merci,