Script allumage lumiere

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 <\>.
schwinny
Messages : 123
Inscription : 23 mars 2017, 21:41

Script allumage lumiere

Message par schwinny »

Bonjour à tous.

je sèche sur un simple script d'automatisation de lumière.

pourriez vous me donner un coup de main svp et me dire ou sont les erreurs ?

pour le moment, je ne m'occupe que de la premiere partie "Détecteur Cuisine".

le soucis est que cela ne rentre pas dans l e bloc et je n'arrive pas a tester la luminosité car il me marque

" in /home/schwinny/domoticz/scripts/lua/script_device_AutomatisationLumieres.lua: ...icz/scripts/lua/script_device_AutomatisationLumieres.lua:21: attempt to compare string with number"

je pense a une erreur de code.



Code : Tout sélectionner

-- les variables de seuil.
Seuil_Lux=20
Valeur_Lux=0
-------------------
--------------------
-- les variables Locales

--------------------

commandArray = {}

print('luminosite actuelle')
print(otherdevices_svalues['Luminosite Oeil Cuisine'])


if (otherdevices['Detecteur Oeil Cuisine']=='On') then
        print('detection Cuisine')
        Valeur_Lux=otherdevices_svalues['Luminosite Oeil Cuisine']
        Valeur_lux=tonumber(Valeur_Lux)
        if (Valeur_Lux <= Seuil_Lux) then
                --Allumage lumiere du couloir
                print("Mvt detecte couloir, allumage lumiere")
        else
                print("Mvt detecte couloir mais lumiere du jour")
        end
else
        print('pas de mvt capteur cuisine detecte')
end

if (otherdevices['Detecteur Oeil Couloir']=='On') then
        print('detection couloir')
        Valeur_Lux=Otherdevices_svalues['Luminosite Oeil Couloir']
        Valeur_Lux=tonumber(Valeur_Lux)
        if (Valeur_Lux<=Seuil_Lux) then
                --Allumage lumiere du couloir
                print('Mvt detecte couloir, allumage lumiere')
        else
                print('Mvt detecte couloir mais lumiere du jour')
        end

end

if ((otherdevices['Deteceur Oeil Salon']=='On') or (otherdevices['Detecteur Oeil Salon TV']=='On') ) then
        print('Detection salon')
        Valeur_Lux=otherdevices_svalues['Luminosite Oeil Salon']
        Valeur_Lux=tonumber(Valeur_Lux)
        Valeur_Lux2=otherdevices_Svalues['Luminosite Oeil Salon TV']
        Valeur_Lux2=tonumber(Valeur_Lux2)
        if ((Valeur_Lux <= tonumber(Seuil_Lux)) or (Valeur_Lux2<=tonumber(Seuil_Lux))) then
                if ('Consommation Prise Lumière'>='4') then
                --      Allumage lumiere du salon
                print('Mvt detecte salon, allumage lumiere')
                end
        else
                print('Mvt detecte Salon mais lumiere du jour')
        end
end

return commandArray

agadoc
Messages : 10
Inscription : 03 avr. 2017, 14:49

Re: Script allumage lumiere

Message par agadoc »

En effet, c'est bien une erreur.

Tu compare une valeur de type chaine de caractères à une valeur de type entier.

Ca doit se trouver par ici :

Code : Tout sélectionner

 Valeur_lux=tonumber(Valeur_Lux)
      if (Valeur_Lux <= Seuil_Lux) then
Tu ne peux comparer que 2 types identiques
schwinny
Messages : 123
Inscription : 23 mars 2017, 21:41

Re: Script allumage lumiere

Message par schwinny »

Je me doutais bien que j'avais fait une bêtise.
Cependant comment récupérer la valeur de la luminosité afin de tester si l'on doit allumer la lumière ?

Car en gros je ne veux pas allumer en pleine jour :-)
schwinny
Messages : 123
Inscription : 23 mars 2017, 21:41

Re: Script allumage lumiere

Message par schwinny »

J'ai oublié le principal :-)

MERCI ;)
schwinny
Messages : 123
Inscription : 23 mars 2017, 21:41

Re: Script allumage lumiere

Message par schwinny »

Bon j'ai modifié mon script mais j'ai toujours la meme erreur

quelqu'un peux me dire svp comment récupérer la valeur en Lux du détecteur de mouvement FIBARO et la comparer a une valeur prédefini par la variable locale Seuil_Lux

Code : Tout sélectionner


-- les variables de seuil.
local Seuil_Lux=20
local Valeur_Lux=0
local Valeur_Lux2=0
-------------------
--------------------
-- les variables Locales

--------------------

commandArray = {}

print('luminosite actuelle')
print(otherdevices_svalues['Luminosite Oeil Cuisine'])

Seuil_Lux=tonumber(Seuil_Lux)


