Anwesenheitssimulation

Hallo Leute,

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 habe mir jetzt schon mal folgenden Artikel angesehen:
http://forum.fibaro.com/index.php?showtopic=14117

Das ist mir allerdings wieder zu komplex…

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.

Habt ihr was ähnliches im Einsatz? Danke vorab!!!

Hallo Waffel,

was bedeutet denn “bekomme es 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.

Klingt irgendwie härter, als es gemeint ist.

Gruß
Neospin

Hi,

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.

Unbenannt1.jpg

So in der Art!?

--[[
%% 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.

Hi,

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.

Gruß
Neospin

Hallo,

kein Problem hast mich nicht persönlich angegriffen ;)))

Ich möchte aber das das Skript eine feste Lampe ID 57 schalten.

Gruß

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.

VG Hoggle

Hallo,

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

Bei Fragen helfe ich gern.

Gruß
Neospin

Sehr charmant ergänzt!

Was ist denn in Zeile 11 die “0,2”?
Bzw. in Zeile 12 die “4,6”?

VG Hoggle

So habe mal Testweise auf 12:00 Uhr eingestellt und beobachte mal was mit der Lampe passiert :wink: Danke für die Ergänzung mit dem Sonnenuntergang!

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

Hast Du überprüft, ob die ID richtig ist?

ja die ID stimmt 100%ig.

Sonst habe ich zusätzlich zur Szene aber gar nichts anderes angelegt (Variable, Zusatzszene oder ähnliches)

Die Szene startet nicht, da kein Trigger vorhanden ist.

Ok, nochmal auf Deutsch!? :wink:

Kommt der “Trigger” nicht durch die Zeilen 73, 74?
Aber was ist “simu” und der Verweis auf das VD?

Hallo Hoogle,

wie im ersten Beitrag erwähnt, ich habe die Lua Szene von dem diesem Link:
http://forum.fibaro.com/index.php?showtopic=14117

kopiert und so gekürzt, habe gehofft das es dann auch geht :slight_smile:

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.

Sorry aber ich kapiere es grad gar nicht :wink: Auf Seite 4 verstehe ich gar nichts mehr das ist ja noch komplizierter.

Was könnte ich den als Trigger nehmen? Nicht eine bestimmte Uhrzeit oder Sonnenuntergang!?

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.