Aller au contenu

Messages recommandés

Posté(e)

naaaaaan :P

 

Je dis juste que je reçois des emails, alors que la simulation, je ne l'active pas.

Elle est désactivé :D
 

Une tite question.

Je reçois des email du script alors que je ne le lance pas.

Est-ce normal ?

 

06:40 Scheduled presence Simulation at 17:36 (Sunset: 17:51)

 

Posté(e)

Non en fait j'ai toujours eu ces emails dès l'installation.

Du coup, la première fois j'ai activé pour tester... donc je me suis dit c'est normal je reçois un email :D

Mais depuis je ne l'active pas (uniquement quand je m'absente un week end) d'ailleur ce week end tient !

Et malgré tout j'ai des emails.

 

Je vais regarder de près sur une semaine et je te redis.

Posté(e)

@sebcbien

Je pense comprendre, je n'ai pas reçus de mail depuis hier.

Mais ce matin j'ai rebooté la box à  cause d'un manque de mémoire suite à  la maj, et j'ai reçus un email à  ce moment précis :

 

09:32 Scheduled presence Simulation at 17:38 (Sunset: 17:53)

 

Ce qui expliquerais, comme je reboot et lors de l'install du firmware, j'ai reçus plusieurs fois ce type de message.

A moins que ce ne soit pas normal non plus ?

Posté(e)

non moi ça ne vient pas de Gea je suis certain, je n'ai aucun lien entre la simulation et Gea.

Je pense que ce doit etre ça sebcbien ! une histoire de champ dans la variable.

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

@sebcbien, j'utilise depuis le début ce script et je le trouve vraiment bien.

depuis peu, j'utilise l'application Telegram pour recevoir des message à  la WhatsApp sur mon WinPhone et j'aimerai intégrer la notification avec Telegram.

Typiquement, avec GEA je fais l'action suivante {"Global", "Telegram", "Message"}, ou Message est le contenu de ce qui est envoyé...

J'ai bien pensé utiliser la fonction SMS du script, mais je ne suis pas trop sà»r...

Comment faire pour inclure la notification Telegram nativement dans ce script ?

Posté(e)

oui, normalement si tu remplace SMS par Telegram

ici:

["VG_Name"] = "SMS"}; 

par

["VG_Name"] = "Telegram"}; 

ça devrait fonctionner.

 

Dis nous quoi et éventuellement deux trois infos sur comment implémenter télégram  :60:

Posté(e)

Merci pour la réponse, je vais laisser tourner, mais je ne pense pas que cela va fonctionner.

J'ai bien la variable de type "Telegram", mais je n'ai pas de VD, j'ai une scene a cause du HTTPS (je reprends bêtement ce que j'ai vu sur le fofo officiel)

 

Concernant Telegram, je vais faire un petit tuto, quoi qu'il en soit, je reprendrais ce qui est déjà  inscrit sur le forum Fibaro.

 

Merci pour ton aide.

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

bonjour,

j'utilise ce VD associé a la scène V3.6.1. quand la simulation de présence se termine et que j'ai une lumière d'allumée, celle-ci reste allumée. Je dois l'éteindre manuellement.

D’après les commentaires dans le script, la scène permet éteindre les lumieres en fin de simulation.

Voici mes paramètres :


local Stop_hour = "22";                                                         -- Hour when you want Simulation to stop

local Stop_minute = "30";                                         -- Minute of the hour you want Simulation to stop

-- note 1: the script will not exit while waiting the random time of the last light turned on. So end time can be longer than specified end time. (even more with var Random_max_TurnOff_duration)

-- note 2: if the global variable changes during the same wait time as above, it will exit immediately (when back home while Simulation runs)

local Sunset_offset = 60                                           -- number of minutes before or after sunset to activate Simulation

local Random_max_duration = 15;                           -- random time of light change in minutes --> here each device is on maximum 30min

local Random_max_TurnOff_duration = 30;           -- random time to add at the stop hour+stop minute so the Simulation can be more variable (0 to deactivate)

local Lights_always_on = {} -- IDs of lights who will always stay on during Simulation - leave empty array if none -> {}

-- a mettre dans les {} de la ligne supérieure si existant : id["LAMPE_BUREAU"],id["LAMPE_COULOIR"]

local Random_lights = {id["LAMPE_ENTREE"],id["LAMPE_TERRASSE"]} -- IDs of lights to use in Simulation

--local Random_lights = {id["LAMPE_HALL"],id["LAMPE_CELLIER"],id["LAMPE_CH_AMIS"]} -- Reduced set for test purposes

local Lights_On_at_end_Simulation = 0;     -- If next line is commented, no light will turn on after Simulation ends

--local Lights_On_at_end_Simulation = id["LAMPE_COULOIR"]; -- ID of a light (Only One) to turn on after Simulation ends (at specified Stop_hour & Stop_minute). Comment this line to turn off this feature

local Lights_On_if_Simulation_deactivated = 0; -- If next line is commented, no light will turn on after Simulation is stopped (by putting Simu_presence to 0)

--local Lights_On_if_Simulation_deactivated = id["LAMPE_HALL"]; -- ID of a light (Only One) to turn on after Simulation is stopped (Simulation_). Comment this line to turn off this feature

