Wakeup - Wecker Szene via LUA + virtual Device

Hier ein Script, welches durch ein virtuelles Modul gestartet wird. In dem Virtuellen Modul kann die Weckzeit, sowie die Wochentage angegeben werden und der Wecker auf aktiv und inaktiv geschalten werden. Ausserdem gibt es eine Möglichkeit, Rollos oder Jalousien via RollerShutter2 von Fibaro automatisch nach dem Weckalarm zu öffnen.
Quelle: http://jonnylarsson.se/JL/ACWUT.lua

Virtual Device:
http://siio.de/alarmclock-2-1

--[[
%% autostart
%% properties
%% globals
AlarmClockStatus
AlarmClockDays1
AlarmClockDays2
AlarmClockTime1
AlarmClockTime2

--]]

--[[ 

INSTRUCTIONS
* 
* add those devices you want to use in this script to "devices"
* set dimmer device to a "_maxValue"
* set "_duration" to a value in minutes for how long the dim function should be active
* to activate debug, helper and versionCheck set the value to true or false

* helper is to show all "lights" in your system.
* debug is debug :)
* versionCheck checks if script is updated. Click on "Get it" 

--]]

-- SCENE SCENARIO
-- Advanced wakeup scene to turnOn lights at specified time, time you set in
-- alarm clock virtual device
-- Set value for how much the blinds should open with the slider in VD.

-- REFERENCE
-- forum.fibaro.com, lua.org, domotique-fibaro.fr, www.gronahus.se 
-- Thanks to robmac, stevenvd for good LUA functions code.

-- 2015-11-01 ver 2.0.0 new version of scene and virtual device. Supports 2 alarm.
-- 2015-11-02 ver 2.0.1 list all lights in scene. Add those you want to use in 'User Settings' section
-- 2015-11-27 ver 2.1.1 adjustment of debug lines and added variable to %% globals

version = "{2.1.1}"

-------------------- USER SETTINGS -----------------------
devices = {339,341,24,256,335,337,25}	-- Lights, dimmers and blinds
_maxValue = 50	 			-- When dimmer reach this value it will stop there
_duration = 5				-- Time in minutes for how long wakeUp should be active
debug = true				-- set debug to true or false
helper = false				-- loop through all devices and search for lights/dimmers/binarySwitch etc
versionCheck = true		-- check if new version of script exist on server

-- EXTRA FUNCTIONS, OPTIONS
-- Start Sonos/Internet Radio
vDeviceID = 393 			-- Id of Sonos virtual device
vDeviceButton = 7 			-- Play
vDeviceFunc = false			-- set to true to activate Sonos/Internet Radio

-- Dimmers to set to fixed value when alarmWakeup
Dimdevices = {343}			-- Dimmers to set to fixed value
fixedValue = 50				-- Dimmer value
DimdevicesFunc = false		-- set to true or false

--TimeOfDay variable --
varTOD = "TimeOfDay"		-- TOD translate
varTODMorning = "Morgon"	-- TOD Morning translate
varState = "SleepState"		-- TOD translate
varStateMorning = "Vaken"	-- TOD Morning translate
variableFunc = true			-- set to true or false
-----------------------------------------------------------
timeNow = os.date("%H:%M")
dayName = os.date("%A")

------------- DO NOT CHANGE LINES BELOW -------------------
startSource = fibaro:getSourceTrigger();
sortedtbl = {}
tmptbl = {}
runOnce = true
alarmTime1 = fibaro:getGlobal("AlarmClockTime1")
alarmTime2 = fibaro:getGlobal("AlarmClockTime2")
alarmDay1 = fibaro:getGlobal("AlarmClockDays1")
alarmDay2 = fibaro:getGlobal("AlarmClockDays2")
blindUpLevel = fibaro:getGlobal("openBlinds")

alarmTimes = {alarmTime1, alarmTime2}
alarmDays = {alarmDay1, alarmDay2}

-- Give debug a fancy color
Debug = function ( color, message )
  fibaro:debug(string.format('<%s style="color:%s;">%s</%s>', "span", color, message, "span")); 
end

Debug( "orange", "WakeUpTime scene - LUA Scripting by Jonny Larsson 2015" );
Debug( "orange", "Version: "..version);
Debug( "lightgreen", "-- Set alarmtime in virtual device --");
Debug( "lightgreen", "-- Set slider to how much blinds should open --");
if alarmDay1 ~= "Off" then 
  Debug( "grey", "Next alarm time is set to next "..alarmDay1..":"..alarmTime1)
end
if alarmDay2 ~= "Off" then 
  Debug( "grey", "Next alarm time is set to next "..alarmDay2..":"..alarmTime2)
end

function timerFunction()
timeNow = os.date("%H:%M") 
-- Check if alarmDay2 is in use, else remove it from tables
if alarmDay2 == "Off" then
   table.remove(alarmDays, 2)
   table.remove(alarmTimes, 2)
end
for i = 1,#alarmDays do
    	--Check if day and time is same as alarmDays and alarmTimes
    	if timeNow == alarmDays[i] and alarmTimes[i] then
      		-- Sort table of devices
			sortTable()
    	--else 
    		--if (debug) then
    			--Debug( "grey", "Next alarmTime is set to next "..alarmDays[i]..":"..alarmTimes[i]);
    		--end
      	end
end

setTimeout(timerFunction, 60*1000)
end

sortTable = function()
   for i = 1,#devices do
      lightItems = devices[i];
        if fibaro:getType(lightItems) == "com.fibaro.FGR221" or fibaro:getType(lightItems) == "com.fibaro.FGRM222" or fibaro:getType(lightItems) == "com.fibaro.rollerShutter" or fibaro:getType(lightItems) == "com.fibaro.FGWP101" then
            table.insert(sortedtbl,lightItems)
       elseif fibaro:getType(lightItems) == "com.fibaro.binarySwitch" then
          table.insert(sortedtbl,lightItems)
       elseif fibaro:getType(lightItems) == "com.fibaro.multilevelSwitch" then
          table.insert(sortedtbl,lightItems)
         end
   end
     turnLightOn()
end

-- TurnOn lights, functions
turnLightOn = function()
   for i = 1,#sortedtbl do
      lightItems = sortedtbl[i];
       if fibaro:getType(lightItems) == "com.fibaro.FGR221" or fibaro:getType(lightItems) == "com.fibaro.FGRM222" or fibaro:getType(lightItems) == "com.fibaro.rollerShutter" or fibaro:getType(lightItems) == "com.fibaro.FGWP101" then
      		fibaro:call(lightItems, "setValue", blindUpLevel)
         elseif fibaro:getType(lightItems) == "com.fibaro.binarySwitch" then
            fibaro:call(lightItems, "turnOn")
         elseif fibaro:getType(lightItems) == "com.fibaro.multilevelSwitch" then
         	table.insert(tmptbl,lightItems)
       end
    end
		if (DimdevicesFunc) then
   			for i = 1,#Dimdevices do
       			DimItems = Dimdevices[i];
       			fibaro:call(DimItems, "setValue", fixedValue);
    		end
		end
