Aller au contenu

Messages recommandés

Posté(e)

Cette fois-ci je pense que sa devrait fonctionner, par contre le problème c'est que tu risques d'avoir énormément de log car à  chaque fois la conso va changer de 1watt il va relancer la scène.

Donc il faudrait peut-être ajouter une variable global pour bloquer la scène des le départ.

--[[
%% properties
66 valueSensor
%% globals
--]]
local sourceTrigger = fibaro:getSourceTrigger();
local current_conso = fibaro:getValue(66, "valueSensor");
local light1 = fibaro:getValue(132, "value");
local light2 = fibaro:getValue(133, "value");

if (tonumber(current_conso) > 80) and ( fibaro:getGlobalValue("Jour_Nuit") == "Jour" ) then
    fibaro:debug("Conso wallplug " ..current_conso);
    fibaro:debug(os.date() .. " - Télé allumée");
    fibaro:debug(os.date() .. " - LEDs allumées");
    if ( tonumber(light1) < 1 ) then
        fibaro:call(132, "turnOn");
    end
    if ( tonumber(light2) < 1 ) then
        fibaro:call(133, "turnOn");
    end
elseif (tonumber(current_conso) < 80) then
    fibaro:debug(os.date() .. " - Télévision éteinte");
    fibaro:debug(os.date() .. " - LEDs éteintes");
    if ( tonumber(light1) > 1 ) then
        fibaro:call(132, "turnOff");
    end
    if ( tonumber(light2) > 1 ) then
        fibaro:call(133, "turnOff");
    end
end
Posté(e)

Il y a peut-être aussi un autre soucis ... ça n'allumera les lumières que pendant le 'jour' et ne les éteindra que pendant la 'nuit' ...

Oui mais ... et si on allume la TV pendant la nuit ? Ou si on l'éteind le jour suivant (au matin par exemple).

 

C'est pas plutôt l'inverse qu'il faut tester dans le premier IF, comme ceci: fibaro:getGlobalValue("Jour_Nuit") == "Nuit"  )

Et sortir la partie de détection de la basse consommation du test "nuit_jour", comme ça même si la TV est éteinte le jour suivant, les lampes suivront.

 

Pour éviter le changement trop rapide, peut-être rajouter un sleep() de qcq secondes ...

 

C'est juste qcq idées comme ça  ;)

Posté(e)

Bon je tâche de tester cela ce soir et je vous tiens au courant.

Pour la variable oui je compte bien la mettre en nuit.

Pour le sleep je le passerais sûrement à60 sec.

Pour le log, cela se peut qu'une fois le script en marche fonctionnel je mette des -- devant les lignes de log pour les neutraliser.

En tout cas merci pour votre aide :D

Posté(e)

Il y a peut-être aussi un autre soucis ... ça n'allumera les lumières que pendant le 'jour' et ne les éteindra que pendant la 'nuit' ...

Oui mais ... et si on allume la TV pendant la nuit ? Ou si on l'éteind le jour suivant (au matin par exemple).

 

C'est pas plutôt l'inverse qu'il faut tester dans le premier IF, comme ceci: fibaro:getGlobalValue("Jour_Nuit") == "Nuit"  )

Et sortir la partie de détection de la basse consommation du test "nuit_jour", comme ça même si la TV est éteinte le jour suivant, les lampes suivront.

 

Pour éviter le changement trop rapide, peut-être rajouter un sleep() de qcq secondes ...

 

C'est juste qcq idées comme ça  ;)

 

Moi je fais le code par rapport au source, à  lui de modifier ;)

  • Upvote 1
Posté(e)

Cool le script fonctionne nickel, il a juste fallut pour éteindre passer à  > 0, voila le script qui marche chez moi:

--[[
%% properties
66 valueSensor
%% globals
--]]

local sourceTrigger = fibaro:getSourceTrigger();
local current_conso = fibaro:getValue(66, "valueSensor");
local light1 = fibaro:getValue(132, "value");
local light2 = fibaro:getValue(133, "value");
     
if (tonumber(current_conso) > 90) and ( fibaro:getGlobalValue("Jour_Nuit") == "Nuit" ) then
		fibaro:debug("Conso wallplug " ..current_conso);
        fibaro:debug(os.date() .. " - Télé allumée");
        fibaro:debug(os.date() .. " - LEDs allumées");
        if ( tonumber(light1) < 1 ) then
            fibaro:call(132, "turnOn");
        end
        if ( tonumber(light2) < 1 ) then
            fibaro:call(133, "turnOn");
        end