YAPS_Engine = {};

merci

Posté(e)

Hmmm tout àl'air bien...

C'est lampe entrée ou lampe terrasse qui reste allumée ?

Sent from my Note4

Posté(e)

hier c'était la lampe terrasse. En fait c'est aléatoire, tout dépend de l'état des lumières quand la simulation s'arrête. je n'ai rien modifié du script.

J'envisage de créer une nouvelle scène pour surveiller les lumières et les éteindre a partir d'une certaine heure si j'ai la variable simu_presence.

Posté(e)

bonsoir,

ce soir, c'est l'autre lumiere "eclairage rue" qui est restée allumée.

voici le debug :

[DEBUG] 22:30:02: Thu 28/04 Presence Simulation deactivated
[DEBUG] 22:30:02: Thu 28/04 Presence Simulation will restart tomorrow.
[DEBUG] 22:30:02: Thu 28/04 Sunset is around 20:53 + Sunset Shift of 60min = Start Time around 21:53
[DEBUG] 21:55:11: Fri 29/04 It's sunset time -> Simulation ON
[DEBUG] 21:55:11: Fri 29/04 Presence Simulation started. Will stop at: 22:30 + rand(30min) : 22:56
[DEBUG] 21:55:12: Fri 29/04 light ID:Eclairage status:99
[DEBUG] 21:55:12: Fri 29/04 Entering loop of 7.96 minutes
[DEBUG] 22:03:11: Fri 29/04 light ID:Eclairage status:0
[DEBUG] 22:03:11: Fri 29/04 Entering loop of 3.49 minutes
[DEBUG] 22:06:42: Fri 29/04 light ID:Eclairage status:99
[DEBUG] 22:06:42: Fri 29/04 Entering loop of 5.21 minutes
[DEBUG] 22:11:56: Fri 29/04 light ID:BP Eclairage Rue status:1
[DEBUG] 22:11:56: Fri 29/04 Entering loop of 13.75 minutes
[DEBUG] 22:25:42: Fri 29/04 light ID:Eclairage status:0
[DEBUG] 22:25:42: Fri 29/04 Entering loop of 10.84 minutes
[DEBUG] 22:30:03: Fri 29/04 Presence Simulation deactivated
[DEBUG] 22:30:03: Fri 29/04 Presence Simulation will restart tomorrow.
[DEBUG] 22:30:03: Fri 29/04 Sunset is around 20:55 + Sunset Shift of 60min = Start Time around 21:55

 

Posté(e)

je ne peux pas comparer avec mon debug car je n'ai pas de simulation pour le moment (y'a tjrs qqun àla maison), mais je ne vois rien d'anormal.

Essaye en activan le "super debug":

local Show_extra_debug = true; 
Posté(e)

mais de mémoire dans  le debug, il ne dit pas qu'il éteint toutes les lumières, à  la fin de la simulation , c'est ce qu'il devrait faire ?

Posté(e)

Merci Jojo, en fait je ne sais plus bien, ça fait longtemps... Mais avec le super debug, tout est écrit. @kinou, essaye aussi de remettre tout le script comme neuf, puis mets tes paramètres. Pcq il n'y a pas de raison que ça ne fonctionne pas, ça marche chez tout le monde...

Sent from my Note4

Posté(e)

mais de mémoire dans  le debug, il ne dit pas qu'il éteint toutes les lumières, à  la fin de la simulation , c'est ce qu'il devrait faire ?