if (vDeviceFunc) then
   		fibaro:call(vDeviceID, "pressButton", vDeviceButton)
end
if tmptbl == nil then
if (debug) then
	Debug( "red",'No dimmers in table, will not run next function')
end
else wakeUpFunc()end

end

-- Now its time to turnOn some lights
wakeUpFunc = function()
if (debug) then
	Debug( "green",'Start soft wakeup light')
end
for i = 1,#tmptbl do
    lightItems = tmptbl[i];
    fibaro:call(lightItems, "setValue", "0");
	fibaro:sleep(200);
	addValue = _maxValue / tonumber(_duration);
    local currentValueLights = tonumber(fibaro:getValue(lightItems, "value"));
    local newValue = currentValueLights + addValue;
end
fibaro:sleep(1000);
  
for variable = 0, _maxValue - 1, addValue do
  		local currentValueLights = tonumber(fibaro:getValue(lightItems, "value"));
  		if (variable ~= 0 and currentValueLights == 0 ) then
    		if (debug) then
     			Debug( "blue","timer stop, lights turned off");
    		end
    		break;
  		end
  		local newValue = currentValueLights + addValue;
  		if (debug) then
  			Debug( "yellow",'Increase value to ' ..  newValue) 
  		end
  		--Increases the value of the lamp
    	for i = 1,#tmptbl do
    	lightItems = tmptbl[i];
  			fibaro:call(lightItems, "setValue", newValue);
      	end
  		--Waits before the next step
    	fibaro:sleep(60*1000);
end
end

insert2Table = function()
if runOnce then
sortedtbl = {}
  for i = 1, 500 do
    if ("com.fibaro.FGR221" == fibaro:getType(i) or "com.fibaro.FGRM222" == fibaro:getType(i) or "com.fibaro.rollerShutter" == fibaro:getType(i) or "com.fibaro.multilevelSwitch" == fibaro:getType(i) or "com.fibaro.multilevelSwitch" == fibaro:getType(i) or "com.fibaro.binarySwitch" == fibaro:getType(i) or "com.fibaro.FGWP101" == fibaro:getType(i)) then
      	table.insert(sortedtbl,i)
    end
  end
end
  Debug( "grey","All your lights will be listed in a table below, add them in devices in 'User Settings' section")
  Debug( "grey",json.encode(sortedtbl))
  runOnce = false
end

------ CHECK SCRIPT VERSION ON SERVER ------
function versionChecker()
local function getMethod(requestUrl, successCallback, errorCallback)
local http = net.HTTPClient()
  http:request(requestUrl, {
      options = {
        method = 'GET',
        headers = {
        },
      },
      success = successCallback,
      error = errorCallback
  })
end
content = "ACWUT.lua"
local url = 'http://jonnylarsson.se/JL/'..content

getMethod(url, function(resp)
	s = resp.data
    serverVersion = string.match(s, "{(.-)}");
    scriptVersion = string.match(version, "{(.-)}");
    if serverVersion > scriptVersion then
    	Debug("grey", "Checking script version...") 
    	Debug("yellow", "There is a new version out! "..'<a href="http://jonnylarsson.se/JL/ACWUT.lua" target="_blank" style="display:inline;color:Cyan">Get it!</a>')

    end
    end,
  	function(err)
    print('error' .. err)
end
)
end
---------------- SCRIPT CHECK END ---------------------

------------------ START OF SCENE ----------------------
if ( startSource["type"] == "autostart" ) or ( startSource["type"] == "global" ) then
	if helper then
		insert2Table()
	end
	if versionCheck then
		versionChecker()
	end
  	if alarmDay1 ~= "Off" or alarmDay2 ~= "Off" then
		timerFunction()
    else Debug( "blue","Scene is not active until you set alarmclock time and day in virtual device")
    end
end

Hier nocheinmal das gleiche Script etwas modifiziert. Es kann nun auch durch ein Tür/ Fensterkontakt getriggert werden.
Die ID in den Properties, sowie die ID “local WeckerID” sind hierbei dem Tür/ Fensterkontakt anzupassen.

--[[
%% autostart
%% properties
746 value
%% globals
AlarmClockStatus
AlarmClockDays1
AlarmClockDays2
AlarmClockTime1
AlarmClockTime2
--]]

--[[ 

INSTRUCTIONS
* 
* add those devices you want to use in this script to "devices"
* set dimmer device to a "_maxValue"
* set "_duration" to a value in minutes for how long the dim function should be active
* to activate debug, helper and versionCheck set the value to true or false

* helper is to show all "lights" in your system.
* debug is debug :)
* versionCheck checks if script is updated. Click on "Get it" 

--]]

-- SCENE SCENARIO
-- Advanced wakeup scene to turnOn lights at specified time, time you set in
-- alarm clock virtual device
-- Set value for how much the blinds should open with the slider in VD.

-- REFERENCE
-- forum.fibaro.com, lua.org, domotique-fibaro.fr, www.gronahus.se 
-- Thanks to robmac, stevenvd for good LUA functions code.

-- 2015-11-01 ver 2.0.0 new version of scene and virtual device. Supports 2 alarm.
-- 2015-11-02 ver 2.0.1 list all lights in scene. Add those you want to use in 'User Settings' section
-- 2015-11-27 ver 2.1.1 adjustment of debug lines and added variable to %% globals

version = "{2.1.1}"

-------------------- USER SETTINGS -----------------------
devices = {339,341,24,256,335,337,25}	-- Lights, dimmers and blinds
_maxValue = 50	 			-- When dimmer reach this value it will stop there
_duration = 5				-- Time in minutes for how long wakeUp should be active
debug = true				-- set debug to true or false
helper = false				-- loop through all devices and search for lights/dimmers/binarySwitch etc

-- HARDWARE-WECKER (IM HEADER EINFÜGEN)
local weckerID = 746

-- EXTRA FUNCTIONS, OPTIONS
-- Start Radio
vDeviceID = 393 			-- Id of VD
vDeviceButton = 7 			-- Play
vDeviceFunc = true			-- set to true to activate Sonos/Internet Radio

-- Dimmers to set to fixed value when alarmWakeup
Dimdevices = {343}			-- Dimmers to set to fixed value
fixedValue = 50				-- Dimmer value
DimdevicesFunc = false		-- set to true or false

--TimeOfDay variable --
varTOD = "TimeOfDay"		-- TOD translate
varTODMorning = "Morgon"	-- TOD Morning translate
varState = "SleepState"		-- TOD translate
varStateMorning = "Vaken"	-- TOD Morning translate
variableFunc = true			-- set to true or false
-----------------------------------------------------------
timeNow = os.date("%H:%M")
dayName = os.date("%A")

