Aller au contenu

Recommended Posts

Pour fêter ma nomination pour Mr Avril en fanfare, voici mon petit module qui gère mes prises automatiquement pour couper la veille des appareils.

 

module Prise

 

Etape 1

Créer une variable globale "SysPrise_auto" avec les vlaeurs "ON" et "OFF"

Créer une variable globale "Jour_semaine" avec 7 valeurs "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi" et "Dimanche"

 

Etape 2

Créer un module avec

- 1 label

- 2 boutons

 

Etape 3 - Label

Label : "Prise auto : "

ID : "Label1"

 

Etape 4 - Bouton 1

Label "Auto"

code lua :

fibaro:setGlobal("SysPrise_auto", "ON");
fibaro:call(103, "setProperty", "ui.Label1.value", "Auto");

icone :

User1028

 

103 est l'ID du module virtuel

 

Etape 5 - Bouton 2

Label "Manuel"

code lua :

fibaro:setGlobal("SysPrise_auto", "OFF");
fibaro:call(103, "setProperty", "ui.Label1.value", "Manuel");

icone :

User1029

 

103 est l'ID du module virtuel

 

Etape 6 - Main Loop

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

local ID_wallplug = {35,40,55}; --ID wallplug
local conso = 50; -- consommation en dessous de laquelle on coupe les prises

local sysprise_auto = fibaro:getGlobal("SysPrise_auto");
local jour = fibaro:getGlobal("Jour_semaine");
-------------------------------------------------------------------------------------------------------------
-- Définition des horaires Auto des Prises
-------------------------------------------------------------------------------------------------------------
local time_off_1 = "08:30"; -- Si on décide de couper les prises en journée, ici est l'heure de coupure
local time_on_1 = "16:30"; -- Si on décide de couper les prises en journée, ici est l'heure de rallumage

local time_off_2; -- heure ou on éteint les prises la nuit
local time_on_2 = "06:30"; -- l'heure de rallumage de la coupure de nuit

if jour == "Samedi" or jour == "Dimanche" then
  time_off_2 = "02:00"; -- Le samedi et le Dimanche, les prises sont coupées à  2h du matin
else
  time_off_2 = "00:01"; -- Les jours de semaine, les prises sont coupées à  minuit.
end

-------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------
-- Dans la partie suivante se trouve le code qui fait varié la variable "Jour_semaine"
-------------------------------------------------------------------------------------------------------------
local minute = 60000 --in milliseconds
local currentDate = os.date("*t");
local currentTime = string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min);

if (currentDate.wday == 1 ) then
fibaro:setGlobal("Jour_semaine", "Dimanche")
end
if (currentDate.wday == 2 ) then
fibaro:setGlobal("Jour_semaine", "Lundi")
end
if (currentDate.wday == 3 ) then
fibaro:setGlobal("Jour_semaine", "Mardi")
end
if (currentDate.wday == 4 ) then
fibaro:setGlobal("Jour_semaine", "Mercredi")
end
if (currentDate.wday == 5 ) then
fibaro:setGlobal("Jour_semaine", "Jeudi")
end
if (currentDate.wday == 6 ) then
fibaro:setGlobal("Jour_semaine", "Vendredi")
end
if (currentDate.wday == 7 ) then
fibaro:setGlobal("Jour_semaine", "Samedi")
end

local id_w;
if sysprise_auto == "ON" then
-------------------------------------------------------------------------------------------------------------
-- Nuit
-------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------
-- Coupure Nuit
-------------------------------------------------------------------------------------------------------------
if time_off_2 <= currentTime and currentTime < time_on_2 then
  fibaro:debug("Coupure nuit")
  for i=1, #ID_wallplug do
    id_w = tonumber(ID_wallplug[i]);
    --fibaro:debug(id_w.."valeur : "..tonumber(fibaro:getValue(id_w, "valueSensor")))
    if tonumber(fibaro:getValue(id_w, "value")) then
      fibaro:debug(id_w.." allumé")
      if tonumber(fibaro:getValue(id_w, "valueSensor")) < conso then
        fibaro:debug("veille => turnOff "..id_w)
        fibaro:call(id_w, 'turnOff');
      end
    end
  end
end

-------------------------------------------------------------------------------------------------------------
-- Rallumage Nuit
-------------------------------------------------------------------------------------------------------------
local id_w;

if time_on_2 == currentTime then
  fibaro:debug("Rallumage nuit")
  for i=1, #ID_wallplug do
    id_w = tonumber(ID_wallplug[i]);
    --fibaro:debug(id_w.."valeur : "..tonumber(fibaro:getValue(id_w, "valueSensor")))
    if tonumber(fibaro:getValue(id_w, "value")) == 1 then
      fibaro:debug("r_nuit prise allumé =1 "..tonumber(fibaro:getValue(id_w, "value")));
      fibaro:debug(id_w.." déjà  allumé")
    else
      fibaro:debug("r_nuit prise allumé =0 "..tonumber(fibaro:getValue(id_w, "value")));  
      fibaro:debug(id_w.." turnOn")
      fibaro:call(id_w, 'turnOn');
    end
  end
