Aller au contenu
Twist

Gestion Auto Des Volets Roulants

Recommended Posts

Bonjour à  tous,

 

Je souhaitais partager ce que j'ai fait tout à  l'heure : un script pour gérer les quelques volets roulants de mon domicile (ne faites pas attention aux noms de variables, au fait que je manipule des ID, ... je sais je peux optimiser :-p )

 

Mais j'aimerai votre avis, savoir si je prend une bonne direction sur le principe... (je vais l'enrichir petit à  petit et du coup l'optimiser pour le rendre plus exploitable)

 

Un grand merci tout d'abord à  CaptainIgloo pour son virtual-device-position-du-soleil-et-ensoleillement

donct j'ai juste rajouter la valeur de la nébulosité en variable globale pour que mon script s'en serve

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

local sourceTrigger = fibaro:getSourceTrigger();
function tempFunc()
local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
-- TOUTES LES 15 MIN ENTRE 6h et 22h CA TOURNE
if (
 ( (tonumber(os.date("%H%M")) >= tonumber(string.format("%02d%02d", "06", "00")) and tonumber(os.date("%H%M")) <= tonumber(string.format("%02d%02d", "22", "00"))) and (math.floor(os.time()/60)-math.floor(1446274800/60))%15 == 0 )
)
then
  fibaro:debug("ok")
  -- si le soleil est au dessus de 5° de l'horizon et la Nébulosité est inférieure à  15%  ALORS JE VAIS REGARDER LA POSITION DU SOLEIL POUR CHAQUE FACADE ET OUVRIR OU FERMER
  if ( (tonumber(fibaro:getGlobalValue("VDSoleilHauteur")) > 5) and (tonumber(fibaro:getGlobalValue("VDSoleilNebulosite")) < 15) ) then
  fibaro:debug("soleil > 5 et Nebulosite < 15")    
    -- si facade EST est éclairée
    if ( (tonumber(fibaro:getGlobalValue("VDSoleilAzimut"))>0) and (tonumber(fibaro:getGlobalValue("VDSoleilAzimut"))<180) ) then
      -- si pièce inoccupée OU maison vide
      if ( (tonumber(fibaro:getGlobalValue("CHAUFF_1"))==5) or (tonumber(fibaro:getGlobalValue("IS_EMPTY_HOUSE"))==1) ) then
      	fibaro:call(446, "open")						 -- volet bureau
      end
      -- si pièce inoccupée OU maison vide
      if ( (tonumber(fibaro:getGlobalValue("CHAUFF_6"))==5) or (tonumber(fibaro:getGlobalValue("IS_EMPTY_HOUSE"))==1) ) then
      	fibaro:call(189, "open")						 -- volet chambre antigua
      end
      -- si pièce inoccupée OU maison vide
      if ( (tonumber(fibaro:getGlobalValue("CHAUFF_5"))==5) or (tonumber(fibaro:getGlobalValue("IS_EMPTY_HOUSE"))==1) ) then
      	fibaro:call(157, "pressButton", "1")			 -- volet chambre meteorite EST
      end
    end
    -- si facade SUD est éclairée
    if ( (tonumber(fibaro:getGlobalValue("VDSoleilAzimut"))>90) and (tonumber(fibaro:getGlobalValue("VDSoleilAzimut"))<270) ) then
      -- si pièce inoccupée OU maison vide
      if ( (tonumber(fibaro:getGlobalValue("CHAUFF_5"))==5) or (tonumber(fibaro:getGlobalValue("IS_EMPTY_HOUSE"))==1) ) then
      	fibaro:call(608, "pressButton", "1")			 -- volet chambre meteorite SUD
      end
      -- si pièce inoccupée OU maison vide
      if ( (tonumber(fibaro:getGlobalValue("CHAUFF_4"))==5) or (tonumber(fibaro:getGlobalValue("IS_EMPTY_HOUSE"))==1) ) then
        fibaro:call(593, "open")						 -- volet chambre grise
      end
    end
    -- si facade OUEST est éclairée
    if ( (tonumber(fibaro:getGlobalValue("VDSoleilAzimut"))>180) and (tonumber(fibaro:getGlobalValue("VDSoleilAzimut"))<360) ) then
      -- si pièce inoccupée OU maison vide
      if ( (tonumber(fibaro:getGlobalValue("CHAUFF_7"))==5) or (tonumber(fibaro:getGlobalValue("IS_EMPTY_HOUSE"))==1) ) then
      	fibaro:call(471, "open")						 -- volet cuisine fenetre
      end
      -- si pièce inoccupée OU maison vide
      if ( (tonumber(fibaro:getGlobalValue("CHAUFF_7"))==5) or (tonumber(fibaro:getGlobalValue("IS_EMPTY_HOUSE"))==1) ) then
      	fibaro:call(473, "open")						 -- volet cuisine porte
      end
      -- si pièce inoccupée OU maison vide
      if ( (tonumber(fibaro:getGlobalValue("CHAUFF_7"))==5) or (tonumber(fibaro:getGlobalValue("IS_EMPTY_HOUSE"))==1) ) then
        fibaro:call(607, "open")						 -- volet ar-cuisine
      end
    end
    -- si facade NORD est éclairée
    if ( (tonumber(fibaro:getGlobalValue("VDSoleilAzimut"))>270) and (tonumber(fibaro:getGlobalValue("VDSoleilAzimut"))<360) ) then
      -- si pièce inoccupée OU maison vide
      if ( (tonumber(fibaro:getGlobalValue("CHAUFF_8"))==5) or (tonumber(fibaro:getGlobalValue("IS_EMPTY_HOUSE"))==1) ) then
        fibaro:call(162, "open")						 -- volet SDB étage
      end
    end
    -- si facade EST n'est pas éclairée
    if (tonumber(fibaro:getGlobalValue("VDSoleilAzimut"))>180) then
      -- si pièce inoccupée OU maison vide
      if ( (tonumber(fibaro:getGlobalValue("CHAUFF_1"))==5) or (tonumber(fibaro:getGlobalValue("IS_EMPTY_HOUSE"))==1) ) then
      	fibaro:call(446, "close")						 -- volet bureau
      end
      -- si pièce inoccupée OU maison vide
      if ( (tonumber(fibaro:getGlobalValue("CHAUFF_6"))==5) or (tonumber(fibaro:getGlobalValue("IS_EMPTY_HOUSE"))==1) ) then
      	fibaro:call(189, "close")						 -- volet chambre antigua
      end
      -- si pièce inoccupée OU maison vide
      if ( (tonumber(fibaro:getGlobalValue("CHAUFF_5"))==5) or (tonumber(fibaro:getGlobalValue("IS_EMPTY_HOUSE"))==1) ) then
      	fibaro:call(157, "pressButton", "2")			 -- volet chambre meteorite EST
      end
    end
    -- si facade SUD n'est pas éclairée
    if ( (tonumber(fibaro:getGlobalValue("VDSoleilAzimut"))<90) or (tonumber(fibaro:getGlobalValue("VDSoleilAzimut"))>270) ) then
      -- si pièce inoccupée OU maison vide
      if ( (tonumber(fibaro:getGlobalValue("CHAUFF_5"))==5) or (tonumber(fibaro:getGlobalValue("IS_EMPTY_HOUSE"))==1) ) then
      	fibaro:call(608, "pressButton", "2")			 -- volet chambre meteorite SUD
      end
      -- si pièce inoccupée OU maison vide
      if ( (tonumber(fibaro:getGlobalValue("CHAUFF_4"))==5) or (tonumber(fibaro:getGlobalValue("IS_EMPTY_HOUSE"))==1) ) then
        fibaro:call(593, "close")						 -- volet chambre grise
      end
    end
    -- si facade OUEST n'est pas éclairée
    if (tonumber(fibaro:getGlobalValue("VDSoleilAzimut"))<180) then
      -- si pièce inoccupée OU maison vide
      if ( (tonumber(fibaro:getGlobalValue("CHAUFF_7"))==5) or (tonumber(fibaro:getGlobalValue("IS_EMPTY_HOUSE"))==1) ) then
      	fibaro:call(471, "close")						 -- volet cuisine fenetre
      end
      -- si pièce inoccupée OU maison vide
      if ( (tonumber(fibaro:getGlobalValue("CHAUFF_7"))==5) or (tonumber(fibaro:getGlobalValue("IS_EMPTY_HOUSE"))==1) ) then
      	fibaro:call(473, "close")						 -- volet cuisine porte
      end
      -- si pièce inoccupée OU maison vide
      if ( (tonumber(fibaro:getGlobalValue("CHAUFF_7"))==5) or (tonumber(fibaro:getGlobalValue("IS_EMPTY_HOUSE"))==1) ) then
        fibaro:call(607, "close")						 -- volet ar-cuisine
      end
    end
    -- si facade NORD n'est pas éclairée
    if ( (tonumber(fibaro:getGlobalValue("VDSoleilAzimut"))<270) or (tonumber(fibaro:getGlobalValue("VDSoleilAzimut"))>90) ) then
      -- si pièce inoccupée OU maison vide
      if ( (tonumber(fibaro:getGlobalValue("CHAUFF_8"))==5) or (tonumber(fibaro:getGlobalValue("IS_EMPTY_HOUSE"))==1) ) then
        fibaro:call(162, "close")						 -- volet SDB étage
      end
    end
  else
    -- on ferme les volets car le soleil n'est pas suffisamment haut ou la nébulosité est élevée
    if ( (tonumber(fibaro:getGlobalValue("CHAUFF_1"))==5) or (tonumber(fibaro:getGlobalValue("IS_EMPTY_HOUSE"))==1) ) then
    	fibaro:call(446, "close")						 -- volet bureau
    end
    -- si pièce inoccupée OU maison vide
    if ( (tonumber(fibaro:getGlobalValue("CHAUFF_6"))==5) or (tonumber(fibaro:getGlobalValue("IS_EMPTY_HOUSE"))==1) ) then
    	fibaro:call(189, "close")						 -- volet chambre antigua
    end
    -- si pièce inoccupée OU maison vide
    if ( (tonumber(fibaro:getGlobalValue("CHAUFF_5"))==5) or (tonumber(fibaro:getGlobalValue("IS_EMPTY_HOUSE"))==1) ) then
    	fibaro:call(157, "pressButton", "2")			 -- volet chambre meteorite EST
    end
    if ( (tonumber(fibaro:getGlobalValue("CHAUFF_5"))==5) or (tonumber(fibaro:getGlobalValue("IS_EMPTY_HOUSE"))==1) ) then
    	fibaro:call(608, "pressButton", "2")			 -- volet chambre meteorite SUD
    end
    -- si pièce inoccupée OU maison vide
    if ( (tonumber(fibaro:getGlobalValue("CHAUFF_4"))==5) or (tonumber(fibaro:getGlobalValue("IS_EMPTY_HOUSE"))==1) ) then
      fibaro:call(593, "close")						 -- volet chambre grise
    end   
    if ( (tonumber(fibaro:getGlobalValue("CHAUFF_7"))==5) or (tonumber(fibaro:getGlobalValue("IS_EMPTY_HOUSE"))==1) ) then
    	fibaro:call(471, "close")						 -- volet cuisine fenetre
    end
    -- si pièce inoccupée OU maison vide
    if ( (tonumber(fibaro:getGlobalValue("CHAUFF_7"))==5) or (tonumber(fibaro:getGlobalValue("IS_EMPTY_HOUSE"))==1) ) then
    	fibaro:call(473, "close")						 -- volet cuisine porte
    end
    -- si pièce inoccupée OU maison vide
    if ( (tonumber(fibaro:getGlobalValue("CHAUFF_7"))==5) or (tonumber(fibaro:getGlobalValue("IS_EMPTY_HOUSE"))==1) ) then
      fibaro:call(607, "close")						 -- volet ar-cuisine
    end
    if ( (tonumber(fibaro:getGlobalValue("CHAUFF_8"))==5) or (tonumber(fibaro:getGlobalValue("IS_EMPTY_HOUSE"))==1) ) then
      fibaro:call(162, "close")						 -- volet SDB étage
    end
  end