if (otherdevices['Detecteur Oeil Cuisine']=='On') then
        print(‘Detection Cuisine')
        Valeur_Lux=otherdevices_svalues['Luminosite Oeil Cuisine']
        Valeur_lux=tonumber(Valeur_Lux)
   		if (Valeur_Lux <= Seuil_Lux) then
                print("Mouvement Détecté dans la cuisine —> Allumage Lumière")
        else
                print("Mouvement Détecté dans la cuisine mais Forte Luminosité")
        end
end

if (otherdevices['Detecteur Oeil Couloir']=='On') then
        print(‘Detection couloir')
        Valeur_Lux=Otherdevices_svalues['Luminosite Oeil Couloir']
        Valeur_Lux=tonumber(Valeur_Lux)
        if (Valeur_Lux<=Seuil_Lux) then
                print('Mouvement Détecté dans le couloir —> Allumage Lumière')
        else
                print('Mouvement Détecté dans le couloir mais Forte Luminosité')
        end
end

if (otherdevices['Detecteur Oeil SDB']=='On') then
        print('detection oeil sdb')
        Valeur_Lux=otherdevices_Svalues['Luminosite Oeil SDB']
        Valeur_Lux=tonumber(Valeur_Lux)
        if (otherdevices_svalues['Luminosite Oeil SDB'] <= Seuil_Lux) then
                print('Mouvement Détecté dans la Salle de Bain —> Allumage Lumière')
        else
                print('Mouvement Détecté dans la Salle de Bain mais forte Luminosité')
        end
end

if ( (otherdevices['Detecteur Oeil Salon']=='On’) or (otherdevices['Detecteur Oeil Salon TV']==‘on’) ) then
        print(‘Mouvement detecté dans le Salon’)
        Valeur_Lux=otherdevices_svalues['Luminosite Oeil Salon']
        Valeur_Lux=tonumber(Valeur_Lux)
        Valeur_Lux2=otherdevices_Svalues['Luminosite Oeil Salon TV']
        Valeur_Lux2=tonumber(Valeur_Lux2)
        if ((Valeur_Lux <= Seuil_Lux) or (Valeur_Lux2<=Seuil_Lux)) then
               -- if ('Consommation Prise Lumière'>='4') then
                --      Allumage lumiere du salon
                print(‘ —> Allumage lumiere du salon’)
               -- end
        else
                print(‘Mais Forte luminosité’)
        end
end

return commandArray


agadoc
Messages : 10
Inscription : 03 avr. 2017, 14:49

Re: Script allumage lumiere

Message par agadoc »

Tu peux envoyé tes logs stp ?
schwinny
Messages : 123
Inscription : 23 mars 2017, 21:41

Re: Script allumage lumiere

Message par schwinny »

des que je suis chez moi sans soucis ;)
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Script allumage lumiere

Message par vil1driver »

Salut,

Un script_device devrait TOUJOURS prendre en compte un

Code : Tout sélectionner

if devicechanged['mon device'] then
sinon il va s'exécuter x fois, tout le temps que ton capteur sera à 'On' au lieu d'uniquement que lorsqu'il passe à 'On'

A votre avis ceci

Code : Tout sélectionner

local Seuil_Lux=20
Nombre ou chaîne ? réponse: nombre (une chaîne étant un truc entre guillemets ;) )

donc ceci est complètement inutile

Code : Tout sélectionner

tonumber(Seuil_Lux)
par contre ce que renvoie ceci est bien une chaîne

Code : Tout sélectionner

otherdevices_svalues
vérifiable par un

Code : Tout sélectionner

-- retourne le type de la variable
-- 'string' ou 'number'
function typeof(var)
    local _type = type(var);
    if(_type ~= "table" and _type ~= "userdata") then
        return _type;
    end
    local _meta = getmetatable(var);
    if(_meta ~= nil and _meta._NAME ~= nil) then
        return _meta._NAME;
    else
        return _type;
    end
end

print(typeof(otherdevices_svalues['Luminosite Oeil Cuisine']))
ceci

Code : Tout sélectionner

Valeur_lux=tonumber(Valeur_Lux)
ou ceci

Code : Tout sélectionner

Valeur_Lux=tonumber(otherdevices_svalues['Luminosite Oeil Cuisine'])
devrait effectivement passer la valeur en nombre et donc rendre la comparaison possible..

étrange cette erreur..

mais bon tu peux tenter de changer ceci

Code : Tout sélectionner

local Seuil_Lux=20
en ceci

Code : Tout sélectionner

local Seuil_Lux='20'
et enlever tes tonumber pour faire les comparaisons avec les chaînes..

sinon au début de ton script fait directement ceci

Code : Tout sélectionner

local Lux_cuisine = otherdevices_svalues['Luminosite Oeil Cuisine']
local Lux_salon = otherdevices_svalues['Luminosite Oeil Couloir']
local Lux_couloir = otherdevices_svalues['Luminosite Oeil Salon']
ça structure et est plus simple à utiliser par la suite

et fais gaffe à la casse, à un moment tu mets une majuscule à otherdevices_svalues
Dernière modification par vil1driver le 14 avr. 2017, 18:41, modifié 10 fois.
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
schwinny
Messages : 123
Inscription : 23 mars 2017, 21:41

Re: Script allumage lumiere

Message par schwinny »

Bonjour.

TU as raison pour le "if device change", je vais corriger.

Pour le "local Seuil_Lux=20", pour moi c'est un nombre mais je ne suis pas encore habitué au langage lua.
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Script allumage lumiere

Message par vil1driver »

j'était en pleine édition de mon message lorsque tu as répondu je pense ;)
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