------------- DO NOT CHANGE LINES BELOW -------------------
startSource = fibaro:getSourceTrigger();
sortedtbl = {}
tmptbl = {}
runOnce = true
alarmTime1 = fibaro:getGlobal("AlarmClockTime1")
alarmTime2 = fibaro:getGlobal("AlarmClockTime2")
alarmDay1 = fibaro:getGlobal("AlarmClockDays1")
alarmDay2 = fibaro:getGlobal("AlarmClockDays2")
blindUpLevel = fibaro:getGlobal("openBlinds")

alarmTimes = {alarmTime1, alarmTime2}
alarmDays = {alarmDay1, alarmDay2}

-- Give debug a fancy color
Debug = function ( color, message )
  fibaro:debug(string.format('<%s style="color:%s;">%s</%s>', "span", color, message, "span")); 
end

Debug( "orange", "WakeUpTime scene - LUA Scripting by Jonny Larsson/Optimiert für siio.de by boomx" );
Debug( "orange", "Version: "..version);
Debug( "lightgreen", "-- Setze Alarmzeit im Virtuellen Device --");
Debug( "lightgreen", "-- Setze slider wie weit die Rollläden geöffnet werden --");
if alarmDay1 ~= "Off" then 
  Debug( "grey", "Nächste Alarmzeit ist gesetzt "..alarmDay1..":"..alarmTime1)
end
if alarmDay2 ~= "Off" then 
  Debug( "grey", "Nächste Alarmzeit ist gesetzt "..alarmDay2..":"..alarmTime2)
end

function timerFunction()
timeNow = os.date("%H:%M") 
if alarmDay2 == "Off" then
   table.remove(alarmDays, 2)
   table.remove(alarmTimes, 2)
end
for i = 1,#alarmDays do
    	if timeNow == alarmDays[i] and alarmTimes[i] then
			sortTable()
      	end
end

setTimeout(timerFunction, 60*1000)
end

sortTable = function()
   for i = 1,#devices do
      lightItems = devices[i];
        if fibaro:getType(lightItems) == "com.fibaro.FGR221" or fibaro:getType(lightItems) == "com.fibaro.FGRM222" or fibaro:getType(lightItems) == "com.fibaro.rollerShutter" or fibaro:getType(lightItems) == "com.fibaro.FGWP101" then
            table.insert(sortedtbl,lightItems)
       elseif fibaro:getType(lightItems) == "com.fibaro.binarySwitch" then
          table.insert(sortedtbl,lightItems)
       elseif fibaro:getType(lightItems) == "com.fibaro.multilevelSwitch" then
          table.insert(sortedtbl,lightItems)
         end
   end
     turnLightOn()
end

-- TurnOn lights, functions
turnLightOn = function()
   for i = 1,#sortedtbl do
      lightItems = sortedtbl[i];
       if fibaro:getType(lightItems) == "com.fibaro.FGR221" or fibaro:getType(lightItems) == "com.fibaro.FGRM222" or fibaro:getType(lightItems) == "com.fibaro.rollerShutter" or fibaro:getType(lightItems) == "com.fibaro.FGWP101" then
      		fibaro:call(lightItems, "setValue", blindUpLevel)
         elseif fibaro:getType(lightItems) == "com.fibaro.binarySwitch" then
            fibaro:call(lightItems, "turnOn")
         elseif fibaro:getType(lightItems) == "com.fibaro.multilevelSwitch" then
         	table.insert(tmptbl,lightItems)
       end
    end
		if (DimdevicesFunc) then
   			for i = 1,#Dimdevices do
       			DimItems = Dimdevices[i];
       			fibaro:call(DimItems, "setValue", fixedValue);
    		end
		end
if (vDeviceFunc) then
   		fibaro:call(vDeviceID, "pressButton", vDeviceButton)
end
if tmptbl == nil then
if (debug) then
	Debug( "red",'Keine Dimmer in der Tabelle gefunden, führe nächste Funktion nicht aus')
end
else wakeUpFunc()end

end

-- Now its time to turnOn some lights
wakeUpFunc = function()
if (debug) then
	Debug( "green",'Starte sanftes wakeup-light')
end
for i = 1,#tmptbl do
    lightItems = tmptbl[i];
    fibaro:call(lightItems, "setValue", "0");
    fibaro:sleep(200);
    addValue = _maxValue / tonumber(_duration);
    local currentValueLights = tonumber(fibaro:getValue(lightItems, "value"));
    local newValue = currentValueLights + addValue;
end
fibaro:sleep(1000);
  
  for variable = 0, _maxValue - 1, addValue do
  		local currentValueLights = tonumber(fibaro:getValue(lightItems, "value"));
  		if (variable ~= 0 and currentValueLights == 0 ) then
    		if (debug) then
     			Debug( "blue","Timer gestoppt, Lampen werden ausgeschaltet.");
    		end
    		break;
  		end
  		local newValue = currentValueLights + addValue;
  		if (debug) then
  			Debug( "yellow",'Erhöhe die Helligkeit auf ' ..  newValue) 
  		end
    	for i = 1,#tmptbl do
    	lightItems = tmptbl[i];
  			fibaro:call(lightItems, "setValue", newValue);
      	end
    	fibaro:sleep(60*1000);
  end
end

insert2Table = function()
if runOnce then
sortedtbl = {}
  for i = 1, 500 do
    if ("com.fibaro.FGR221" == fibaro:getType(i) or "com.fibaro.FGRM222" == fibaro:getType(i) or "com.fibaro.rollerShutter" == fibaro:getType(i) or "com.fibaro.multilevelSwitch" == fibaro:getType(i) or "com.fibaro.multilevelSwitch" == fibaro:getType(i) or "com.fibaro.binarySwitch" == fibaro:getType(i) or "com.fibaro.FGWP101" == fibaro:getType(i)) then
      	table.insert(sortedtbl,i)
    end
  end
end
  Debug( "grey","Alle gefundenen Lampen werden in der Tabelle dargestellt, füge diese bei devices in den 'User Settings' hinzu")
  Debug( "grey",json.encode(sortedtbl))
  runOnce = false
end

------------------ START OF SCENE ----------------------
if ( startSource["type"] == "autostart" ) or ( startSource["type"] == "global" ) then
	if helper then
		insert2Table()
	end
  	if alarmDay1 ~= "Off" or alarmDay2 ~= "Off" then
		timerFunction()
    else Debug( "blue","Szene ist nicht aktiv, solange keine Alarmzeit im Virtuellen device gesetzt ist.")
    end
else
  	local wecker = tonumber(fibaro:getValue(weckerID, 'value'))
  	Debug( "green","Hardwarewecker ausgelöst. Prüfe Value.")
  	if (wecker==0) then
  		Debug( "green","Hardwarewecker ausgelöst. Starte Weckvorgang.")
		sortTable()
    end
end

Hallo Crissxcross,
vielen Dank für deine tollen Codes. Ich habe allerdings ein Problem mit dem VD. Ich habe einfach deine autom. installationsdatei importiert. Das neue VD funktioniert bei mir allerdings nicht. Liegt es daran, dass ich meine eigenen Werte des Homecenters bei der Zeile:
local HC2 = Net.FHttp(“192.168.178.38”, 11111);
eingeben muss? Oder was ist damit gemeint? Was ist 11111?
Keine Ahnung aber das VD funktioniert bei mir nicht! Wenn ich irgendwas klicke, z.b. Die Weckzeiten um Stunden / Minuten ändern, passiert nichts!