oui, il doit tout éteindre à  la fin (enfin, uniquement les lampes qu'il a allumées pendant la simu)

  • 10 mois après...
Posté(e)

Quand la simu  elle s'arrete ça devrait éteindre tout, et quand je désactive éteindre tout et allumer ID hall.

 

Mais ça me mets une erreur:

[DEBUG] 22:48:05: Fri 03/03 Presence Simulation | v3.6.1 Starting up
[DEBUG] 22:48:05: Fri 03/03 --------------------------------------------------------------------------
[DEBUG] 22:48:05: Fri 03/03 Current Unix Time: 1488577685
[DEBUG] 22:48:05: Fri 03/03 converted Original planed End_simulation_time: 00:45 to Unix Time: 1488498300)
[DEBUG] 22:48:05: Fri 03/03 converted Midnight: 0:0 to Unix Time: 1488495600)
[DEBUG] 22:48:05: Fri 03/03 converted Sunset: 18:20 to Unix Time: 1488561600)
[DEBUG] 22:48:05: Fri 03/03 stop hour <= 12, Added 24H to End_simulation_time (End_simulation_time is ending after midnignt)
[DEBUG] 22:48:05: Fri 03/03 New End_simulation_time: 1488584700
[DEBUG] 22:48:05: Fri 03/03 Calculated sleeping between each turn off: 8 min
[DEBUG] 22:48:05: Fri 03/03 End_simulation_time_with_random_max_TurnOff: 1488586140
[DEBUG] 22:48:05: Fri 03/03 Reverse converted Unix Time of Sunset unix time : 1488560700 To: 18:05
[DEBUG] 22:48:05: Fri 03/03 Reverse converted Unix Time of Sunset unix time : 1488560700 To: 18:05
[DEBUG] 22:48:05: Fri 03/03 Sunset is at 18:20 + Sunset Shift of -15min = Start Time at 18:05
[DEBUG] 22:48:05: Fri 03/03 Reverse converted Unix Time of End Simulation : 1488584700 To: 00:45
[DEBUG] 22:48:05: Fri 03/03 End of Simulation: 00:45 + random of 30min
[DEBUG] 22:48:05: Fri 03/03 Checking for actions every minute.
[DEBUG] 22:48:05: Fri 03/03 Current Unix Time: 1488577685
[DEBUG] 22:48:05: Fri 03/03 converted Original planed End_simulation_time: 00:45 to Unix Time: 1488498300)
[DEBUG] 22:48:05: Fri 03/03 converted Midnight: 0:0 to Unix Time: 1488495600)
[DEBUG] 22:48:05: Fri 03/03 converted Sunset: 18:20 to Unix Time: 1488561600)
[DEBUG] 22:48:05: Fri 03/03 stop hour <= 12, Added 24H to End_simulation_time (End_simulation_time is ending after midnignt)
[DEBUG] 22:48:05: Fri 03/03 New End_simulation_time: 1488584700
[DEBUG] 22:48:05: Fri 03/03 Calculated sleeping between each turn off: 2 min
[DEBUG] 22:48:05: Fri 03/03 End_simulation_time_with_random_max_TurnOff: 1488585060
[DEBUG] 22:48:05: Fri 03/03 Simu_presence = 0, Aborting Simulation scene
[DEBUG] 22:55:40: Fri 03/03 Presence Simulation | v3.6.1 Starting up
[DEBUG] 22:55:40: Fri 03/03 --------------------------------------------------------------------------
[DEBUG] 22:55:40: Fri 03/03 Current Unix Time: 1488578140
[DEBUG] 22:55:40: Fri 03/03 converted Original planed End_simulation_time: 00:45 to Unix Time: 1488498300)
[DEBUG] 22:55:40: Fri 03/03 converted Midnight: 0:0 to Unix Time: 1488495600)
[DEBUG] 22:55:40: Fri 03/03 converted Sunset: 18:20 to Unix Time: 1488561600)
[DEBUG] 22:55:40: Fri 03/03 stop hour <= 12, Added 24H to End_simulation_time (End_simulation_time is ending after midnignt)
[DEBUG] 22:55:40: Fri 03/03 New End_simulation_time: 1488584700
[DEBUG] 22:55:40: Fri 03/03 Calculated sleeping between each turn off: 8 min
[DEBUG] 22:55:40: Fri 03/03 End_simulation_time_with_random_max_TurnOff: 1488586140
[DEBUG] 22:55:40: Fri 03/03 Reverse converted Unix Time of Sunset unix time : 1488560700 To: 18:05
[DEBUG] 22:55:40: Fri 03/03 Reverse converted Unix Time of Sunset unix time : 1488560700 To: 18:05
[DEBUG] 22:55:40: Fri 03/03 Sunset is at 18:20 + Sunset Shift of -15min = Start Time at 18:05
[DEBUG] 22:55:40: Fri 03/03 Reverse converted Unix Time of End Simulation : 1488584700 To: 00:45
[DEBUG] 22:55:40: Fri 03/03 End of Simulation: 00:45 + random of 30min
[DEBUG] 22:55:40: Fri 03/03 Checking for actions every minute.
[DEBUG] 22:55:40: Fri 03/03 Current Unix Time: 1488578140
[DEBUG] 22:55:40: Fri 03/03 converted Original planed End_simulation_time: 00:45 to Unix Time: 1488498300)
[DEBUG] 22:55:40: Fri 03/03 converted Midnight: 0:0 to Unix Time: 1488495600)
[DEBUG] 22:55:40: Fri 03/03 converted Sunset: 18:20 to Unix Time: 1488561600)
[DEBUG] 22:55:40: Fri 03/03 stop hour <= 12, Added 24H to End_simulation_time (End_simulation_time is ending after midnignt)
[DEBUG] 22:55:40: Fri 03/03 New End_simulation_time: 1488584700
[DEBUG] 22:55:40: Fri 03/03 Calculated sleeping between each turn off: 2 min
[DEBUG] 22:55:40: Fri 03/03 End_simulation_time_with_random_max_TurnOff: 1488585060
[DEBUG] 22:55:40: Fri 03/03 It's sunset time -> Simulation ON
[DEBUG] 22:55:40: Fri 03/03 Reverse converted Unix Time of End_simulation_time : 1488584700 To: 00:45
[DEBUG] 22:55:40: Fri 03/03 Reverse converted Unix Time of End_simulation_time_with_random_max_TurnOff : 1488585060 To: 00:51
[DEBUG] 22:55:40: Fri 03/03 Reverse converted Unix Time of End_simulation_time : 1488584700 To: 00:45
[DEBUG] 22:55:40: Fri 03/03 Reverse converted Unix Time of End_simulation_time_with_random_max_TurnOff : 1488585060 To: 00:51
[DEBUG] 22:55:40: Fri 03/03 Presence Simulation started. Will stop at: 00:45 + rand(30min) : 00:51
[DEBUG] 22:55:40: Fri 03/03 Turning On Always_On lights:
[DEBUG] 22:55:40: Fri 03/03 Device: Lampe LED Turned On
[DEBUG] 22:55:40: Fri 03/03 Now randomizing other lights...
[DEBUG] 22:55:41: Fri 03/03 light ID:Eclairage Entrée status:1
[DEBUG] 22:55:41: Fri 03/03 Entering loop of 23.05 minutes
[DEBUG] 22:55:52: Scene already active! Aborting this new instance !!
[DEBUG] 22:56:02: Fri 03/03 Exiting loop of 23.05 minutes
[DEBUG] 22:56:02: Fri 03/03 TurnOff All Simulation lights!
[DEBUG] 22:56:02: Fri 03/03 Device: Eclairage Salon Spot Off
[DEBUG] 22:56:02: Fri 03/03 Sleeping 0 minute(s) before next TurnOff
[DEBUG] 22:56:02: Fri 03/03 Device: Eclairage Entrée Off
[DEBUG] 22:56:02: Fri 03/03 Sleeping 0 minute(s) before next TurnOff
[DEBUG] 22:56:02: line 334: attempt to concatenate local 'deviceID' (a nil value)

 