elseif (tonumber(current_conso) < 90) then
        fibaro:debug(os.date() .. " - Télévision éteinte");
        fibaro:debug(os.date() .. " - LEDs éteintes");
        if ( tonumber(light1) > 0 ) then
            fibaro:call(132, "turnOff");
        end
        if ( tonumber(light2) > 0 ) then
            fibaro:call(133, "turnOff");
        end
end

Un gros merci a Shad pour la prog et à  tout les autres pour les coups de main / idée

 

Dernière chose, faut mettre ou le fibaro:sleep car j'ai essayé juste avant le dernier end mais cela ne marche pas :(

Posté(e) (modifié)

Ou un seul en dehors du dernier bloc if... end :)

Modifié par guchtpi
Inutile de citer le message précédent, merci
Posté(e)

@Shad:

Pendant qq années j'étais développeur Java (applications Web essentiellement sous Weblogic), ensuite "Project Manager" ... mais trop de papier, j'ai pas aimé !

Maintenant disons que je suis 'Déployeur d'applications' ... en gros: réception des codes des contractant, intégration et installation des applications (toujours Weblogic/Java/Oracle DB) dans notre 'DataCenter' au Lux.

Posté(e)

@moicphil:
Je ne comprends pas bien cette philosophie ... quand plusieurs personnes interviennent dans un fil c'est plus simple et plus clair de citer le passage que l'on veut commenter... tu ne trouves pas ?

Posté(e)

Cool le script fonctionne nickel, il a juste fallut pour éteindre passer à  > 0, voila le script qui marche chez moi:

 

Il me semble que c'était le problème que tu as évoqué depuis le début, non ?... et sur lequel je t'avais alerté ?  ;) 

Et pour le test de Wallplug si OFF, c'est == 0 (au lieu de < 1)... mais, le <1 fonctionnera évidemment

Posté(e)

@moicphil:

Je ne comprends pas bien cette philosophie ... quand plusieurs personnes interviennent dans un fil c'est plus simple et plus clair de citer le passage que l'on veut commenter... tu ne trouves pas ?

 

Ce n'est pas une "philosophie" mais du bon sens... ;)

Quelle est l’intérêt de citer le message juste au dessus? ( a part surcharger les post qui deviennent du coup plus durs à  suivre...)

T'imagines le bordel si tout le monde cite le message du dessus?

Tu peux néanmoins, si le message précédent est long, citer "un passage".

 

 

Désolé Lolomail pour le HS.

Posté(e)

@Shad:

Pendant qq années j'étais développeur Java (applications Web essentiellement sous Weblogic), ensuite "Project Manager" ... mais trop de papier, j'ai pas aimé !

Maintenant disons que je suis 'Déployeur d'applications' ... en gros: réception des codes des contractant, intégration et installation des applications (toujours Weblogic/Java/Oracle DB) dans notre 'DataCenter' au Lux.

Ok, quand àmoi j'ai appris le php sur le tas.

Quand àmoi je suis de formation électrique, je suis passé par le monde du pétrole avec mon père. Et avec le temps notre société àpris de l'ampleur et j'ai du me mettre àgérer le parc informatique et apprendre linux.

Maintenant en parallèle je suis entrain de monter ma société de gestion informatique, domotique, multimédia ^^.

Posté(e)

Bon petite évolution du script:

--[[
%% properties
66 valueSensor
%% globals
--]]

local sourceTrigger = fibaro:getSourceTrigger();
local current_conso = fibaro:getValue(66, "valueSensor");
local light1 = fibaro:getValue(132, "value");
local light2 = fibaro:getValue(133, "value");
     
if (tonumber(current_conso) > 90)
and ( fibaro:getGlobalValue("Jour_Nuit") == "Nuit" )
and ( fibaro:getGlobalValue("LED_Auto") == "1" )
then
		fibaro:debug("Conso wallplug " ..current_conso);
        fibaro:debug(os.date() .. " - Télé allumée");
        fibaro:debug(os.date() .. " - LEDs allumées");
        if ( tonumber(light1) < 1 ) then
            fibaro:call(132, "turnOn");
        end
        if ( tonumber(light2) < 1 ) then
            fibaro:call(133, "turnOn");
        end