end

setTimeout(tempFunc, 60*1000)
end
if (sourceTrigger["type"] == "autostart") then
fibaro:debug("ok autostart")
  tempFunc()
else

local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
if (
startSource["type"] == "other"
)
then
fibaro:debug("ok other")
tempFunc()
end

end











  • Upvote 4

Partager ce message


Lien à poster
Partager sur d’autres sites

Pas mal. Par contre pourquoi agir sur la façade nord ? Quand je regarde tes valeurs, ta maison est 100% orienté sud, donc côté nord tu n'auras jamais de soleil ?

Partager ce message


Lien à poster
Partager sur d’autres sites

euh je n'ai pas compris toute la phrase , je crois qu'il manque un mot mais je n'arrive pas àle déduire :-)

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est fou, le mot nord avait disparu dans les 2 phrases :)

Partager ce message


Lien à poster
Partager sur d’autres sites

salut

 

Je cherche un script aussi , car très dur d'avoir un truc stable, moi je cherche avec une variable , alarme activer ou désactiver quand je suis pas a la maison et fermeture seule, le soir et alarme activer, alors fermeture mais le problème et quand je desactive l'alarme, la scene  avec alarme off, s'enclenche,,,,

Partager ce message


Lien à poster
Partager sur d’autres sites

@q-philippe
C'est pas le sujet de ce topic, mais je te donne un virtual device qui va t'intéresser.
Trés simple d'usage. Charge à  toi de mettre des variables globales dedans.
Enleves le press_button qui sert à  activer des VD qui me notifie sur une plateforme Apple Indigo
Pour les icônes sert toi de de l'avertisseur gris / semi-vert / et rouge de fibaro.
Je l'ai pris brut, tel que je m'en sert, mais il faut l'appurer.
En utilisant un VD et pas une scene cela 'limite la casse' sur les redémarrage de la box et
le basculement éventuel de ta variable OFF.
Reste à  adapter ce que j'ai fait (trés simple) et qui fonctionne à  merveille.
PS : Est ce que quelqu'un peut me renseigner sur une variable système qui changerait
lorsque l'on active ou désactive l'alarme à  l'aide de la fonction native de FIBARO 