end
-------------------------------------------------------------------------------------------------------------
-- Jour - définir ici les jours ou vous souhaitez couper les prises en journée
-------------------------------------------------------------------------------------------------------------
if jour == "Samedi" or jour == "Dimanche" or jour == "Lundi" or jour == "Jeudi" then
  fibaro:debug("Prise OFF soir seulement");
elseif jour == "Mardi" or jour == "Mercredi" or jour == "Vendredi" then
  fibaro:debug("Prise OFF journée et soir");
-------------------------------------------------------------------------------------------------------------
-- Coupure Jour
-------------------------------------------------------------------------------------------------------------
  if time_off_1 <= currentTime and currentTime < time_on_1 then
    fibaro:debug("Coupure jour")
    for i=1, #ID_wallplug do
      id_w = tonumber(ID_wallplug[i]);
      --fibaro:debug(id_w.."valeur : "..tonumber(fibaro:getValue(id_w, "valueSensor")))
      if tonumber(fibaro:getValue(id_w, "value")) == 1 then
        fibaro:debug(id_w.." allumé")
        if tonumber(fibaro:getValue(id_w, "valueSensor")) < conso then
          fibaro:debug("veille => turnOff "..id_w)
          fibaro:call(id_w, 'turnOff');
        end
      end
    end
  end
-------------------------------------------------------------------------------------------------------------
-- Rallumage Jour
-------------------------------------------------------------------------------------------------------------
  if time_on_1 == currentTime then
    fibaro:debug("Rallumage jour")
    for i=1, #ID_wallplug do
      id_w = tonumber(ID_wallplug[i]);
      if tonumber(fibaro:getValue(id_w, "value")) == 1 then
        fibaro:debug("r_jour prise allumé =1 "..tonumber(fibaro:getValue(id_w, "value")));
        fibaro:debug(id_w.." déjà  allumé")
      else
        fibaro:debug("r_jour prise allumé =0 "..tonumber(fibaro:getValue(id_w, "value")));
        fibaro:debug(id_w.." turnOn")
        fibaro:call(id_w, 'turnOn');
      end
    end
  end
-------------------------------------------------------------------------------------------------------------
end
-------------------------------------------------------------------------------------------------------------
end

et voila !

 

ce module coupe les prises en veille :

- la nuit à  partir de 00:01 et les rallume à  6h30

- le jour (sauf le weekend et les jour ou ma femme est à  la maison) entre 8h30 et 16h30.

 

Les lignes à  modifier pour chacun sont :

ligne 7 : id du smartphone (ça ne sert à  rien, il n'ya plus de modifications push dans le module, c'etait juste pour les phases de tests)

ligne 8 : id de vos wallplug a renseigner ici

ligne 15 à  25 : mettre vos horaires souhaités

ligne 102 & 104 : définissez les jours ou vous coupez les prises le jour.

 

pour alleger le code, vous pouvez aussi supprimer toutes les lignes fibaro:debug(xxx) qui me servait a vérifier mon code, maintenant qu'il est plutot fonctionnel, elle ne serve plus a grand chose, si ce n'est vérifié ce que fait le code.

  • Upvote 2

Partager ce message


Lien à poster
Partager sur d’autres sites

Sympa :)

Ce qui serait top, c'est que dans la main loop tu surveilles la consommation de la prise, et dès que celle-ci passe sous un certain seuil (par exemple 5W), alors on considère que l'appareil est en veille et on peut couper complètement le courant.

Un mode super économique quoi.

Partager ce message


Lien à poster
Partager sur d’autres sites

c'est déja un peu le cas :

- pendant les plages horaires d'extinction, la loop vérifie la consommation de la prise et si la conso passe en dessous d'un seuil (chez moi 50W - ligne 52 et 97) il l’éteint. J'ai fait cette loop pour éviter que la télé s'éteigne si je n'ai pas fini mon film avant le début de la plage horaire.

 

- ensuite j'ai réfléchie à  une autre mode ou effectivement il coupait la prise des que ça passait sous une valeur => problème, si je veux rallumer ma télé, faut que j'aille rallumer ma prise et faire en sorte que la conso dépasse la valeur de 50W avant que la loop n’éteigne ma prise... et généralement la loop est plus rapide que moi :P

 

donc je me contente de les eteindre quand je suis pas la et les appareils sont en veille quand je suis la.

 