Hi,

ja, die IP musst du anpassen :wink: 11111 ist der Port, den unverändert lassen.

Gruß

Was ganz genau bewirkt eigentlich die Hardware Wecker Funktion? Wenn ich den Kontakt betätige geht der Wecker sofort los. Sinnvoller wäre doch, dass der voreingestellte Wecker auch nur dann funktioniert wenn der Hardwareweckerkontakt betätigt wurde. So müsste man nicht immer wieder den Wecker neu ein oder ausschalten.
Bei mir funktioniert der Hardwarewecker so: Wenn der Kontakt offen ist, dann bleibt das Programm einfach stecken. Sobald der Kontakt geschlossen ist, fängt der Dimmer sofort an und beendet sich auch selbst nach wenigen Minuten. Na ja irgendwie funktioniert das alles nicht, was mache ich falsch?
Hier mein Code:
–[[
%% autostart
%% properties
74 value
%% globals
AlarmClockStatus
AlarmClockDays1
AlarmClockDays2
AlarmClockTime1
AlarmClockTime2
–]]

–[[

INSTRUCTIONS
*

  • add those devices you want to use in this script to “devices”

  • set dimmer device to a “_maxValue”

  • set “_duration” to a value in minutes for how long the dim function should be active

  • to activate debug, helper and versionCheck set the value to true or false

  • helper is to show all “lights” in your system.

  • debug is debug :slight_smile:

  • versionCheck checks if script is updated. Click on “Get it”

–]]

– SCENE SCENARIO
– Advanced wakeup scene to turnOn lights at specified time, time you set in
– alarm clock virtual device
– Set value for how much the blinds should open with the slider in VD.

– REFERENCE
forum.fibaro.com, lua.org, domotique-fibaro.fr, www.gronahus.se
– Thanks to robmac, stevenvd for good LUA functions code.

– 2015-11-01 ver 2.0.0 new version of scene and virtual device. Supports 2 alarm.
– 2015-11-02 ver 2.0.1 list all lights in scene. Add those you want to use in ‘User Settings’ section
– 2015-11-27 ver 2.1.1 adjustment of debug lines and added variable to %% globals

version = “{2.1.1}”

-------------------- USER SETTINGS -----------------------
devices = {55} – Lights, dimmers and blinds
_maxValue = 70 – When dimmer reach this value it will stop there
_duration = 20 – Time in minutes for how long wakeUp should be active
debug = true – set debug to true or false
helper = false – loop through all devices and search for lights/dimmers/binarySwitch etc

– HARDWARE-WECKER (IM HEADER EINFÜGEN)
local weckerID = 74

– EXTRA FUNCTIONS, OPTIONS
– Start Radio
vDeviceID = 393 – Id of VD
vDeviceButton = 7 – Play
vDeviceFunc = false – set to true to activate Sonos/Internet Radio

– Dimmers to set to fixed value when alarmWakeup
Dimdevices = {343} – Dimmers to set to fixed value
fixedValue = 50 – Dimmer value
DimdevicesFunc = false – set to true or false

–TimeOfDay variable –
varTOD = “TimeOfDay” – TOD translate
varTODMorning = “Morgon” – TOD Morning translate
varState = “SleepState” – TOD translate
varStateMorning = “Vaken” – TOD Morning translate
variableFunc = true – set to true or false

timeNow = os.date("%H:%M")
dayName = os.date("%A")

------------- DO NOT CHANGE LINES BELOW -------------------
startSource = fibaro:getSourceTrigger();
sortedtbl = {}
tmptbl = {}
runOnce = true
alarmTime1 = fibaro:getGlobal(“AlarmClockTime1”)
alarmTime2 = fibaro:getGlobal(“AlarmClockTime2”)
alarmDay1 = fibaro:getGlobal(“AlarmClockDays1”)
alarmDay2 = fibaro:getGlobal(“AlarmClockDays2”)
blindUpLevel = fibaro:getGlobal(“openBlinds”)

alarmTimes = {alarmTime1, alarmTime2}
alarmDays = {alarmDay1, alarmDay2}

– Give debug a fancy color
Debug = function ( color, message )
fibaro:debug(string.format(’<%s style=“color:%s;”>%s</%s>’, “span”, color, message, “span”));
end

Debug( “orange”, “WakeUpTime scene - LUA Scripting by Jonny Larsson/Optimiert für siio.de by boomx” );
Debug( “orange”, "Version: "…version);
Debug( “lightgreen”, “-- Setze Alarmzeit im Virtuellen Device --”);
Debug( “lightgreen”, “-- Setze slider wie weit die Rollläden geöffnet werden --”);
if alarmDay1 ~= “Off” then
Debug( “grey”, “Nächste Alarmzeit ist gesetzt “…alarmDay1…”:”…alarmTime1)
end
if alarmDay2 ~= “Off” then
Debug( “grey”, “Nächste Alarmzeit ist gesetzt “…alarmDay2…”:”…alarmTime2)
end

function timerFunction()
timeNow = os.date("%H:%M")
if alarmDay2 == “Off” then
table.remove(alarmDays, 2)
table.remove(alarmTimes, 2)
end
for i = 1,#alarmDays do
if timeNow == alarmDays[i] and alarmTimes[i] then
sortTable()
end
end

setTimeout(timerFunction, 60*1000)
end

sortTable = function()
for i = 1,#devices do
lightItems = devices[i];
if fibaro:getType(lightItems) == “com.fibaro.FGR221” or fibaro:getType(lightItems) == “com.fibaro.FGRM222” or fibaro:getType(lightItems) == “com.fibaro.rollerShutter” or fibaro:getType(lightItems) == “com.fibaro.FGWP101” then
table.insert(sortedtbl,lightItems)
elseif fibaro:getType(lightItems) == “com.fibaro.binarySwitch” then
table.insert(sortedtbl,lightItems)
elseif fibaro:getType(lightItems) == “com.fibaro.multilevelSwitch” then
table.insert(sortedtbl,lightItems)
end
end
turnLightOn()
end

– TurnOn lights, functions
turnLightOn = function()
for i = 1,#sortedtbl do
lightItems = sortedtbl[i];
if fibaro:getType(lightItems) == “com.fibaro.FGR221” or fibaro:getType(lightItems) == “com.fibaro.FGRM222” or fibaro:getType(lightItems) == “com.fibaro.rollerShutter” or fibaro:getType(lightItems) == “com.fibaro.FGWP101” then
fibaro:call(lightItems, “setValue”, blindUpLevel)
elseif fibaro:getType(lightItems) == “com.fibaro.binarySwitch” then
fibaro:call(lightItems, “turnOn”)
elseif fibaro:getType(lightItems) == “com.fibaro.multilevelSwitch” then
table.insert(tmptbl,lightItems)
end
end
if (DimdevicesFunc) then
for i = 1,#Dimdevices do
DimItems = Dimdevices[i];
fibaro:call(DimItems, “setValue”, fixedValue);
end
end
if (vDeviceFunc) then
fibaro:call(vDeviceID, “pressButton”, vDeviceButton)
end
if tmptbl == nil then
if (debug) then
Debug( “red”,‘Keine Dimmer in der Tabelle gefunden, führe nächste Funktion nicht aus’)
end
else wakeUpFunc()end