elseif (tonumber(current_conso) < 90) then
        fibaro:debug(os.date() .. " - Télévision éteinte");
        fibaro:debug(os.date() .. " - LEDs éteintes");
        if ( tonumber(light1) > 0 ) then
            fibaro:call(132, "turnOff");
        end
        if ( tonumber(light2) > 0 ) then
            fibaro:call(133, "turnOff");
        end
end

J'ai ajouté une variable LED_Auto pour neutraliser le script et allumer les LED la journée si je veux.

 

L'idée est de changer cette variable via un virtual device dans lequel j'ai mis:

- Deux bouton (auto/manu) pour changer la variable suivant les codes:

fibaro:setGlobal("LED_Auto", "1");

et

fibaro:setGlobal("LED_Auto", "0");

Suivi de boutons pour allumer les LEDs plutot que de naviguer:

if ( tonumber(fibaro:getValue(132, "value")) < 1 ) then
fibaro:call(132, "turnOn");
end

et

if ( tonumber(fibaro:getValue(132, "value")) > 0 ) then
fibaro:call(132, "turnOff");
end

Puis dans la main loop le code suivant pour avoir un report sur 3 labels:

-- Controle LED télé
if ( tonumber(fibaro:getValue(132, "value")) < 1 ) then
fibaro:call(175, "setProperty", "ui.Label1.value", "Eteintes")
end

if ( tonumber(fibaro:getValue(132, "value")) > 0 ) then
fibaro:call(175, "setProperty", "ui.Label1.value", "Allumées")
end


-- Controle LED buffet
if ( tonumber(fibaro:getValue(133, "value")) < 1 ) then
fibaro:call(175, "setProperty", "ui.Label2.value", "Eteintes")
end

if ( tonumber(fibaro:getValue(133, "value")) > 0 ) then
fibaro:call(175, "setProperty", "ui.Label2.value", "Allumées")
end


-- Controle automatisme
if ( fibaro:getGlobalValue("LED_Auto") == "1" ) then
fibaro:call(175, "setProperty", "ui.Label3.value", "Automatique")
end

if ( fibaro:getGlobalValue("LED_Auto") == "0" ) then
fibaro:call(175, "setProperty", "ui.Label3.value", "Manuel")
end

Voila si cela peut donner des idées / servir ;)

Posté(e)

Salut ...

 

Et bein, c'est bien, tu commences à  métriser tout ça :-) !

 

Si je puis me permettre une petite remarque de développeur... essayes d'utiliser des définitions de constantes (même si LUA ne possède pas vraiment ce concept) dans tes scripts, ça facilite la lisibilité et la portabilité du code.

 

Par exemple:

à  la place de "132", tu déclares au début du code (en dehors des boucles et tests):

LED_TV_ID = 132;

(Ici, la "naming convention" consiste à  mettre les noms des constantes en MAJUSCULES).

 

Tu peux ensuite t'en servir dans les commandes du type:

local light1 = fibaro:getValue(LED_TV_ID, "value");
fibaro:call(LED_TV_ID, "turnOn"); 

Ca n'a l'air de rien, et ça demande un peu plus de rigeur, mais je peux te garantir que ça clarrifie grandement le code... parfois, même pas besoin de mettre de commentaires :-)

  • Upvote 1
  • 1 mois après...
Posté(e)

Bon nouvelle évolution du module virtuel pour plus de souplesse. Ajout de deux boutons pour démarrer la scène ou éteindre la scène + une label pour savoir si la scène est active, afin que je puisse le couper quand j'en ai envie.

 

Le bouton ON contient:

--[[
%% properties
%% globals
--]]

fibaro:setSceneEnabled(50, true)
fibaro:call(175, "setProperty", "ui.Label4.value", "Activée")

Le bouton OFF contient:

--[[
%% properties
%% globals
--]]

fibaro:setSceneEnabled(50, false)
fibaro:call(175, "setProperty", "ui.Label4.value", "Désactivée")

Puis comme j'ai installé le scheduler, j'ai mis des lignes de commandes afin de basculer la variable "Auto" et le lancement de la scène au coucher du soleil en appuyant sur le bouton qui va bien du virtual device. Du coup quand je vais regarder la télé le soir, lors du coucher du soleil cela s'allumera. Mais je pourrais toujours l'arreter via le VD.

×
×
  • Créer...