Aller au contenu

Recommended Posts

Ok j'ai parcouru les 1000 lignes de code. L'utilisateur met une heure que le Scheduler transforme pour faire un fibaro:sleep.

Suffit de rechercher la fonction sleep dans son code.

On lui met plein d'événements. Il recherche le plus proche en terme de délai et fait un sleep. Une fois l'événement terminé, il sleep jusqu'au prochain.

C'est très bien car, contrairement àla plus part des autres, il ne vérifie pas toutes les minutes s'il doit faire quelque chose puisqu'il sait quand il doit le faire.

Partager ce message


Lien à poster
Partager sur d’autres sites

Exactement, et donc àchaque reboot de la HC2 il cherche ou est-ce qu'il en était.

Partager ce message


Lien à poster
Partager sur d’autres sites

 

ok, donc j'ai ça maintenant, je suis au bon endroit?

--<ADD YOUR LINES HERE IN POFILE SECTIONS>
luaDaySchedule:add("Sunset","52", "On" , "", {"All"}, false , -30);
luaDaySchedule:add("Sunrise","52", "Off" , "", {"All"}, false , 30);
luaDaySchedule:add(getAlarm("alarmTime1"),"4", "" , "startScene", {"All"}  ,false);

Pourquoi il faut paramétrer une alarme? 

la je suis largué, 

le scheduler Control: il sert à  quoi?

c'est quoi le Active group avec summerNormal??

a quoi servent les vd alarme clok? :wacko:

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est pour te gérer des alarmes, mais toi tu t'en fiches, faut juste configurer les paramètres pour que tu utilises la variable.

Partager ce message


Lien à poster
Partager sur d’autres sites

j'ai mis ça pour test, allumer une lampe:

luaDaySchedule:add("02:42","182", "turnOn" , "call", {"all"} ,false) 

luaDaySchedule:add("Sunset","52", "On" , "", {"All"}, false , -30);
luaDaySchedule:add("Sunrise","52", "Off" , "", {"All"}, false , 30);
  

et il sort ça:

[DEBUG] 02:53:11: Scheduler is intitialising. Loading with profile group SummerNormal.
[DEBUG] 02:54:11: Initialise Alarm alarmTime1 in room Scheduler.
[DEBUG] 02:54:11: Initialise Alarm alarmTime4 in room Scheduler.
[DEBUG] 02:54:11: Initialise Alarm alarmTime2 in room Scheduler.
[DEBUG] 02:54:11: Initialise Alarm alarmTime3 in room Scheduler.
[ERROR] 02:54:11: line 637: attempt to index field '?' (a nil value)

Partager ce message


Lien à poster
Partager sur d’autres sites
luaDaySchedule:add("02:42","182", "turnOn" , "call", {"All"} ,false)
 
luaDaySchedule:add("Sunset","52", "On" , "call", {"All"}, false , -30);
luaDaySchedule:add("Sunrise","52", "Off" , "call", {"All"}, false , 30);

Partager ce message


Lien à poster
Partager sur d’autres sites

Voila, comme j'ai toujours la même erreur, je vais énumérer la procédure que j'ai faite et tu me diras ou j'ai fait une bêtise, en plus, ça servira aux autres qui sont intéressé par le Scheduler ; (si tu le veux bien ;) )

J'ai commencé par télécharger le zip 131 en bas de ton tuto. à  l'intérieur ce trouvent tous les fichiers dont on à  besoin et qui sont énumérés ci-dessous.

j'ai créé une pièce  "Scheduler" pour tous centraliser, j'y ai incorporé tous les éléments que j'ai créé par la suite.

J'ai créé une scène Lua et j'ai collé le code du fichier Scene-1 - ID 1 Scheduler.txt.

j'ai importé le VD Alarm-Clock.vfib 4 fois et le VD Scheduler Control 1 fois.

ce qui me donne 4 VD Alarm-Clock.vfib et 1 VD Scheduler Control.

J'ai créé dans le panneau Variable de la HC2 les variable suivante:

- scheduleGroup

- scheduleActive

- alarmTime1

- alarmTime2

- alarmTime3

- alarmTime4

alarmDays1

- alarmDays2 

alarmDays3

- alarmDays4

J'ai créé ensuite une scène Lua que j'ai nommé "redémarrer"  et j'ai copier le code suivant:

--[[
%% properties
 
%% globals
--]]
 
local scheduleScene = 66
 
while (fibaro:countScenes(scheduleScene) > 0) do
 
    fibaro:killScenes(scheduleScene);
 
    fibaro:debug("Kill")
 
end;
 
active =  active or { Active = 1,
                      Disabled = 2 }
 