end

– Now its time to turnOn some lights
wakeUpFunc = function()
if (debug) then
Debug( “green”,‘Starte sanftes wakeup-light’)
end
for i = 1,#tmptbl do
lightItems = tmptbl[i];
fibaro:call(lightItems, “setValue”, “0”);
fibaro:sleep(200);
addValue = _maxValue / tonumber(_duration);
local currentValueLights = tonumber(fibaro:getValue(lightItems, “value”));
local newValue = currentValueLights + addValue;
end
fibaro:sleep(1000);

for variable = 0, _maxValue - 1, addValue do
local currentValueLights = tonumber(fibaro:getValue(lightItems, “value”));
if (variable ~= 0 and currentValueLights == 0 ) then
if (debug) then
Debug( “blue”,“Timer gestoppt, Lampen werden ausgeschaltet.”);
end
break;
end
local newValue = currentValueLights + addValue;
if (debug) then
Debug( “yellow”,'Erhöhe die Helligkeit auf ’ … newValue)
end
for i = 1,#tmptbl do
lightItems = tmptbl[i];
fibaro:call(lightItems, “setValue”, newValue);
end
fibaro:sleep(60*1000);
end
end

insert2Table = function()
if runOnce then
sortedtbl = {}
for i = 1, 500 do
if (“com.fibaro.FGR221” == fibaro:getType(i) or “com.fibaro.FGRM222” == fibaro:getType(i) or “com.fibaro.rollerShutter” == fibaro:getType(i) or “com.fibaro.multilevelSwitch” == fibaro:getType(i) or “com.fibaro.multilevelSwitch” == fibaro:getType(i) or “com.fibaro.binarySwitch” == fibaro:getType(i) or “com.fibaro.FGWP101” == fibaro:getType(i)) then
table.insert(sortedtbl,i)
end
end
end
Debug( “grey”,“Alle gefundenen Lampen werden in der Tabelle dargestellt, füge diese bei devices in den ‘User Settings’ hinzu”)
Debug( “grey”,json.encode(sortedtbl))
runOnce = false
end

------------------ START OF SCENE ----------------------
if ( startSource[“type”] == “autostart” ) or ( startSource[“type”] == “global” ) then
if helper then
insert2Table()
end
if alarmDay1 ~= “Off” or alarmDay2 ~= “Off” then
timerFunction()
else Debug( “blue”,“Szene ist nicht aktiv, solange keine Alarmzeit im Virtuellen device gesetzt ist.”)
end
else
local wecker = tonumber(fibaro:getValue(weckerID, ‘value’))
Debug( “green”,“Hardwarewecker ausgelöst. Prüfe Value.”)
if (wecker==0) then
Debug( “green”,“Hardwarewecker ausgelöst. Starte Weckvorgang.”)
sortTable()
end
end

Habe ich irgendwas falsch übertragen?

hier der Debug des Weckers:
[DEBUG] 10:00:56: WakeUpTime scene - LUA Scripting by Jonny Larsson/Optimiert für siio.de by boomx
[DEBUG] 10:00:56: Version: {2.1.1}
[DEBUG] 10:00:56: – Setze Alarmzeit im Virtuellen Device –
[DEBUG] 10:00:56: – Setze slider wie weit die Rollläden geöffnet werden –
[DEBUG] 10:00:56: Nächste Alarmzeit ist gesetzt Weekdays:05:45
[DEBUG] 10:00:56: Nächste Alarmzeit ist gesetzt Weekdays:10:00
[DEBUG] 10:00:56: Hardwarewecker ausgelöst. Prüfe Value.
[DEBUG] 10:00:56: Hardwarewecker ausgelöst. Starte Weckvorgang.
[DEBUG] 10:00:56: Starte sanftes wakeup-light
[DEBUG] 10:00:57: Erhöhe die Helligkeit auf 3.5
[DEBUG] 10:01:57: Timer gestoppt, Lampen werden ausgeschaltet.

Noch ein paar Fragen:

  1. Fängt der Wecker um die Weckzeit an langsam hochzudimmen entsprechend der eingestellten Dimm_duration oder wird Weckzeit - Dimm_duration anfangen langsam zu dimmen um dann genau zur Weckzeit die volle Helligkeit zu erreichen?

  2. Muss ich im Regelbetrieb das Debuging ausschalten? Ich habe bemerkt dass der Debug nach einigen Stunden einfriert und nichts mehr macht! Generell, nach ca. 10 Stunden funktioniert der Wecker nicht mehr. Hat jemand anderes auch das gleiche Problem?

Guten Morgen,

habe die Szene gestern übernommen und noch eine Frage zu diesem Szenen-Block, weil ich die Variablen auch für das SmartLight einsetze:

TimeOfDay variable --
varTOD = "TimeOfDay"		-- TOD translate
varTODMorning = "Morgon"	-- TOD Morning translate
varState = "SleepState"		-- TOD translate
varStateMorning = "Vaken"	-- TOD Morning translate
variableFunc = true		-- set to true or false

Was macht dieser Block?

Da ich die Variablen nirgends gefunden habe, würde ich mal sagen, dass die noch nichts tun… Interessant wäre vielleicht das setzen der globalen Variablen nach dem Aufstehen! Dann müsste ich natürlich auf Konflikte mit der TimeOfDay-Szene aufpassen.

Hallo,

habe noch einen Fehler in Zeile 111 gefunden. Diese Aussage wird niemals war, da beim ersten Teil eine Urzeit mit einen Tag verglichen werden und nach dem UND der String niemals zu einer boolschen Variable wird, also auch nie “true” sein kann:
if timeNow == alarmDays[i] and alarmTimes[i] then

Ich habe das wie folgt korrigiert und nun tut das Skript auch, was es soll:
if dayName == alarmDays[i] and timeNow == alarmTimes[i] then

Grüße
Markus

Das wars noch nicht ganz: Noch 3 Fehler gefunden und gefixxt:

  1. alarmdays[1] kann ja auch “Weekdays” sein… Das matcht dann nie auf auf daName

Daher habe ich mir noch die nummer des Wochentages geholt mit:
dayOfTheWeek = tonumber(os.date ("%w"))
1-5 sind hier die Wochentage, was man dann auch abfragen kann in dem Check von oben
if ((alarmDays[i] == dayName or (alarmDays[i] == "Weekdays" and dayOfTheWeek > 0 and dayOfTheWeek < 6)) and timeNow == alarmTimes[i]) then

  1. Die Prüfung, ob man Dimmer hat, mit denen man Soft-Wecken kann, löst auch ohne Dimmer aus:
    if tmptbl == nil then
    korrekt ist meiner Meinung nach:
    if tmptbl[1] == nil then

  2. Die Szene wird getriggert durch Änderungen mit dem Virtuellen Modul. Danach läuft eine Dauerschleife los und checkt die Zeit für den Alarm. Ändert man den Wert dann wieder mit dem Modul werden wieder neue INstanzen der Szenen getrigger für jede Änderung alle aber mit unterschiedlichen Weckzeiten. Da meist nur maximal 2 Instanzen defaultmäßig zugelassen sind, kommt man so nicht bis zu Weckzeit, die man mit vielen Clicks einstellt. Meine Lösung: Man muss die Globalen variablen bei jedem Durchlauf neu Abfragen, um sicher zu sein, dass eine Aktualisierung auch klappt. Dann reicht auch eine Szene.

Vielleicht sind das nicht die besten Lösungen, aber funktionieren erstmal. Für Verbesserungsvorschläge bin ich natürlich dankbar :slight_smile:

Gruß
Markus

@Markus könntest Du mal so nett sein und das komplette korrigierte Script hier posten. Danke

Grüsse aus der Hauptstadt

Wolfgang

ja bitte unbedingt das gesamten Script posten. das ist ja genial das du das überhaupt rausgefunden hast. die meisten sind nur frustriert das es nicht klappt, können sich jedoch nicht selbst helfen

Ok, mache ich heute Nachmittag/Abend. Welche Version interessiert euch denn? Habe mittlerweile eine, die auch eine Phillips Hue über ein VM analog dimmbarer Modulezum Wecken hochdimmen kann. Oder brauch ihr so was nicht?

VM = Virtuelle Maschine, VD = Virtuelles Device. Schon ein kleiner Unterschied :wink:

Bei mir ist VM = virtuelles Modul (also Synonym zu VD) :stuck_out_tongue:

So hier die Version mit Hue Lampen.

WICHTIG: Die VD für die Hue müssen so benannt sein, dass am Ende Hue[x] steht, z.B. Hue1, Hue2 usw.

--[[
%% autostart
%% properties
%% globals
AlarmClockStatus
AlarmClockDays1
AlarmClockDays2
AlarmClockTime1
AlarmClockTime2

--]]

--[[ 

INSTRUCTIONS
* 
* add those devices you want to use in this script to "devices"
* set dimmer device to a "_maxValue"
* set "_duration" to a value in minutes for how long the dim function should be active
* to activate debug, helper and versionCheck set the value to true or false

* helper is to show all "lights" in your system. 
* debug is debug :)
* versionCheck checks if script is updated. Click on "Get it" 

--]]

