Rem's Posté(e) le 24 avril 2014 Signaler Posté(e) le 24 avril 2014 Bonsoir à tous, Voici mon bout de code qui me permet de lancer le réveil le matin. Si je lance manuellement cette scène (je me suis levé plus tôt), elle va donc tournée 2 fois à l'heure dite. J'ai rajouté la condition "fibaro:countScenes" ....... Est-elle au bon endroit ?? depuis cette modif, la scène ne se lance plus toute seul. Merci de votre coup d'oeil --[[ %% autostart %% properties %% globals --]] local sourceTrigger = fibaro:getSourceTrigger(); if (sourceTrigger["type"] == "autostart") then while true do if fibaro:countScenes() > 1 then -- si la scène est lancée plus d'une fois alors fibaro:abort() -- arrêt de cette lecture du script end -- fin de la condition local currentDate = os.date("*t"); local startSource = fibaro:getSourceTrigger(); if ( ( ((currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "06:45") ) ) then -- 6h45 : Allumage réveil fibaro:call(71, "turnOn");
Shad Posté(e) le 24 avril 2014 Signaler Posté(e) le 24 avril 2014 Essaye sa: --[[ %% autostart %% properties %% globals --]] if ( (currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "06:45" )then -- 6h45 : Allumage réveil fibaro:call(71, "turnOn"); end Faut vraiment que vous arrêtiez de créez une scène à partir des blocs sa complique tout plus qu'autre chose.
Steven Posté(e) le 24 avril 2014 Signaler Posté(e) le 24 avril 2014 Shad, tu n'as plus la boucle qui attend que l'heure arrive. Ton code ne s'exécutera jamais. Rem, ton abort est dans ta boucle qui attend 6:45 donc tu tue cette dernière.
Shad Posté(e) le 24 avril 2014 Signaler Posté(e) le 24 avril 2014 Merdouille, j'ai rien dit. Je me sert que du scheduler c'est pour sa Rem's tu as mis un sleep à la fin ???
Steven Posté(e) le 24 avril 2014 Signaler Posté(e) le 24 avril 2014 Allez, on attaque. --[[ %% autostart %% properties %% globals --]] local sourceTrigger = fibaro:getSourceTrigger(); -- si le déclencheur est le démarrage de la HC2 if (sourceTrigger["type"] == "autostart") then -- On boucle à l'infini while true do -- on prend la date & heure local currentDate = os.date("*t"); -- si ce n'est pas le weekend et qu'il est 6:45 if ( currentDate.wday >= 2 and currentDate.wday <= 6 and (string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "06:45") ) then -- 6h45 : Allumage réveil fibaro:call(71, "turnOn"); end -- on attend 1 minute fibaro:sleep(60*1000); end else -- Si le déclencheur est autre, du style lancement manuel -- de ce scénario -- on allume le réveil fibaro:call(71, "turnOn"); end Si le déclencheur "SourceTrigger" est "autostart" (démarrage de la HC2) alors on lance une boucle sans fin qui va attendre toute les minutes vérifier s'il est 6:45, si oui, elle allume le module 71. Par contre, si le déclencheur est autre chose alors on allume simplement le module 71. Ce scénario DOIT pouvoir être exécuter plusieurs fois en même temps car il y a toujours la boucle qui tourne attendant l'heure et éventuellement un autre lancement manuel si tu te lève avant, cela peut donc faire 2 lancements en simultané.
Rem's Posté(e) le 25 avril 2014 Auteur Signaler Posté(e) le 25 avril 2014 Waouh ... Ok super, en plus comme dit Shad, ca ne provient pas de bloc. Merci pour ces quelques lignes. En revanche, je ne comprends pas la fin, "else ... Pourquoi ça reprend la lampe, sans autre condition ?? Je vais déjà me lancer avec le début. Bonne journée
Steven Posté(e) le 25 avril 2014 Signaler Posté(e) le 25 avril 2014 Le else est si la source de déclenchement n'est pas "autostart". En gros que doit faire le scénario si tu le lance toi manuellement. Dans ce cas là, tu veux aussi allumer la lampe.
Rem's Posté(e) le 25 avril 2014 Auteur Signaler Posté(e) le 25 avril 2014 Shad, je pars des blocs pour passer en lua (car beaucoup plus complet et rogolo) car je ne sais écrire le début d'un script. Pourrais tu m'aider à faire : de 19H30 à 7H00 Id porte, 74 Si la porte est ouverte, on allume la lampe.(ID 9). Si la porte est fermée, on étteint la lampe (ID 9). Cela m'aiderait à ne plus passer par les blocs qui compliquent et double le script. Merci d'avance pour ton aide.
Shad Posté(e) le 25 avril 2014 Signaler Posté(e) le 25 avril 2014 Alors sa c'est rapide et pour info (http://www.domotique-fibaro.fr/index.php/topic/194-lua-le%C3%A7on-2-%E2%80%93-association-de-modules/#entry1147) --[[ %% properties 74 value %% globals --]] local startSource = fibaro:getSourceTrigger(); local currentDate = os.date("*t"); local door = 71; if (startSource['type']=='property') then if (startSource['deviceID']==tostring(baieleft) or startSource['deviceID']==tostring(baieright)) then if ( (tonumber(fibaro:getValue(door, "value")) > 0) and ( (string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) >= "19:30") or (string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) <= "07:00") ) ) then if (fibaro:getValue(door, "value") == 0) then fibaro:call(door, "turnOn"); else if (fibaro:getValue(door, "value") > 0) then fibaro:call(door, "turnOff"); end end end J'ai pas essayé.
Steven Posté(e) le 25 avril 2014 Signaler Posté(e) le 25 avril 2014 Voici ma version pour répondre àta demande : --[[ %% properties 74 value %% globals --]] -- Ce scénario sera executé uniquement àl'ouverture / fermeture -- du décteur de porte ID 74 local currentDate = os.date("*t") local currentHour = string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) local door = 74 local light = 9 -- entre 19:30 et 07:00 -- if (currentHour >= "19:30" and currentHour <= "07:00") then if (tonumber(fibaro:getValue(door, "value")) > 0) then -- porte en alert soit ouverte fibaro:call(light, "turnOn"); else -- porte fermée fibaro:call(light, "turnOn"); end end Pas testé non plus
biboun Posté(e) le 25 avril 2014 Signaler Posté(e) le 25 avril 2014 Question par curiosité, ça lance quoi réellement ça ? fibaro:call(71, "turnOn"); Est-ce que ça repasse off par une action manuelle ? Je pensais à une approche un peu différente qui consiste à stocker l'état dans une variable afin de savoir s'il faut l'allumer ou non, et de décomposer en 2 parties, une qui set la variable (par exemple tous les soirs à 20h en fonction de quel jour on est , un peu comme on arme son reveil) et l'autre qui applique l'action à l'heure dite en fonctioin de cette variable, et en profite pour changer son état (comme on desarme son reveil). Ainsi tu ne peux pas avoir deux fois la sonnerie, si tu te lèves plus tôt et tu pourrais choisir de désactiver ton reveil un jour de RTT, sans retoucher au code, juste avec un bouton virtuel qui change cette variable ( et indique son état accessoirement) Je crois que certains ont même déjà codé un scheduler en module virtuel, pour avoir une jolie interface de réglage des heures et jours concernés (c'est toi Shad ?)
Steven Posté(e) le 25 avril 2014 Signaler Posté(e) le 25 avril 2014 Cela allume le périphérique qui a pour ID le numéro 71. Pour l'éteindre, c'est "turnOff" au lieu de "turnOn".
biboun Posté(e) le 25 avril 2014 Signaler Posté(e) le 25 avril 2014 Nan mais ça j'avais compris Ce que je veux savoir c'est ce qu'il y a derrière, c'est quoi le periph lié çà cet ID, une prise, un contact sec, une lampe? Je dis ça parce qu'il l'allume , mais on en sait pas comment il l'éteind, ce qui est aussi une source de réponse à son problème initial, à savoir ne pas le faire deux fois. Dans vos codes, il me semble, amha que vous avez résolu son premier problème, à savoir l'allumer de maniere non programmée en appelant le meme scenario, en revanche il se lancera tout de même à 6h45, une seconde fois. D'ou l'interet de savoir s'il l'arrete en appuyant sur un interrrupteur physique ou s'il refait une action "domotique", qui pourrait permettre de stocker l'info que ça a déjà été fait aujourd'ui et qu'il ne faut pas le refaire 1
Rem's Posté(e) le 25 avril 2014 Auteur Signaler Posté(e) le 25 avril 2014 ID 71, c'est un wall plug. En réalité c'est le début des actions (mon scénario va allumer les lampes dans la maison au fur et à mesure, ainsi que la freebox (merci krikkof)). J'ai essayé le script de shad et celui de steven en rajoutant la fonction debug, mais rien n'y fait. Pour arrêter, si ca devait être le cas, je passe par un code Activation/Désactivation. j'ai aussi fait une scène avec la fonction abort. Sinon MAC ou PC.
biboun Posté(e) le 25 avril 2014 Signaler Posté(e) le 25 avril 2014 OK, donc en fait tu vas probablement lancer un scenario de reveil plus complexe, qui sera ton petit "ceremonial du matin" Ben a mon avis ça vaut carrément le coup de l'imaginer à la façon que je propose, à savoir de stocker dans une variable globale l'info de savoir si on doit executer la scene aujourd'hui ou pas, et eventuellement stocker dans une variable l'heure à laquelle ça doit se passer de manière automatique. Ainsi, l'heure venue, si tu t'es déjà levé, et que donc tu as exécuté ton "ceremonial", il aura pris soin de changer l'état de cette variable et de ne pas se rééxecuter (idem pour les jours ou tu le disable vonlontairement. Si en revanche tu ne l'a pas executé manuellement, il se fera... De toute façon, moi je dois le faire de cette manière, aussi pour automatiser quelques trucs selon que les enfants ont école ou pas..
Rem's Posté(e) le 27 avril 2014 Auteur Signaler Posté(e) le 27 avril 2014 Après plusieurs tests, il semble que la fonction "fibaro countscene" fonctionne la ou elle est placée : Le réveil se lance à 6h 45, si je me lève plus tôt et que je déclenche manuellement (via iPhone, iPad, ou bouton minimote), la scène ne se joue pas une 2ème fois. Je mets la scène en entière pour ceux que cela inspire, elle est détaillé au fil de l'avancement (et j'ai mis des debugs de partout). Je voudrai bien le Week end lui faire jouer une playlist plutôt que BFM télé, mais là je fais de la brasse coulée ...! Bonne soirée --[[ %% autostart %% properties %% globals --]] local sourceTrigger = fibaro:getSourceTrigger(); if (sourceTrigger["type"] == "autostart") then while true do if fibaro:countScenes() > 1 then -- si la scène est lancée plus d'une fois alors fibaro:abort() -- arrêt de cette lecture du script end -- fin de la condition local currentDate = os.date("*t"); local startSource = fibaro:getSourceTrigger(); if ( ( ((currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "06:45") ) ) then -- 6h45 : Allumage réveil fibaro:call(71, "turnOn"); fibaro:call(41, "turnOn"); fibaro:call(56, "pressButton", "1"); fibaro:sleep(7*1000); fibaro:call(56, "pressButton", "14"); fibaro:sleep(4*1000); fibaro:call(56, "pressButton", "9"); fibaro:debug("Lancement du réveil") fibaro:sleep(600*1000); -- 6h55 : Allumage salon & cuisine fibaro:call(14, "turnOn"); fibaro:call(43, "turnOn"); fibaro:debug("Allumage salon") fibaro:sleep(600*1000); fibaro:call(11, "turnOn"); fibaro:call(9, "setValue", "20"); fibaro:sleep(300*1000); -- Lancement de Disney Channel fibaro:call(58, "pressButton", "1"); fibaro:call(9, "setValue", "50"); fibaro:debug("Lancement de Disney channel") fibaro:sleep(1800*1000); fibaro:call(11, "turnOff"); fibaro:sleep(300*1000); -- Extinction 1 fibaro:call(41, "turnOff"); fibaro:call(43, "turnOff"); fibaro:debug("Extinction lumière") fibaro:call(56, "pressButton", "2"); fibaro:sleep(5*1000); fibaro:call(56, "pressButton", "14"); fibaro:sleep(4*1000); fibaro:call(56, "pressButton", "9"); fibaro:debug("Bascule vers BFM") fibaro:sleep(600*1000); -- Extinction 2 fibaro:call(14, "turnOff"); fibaro:sleep(300*1000); fibaro:call(56, "pressButton", "2"); fibaro:call(9, "turnOff"); fibaro:sleep(600*1000); fibaro:call(71, "turnOff"); fibaro:debug("Fin de scénario") end fibaro:sleep(60*1000); end else local currentDate = os.date("*t"); local startSource = fibaro:getSourceTrigger(); if ( startSource["type"] == "other" ) then -- 6h45 : Allumage réveil fibaro:call(71, "turnOn"); fibaro:call(41, "turnOn"); fibaro:call(56, "pressButton", "1"); fibaro:sleep(7*1000); fibaro:call(56, "pressButton", "14"); fibaro:sleep(4*1000); fibaro:call(56, "pressButton", "9"); fibaro:debug("Lancement du réveil") fibaro:sleep(600*1000); -- 6h55 : Allumage salon & cuisine fibaro:call(14, "turnOn"); fibaro:call(43, "turnOn"); fibaro:debug("Allumage salon") fibaro:sleep(600*1000); fibaro:call(11, "turnOn"); fibaro:call(9, "setValue", "20"); fibaro:sleep(300*1000); -- Lancement de Disney Channel fibaro:call(58, "pressButton", "1"); fibaro:call(9, "setValue", "50"); fibaro:debug("Lancement de Disney channel") fibaro:sleep(1800*1000); fibaro:call(11, "turnOff"); fibaro:sleep(300*1000); -- Extinction 1 fibaro:call(41, "turnOff"); fibaro:call(43, "turnOff"); fibaro:debug("Extinction lumière") fibaro:call(56, "pressButton", "2"); fibaro:sleep(5*1000); fibaro:call(56, "pressButton", "14"); fibaro:sleep(4*1000); fibaro:call(56, "pressButton", "9"); fibaro:debug("Bascule vers BFM") fibaro:sleep(600*1000); -- Extinction 2 fibaro:call(14, "turnOff"); fibaro:sleep(300*1000); fibaro:call(56, "pressButton", "2"); fibaro:call(9, "turnOff"); fibaro:sleep(600*1000); fibaro:call(71, "turnOff"); fibaro:debug("Fin de scénario") end end
Shad Posté(e) le 27 avril 2014 Signaler Posté(e) le 27 avril 2014 Regarde avec les if (currentDate.wday == 1 or currentDate.wday == 7) then end
Messages recommandés