ON-OFF_ALARME.vfib

Partager ce message


Lien à poster
Partager sur d’autres sites

@pilou

 

Sois tu regardes l'état d'un des détecteurs pour savoir si il est armé ou non :

exemple test si armé :

if ( tonumber(fibaro:getValue("ID du détecteur", "armed")) > 0 ) then

ou tu modifies une variable globale selon l'état de l'alarme avec une scénario du style :

--[[
%% properties
28 armed
%% globals
--]]

if  ( tonumber(fibaro:getValue(28, "armed")) > 0 ) then
	fibaro:setGlobal("Etatalarme", "arret");
else
	fibaro:setGlobal("Etatalarme", "marche");
end

Partager ce message


Lien à poster
Partager sur d’autres sites

salut , pilou et trainkill, j'ai toutes mes variables et modules qui vont (myfox), mais le problème est la scène, qu'il répète en boucle quand dans le mode soir, j'inverse le mode de l'alarme il fait tourner la boucle, fermer, ouvert alors que ouvert et pour le matin, Day-Phase-num=3.

 

Je vais refaire tout cela au propre, pour le timer j'utilise "après le lever, et après le coucher soleil" donc les scénes ne devraient être valide que sur une l'action de scene, une fois,,,, alors meme que l'ouverture est le matin.