activeIndex =  activeIndex or  { [1] = "Active",
                      [2] = "Disabled"}
 
local scheduleActive = fibaro:getGlobalValue("scheduleActive") or activeIndex[1]
 
if scheduleActive == activeIndex[1] then
     -- restart a new instance if active
      fibaro:startScene(scheduleScene)
end

j'ai mis l'ID de la scène du Schedule (la première scène créé)  à  la première ligne du code, elle à  l'ID 66.

 

Ensuite, dans la scène du scheduler, la première créé:

j'ai mis à  la ligne 96 l'ID de la scène "redémarrer" qui est ID 68

j'ai mis à  la ligne 97 l'ID du VD Scheduler Control qui est ID 192 importé au début.

J'ai mis aux lignes 98, 103, 108, et 113 les ID des quatre VD Alarm-Clock.vfib importé au début.

ID 188, 189, 190 et 191 comme on peut le voir sur le morceau de code en dessous:  

local restartScene = 68
local controlDevide = 192
local alarmClocks = { alarmTime1 = {deviceID = 188,
                              timeLabel = "ui.lblTime.value",
                              timeGlobal = "alarmTime1",
                              dayLabel = "ui.lblDays.value",
                              dayGlobal = "alarmDays1"}, 
  							alarmTime2 = {deviceID = 189,
                              timeLabel = "ui.lblTime.value",
                              timeGlobal = "alarmTime2",
                              dayLabel = "ui.lblDays.value",
                              dayGlobal = "alarmDays2"}, 
  							alarmTime3 = {deviceID = 190,
                              timeLabel = "ui.lblTime.value",
                              timeGlobal = "alarmTime3",
                              dayLabel = "ui.lblDays.value",
                              dayGlobal = "alarmDays3"}, 
  							alarmTime4 = {deviceID = 191,
                              timeLabel = "ui.lblTime.value",
                              timeGlobal = "alarmTime4",
                              dayLabel = "ui.lblDays.value",
                              dayGlobal = "alarmDays4"}
							}

Il faut aussi renseigner les variables dans chaque vd Alarm Clock,sur l'onglet "Avancé" et tout en bas du vd, en fait dans trois seulement, car le premier est comme l'image ci-dessous:

il y a 4 vd, il suffit de mettre "alarmTime2" à  la place de "alarmTime1"  et "alarmDays2" à  la place de "alarmDays1" et ainsi de suite dans les autres vd. "alarmDays3" et "alarmDays4"...

 

 

 

et voila, j'ai bien entendu coché active les deux scène créé.

 

La version 131 du scheduler a un bug qui à  très vite était rectifier par @robmac sur le site officiel Fibaro.

donc pour ceux qui utilise la version 131, il faut changer la ligne 463 de la scène de Scheduler:

if reportRun then fibaro:debug( "fibaro:setSceneEnabled(" .. scene .. ",\"" .. enabled .. "\")" ) end

par :

if reportRun then fibaro:debug( "fibaro:setSceneEnabled(" .. scene .. ",\"" .. tostring(enabled) .. "\")" ) end

pour pouvoir utiliser le paramètre :  "setSceneEnabled"

 

 

pour "activer" une scène, la ligne de commande dans le Scheduler est:

luaDaySchedule:add("Sunset","52", true , "setSceneEnabled" , {"All"} ,true, -10)

avec vos paramètre évidemment.

Modifié par Fredric

Partager ce message


Lien à poster
Partager sur d’autres sites

Quelque Screenshots des vd et là , j'aimerai bien comprendre comment on les utilise.

 

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est vrais que c'est presque un tuto, ça va m'aider a comprendre !

Dès que je rentre de vacance je m'y met :D

Partager ce message


Lien à poster
Partager sur d’autres sites

Il te manque

alarmDays3

- alarmDays

Partager ce message


Lien à poster
Partager sur d’autres sites

ok, rectifier et rectifier également dans ma description ;) 

en fait, il y a une petite erreur dans ton tuto:

LES ALARMES:
 
Pour configurer les alarmes, un fichier vfib est disponible dans le zip joint.
A la ligne 92 du scheduler vous devez paramétrer les id de vos modules virtuels ainsi que l'id de la scene du redémarrage du scheduler (également fournie dans le zip).
 
Dans chaque bouton du module virtuel vous devez également reconfigurer l'id de ce module virtuel.
Et pour finir vous devez créer des variables globales pour alarmDays1 - alarmDays2 - alarmTime1- alarmTime2.
 

Voici les lignes que vous devez ajoutez à  votre scheduler:

ce pourquoi je ne les avais pas créés.

mais cela ne change pas l'erreur à  la ligne 637, cette ligne là :

  if schedule[luaDaySchedule.days[d]][sTime] == nill then  

