Notification dans script LUA

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 <\>.
andromede
Messages : 19
Inscription : 13 mars 2018, 13:45

Notification dans script LUA

Message 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
Dernière modification par andromede le 26 mars 2018, 22:57, modifié 1 fois.
Tonio16
Messages : 349
Inscription : 13 oct. 2017, 17:00

Re: Notification dans script LUA

Message 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
Domoticz V2020.2 sous raspbian-Buster
Raspberry Pi B+ avec Clé Zigate 3.1d Plugin 4.11.011
andromede
Messages : 19
Inscription : 13 mars 2018, 13:45

Re: Notification dans script LUA

Message 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 !!
Tonio16
Messages : 349
Inscription : 13 oct. 2017, 17:00

Re: Notification dans script LUA

Message 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.
Domoticz V2020.2 sous raspbian-Buster
Raspberry Pi B+ avec Clé Zigate 3.1d Plugin 4.11.011
andromede
Messages : 19
Inscription : 13 mars 2018, 13:45

Re: Notification dans script LUA

Message par andromede »

Merci de m'avoir aiguiller, j'ai changer ma valeur volume en variable globale et cela fonctionne.

Encore merci,
Répondre