( Je pratique le Mode Bloc moi lol),

 

Merci , je test vos conseils.

Partager ce message


Lien à poster
Partager sur d’autres sites

Pas mal. Par contre pourquoi agir sur la façade nord ? Quand je regarde tes valeurs, ta maison est 100% orienté sud, donc côté nord tu n'auras jamais de soleil ?

 

Alors euh en fait c'était plus pour le fun mais en été il y a du soleil qui peut éclairer la facade nord ! si si ! :-)

Mais en été on s'en fout de pouvoir ouvrir/fermer les volets pour capter de la chaleur, mais au pire ça peut un peu servir de simulation de présence du coup :-) (oui je me rattrape aux branches ^^)

 

Sinon un petit retour d'xp : aujourd'hui ciel gris... brouillard... et pourtant nébulosité à  0% donc pas tout compris mais je vais creuser ^^

Partager ce message


Lien à poster
Partager sur d’autres sites

@trankill666 ?????????
C'était juste un exemple, mais tu peux faire les 2  :60: , 

de toute façon c'est toi qui décides dans tous les cas de mettre l'alarme en route ou non.
Si tu veux faire autre chose avec, tu testes dans une scène par exemple si l'alarme et ON
et si tu redémarres la box volontairement ou aprés une coupure de courant, la scéne
testera d'abord l'état de l'alarme en cours et tout cela peux fonctionner en mode bloc !
J'ai juste donner une solution.
PS : si quelqu'un peut me donner la variable globale ( ou autres) pour tester l'armement via 
le mode mise en route de l'alarme de FIBARO ALARM, je suis preneur.
Evidemment que je peux tester un détecteur de mouvement ou autres choses, mais je 
suis plutôt intéresser par ce que fait FIBARO de manière globale.
Merci

Partager ce message


Lien à poster
Partager sur d’autres sites

@ pilou87

Ma réponse s'adressait àtoi. ;)

TOUS les capteurs que tu ajoutes àla box sont automatiquement armés en cas d'activation de l'alarme native Fibaro (ou FIBARO ALARM comme tu la nommes) SAUF si tu as coché la case appropriée dans les paramètres de celui-ci.
Idem quand tu désarmes l'alarme fibaro.


Le capteur peut avoir différents états :
- désarmé ("armed == 0")
- armé ("armed > 0") : ne signifie pas détection mais plutôt activation de la détection de l'alarme ou armement.
- en alerte ("value > 0") : détection de mouvement.


J'ai donc donné la solution àton "PS" pour la variable globale qui donne l'état de FIBARO ALARM.
Regardes dans mon message précédent dans le deuxième cadre de programmation, cette scène modifie une variable globale selon l'état d'armement d'un capteur au choix armé par l'alarme native Fibaro, et non de détection de mouvement.
La variable n'existe pas d'origine, il y a peut-être d'autres méthodes, mais pas àma connaissance, je passe la main aux anciens pour ça. :13:

Partager ce message


Lien à poster
Partager sur d’autres sites

×