toujours la même erreur:

[DEBUG] 15:28:25: Scheduler is intitialising. Loading with profile group SummerNormal.
[DEBUG] 15:29:25: Initialise Alarm alarmTime1 in room Scheduler.
[DEBUG] 15:29:25: Initialise Alarm alarmTime4 in room Scheduler.
[DEBUG] 15:29:25: Initialise Alarm alarmTime2 in room Scheduler.
[DEBUG] 15:29:25: Initialise Alarm alarmTime3 in room Scheduler.
[ERROR] 15:29:25: line 637: attempt to index field '?' (a nil value)

il charge avec le profile group SummerNormal, cela n'a pas d'incidence? 

Partager ce message


Lien à poster
Partager sur d’autres sites

Essaye comme sa, j'ai enlever les majuscule àALL pour All

luaDaySchedule:add("12:05","182", "turnOn" , "call", {"All"} ,false)

Partager ce message


Lien à poster
Partager sur d’autres sites

y'a du mieux  ;)

--<ADD YOUR LINES HERE IN POFILE SECTIONS>
luaDaySchedule:add("17:37","182", "turnOn" , "call" , {"All"} ,false) 

plus d'erreur mais la lumière ne s'allume pas et la scène donne cela:

[DEBUG] 17:36:49: Scheduler is intitialising. Loading with profile group SummerHoliday.
[DEBUG] 17:37:49: Initialise Alarm alarmTime1 in room Scheduler.
[DEBUG] 17:37:49: Initialise Alarm alarmTime4 in room Scheduler.
[DEBUG] 17:37:49: Initialise Alarm alarmTime2 in room Scheduler.
[DEBUG] 17:37:49: Initialise Alarm alarmTime3 in room Scheduler.
[DEBUG] 17:37:49: Catching up actions.
[DEBUG] 17:37:49: Pause for ZWave to initialise.
[DEBUG] 17:38:49: Catching up finished.
[DEBUG] 17:38:49: Next Run at 00:05:05
[DEBUG] 17:38:49: Correct by 44s error,
[DEBUG] 17:38:49: Going to sleep for 387mins

Partager ce message


Lien à poster
Partager sur d’autres sites

j'ai refait un essai en lui laissant plus de temps, la premier, j'ai mis 17h37 alors qu'il était 17h36, je pense que c’était trop juste.

Car là , alléluia  :60: , ça marche, je vient d'allumer mon premier périphérique avec le Scheduler......................

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci monsieur Shad  :60: , encore un fois  ;)

 

 

tout n'est pas encore gagné, je pipe rien aux alarme et aux group SummerNormal, SummerHoliday,WinterNormal et WinterHoliday   :wacko:  enfin, je ne comprends pas leur fonctionnement.

et comme tu t'en doute, j'ai d'autre questions  :lol:

Le but initiale d'utilisation du Scheduler, c'est ma fameuse scène de fermeture des volets.

Actuellement, elle fonctionne à  l’exception qu'une fois les volets fermés, la scène est toujours active et si je ré-ouvre les volets, elle me les referme!

donc, je vais essayer de faire activer cette scène 30 minute avant le couché du soleil et la désactiver 30 minutes après, de façon qu'elle soit active pendant une heure.

Donc, a part la désactiver en la décochant dans l'onglet général, je ne touche pas au code?

 

voila mon test:

luaDaySchedule:add("Sunset","52", "On" , "", {"All"}, false , -15); --active la scène 15 minutes avant le couché du soleil.
luaDaySchedule:add("Sunset","182", "turnOn" , "call" , {"All"} ,false , -15)--active la scène 15 minutes avant le couché du soleil. pour avoir un rendu visuel du fonctionnement de la scène. 
luaDaySchedule:add("Sunset","52", "Off" , "", {"All"}, false , 15);--coupe la scène 15 minutes après le couché du soleil.
luaDaySchedule:add("Sunset","182", "turnOn" , "call" , {"All"} ,false , 15)--coupe la scène 15 minutes après le couché du soleil. toujours pour vérifier le test 

pour le moment, pas d'erreur  ;)

Modifié par Fredric

Partager ce message


Lien à poster
Partager sur d’autres sites

Pour les virtuals device

Dans le code du scheduler si tu regarde bien tu as:

--<ADD YOUR LINES HERE IN POFILE SECTIONS>

if scheduleGroup == groupsIndex[1] then
  -- add lines here that only run for the SummerNormal
 
elseif scheduleGroup == groupsIndex[2] then
  -- add lines here that only run for the SummerHoliday