-- SCENE SCENARIO
-- Advanced wakeup scene to turnOn lights at specified time, time you set in
-- alarm clock virtual device
-- Set value for how much the blinds should open with the slider in VD.

-- REFERENCE
-- forum.fibaro.com, lua.org, domotique-fibaro.fr, www.gronahus.se 
-- Thanks to robmac, stevenvd for good LUA functions code.

-- 2015-11-01 ver 2.0.0 new version of scene and virtual device. Supports 2 alarm.
-- 2015-11-02 ver 2.0.1 list all lights in scene. Add those you want to use in 'User Settings' section
-- 2015-11-27 ver 2.1.1 adjustment of debug lines and added variable to %% globals

version = "{2.1.1}"

-------------------- USER SETTINGS -----------------------
devices = {132,59,111,125}	-- Lights, dimmers, hue-VD and blinds
_maxValue = 100	 			-- When dimmer reach this value it will stop there
_duration = 10				-- Time in minutes for how long wakeUp should be active
debug = true				-- set debug to true or false
myDebug = false				-- set personal debug to true or false
helper = false				-- loop through all devices and search for lights/dimmers/binarySwitch etc
versionCheck = false		-- check if new version of script exist on server

-- EXTRA FUNCTIONS, OPTIONS
-- Start Sonos/Internet Radio
vDeviceID = 393 			-- Id of Sonos virtual device
vDeviceButton = 7 			-- Play
vDeviceFunc = false			-- set to true to activate Sonos/Internet Radio

-- Dimmers to set to fixed value when alarmWakeup
Dimdevices = {343}			-- Dimmers to set to fixed value
fixedValue = 50				-- Dimmer value
DimdevicesFunc = false		-- set to true or false

--TimeOfDay variable --
varTOD = "TimeOfDay"		-- TOD translate
varTODMorning = "Morning"	-- TOD Morning translate
varNOv = "nightOverride"	-- TOD Status Night Override
varState = "SleepState"		-- TOD translate
varStateMorning = "Awake"	-- TOD Morning translate
variableFunc = true			-- set to true or false
-----------------------------------------------------------
local timeNow = os.date("%H:%M")
local dayName = os.date("%A")
local dayOfTheWeek = tonumber(os.date ("%w"))
-----------------------------------------------------------
if fibaro:countScenes() > 1 then
  --fibaro:debug("stop scene");
  fibaro:abort();
end
------------- DO NOT CHANGE LINES BELOW -------------------
startSource = fibaro:getSourceTrigger();
sortedtbl = {}
tmptbl = {}
runOnce = true

local alarmTime1 = fibaro:getGlobal("AlarmClockTime1")
local alarmTime2 = fibaro:getGlobal("AlarmClockTime2")
local alarmDay1 = fibaro:getGlobal("AlarmClockDays1")
local alarmDay2 = fibaro:getGlobal("AlarmClockDays2")
local blindUpLevel = fibaro:getGlobal("openBlinds")

local alarmTimes = {alarmTime1, alarmTime2}
local alarmDays = {alarmDay1, alarmDay2}

-- Give debug a fancy color
Debug = function ( color, message )
  fibaro:debug(string.format('<%s style="color:%s;">%s</%s>', "span", color, message, "span")); 
end

Debug( "orange", "WakeUpTime scene - LUA Scripting by Jonny Larsson 2015" );
Debug( "orange", "Version: "..version);
Debug( "lightgreen", "-- Set alarmtime in virtual device --");
Debug( "lightgreen", "-- Set slider to how much blinds should open --");
if alarmDay1 ~= "Off" then 
  Debug( "grey", "Next alarm time is set to next "..alarmDay1..":"..alarmTime1)
end
if alarmDay2 ~= "Off" then 
  Debug( "grey", "Next alarm time is set to next "..alarmDay2..":"..alarmTime2)
end

function getWakeUpSetting() -- for updating changes in setting without ne Scene instance
alarmStatus = fibaro:getGlobal("AlarmClockStatus")
alarmTime1 = fibaro:getGlobal("AlarmClockTime1")
alarmTime2 = fibaro:getGlobal("AlarmClockTime2")
alarmDay1 = fibaro:getGlobal("AlarmClockDays1")
alarmDay2 = fibaro:getGlobal("AlarmClockDays2")
blindUpLevel = fibaro:getGlobal("openBlinds")