si tu as une autre idée, je suis preneur ! (sur uniquement télé x2 + home cinema + ps3 x2, je gagné env. 60€ par an, c'est deja ça de pris... ca rembourse les 3 wallplug en 3 ans :15: )

Partager ce message


Lien à poster
Partager sur d’autres sites

Ah oui c'est très bien comme ça :)

J'ai regardé le code trop vite en fait... :15:  j'avais pas vu la vérification de la consommation. Tu devrais mettre une variable en début de script à  personnaliser par l'utilisateur pour qu'on puisse l'adapter à  la consommation de nos équipements.

Partager ce message


Lien à poster
Partager sur d’autres sites

bonne idée => c'est fait (par contre, je peux pas tester si j'ai écrit une boulette, je crois pas, mais je suis jamais trop sur !)

faudrait également que je fasse une variable au début du script pour définir les jours ou on veut pas que ça coupe en journée (ligne 84 / 86)

Partager ce message


Lien à poster
Partager sur d’autres sites

perso j'utilise le scheduler LUA pour allumer àl'heure du coucher du soleil - 30 minutes et éteindre à22h30 (oui je sais on va dormir avec les poules ! LOL)

Partager ce message


Lien à poster
Partager sur d’autres sites

mais du coup, si tu es en train de mater la télé à  22h30, ça coupe la prise ?

 

J'ai bien essayé le scheduler (très rapidement, certes...) et j'ai pas tout compris.

Je suis sur qu'on peut faire plein de chose avec, mais j'aime bien comprendre le code pour savoir ce qu'il s'y passe vraiment.

Partager ce message


Lien à poster
Partager sur d’autres sites

@p78ch201 : en fait non, j'ai pris un "raccourci" pour l'explication ... la coupure à22h30 c'est en mode "vacances" ... en mode "normal", je coupe le wallplug lorsque je tape mon code pour armer l'alarme de nuit (SATEL)

Partager ce message


Lien à poster
Partager sur d’autres sites

ça me fait penser qu'il faudrait que j'integre ce module au simulateur de présence.

 

@jimbo : question subsidiaire : si tu es en "vacances", pourquoi ne pas laisser la prise éteinte (ça doit dépendre de ce qui est branché dessus j'imagine )

Partager ce message


Lien à poster
Partager sur d’autres sites

@p78ch201 : exact  :) celui-là  c'est juste pour la petite lampe à  coté de la télé (la seule qu'on allume le soir en semaine) ... -> simulation de présence pendant les vacances en meme temps

Partager ce message


Lien à poster
Partager sur d’autres sites

yes .... j'avoue que je suis assez fan de ce scheduler ... :) commande des volets aussi en fonction du lever/coucher du soleil ... 

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour, 

 

Super idée pour le module, du coup je l'ai mis en place... Tout fonctionne (du moins presque).

J'ai bien crée la variable Jour_Semaine avec les jours de la semaine comme valeur...

MAIS... Je me retrouve avec la même valeur chaque jour de la semaine... (Script mis en place vendredi soir... donc valeur à  "Vendredi" mais samedi la valeur était "Vendredi"... Et aujourd'hui pareil...

Ayant commencé la domotique il y a très peux de temps je ne suis pas encore bien à  l'aise avec le LUA...

Quelqu'un pourrait il me donner une piste pour faire en sorte que ma variable corresponde au jour J ?

Merci d'avance :)

Partager ce message


Lien à poster
Partager sur d’autres sites

il faut que tu mettes ce code dans la main loop pour faire varier la variable Jour_semaine

(en fait copie les lignes 17 à37 suivante àla ligne 38 du code du premier post)


local minute = 60000 --in milliseconds
local currentDate = os.date("*t");
local currentTime = string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min);
 
--wday=1 is Sunday
--wday=2 is Monday
--wday=3 is Tuesday
--wday=4 is Wednesday
--wday=5 is Thursday
--wday=6 is Friday
--wday=7 is Saturday

local jour = fibaro:getGlobal("Jour_semaine");
 
if (currentDate.wday == 1 ) then
fibaro:setGlobal("Jour_semaine", "Dimanche")
end
if (currentDate.wday == 2 ) then
fibaro:setGlobal("Jour_semaine", "Lundi")
end
if (currentDate.wday == 3 ) then
fibaro:setGlobal("Jour_semaine", "Mardi")
end
if (currentDate.wday == 4 ) then
fibaro:setGlobal("Jour_semaine", "Mercredi")
end
if (currentDate.wday == 5 ) then
fibaro:setGlobal("Jour_semaine", "Jeudi")
end
if (currentDate.wday == 6 ) then
fibaro:setGlobal("Jour_semaine", "Vendredi")
end
if (currentDate.wday == 7 ) then
fibaro:setGlobal("Jour_semaine", "Samedi")
end

