Blockszenen zusammen fassen

Hallo,

ich habe öfters das Problem das ich zwei Szenen erstellen muss weil ich Geräte mit dem Zustand ein oder aus schalten will.

Kurzes Beispiel:

Ich haben einen Beamer wo ich die momentane Leistung abfrage und danach die Leinwand hoch oder runter gefahren werden soll.

Quasi

 Wenn Beamer = W > 20 dann Leinwand per Rollershutter runter.

oder

 Wenn Beamer = W < 20 dann Leinwand hoch

Da ich aber in der Blockszene nach der " Dann" Funktion kein “oder” mehr hinzufügen kann muss ich notgedrungen zwei Szenen erstellen.

In LUA bin ich nicht so firm und weiß nicht wie man das umsetzen kann. Ich habe zwar schon versucht die Blockszene in Lua zu wandeln und die andere Szene per or hinzuzufügen aber ich komme zu keinem Ergebnis.

Was ist jetzt deine Frage? Mit Blockszenen geht es (wie du bereits gemerkt hast) nicht. Bleibt dir also nur LUA.

Gruß

nu ich weiß aber wir wäre der Ansatz wie kann ich beide Blockszenen kombinieren mit or geht es nicht.

Ich habe eine Variable Uhrzeit und möchte die Wert der Stunden schreiben z.B. 13.00 , 14.00 , 15.00

Um die Werte nun zu schreiben muss ich ja für jede Stunde eine Szene erstellen, das hätte ich gern zusammen gefasst.

--[[
%% autostart
%% properties
%% weather
%% events
%% globals
--]]

local sourceTrigger = fibaro:getSourceTrigger();
function tempFunc()
local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
if (
 ( ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "13:00") )
)
then
	fibaro:setGlobal("Uhrzeit", "13.00");
    
 
end

setTimeout(tempFunc, 60*1000)
end
if (sourceTrigger["type"] == "autostart") then
tempFunc()
else

local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
if (
startSource["type"] == "other"
)
then
	fibaro:setGlobal("Uhrzeit", "13.00");
    fibaro:debug('Uhrzeit auf 13.00Uhr gestellt')
    
end

end

Hi,

Da kommt dann zusätzlich in Zeile 18 ein “elseif”… 14 Uhr … then…

Viele Grüße Hoggle

Ja aber muss ich nicht zusätzlich die Zeit auch abfragen?

13.00UHr frage ich ja in Zeile 14 mit currentDate.min ab.

Wenn ich den Wert 14.00 setzen will muss ich ja die Zeit abfragen bevor ich den wert setze.

Ich würde es ja so machen :

if (
 ( ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "13:00") )
)
then
	fibaro:setGlobal("Uhrzeit", "13.00");
or (
 ( ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "14:00") )
)
then
	fibaro:setGlobal("Uhrzeit", "14.00");
    
 
end    
 
end

ab dass geht ja nicht

Genau, das geht nicht.
In Zeile 6 statt dem or das elseif - das ist deine Bedingung, wenn die erste nicht zutraf.

So richtig komme ich hier nicht weiter:

--[[
%% properties
%% events
%% globals
--]]

local sourceTrigger = fibaro:getSourceTrigger();
function tempFunc()
local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
if (
 ( ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "13:00") )
)
then
	fibaro:setGlobal("Uhrzeit", "13.00")
    fibaro:debug('Uhrzeit auf 13.00Uhr gestellt');
    
elseif (
 ( ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "14:00") )
)
then
	fibaro:setGlobal("Uhrzeit", "14.00")
    fibaro:debug('Uhrzeit auf 14.00Uhr gestellt');
 
end

	setTimeout(tempFunc, 60*1000)
end
	if (sourceTrigger["type"] == "autostart") then
	tempFunc()
else

local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
	if (
	startSource["type"] == "other"
)
then
	fibaro:setGlobal("Uhrzeit", "13.00");
end

end

in Zeile 39 will er den Wert auch setzen elseif funktioniert an der stelle nicht wenn ich eine weiter Zeile hinzufügen will

fibaro:setGlobal("Uhrzeit", "13.00");

Denn Debug den ich gesetzt habe gibt er mir auch nicht aus. :frowning:

So funktioniert der Code:

--[[
%% properties
%% events
%% globals
--]]

local sourceTrigger = fibaro:getSourceTrigger();
function tempFunc()
local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
if (
 ( ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "11:00") )
)
then
	fibaro:setGlobal("Uhrzeit", "11:00")
    
end

	setTimeout(tempFunc, 60*1000)
end
	if (sourceTrigger["type"] == "autostart") then
	tempFunc()
else

local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
	if (
	startSource["type"] == "other"
)
then
		fibaro:setGlobal("Uhrzeit", "11:00")
    	fibaro:debug('Uhrzeit auf 11:00 Uhr gestellt')
    
end

end

Jetzt möchte ich aber noch weiter Zeiten abfragen und die Wert entsprechend mit Debug setzen, das bekomme ich nicht wirklich hin.:frowning:

Schau dir mal folgendes Skript an (Blockszenen umwandeln ergibt meistens keinen sauberen Code, bzw. viel zu viel):

https://www.siio.de/lichtsteuerung-teil-2-fibaro-tageszeiten-variable-via-lua-setzen/