Voici mon code:

Citation
--[[
%% autostart
%% properties
%% globals
Simu_presence
--]]
---------------------------------------
local version = "3.6.1";
-- YAPS Presence Simulation by SebcBien
-- August 2015
---------------------------------------
--V3.6.1 -- added new notifications engine (sms, freesms, push, email)
-- fixed bug "attempt to concatenate local 'deviceID' (a nil value)"
--V3.5.2 - start push sent by email
--V3.5.1
-- Fixed launch between midnight and endtime (if endtime is after midnight)
-- clean up code midnight-endtime
--V3.3.2
-- renamed all variables for more readability
--V3.3.0
-- Fixed Override bug (no sleep time between lights)
--V3.2.3
-- added sunset shifting possibility (add or remove minutes to startime
-- added time stamp to push messages
-- formated messages
-- optimisation
-- cleanup
--V3.1.0
-- "complete" rewriting with unix times
-- modified end time notification impacted by random and smooth TurnOff (End_simulation_time impact)
-- exit is now exactly at End_simulation_time
-- added smooth cut off of lights at ending time (function not triggered with deactivation)
--V2.6.6
-- clean up debug messages
-- added free sms notifications
-- second fix to looping days bug
--V2.6.0 to V2.6.5
-- Fixed bug when Random_max_TurnOff_duration = 0
-- Probably fixed End_simulation_time bug calculation when looping for days du to days are shorter now than the previous day
-- Fixed bug not turning on Lights_On_at_end_Simulation when exiting Simulation
-- added random end time + small stability changes and cleaning
-- Added array of lights to turn on after Simulation, ONLY if Simu_presence = 1 (normal ending, not ended by setting Simu_presence to 0)
-- Added the possibility to not have an always on lamp
-- Added naming of devices in the debug during Simulation
-- Added the possibility to select always on light during Simulation
--V2.2.0 to 2.5.0
-- fixed Simulation starting if restarted between End_simulation_time & midnight
-- fixed big bug Simulation restarting after end time
-- small notification and debug changes
-- Rewriting the engine
-- now relaunch automatically the next day, even if Simu_presence has not changed
-- Added Manual Stop variable
-- added list of mobiles
if (fibaro:countScenes() > 1) then
 fibaro:debug("Scene already active! Aborting this new instance !!");
 fibaro:abort();
end
--------------------- USER SETTINGS --------------------------------
local id = {
 LAMPE_SALON_SPOT = 81,
 LAMPE_TERR_GAUCHE = 191,
 LAMPE_TABLE   = 197,
 LAMPE_CUISINE  = 198,
 LAMPE_HALL   = 202,
 LAMPE_LED_SALON  = 203,
 LAMPE_TERR_GAUCHE = 206,
 LAMPE_ESCALIER  = 213,
 PHONE_PAPA   = 227,
 ADMIN     = 2,
 }
local Stop_hour = "00";     -- Hour when you want Simulation to stop
local Stop_minute = "45";    -- Minute of the hour you want Simulation to stop
-- note 1: the script will not exit while waiting the random time of the last light turned on. So end time can be longer than specified end time. (even more with var Random_max_TurnOff_duration)
-- note 2: if the global variable changes during the same wait time as above, it will exit immediately (when back home while Simulation runs)
local Sunset_offset = -15    -- number of minutes before or after sunset to activate Simulation
local Random_max_duration = 30;   -- random time of light change in minutes --> here each device is on maximum 30min
local Random_max_TurnOff_duration = 30; -- random time to add at the stop hour+stop minute so the Simulation can be more variable (0 to deactivate)
local Lights_always_on = {id["LAMPE_LED_SALON"]} -- IDs of lights who will always stay on during Simulation - leave empty array if none -> {}
local Random_lights = {id["LAMPE_SALON_SPOT"],id["LAMPE_HALL"],id["LAMPE_TAPLE"],id["LAMPE_CUISINE"]} -- IDs of lights to use in Simulation
--local Random_lights = {id["LAMPE_HALL"],id["LAMPE_CELLIER"],id["LAMPE_CH_AMIS"]} -- Reduced set for test purposes
local Lights_On_at_end_Simulation = 0; -- If next line is commented, no light will turn on after Simulation ends
-- local Lights_On_at_end_Simulation = id["LAMPE_COULOIR"]; -- ID of a light (Only One) to turn on after Simulation ends (at specified Stop_hour & Stop_minute). Comment this line to turn off this feature
local Lights_On_if_Simulation_deactivated = 0; -- If next line is commented, no light will turn on after Simulation is stopped (by putting Simu_presence to 0)
local Lights_On_if_Simulation_deactivated = id["LAMPE_HALL"]; -- ID of a light (Only One) to turn on after Simulation is stopped (Simulation_). Comment this line to turn off this feature
YAPS_Engine = {};
 YAPS_Engine.notifications = true;     -- send notifications
 YAPS_Engine.notificationTypes = {"push", "email"}; --notification types {"push", "email", "sms"} but they are overriden in the code
 YAPS_Engine.Activate_FreeSms = false;    -- activate push with Activate_FreeSms (Activate_Push must be true also)
 YAPS_Engine.smartphoneID = {id["PHONE_PAPA"]};  -- Smartphone Id to send push to. {id1, id2, id3}
 YAPS_Engine.userID = {id["ADMIN"]};     -- User Id to send email to. {id1, id2, id3}
 YAPS_Engine.sms = {
  ["VD_ID"] = 0,         -- Virtual Device ID
  ["VD_Button"] = "1",       -- Virtual Device Button
  ["VG_Name"] = "SMS"};       -- Global Variable Name
--------------------- USER SETTINGS END ----------------------------
----------------------ADVANCED SETTINGS-----------------------------
local Show_standard_debug = true; -- Debug displayed in white
local Show_extra_debug = true;  -- Debug displayed in orange
--------------------------------------------------------------------
-------------------- DO NOT CHANGE CODE BELOW ----------------------
--------------------------------------------------------------------
local Number_of_lights = #Random_lights;      -- numbers of light devices listed above
local Simulation = fibaro:getGlobal("Simu_presence");   --value of the global value: Simulation is on or off
local Manual_overide = fibaro:getGlobal("overideSimuSunset"); -- if = 1 then the Simulation is forced
local Start_simulation_time = fibaro:getValue(1, "sunsetHour"); --Start Simulation when sunset
local End_simulation_time,Sunrise_unix_hour,Sunset_unix_hour,Converted_var,Midnight,End_simulation_time_with_random_max_TurnOff,Sleep_between_TurnOff;
local Is_first_launch = true;
local NotifLoop = 0;
function Debug(color, message)
  fibaro:debug(string.format('<%s style="color:%s;">%s</%s>', "span", color, os.date("%a %d/%m", os.time()).." "..message, "span"));
end
function ExtraDebug(debugMessage)
 if ( Show_extra_debug ) then
  Debug( "orange", debugMessage);
 end
end
function StandardDebug(debugMessage)
 if ( Show_standard_debug ) then
  Debug( "white", debugMessage);
 end
end
function round(num, idp)
 local mult = 10^(idp or 0)
 return math.floor(num * mult + 0.5) / mult
end
function YAPS_Engine:notification(message, subject, param)
 local message = os.date("%H:%M", os.time()).." "..message or "<vide>";
 if YAPS_Engine.debug_messages then
  ExtraDebug("yellow", "Notification : "..message);
 end
  if Activate_FreeSms then
   fibaro:setGlobal("Activate_FreeSms", message)
   ExtraDebug("Message ("..message..") sent to Activate_FreeSms");
  end
 if param then
  for _, notif in ipairs(param) do
   if YAPS_Engine.debug_messages then
    ExtraDebug("grey", notif);
   end
   -- Envoi Push
   if notif == "push" and YAPS_Engine.smartphoneID then
    for _, id in ipairs(YAPS_Engine.smartphoneID) do
     if YAPS_Engine.debug_messages then
      ExtraDebug("grey", "Send Push smartphone ID : "..id);
     end
     fibaro:call(id, "sendPush", message);
    end
   -- Envoi Email
   elseif notif == "email" and YAPS_Engine.userID then
    for _, id in ipairs(YAPS_Engine.userID) do
     if YAPS_Engine.debug_messages then
      ExtraDebug("grey", "Send Email user ID : "..id);
     end
     fibaro:call(id, "sendEmail", subject, message);
    end
   -- Envoi SMS
   elseif notif == "sms" and YAPS_Engine.sms then
    if YAPS_Engine.debug_messages then
     ExtraDebug("grey", "Send SMS : VD_ID="..(YAPS_Engine.sms["VD_ID"] or 0).." VD_Button="..(YAPS_Engine.sms["VD_Button"] or "0").." VG_Name="..(YAPS_Engine.sms["VG_Name"] or ""));
    end
    fibaro:setGlobal(YAPS_Engine.sms["VG_Name"], message);
    if YAPS_Engine.sms["VD_ID"] and tonumber(YAPS_Engine.sms["VD_ID"])>0 and YAPS_Engine.sms["VD_Button"] and tonumber(YAPS_Engine.sms["VD_Button"])>0 then
     fibaro:call(YAPS_Engine.sms["VD_ID"], "pressButton", YAPS_Engine.sms["VD_Button"]);
    end
   end
  end
 else
  Debug("orange", "Warning : no notification options given");
 end
end
function YAPS_Engine:UnixTimeCalc(Converted_var, hour, min)
 local time = os.time();
 local date = os.date("*t", time);
 local year = date.year;
 local month = date.month;
 local day = date.day;
 unix_hour = os.time{year=year, month=month, day=day, hour=hour, min=min, sec=sec};
 ExtraDebug("converted "..Converted_var..": "..hour..":"..min.." to Unix Time: "..unix_hour..")")
 return unix_hour
end
function YAPS_Engine:ReverseUnixTimeCalc(Converted_var,hour)
 reverse_unix = os.date("%H:%M", hour)
 ExtraDebug("Reverse converted Unix Time of "..Converted_var.." : "..hour.." To: "..reverse_unix)
 return reverse_unix
end
function YAPS_Engine:EndTimeCalc()
 local hour,min
 ExtraDebug ("Current Unix Time: "..os.time())
 End_simulation_time = YAPS_Engine:UnixTimeCalc("Original planed End_simulation_time", Stop_hour, Stop_minute); -- generate End_simulation_time (changes at midnight) will not change during Simulation, only when ended
 Midnight = YAPS_Engine:UnixTimeCalc("Midnight", 00, 00);
 
 Sunset_unix_hour = fibaro:getValue(1,'sunsetHour');
 hour = string.sub(Sunset_unix_hour, 1 , 2);
 min = string.sub(Sunset_unix_hour,4);
 Sunset_unix_hour = (YAPS_Engine:UnixTimeCalc("Sunset", hour, min))+Sunset_offset*60;
 -- if stop hour is between 00 and 12h then add 24 hours to End_simulation_time
 if tonumber(Stop_hour) <= 12 and (os.time() >= End_simulation_time) then
  End_simulation_time = End_simulation_time + 24*60*60
  ExtraDebug ("stop hour <= 12, Added 24H to End_simulation_time (End_simulation_time is ending after midnignt)");
  ExtraDebug ("New End_simulation_time: "..End_simulation_time);
 end
 
 if Random_max_TurnOff_duration ~= 0 and Number_of_lights > 1 then   -- if Simulation = 1 then slow turn off, else turn off all immediately
  Sleep_between_TurnOff = round((math.random(Random_max_TurnOff_duration)/(Number_of_lights-1)),1);
  Sleep_between_TurnOff = math.random(Random_max_TurnOff_duration)/(Number_of_lights-1);
  ExtraDebug("Calculated sleeping between each turn off: "..Sleep_between_TurnOff.." min");
 else
  Sleep_between_TurnOff = 0;
  ExtraDebug("No sleeping between turn off");
 end
 End_simulation_time_with_random_max_TurnOff = End_simulation_time + ((Sleep_between_TurnOff*(Number_of_lights-1))*60)
 ExtraDebug("End_simulation_time_with_random_max_TurnOff: "..End_simulation_time_with_random_max_TurnOff); 
 
 if ((os.time() < End_simulation_time) and (Sunset_unix_hour - End_simulation_time > 0) and (Is_first_launch == true)) then -- if calculation is done between midnight and End_simulation_time and sunset is wrongly calculated after endtime (at first start only)
  Sunset_unix_hour = Sunset_unix_hour - (24*60*60) + 70; -- remove 24h58m50s of sunsettime
  ExtraDebug ("launch after Midnight and before End_simulation_time, removed 24H to Sunset_unix_hour (Only at the first start)");
  ExtraDebug ("New SunsetTime: "..Sunset_unix_hour);
 end
 Is_first_launch = false
end
-- Presence Simulation actions Main loop
function YAPS_Engine:Launch()
 YAPS_Engine:notification("Presence Simulation started. Will stop at: "..YAPS_Engine:ReverseUnixTimeCalc("End_simulation_time", End_simulation_time).." + rand("..Random_max_TurnOff_duration.."min) : "..YAPS_Engine:ReverseUnixTimeCalc("End_simulation_time_with_random_max_TurnOff", End_simulation_time_with_random_max_TurnOff), "Presence Simulator", {"push"}); -- push only
 StandardDebug("Presence Simulation started. Will stop at: "..YAPS_Engine:ReverseUnixTimeCalc("End_simulation_time", End_simulation_time).." + rand("..Random_max_TurnOff_duration.."min) : "..YAPS_Engine:ReverseUnixTimeCalc("End_simulation_time_with_random_max_TurnOff", End_simulation_time_with_random_max_TurnOff)); 
 if Lights_always_on[1] ~= nil then YAPS_Engine:TurnOn(Lights_always_on); end
 while ((os.time() <= End_simulation_time) and (Simulation == "1")) or ((Manual_overide == "1")) do
  local random_light = tonumber(Random_lights[math.random(Number_of_lights)]) --choose a random light in the list
  local lightstatus = fibaro:getValue(random_light, 'value') --get the value of the random light in the list
  -- turn on the light if off or turn off if on
  if tonumber(lightstatus) == 0 then fibaro:call(random_light, 'turnOn') else fibaro:call(random_light, 'turnOff') end
  fibaro:sleep(1000); -- necessary to get back the new status, because HC2 is too fast :-)
  lightstatus = fibaro:getValue(random_light, 'value') --get the value of the random light after his update
  StandardDebug('light ID:'.. fibaro:getName(random_light) ..' status:'..lightstatus);
  local sleeptime = math.random(Random_max_duration*60000) --random sleep
  StandardDebug("Entering loop of " .. round(sleeptime/60000,2) .. " minutes");
  -- Allows to exit the scene if the Simu_presence global var changes to 0 during the random  sleep
   local counterexitSimulation = 200
    while (counterexitSimulation > 0) and ((os.time() <= End_simulation_time) or Manual_overide == "1") do
     counterexitSimulation = counterexitSimulation - 1;
     test_presence_state = fibaro:getGlobal("Simu_presence");
     Simulation = tonumber(test_presence_state); --verify the global value, if the virtual device is deactivated, the loop stops.
     --fibaro:debug("Simulation var state : " .. Simulation.." override var state : " .. Manual_overide);
     if Simulation == 0 then
      Manual_overide = fibaro:getGlobalValue("overideSimuSunset");
      if Simulation == 0 or Manual_overide == "0" then
      counterexitSimulation = 0
      end
     end
    fibaro:sleep(sleeptime/200);
    end
   ExtraDebug("Exiting loop of "..round(sleeptime/60000,2).." minutes");
  local sleeptimemin = math.abs(sleeptime/60000)
  Simulation = fibaro:getGlobal("Simu_presence"); --verify the global value, if the virtual device is deactivated, the scene stops.
  Manual_overide = fibaro:getGlobalValue("overideSimuSunset");
 end