alarmTimes = {alarmTime1, alarmTime2}
alarmDays = {alarmDay1, alarmDay2}
end

function timerFunction()
getWakeUpSetting() -- update Settings anyway!
timeNow = os.date("%H:%M")
dayName = os.date("%A")
dayOfTheWeek = tonumber(os.date ("%w"))  

-- Check if alarmDay2 is in use, else remove it from tables
if alarmDay2 == "Off" then
   table.remove(alarmDays, 2)
   table.remove(alarmTimes, 2)
end
if alarmStatus == "Off" then
    Debug("red", "Both timers are turned off. Aborting Scene")
    fibaro:abort()    
end
for i = 1,#alarmDays do
    	-- Check if day and time is same as alarmDays and alarmTimes
    	if (myDebug) then
			Debug("grey", "timeNow ist " ..timeNow)
      		Debug("grey", "alarmTimes["..i.."] ist " ..alarmTimes[i])
      		Debug("grey", "dayName ist " ..dayName)
      		Debug("grey", "alarmDays["..i.."] ist " ..alarmDays[i])
      		Debug("grey", "dayOfTheWeek ist " ..dayOfTheWeek)
      		if ((alarmDays[i] == dayName
            		or (alarmDays[i] == "Weekdays" and dayOfTheWeek > 0 and dayOfTheWeek < 6))
          			and timeNow == alarmTimes[i]) then
        				check = "true"
      				else
        				check = "false"
        	end
      		Debug("grey", "Checkt sagt " ..check) 
		end
    	if ((alarmDays[i] == dayName or (alarmDays[i] == "Weekdays" and dayOfTheWeek > 0 and dayOfTheWeek < 6)) and timeNow == alarmTimes[i]) then
      		-- Sort table of devices
			sortTable()
    	--else 
    		--if (debug) then
    			--Debug( "grey", "Next alarmTime is set to next "..alarmDays[i]..":"..alarmTimes[i]);
    		--end
      	end
end

setTimeout(timerFunction, 60*1000)
end

sortTable = function()
   for i = 1,#devices do
      lightItems = devices[i];
        if fibaro:getType(lightItems) == "com.fibaro.FGR221" or fibaro:getType(lightItems) == "com.fibaro.FGRM222" or fibaro:getType(lightItems) == "com.fibaro.rollerShutter" or fibaro:getType(lightItems) == "com.fibaro.FGWP101" then
            table.insert(sortedtbl,lightItems)
       elseif fibaro:getType(lightItems) == "com.fibaro.binarySwitch" then
          table.insert(sortedtbl,lightItems)
       elseif fibaro:getType(lightItems) == "com.fibaro.multilevelSwitch" then
          table.insert(sortedtbl,lightItems)
	   elseif fibaro:getType(lightItems) == "virtual_device" then
          table.insert(sortedtbl,lightItems)
         end
   end
     turnLightOn()
end

-- TurnOn lights, functions
turnLightOn = function()
   for i = 1,#sortedtbl do
      lightItems = sortedtbl[i];
       if fibaro:getType(lightItems) == "com.fibaro.FGR221" or fibaro:getType(lightItems) == "com.fibaro.FGRM222" or fibaro:getType(lightItems) == "com.fibaro.rollerShutter" or fibaro:getType(lightItems) == "com.fibaro.FGWP101" then
      		fibaro:call(lightItems, "setValue", blindUpLevel)
         elseif fibaro:getType(lightItems) == "com.fibaro.binarySwitch" then
            fibaro:call(lightItems, "turnOn")
         elseif (fibaro:getType(lightItems) == "com.fibaro.multilevelSwitch" or fibaro:getType(lightItems) == "virtual_device") then
         	table.insert(tmptbl,lightItems)
       end
    end
		if (DimdevicesFunc) then
   			for i = 1,#Dimdevices do
       			DimItems = Dimdevices[i];
				if fibaro:getType(DimItems) == "virtual_device" then
					fibaro:call(DimItems, "setSlider", "1", fixedValue)
				else
					fibaro:call(DimItems, "setValue", fixedValue);
				end
    		end
		end
	if (vDeviceFunc) then
   		fibaro:call(vDeviceID, "pressButton", vDeviceButton)
	end
    if tmptbl[1] == nil then
        if (debug) then
            Debug( "red",'No dimmers in table, will not run next function')
        end
    else wakeUpFunc()
  	end
  	if variableFunc == true then
    	Debug( "Green", "Overriding "..varTOD.." to "..varTODMorning)
      	fibaro:setGlobal(varTOD, varTODMorning)
    	fibaro:setGlobal(varNOv, "1")
        Debug( "Green", "Setting "..varState.." to "..varStateMorning)
      	fibaro:setGlobal(varState, varStateMorning)
    end
end

-- Now its time to turnOn some lights
wakeUpFunc = function()
if (debug) then
	Debug( "green",'Start soft wakeup light')
end
for i = 1,#tmptbl do
    lightItems = tmptbl[i];
	if fibaro:getType(lightItems) == "virtual_device" then 
		fibaro:call(lightItems, "setSlider", "1", "0")
	else
		fibaro:call(lightItems, "setValue", "0");
	end
	fibaro:sleep(200);
	addValue = _maxValue / tonumber(_duration);
    local currentValueLights = 0
	if fibaro:getType(lightItems) == "virtual_device" then
		currentValueLights = tonumber(fibaro:getValue(lightItems, "ui.sldBrightness.value"));
	else
		currentValueLights = tonumber(fibaro:getValue(lightItems, "value"));
	end
    local newValue = currentValueLights + addValue;
end
fibaro:sleep(1000);
  
for variable = 0, _maxValue - 1, addValue do
  		if fibaro:getType(lightItems) == "virtual_device" then
			currentValueLights = tonumber(fibaro:getValue(lightItems, "ui.sldBrightness.value"));
		else
			currentValueLights = tonumber(fibaro:getValue(lightItems, "value"));
		end
  		if (variable ~= 0 and currentValueLights == 0 ) then
    		if (debug) then
     			Debug( "blue","timer stop, lights turned off");
    		end
    		break;
  		end
  		local newValue = currentValueLights + addValue;
  		if (debug) then
  			Debug( "yellow",'Increase value to ' ..  newValue) 
  		end
  		--Increases the value of the lamp
    	for i = 1,#tmptbl do
    	lightItems = tmptbl[i];
			if fibaro:getType(lightItems) == "virtual_device" then
					fibaro:call(lightItems, "setSlider", "1", newValue)
			else
				fibaro:call(lightItems, "setValue", newValue);
			end  			
      	end
  		--Waits before the next step
    	fibaro:sleep(60*1000);
	end
end

