ich brauch mal eure Hilfe. Wir haben bei der dunklen Jahreszeit das Problem das wir im Haus meist nur die Räume auf der Rückseite nutzen, sprich das Haus sieht von der Straße verlassen aus.
Ich möchte nur das 1 Stunde nach Sonnenuntergang Lampe XY für eine zufällige Zeit an und wieder aus geht und das bis Mitternacht. Egal ob zuhause oder nicht.
Habe schon vieles probiert bekomme es aber nicht hin.
Ich würde Dir gern helfen, aber nicht als Szenenlieferant dienen. Wenn Du nicht weiter kommst, dann poste Dein Script. Dann bin ich gern bereit Dir zu helfen.
mein Lua Script habe ich bereits verworfen, habe das vom obigen Link versucht zu Kürzen aber da habe ich null Erfahrung.
Habe es zuletzt mit einer Grafischen Szene probiert die funktioniert aber leider auch nicht… ich kann ja nochmal eine Lua bauen und die posten. Die andere “simple” im Anhang.
--[[
%% properties
%% globals
--]]
-- LUA - Presence Simulator V1.0.0
--
-- USER SETTINGS :
local start_hour = 20; --hour to start simulation
local start_minute = 30; --minute to start simulation, example 19:30
local rndmaxtime = 10 --random time of light change in minutes --> here each device is on max 20min
local runtime = 190 --how long to run simulation in minutes
local ID_devices_lights = {57} --IDs of lights to use in simulation
local numbers_lights = #ID_devices_lights --numbers of light devices listed above
local debug = true; --activate the debug mode
-- DO NOT EDIT THE CODE BELOW (except to suit your needs) --
local minute = 60000 --in milliseconds
local currentDate = os.date("*t");
SimulatorPresenceEngine = {
version = "1.0.0"
};
-- function to switch off devices in the list
function SimulatorPresenceEngine:TurnOff(group)
local name, id;
local ID_devices_group = group;
for i=1, #ID_devices_group do
id = tonumber(ID_devices_group[i]);
fibaro:call(id, "turnOff");
if (debug) then
name = fibaro:getName(id);
if (name == nil or name == string.char(0)) then
name = "Unknown"
end
fibaro:debug("Device:" .. name .. " On ");
end
end
end
-- function to simulate a presence
function SimulatorPresenceEngine:Launch()
local start = os.time()
local endtime = start + runtime*minute/1000 -- after how many minutes exit simulation
while ((os.time() < endtime) and (simu == "On")) do
local random_light = tonumber(ID_devices_lights[math.random(numbers_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
if (debug) then fibaro:debug('light ID:'..random_light..' status:'..lightstatus) end
local sleeptime = math.random(rndmaxtime*minute) --random sleep
fibaro:sleep(sleeptime)
local sleeptimemin = math.abs(sleeptime/60000)
if (debug) then fibaro:debug('sleeptime:'..sleeptimemin) end
simu = fibaro:getGlobal("Simu_presence"); --verify the global value, if the virtual device is deactivated, the scene stops.
end
--turn Off all lights
SimulatorPresenceEngine:TurnOff(ID_devices_lights);
fibaro:sleep(60000);
end
-- Condition to start simulation
if ((simu == "On")and (currentDate.hour == start_hour ) and (currentDate.min == start_minute))then
SimulatorPresenceEngine:Launch(); --launch the simulation when virtual device is on, and the current time is triggered.
end
wie gesagt Lua habe ich bisher keinerlei Erfahrungen.
wie gesagt, so hart wie es klingt war es nicht gemeint.
Ohne es getestet zu haben: Das Skript macht doch genau das was Du willst. Es schaltet um 19:30 Uhr eine zufällige Lampe für eine zufällige Zeit. Und das 190 Minuten lang.
Hi,
funktioniert das Script nicht? Kürzen ist nicht notwendig.
In Zeile 15 hast Du schon Deine Lampen ID eingetragen.
Zeile 9 legt die Startstunde auf 20 Uhr fest.
am Anfang des Sktiptes wird im Array (zu erkennen an den {}) definiert, welche Lampen geschaltet werden sollen. Dort trägst Du die Lampe ein die Du schalten möchtest.
Einzig die Steuerung nach dem Sonnenuntergang bietet das Skript nicht. Dies habe ich Dir hier nachfolgend eingebaut.
--[[
%% properties
%% globals
--]]
-- LUA - Presence Simulator V1.0.0
--
-- Berechnung Sonnenuntergangsstunde
-- USER SETTINGS :
local start_hour = tonumber(string.sub(fibaro:getValue(1, "sunsetHour"),0,2)) +1
local start_minute = string.sub(fibaro:getValue(1, "sunsetHour"),4,6)
local rndmaxtime = 10 --random time of light change in minutes --> here each device is on max 20min
local runtime = 190 --how long to run simulation in minutes
local ID_devices_lights = {57} --IDs of lights to use in simulation
local numbers_lights = #ID_devices_lights --numbers of light devices listed above
local debug = true; --activate the debug mode
-- DO NOT EDIT THE CODE BELOW (except to suit your needs) --
local minute = 60000 --in milliseconds
local currentDate = os.date("*t");
SimulatorPresenceEngine = {
version = "1.0.0"
};
-- function to switch off devices in the list
function SimulatorPresenceEngine:TurnOff(group)
local name, id;
local ID_devices_group = group;
for i=1, #ID_devices_group do
id = tonumber(ID_devices_group[i]);
fibaro:call(id, "turnOff");
if (debug) then
name = fibaro:getName(id);
if (name == nil or name == string.char(0)) then
name = "Unknown"
end
fibaro:debug("Device:" .. name .. " On ");
end
end
end
-- function to simulate a presence
function SimulatorPresenceEngine:Launch()
local start = os.time()
local endtime = start + runtime*minute/1000 -- after how many minutes exit simulation
while ((os.time() < endtime) and (simu == "On")) do
local random_light = tonumber(ID_devices_lights[math.random(numbers_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
if (debug) then fibaro:debug('light ID:'..random_light..' status:'..lightstatus) end
local sleeptime = math.random(rndmaxtime*minute) --random sleep
fibaro:sleep(sleeptime)
local sleeptimemin = math.abs(sleeptime/60000)
if (debug) then fibaro:debug('sleeptime:'..sleeptimemin) end
simu = fibaro:getGlobal("Simu_presence"); --verify the global value, if the virtual device is deactivated, the scene stops.
end
--turn Off all lights
SimulatorPresenceEngine:TurnOff(ID_devices_lights);
fibaro:sleep(60000);
end
-- Condition to start simulation
if ((simu == "On")and (currentDate.hour == start_hour ) and (currentDate.min == start_minute))then
SimulatorPresenceEngine:Launch(); --launch the simulation when virtual device is on, and the current time is triggered.
end
so habe ich es jetzt laufen, leider wird das Licht (ID 57) nicht geschlatet.
--[[
%% properties
%% globals
--]]
-- LUA - Presence Simulator V1.0.0
--
-- USER SETTINGS :
local start_hour = 12; --hour to start simulation
local start_minute = 15; --minute to start simulation, example 19:30
local rndmaxtime = 5 --random time of light change in minutes --> here each device is on max 20min
local runtime = 190 --how long to run simulation in minutes
local ID_devices_lights = {57} --IDs of lights to use in simulation
local numbers_lights = #ID_devices_lights --numbers of light devices listed above
local debug = true; --activate the debug mode
-- DO NOT EDIT THE CODE BELOW (except to suit your needs) --
local minute = 60000 --in milliseconds
local currentDate = os.date("*t");
SimulatorPresenceEngine = {
version = "1.0.0"
};
-- function to switch off devices in the list
function SimulatorPresenceEngine:TurnOff(group)
local name, id;
local ID_devices_group = group;
for i=1, #ID_devices_group do
id = tonumber(ID_devices_group[i]);
fibaro:call(id, "turnOff");
if (debug) then
name = fibaro:getName(id);
if (name == nil or name == string.char(0)) then
name = "Unknown"
end
fibaro:debug("Device:" .. name .. " On ");
end
end
end
-- function to simulate a presence
function SimulatorPresenceEngine:Launch()
local start = os.time()
local endtime = start + runtime*minute/1000 -- after how many minutes exit simulation
while ((os.time() < endtime) and (simu == "On")) do
local random_light = tonumber(ID_devices_lights[math.random(numbers_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
if (debug) then fibaro:debug('light ID:'..random_light..' status:'..lightstatus) end
local sleeptime = math.random(rndmaxtime*minute) --random sleep
fibaro:sleep(sleeptime)
local sleeptimemin = math.abs(sleeptime/60000)
if (debug) then fibaro:debug('sleeptime:'..sleeptimemin) end
simu = fibaro:getGlobal("Simu_presence"); --verify the global value, if the virtual device is deactivated, the scene stops.
end
--turn Off all lights
SimulatorPresenceEngine:TurnOff(ID_devices_lights);
fibaro:sleep(60000);
end
-- Condition to start simulation
if ((simu == "On")and (currentDate.hour == start_hour ) and (currentDate.min == start_minute))then
SimulatorPresenceEngine:Launch(); --launch the simulation when virtual device is on, and the current time is triggered.
end
Wie der Autor in seiner Anleitung beschrieben hat, benötigst du auch ein VD. Du kannst aber auch mal auf Seite 4 springen, da gibt es auch Quelltext, welche rein als Szene ausgeführt werden können. Würde dir aber empfehlen, eher ein kleineres Skript zu schreiben. Für das was du umsetzen willst, ist der Code too much.
--[[
%% properties
%% globals
--]]
Dort ist kein Trigger eingetragen, was bedeutet, dass die Szene so nie starten würde. Egal was danach für ein Quelltext kommt.
Du kannst als Trigger nur devices, Variablen oder Autostart verwenden. Autostart läuft dauerhaft. An deiner Stelle würd ich mich erstmal ein wenig einlesen, bevor ich mich auf so ein Skript stürze.
Für das was du umsetzen willst, reichen circa 20 Zeilen Code.
Du erstellst eine Autostart-Szene, in der du eine Funktion erstellst, die prüft ob das Licht an ist, wenn ja, schalte aus oder wenn nein, dann schalte ein. Dann noch eine Abfrage, ob es nach Sonnenuntergang UND vor 24 Uhr ist. In dieser if-Abfrage rufst du die Funktion auf und dann wartest du eine random-Zeit, bis die Funktion das nächste Mal ausgeführt werden soll.