end
 
function YAPS_Engine:EndSimulation()
 if Lights_always_on[1] ~= nil then YAPS_Engine:TurnOff(Random_lights,Lights_always_on); end
 Debug("red","Presence Simulation deactivated");
 if (Simulation == "1") then
  Debug("yellow","Presence Simulation will restart tomorrow.");
  Debug("yellow","Sunset is around "..fibaro:getValue(1, "sunsetHour").." + Sunset Shift of "..Sunset_offset.."min = Start Time around "..YAPS_Engine:ReverseUnixTimeCalc("Sunset unix time", Sunset_unix_hour));
  YAPS_Engine:notification("Presence Simulation will restart tomorrow. Sunset is around "..fibaro:getValue(1, "sunsetHour").." + Sunset Shift of "..Sunset_offset.."min = Start Time around "..YAPS_Engine:ReverseUnixTimeCalc("Sunset unix time", Sunset_unix_hour), "Presence Simulator", {"push"}); -- push only
 end
 NotifLoop = 0; -- will force main loop notifications at end of Simulation
end
function YAPS_Engine:ExitSimulation()
 --YAPS_Engine:notification("Presence Simulation is terminated", "Presence Simulator", {"push"}); -- push only
 Debug("red","Simu_presence = 0, Aborting Simulation scene");
 fibaro:abort();