elseif scheduleGroup == groupsIndex[3] then
  -- add lines here that only run for the WinterNormal
 
  elseif scheduleGroup == groupsIndex[4] then
  -- add lines here that only run for the WinterHoliday
    
end

Ce qui te permet de mettre des lignes pour la saison que tu veux, en l'occurence été/hiver - Vacance/normal ;)

 

Et les alarmes, c'est par exemple pour te faire des réveils ou autre chose.

Perso j'en ai modifier 2 pour ma piscine, La première heure de mise en marche et la seconde est modifier toutes les 30 minutes par rapport à  la moyenne (relevé toute les 30min) de la température de la piscine.

 

La pour ta scène faudra que je regarde mais je retrouve plus le poste :D

 

Edit: Et pourquoi tu kil pas la scènes une fois les volets fermés.

Partager ce message


Lien à poster
Partager sur d’autres sites

ok pour les vd  ;)

je mets une scène en gros, sans trigger qui démarre avec le paramétrage d'un des quatre VD.

c'est plutôt facile en fait  :P

 

pour la scène, oui, c'est ce que je veux, la killer après exécution jusqu’au prochain démarrage, je pensé que off suffisait, il vaut mieux "Kil" ?

--[[
%% properties
187 value
%% globals
JouretNuit
--]]


local startSource = fibaro:getSourceTrigger();
local windowscontrolrelay = {57, 65};
--si la nuit tombe et que les volets sont ouverts, meme peut ouverts et que le luminosité est à  40 lux
if (tonumber(fibaro:getValue(187, "value")) <= 15) and ( fibaro:getGlobalValue("JouretNuit") == "Nuit") and ((tonumber(fibaro:getValue(57, "value")) > 0) or (tonumber(fibaro:getValue(65, "value")) > 0)) then
    for i =1, #windowscontrolrelay do
        if (tonumber(fibaro:getValue(windowscontrolrelay[i], "value")) > 0) then
            fibaro:call(windowscontrolrelay[i], "close");
        end
    end
  fibaro:sleep(40*1000); --attente une minute pour attendre que les volets déscendent
 
    if ((tonumber(fibaro:getValue(57, "value")) == 0)) and ((tonumber(fibaro:getValue(65, "value")) == 0)) then --si les volets sont fermés
        fibaro:call(53, "sendDefinedPushNotification", "20");
		fibaro:call(58, "sendDefinedPushNotification", "20");
    elseif (tonumber(fibaro:getValue(57, "value")) > 0) then  --si le volet salon est pas fermés
         fibaro:call(53, "sendDefinedPushNotification", "23");
		 fibaro:call(58, "sendDefinedPushNotification", "23");
    elseif (tonumber(fibaro:getValue(65, "value")) > 0) then --si le volet cuisine est pas fermés
        fibaro:call(53, "sendDefinedPushNotification", "24");
		fibaro:call(58, "sendDefinedPushNotification", "24");
	end
fibaro:debug("Volets fermés");
fibaro:sleep(60*1000);
end

Partager ce message


Lien à poster
Partager sur d’autres sites

j'ai changé "off" par 

luaDaySchedule:add("Sunset","52", "killScenes" , "", {"All"}, false , 15);

c'est presque l'heure  :)

Partager ce message


Lien à poster
Partager sur d’autres sites

cela ne fonctionne pas, il y a un problème dans les code des ligne pour démarrer et stopper la scène 52

Partager ce message


Lien à poster
Partager sur d’autres sites

Ha be oui, j'avais pas capter que c'était une scène Xd.

luaDaySchedule:add("Sunset","52", "" , "startScene", {"All"}, false, -15);

mdr

 

Mais si tu veux tester tu peux faire

 

luaDaySchedule:add("21:00","52", "" , "startScene", {"All"}, false);

Partager ce message


Lien à poster
Partager sur d’autres sites


luaDaySchedule:add("Sunset","52", "killScenes" , "", {"All"}, false , 15);

Partager ce message


Lien à poster
Partager sur d’autres sites

et pour la killer c'est bien ça?

en fait, il me reste plus que connaitre les paramètre à  mettre ;) 

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui je crois que c'est bien sa.

Tu as tout les paramètres en exemples dans le script ;)

 

Alors ta vu c'est pas trop dur de l'installer ???

Partager ce message


Lien à poster
Partager sur d’autres sites

lol, oui, pas trop  :o

 

Et je pense que mon post et mes questions d'aujourd’hui et tes réponses vont en aider un grand nombres  ;)

 

donc @FAB971 et @amonthet à  vous......

 

j'ai extrait toutes les lignes exemple et je vais les étudier  ^_^

 

bon, à  la pro scène Shad  :60:

  • Upvote 2

Partager ce message


Lien à poster
Partager sur d’autres sites

×