Partager ce message


Lien à poster
Partager sur d’autres sites

Il y a un petit truc qui pourrais améliorer cela.

 

Imaginons une boucle qui vérifie tous les wallplugs tout les 10 secondes uniquement dans les plages horaires ou tu souhaites éteindre.

Dès qu'un wallplug descend en dessous de tes 50W tu incrémentes un compteur (ex. WallPlug1=WallPlug1 + 1), dès qu'il passe en dessus, tu remet à  zéro (WallPlug1=0).

 

Ensuite si ta variable WallPlug1 >= 6 tu vas l'éteindre. Cela permet de t'assurer que ton Wallplug est en dessous du seuil depuis plus de 1 minutes (6X10 secondes) .

 

Ce qu'est une idée parmi tant d'autre  :P

Partager ce message


Lien à poster
Partager sur d’autres sites

c'est une idée en effet, a voir pour mettre en oeuvre.

les plages horaire définie sont celle ou je suis absent ou au lit, donc j'éteins les wallplug des télés. et je les rallume avant de me lever ou rentrer, ce qui evite d'avoir a rallumer la wallplug manuellement.

ensuite on pourrai imaginer qu'en cas de détection de mouvement, alors on rallume les wallplug.

c'est la prochaine evolution de ce module que je voulais mettre en place. je viens d'installer les motion sensor, mais je suis encore en phase de test pour l'instant (je crois qu'il ne réagisse pas très bien, donc je dois régler tout ça et ensuite reflechir a quelle action va rallumer les wallplug et quelle action va les eteindre).

 

je vais avoir un peu de temps libre la semaine prochaine et ce week end, j'ai bien l'intention de me pencher la dessus (après avoir installer des spots encastrés à  l'exterieur...)

 

PS : je viens de me relire, c'est plein de fautes, j'ai écrit trop vite, désolé !

Partager ce message


Lien à poster
Partager sur d’autres sites

M'enfiche, mon cerveau ne lit pas les fautes ... par contre, il les écrit aussi  :60:

Partager ce message


Lien à poster
Partager sur d’autres sites

les plages horaire définie sont celle ou je suis absent ou au lit, donc j'éteins les wallplug des télés. et je les rallume avant de me lever ou rentrer, ce qui evite d'avoir a rallumer la wallplug manuellement.

 

Et bien c'est absolument mon cas.

Au début ça m'amusait, mais aujourd'hui plus du tout ^^

Franchement, pour regarder la TV c'est comme s'il fallait que je branche ma prise murale a chaque fois :D

 

Donc, je vais installer ton script ! Merci ;)

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai 3 systèmes différents pour allumer le wall plug de la télé :

  1. Mon Karotz (les enfants en raffolent) Il passe une clé rfid devant son nez
  2. J'ai installé un interrupteur Chacon sur le meuble adossé au canapé donc dès qu'on s'assoit on peut allumer
  3. J'ai une femme qui est systématiquement devant la télé avant moi.

Le point 3 est donc le plus fiable mais le plus coûteux.

Partager ce message


Lien à poster
Partager sur d’autres sites

Par contre, est-ce que tu pourrais faire une mise à  jour de ton script ?

Dans le premier post il n'y a pas tout le script (concernant les jours de la semaine).

 

103 est l'ID du module

 

Et modifier l'explication du ID 103 du wallplug, car du coup tu as modifié le script pour pouvoir mettre plusieurs wallplug  ;)

 

Merci

Partager ce message


Lien à poster
Partager sur d’autres sites

103 est l'id du module virtuel. Je vais essayer de mettre àjour le code afin que ce plugin soit autonome.

Jour_semaine est dans un autre module chez moi car j utilise cette variable dans plusieurs modules virtuels

Partager ce message


Lien à poster
Partager sur d’autres sites

voila, c'est mis àjour dans le premier post :)

mais je viens de modifier sur le pc, je n'ai pas modifié mon module car comme dit précédemment, Jour_semaine est modifié ailleurs chez moi.

si tu as un soucis, fais le moi savoir

Partager ce message


Lien à poster
Partager sur d’autres sites

Super ! Un grand merci tout fonctionne ! :)

 

Donc, je vais installer ton script ! Merci ;)

 

vous pouvez reprendre le script du premier post qui a une modification non négligeable (ben oui, c'est un de mes premiers modules :P )

dans le précédent script, que vous cliquiez sur ON ou OFF, le module coupait les prises de toute façon !!

 

en plus de cette modif, j'ai changé le nom des boutons pour que ce soit plus clair :

ON est devenu Auto

OFF est devenu Manuel

 

voila !

Partager ce message


Lien à poster
Partager sur d’autres sites

×