end
function YAPS_Engine:TurnOff(group,group2)
 Debug("red","TurnOff All Simulation lights!");
 local name, id2;
 local ID_devices_group = group;
 if ID_devices_group ~= 0 then
  for i=1, #ID_devices_group do
   Simulation = fibaro:getGlobal("Simu_presence"); --verify the global value, if Simulation presence is deactivated
   if Simulation == "0" then Sleep_between_TurnOff = 0; end; -- if Simulation ended before End_simulation_time, then no turn off delay
   if i > 1 then -- wait Number of lights -1 (do not need to wait for the first TurnOff)
    StandardDebug("Sleeping "..Sleep_between_TurnOff.." minute(s) before next TurnOff");
    fibaro:sleep(Sleep_between_TurnOff*60000);
   end
   id2 = tonumber(ID_devices_group);
   fibaro:call(id2, "turnOff");
   name = fibaro:getName(id2);
   if (name == nil or name == string.char(0)) then
    name = "Unknown"
   end
   StandardDebug("Device: "..name.." Off ");
  end
 end
 Debug("red","TurnOff All Always_On lights!");
 local ID_devices_group = group2;
 if ID_devices_group ~= 0 then
  for i=1, #ID_devices_group do
   id2 = tonumber(ID_devices_group);
   fibaro:call(id2, "turnOff");
   name = fibaro:getName(id2);
    if (name == nil or name == string.char(0)) then
     name = "Unknown"
    end
   StandardDebug("Device: "..name.." Off ");
  end
 end
 if Lights_On_at_end_Simulation ~= 0 and Simulation == "1" then
  fibaro:call(Lights_On_at_end_Simulation, "turnOn");
  name = fibaro:getName(Lights_On_at_end_Simulation);
   if (name == nil or name == string.char(0)) then
    name = "Unknown"  
   end
  Debug("red","Turned On light Lights_On_at_end_Simulation:");
  Debug("white", name);
 end
 if Lights_On_if_Simulation_deactivated ~= 0 and Simulation == "0" then
  fibaro:call(Lights_On_if_Simulation_deactivated, "turnOn");
  name = fibaro:getName(Lights_On_if_Simulation_deactivated);
   if (name == nil or name == string.char(0)) then
    name = "Unknown"
   end
  Debug("red","Turned On light Lights_On_if_Simulation_deactivated:");
  Debug("white", name);
 end
