Page 1 sur 3

Script allumage lumiere

Publié : 10 avr. 2017, 23:25
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


Re: Script allumage lumiere

Publié : 11 avr. 2017, 12:33
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

Re: Script allumage lumiere

Publié : 11 avr. 2017, 12:41
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 :-)

Re: Script allumage lumiere

Publié : 11 avr. 2017, 12:42
par schwinny
J'ai oublié le principal :-)

MERCI ;)

Re: Script allumage lumiere

Publié : 14 avr. 2017, 12:44
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



Re: Script allumage lumiere

Publié : 14 avr. 2017, 16:13
par agadoc
Tu peux envoyé tes logs stp ?

Re: Script allumage lumiere

Publié : 14 avr. 2017, 16:15
par schwinny
des que je suis chez moi sans soucis ;)

Re: Script allumage lumiere

Publié : 14 avr. 2017, 18:12
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

Re: Script allumage lumiere

Publié : 14 avr. 2017, 18:25
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.

Re: Script allumage lumiere

Publié : 14 avr. 2017, 18:32
par vil1driver
j'était en pleine édition de mon message lorsque tu as répondu je pense ;)