insert2Table = function()
if runOnce then
sortedtbl = {}
  for i = 1, 500 do
    if ("com.fibaro.FGR221" == fibaro:getType(i) or "com.fibaro.FGRM222" == fibaro:getType(i) or "com.fibaro.rollerShutter" == fibaro:getType(i) or "com.fibaro.multilevelSwitch" == fibaro:getType(i) or "com.fibaro.multilevelSwitch" == fibaro:getType(i) or "com.fibaro.binarySwitch" == fibaro:getType(i) or "com.fibaro.FGWP101" == fibaro:getType(i)) then
		table.insert(sortedtbl,i)
    end	
	devName = fibaro:getName(i);
	devNameLen = string.len(devName);
	devNameSub = string.sub(devName, devNameLen -3, devNameLen -1)
	if ("virtual_device" == fibaro:getType(i) and "Hue" == devNameSub ) then
		table.insert(sortedtbl,i)
    end
  end
end
  Debug( "grey","All your lights will be listed in a table below, add them in devices in 'User Settings' section")
  Debug( "grey",json.encode(sortedtbl))
  runOnce = false
end

------ CHECK SCRIPT VERSION ON SERVER ------
function versionChecker()
local function getMethod(requestUrl, successCallback, errorCallback)
local http = net.HTTPClient()
  http:request(requestUrl, {
      options = {
        method = 'GET',
        headers = {
        },
      },
      success = successCallback,
      error = errorCallback
  })
end
content = "ACWUT.lua"
local url = 'http://jonnylarsson.se/JL/'..content

getMethod(url, function(resp)
	s = resp.data
    serverVersion = string.match(s, "{(.-)}");
    scriptVersion = string.match(version, "{(.-)}");
    if serverVersion > scriptVersion then
    	Debug("grey", "Checking script version...") 
    	Debug("yellow", "There is a new version out! "..'<a href="http://jonnylarsson.se/JL/ACWUT.lua" target="_blank" style="display:inline;color:Cyan">Get it!</a>')

    end
    end,
  	function(err)
    print('error' .. err)
end
)
end
---------------- SCRIPT CHECK END ---------------------

------------------ START OF SCENE ----------------------
if ( startSource["type"] == "autostart" ) or ( startSource["type"] == "global" ) then
	if helper then
		insert2Table()
	end
	if versionCheck then
		versionChecker()
	end
  	if alarmDay1 ~= "Off" or alarmDay2 ~= "Off" then
		timerFunction()    	
    else Debug( "blue","Scene is not active until you set alarmclock time and day in virtual device")
    end
end

Vielen Dank Markus, dann werde ich das nachher gleich mal ausprobieren.

Welches Sonos VD benutzt Du dabei oder ist das egal solange ich die Parameter nur anpasse ( bei mir ist Play 6!)

Ferner würde mich noch interessieren, ob bei Dir der Virtuelle Wecker auch so träge beim einstellen reagiert???

Wenn ich also auf + Hr gehe vergehen bestimmt ein paar Sekunden, bis die Zeit verändert wird.

Ich bin einfach nicht in der Lage das Teil irgendwie zum laufen zu bekommen. Egal was ich auch einstelle und mache es funktioniert einfach nicht.
Jetzt wirft er mir folgenden Fehler aus:

line 285: bad argument #1 to len (string expected, got nil)

Bei Devices soll ich doch meine Lampen ID´s einsetzen. Geht das auch mit meinen Zipato Lampen??? ID 107 und 109
Der SonosPlayer (http://www.fibarouk.co.uk/resources/VirtualDevices/SonosHCL-1.0.zip) der dafür zu nehmen ist geht auch nicht. ID 215 für das VD von Sonos.
Wenn ich Ihn so benutze geht er über das Script wird er nicht angesprochen.

devices = {109} – Lights, dimmers, hue-VD and blinds
_maxValue = 100 – When dimmer reach this value it will stop there
_duration = 10 – Time in minutes for how long wakeUp should be active
debug = true – set debug to true or false
myDebug = true – set personal debug to true or false
helper = true – loop through all devices and search for lights/dimmers/binarySwitch etc
versionCheck = false – check if new version of script exist on server

– EXTRA FUNCTIONS, OPTIONS
– Start Sonos/Internet Radio
vDeviceID = 215 – Id of Sonos virtual device
vDeviceButton = 7 – Play
vDeviceFunc = false – (default false )set to true to activate Sonos/Internet Radio

– Dimmers to set to fixed value when alarmWakeup
Dimdevices = {107} – Dimmers to set to fixed value
fixedValue = 100 – Dimmer value
DimdevicesFunc = false – set to true or false

Und danach ist doch eigentlich nichts mehr einzustellen. Also woran kann es dann nur liegen dass das Script nicht läuft???

Ich habe jetzt noch im Code das gefunden:

sortTable = function()
for i = 1,#devices do
lightItems = devices[i];
if fibaro:getType(lightItems) == “com.fibaro.FGR221” or fibaro:getType(lightItems) == “com.fibaro.FGRM222” or fibaro:getType(lightItems) == “com.fibaro.rollerShutter” or fibaro:getType(lightItems) == “com.fibaro.FGWP101” then
table.insert(sortedtbl,lightItems)
elseif fibaro:getType(lightItems) == “com.fibaro.binarySwitch” then
table.insert(sortedtbl,lightItems)
elseif fibaro:getType(lightItems) == “com.fibaro.multilevelSwitch” then
table.insert(sortedtbl,lightItems)
elseif fibaro:getType(lightItems) == “virtual_device” then
table.insert(sortedtbl,lightItems)
end

Wenn ich das richtig verstehe werden nur fibaro Dimmer 221 und 222 unterstützt. Das würde zumindest erklären warum die Lampen nicht angehen…
Wie müsste ich das Script ändern, damit die Zipato LED´s angesprochen werden???

Das erklärt aber noch nicht warum das VD von Sonos nicht läuft. Oder bricht das Sript ab, wenn es die Devices die hier aufgeführt werden nicht findet???

Also erstmal zu den 1. Fragen:
Meine Sonos ID ist ein Fake. Habe zwar Sonos, aber nicht im Schlafzimmer und es deshalb noch nicht ausprobiert. Kommt aber noch :slight_smile:

Ja, das VD reagiert langsam. Ist aber so programmiert. In Zeile 79 in der Hauptschleife gibt es einen Sleep-Befehl. Da kannst du die Aktualisierungsfreqenz bestimmen. Ich habe 5*1000 für 5 Sekunden. Das geht einigermaßen.

Bei den Zipato-Lampen gehe ich davon aus, dass die einen anderen Type haben. Ruf mal http://[DeineHC2IP]:11111/api/devices auf, suche nach 109 und schau was da als Type steht.

Gruß
Markus

Du bist ja auch noch wach. Danke erst einmal aber ich bin langsam am verzweifeln. Bestimmt schon wieder 3 Stunden nur mit diesem Script und komme einfach nicht weiter. Bist Du auch auf Facebook??? im Forum. Vielleicht können wir gelegentlich ja auch mal kurz telefonieren. Evtl. kriege ich es dann mit Deiner Hilfe hin.

Wolfgang