end
function YAPS_Engine:TurnOn(group)
 Debug("red","Turning On Always_On lights:");
 local name, id2;
 local ID_devices_group = group;
 for i=1, #ID_devices_group do
  id2 = tonumber(ID_devices_group);
  fibaro:call(id2, "turnOn");
  name = fibaro:getName(id2);
  if (name == nil or name == string.char(0)) then
   name = "Unknown"  
  end
  StandardDebug("Device: "..name.." Turned On ");
 end
 Debug("red","Now randomizing other lights...");
end
 
Debug("green", "Presence Simulation | v" .. version .. " Starting up");
Debug("green", "--------------------------------------------------------------------------");
------------------------ Main Loop ----------------------------------
-- first start notifications
YAPS_Engine:EndTimeCalc();
YAPS_Engine:notification("Scheduled presence Simulation at "..YAPS_Engine:ReverseUnixTimeCalc("Sunset unix time", Sunset_unix_hour).." (Sunset: "..fibaro:getValue(1, "sunsetHour")..")", "Presence Simulator", {"email"}); -- mail only
Debug("green","Sunset is at "..fibaro:getValue(1, "sunsetHour").." + Sunset Shift of "..Sunset_offset.."min = Start Time at "..YAPS_Engine:ReverseUnixTimeCalc("Sunset unix time", Sunset_unix_hour));
Debug("green","End of Simulation: "..YAPS_Engine:ReverseUnixTimeCalc("End Simulation", End_simulation_time).." + random of "..Random_max_TurnOff_duration.."min");
Debug("green", "Checking for actions every minute.");
Is_first_launch = true
while true do -- Infinite loop of actions checking, hours calculations, notifications
 YAPS_Engine:EndTimeCalc();
 -- local Sunset_unix_hour = Midnight  -- un-comment this line when testing to force a start hour (or use Sunset_offset)
 if os.time() >= Sunset_unix_hour then -- define if nighttime (sunset = 1)
  sunset = 1
 else
  sunset = 0
 end
 
 if (Simulation == "1") then
  if sunset == 1 and (os.time() <= End_simulation_time) then
   Debug("yellow", "It's sunset time -> Simulation ON");
   YAPS_Engine:Launch();
   YAPS_Engine:EndSimulation();
  end
  if Manual_overide == "1" then
   Debug("yellow", "Manual Override Activated -> Simulation ON");
   YAPS_Engine:Launch();
   YAPS_Engine:EndSimulation();
  end
  if Manual_overide == "0" and sunset == 0 and NotifLoop == 0 then
   Debug("yellow", "Sunset is at "..fibaro:getValue(1, "sunsetHour").." + Sunset Shift of "..Sunset_offset.."min = Start Time at "..YAPS_Engine:ReverseUnixTimeCalc("Sunset unix time", Sunset_unix_hour));
   Debug("yellow", "End of Simulation: "..YAPS_Engine:ReverseUnixTimeCalc("End Simulation", End_simulation_time).." + random of "..Random_max_TurnOff_duration.."min = "..YAPS_Engine:ReverseUnixTimeCalc("End Simulation", End_simulation_time_with_random_max_TurnOff));
  end
 end
 if (Simulation == "0") then -- Condition to end Simulation
  YAPS_Engine:ExitSimulation();
 end
 
 if NotifLoop <= 120 then --a waiting xx times the fibaro sleep below (2 hours) before resetting counter (and notifying)
  if NotifLoop == 120 then NotifLoop = 0 end
  if NotifLoop == 0 then
  ExtraDebug("Now, checking for actions every minute. Next notify: in 2 hours");
  end
 end
  
 fibaro:sleep(1*60*1000); -- wait 1 minutes before testing again the global vars below
 Simulation = fibaro:getGlobal("Simu_presence");
 Manual_overide = fibaro:getGlobal("overideSimuSunset");
 NotifLoop = NotifLoop + 1;
end

 

Je suis en V4.111 béta... Quelqu'un peut m'aider?

Posté(e)

Hello

 

Voici ma ligne 334:             if (name == nil or name == string.char(0)) then

 

Mais je vais encore vérifier mes ID's et d'abord faire un Recovery vers 4.110 stable car la V4.111 beta me fait planter le réseau Z-Wave de temps en temps....

  • 3 semaines après...
Posté(e)

Bonjour,

 

d´abord merci beaucoup pour ce YAPS, qui fonctionne très bien depuis > un an maintenant.

 

Actuellement j´ai rajouté quelques HUE à la maison. On peut aussi les commander vis LUA, mais ils ont besoin d´un peu plus de code:e.g.

    fibaro:call(532, "changeBrightness", 255)
    fibaro:call(532, "changeHue", 7680)
    fibaro:call(532, "changeSaturation", 210) 
    fibaro:call(532, "turnOn")

 

Par contre pour éteindre, un simple "turnOff" suffit.

 

Comment je pourrais les integrer dans le script?

 

Merci pour toute suggestion

Thilo
        

×
×
  • Créer...