Lampen Kontrollieren und ausschalten

Hallo,
ich möchte abends meine ganzen Lampen kontrollieren lassen und mir ein Nachricht schicken lassen, wenn noch eine an ist.
Es Funktioniert auch alles ganz gut, ausser die Kontrollabfrage. Ich denke ich habe die klammern falsch gesetzt, find aber den Fehler nicht.
Wenn ihr es noch zusätzlich schafft die ganzen Lampen in eine lokaleVariable zu verpacken und oben zu benennen, wäre das noch schöner… :slight_smile:
Danke schonmal

`–[[
%% properties
%% autostart
%% events
%% globals
–]]

local sourceTrigger = fibaro:getSourceTrigger();
function varTime()

-------------------Push Nachricht----------------------------------------
local Handychristoph = tonumber(fibaro:getGlobalValue(“HandyIDChris”))
local HandyNici = tonumber(fibaro:getGlobalValue(“HandyIDNici”))
local IpadNici = tonumber(fibaro:getGlobalValue(“IpadNici”))

local phoneID = {HandyNici, – Nici
Handychristoph, – Christoph
IpadNici } – Nici Ipad
local title = ‘Abendkontrolle! …Es ist noch Licht an!’
local message = ‘Sollen ALLE Lampen ausgeschaltet werden?’
local category = ‘YES_NO’ – or ‘YES_NO’ or RUN_CANCEL
local sceneID = 32

local night = {22,35}; – HH:MM für Lichter Aus in der Nacht
local midnight = {4, 59}; – HH:MM für Lichter Aus in der Nacht
local night = os.date("%H:%M", -3600+ night[1]6060 + night[2]*60);
local midnight = os.date("%H:%M", -3600+ midnight[1]6060 + midnight[2]*60);
local ostime = os.date("%H:%M", os.time());
local heute = os.date("%d.%m.%Y")

if fibaro:countScenes() > 1 then
fibaro:debug(“stop scene”);
fibaro:abort();
end

fibaro:debug(‘Starte Abendkontrolle’)

if ostime > night and ostime < midnight
and tonumber(fibaro:getValue(175,“value”)) > 0
or (tonumber(fibaro:getValue( 89,“value”)) > 0
or tonumber(fibaro:getValue( 94,“value”)) > 0
or tonumber(fibaro:getValue(102,“value”)) > 0
or tonumber(fibaro:getValue(108,“value”)) > 0
or tonumber(fibaro:getValue(175,“value”)) > 0
or tonumber(fibaro:getValue(34,“value”)) > 0
or tonumber(fibaro:getValue(95,“value”)) > 0)

then
for i=1, #phoneID do
if phoneID[i] ~= nil then
fibaro:debug(‘Versende Interactive Push an ID ’ …phoneID[i])
api.post(’/mobile/push’, {[“mobileDevices”]={phoneID[i]}, [“message”]=message, [“title”]=title, [“category”]=category, [“data”]={[“sceneId”]=sceneID}});
end
end

else
fibaro:debug(“no Action”)
end

setTimeout(varTime, 30601000)
end

if (sourceTrigger[“type”] == “autostart”)
then varTime()

end

Hallo Christoph,

das ist eine sehr unübersichtliche Szene.

Schaue Dir mal die folgende Prüfung an und überlege Dir, wann diese zutreffen kann.

Im Einzelnen:

  • Wenn aktuelle Zeit größer night und kleiner midnight UND Value von 175 > 0
  • ODER
  • Value von 89 oder 94 oder ... usw größer 0
Die Szene wird also entweder zwischen night und midnight ausgeführt, oder wenn eines der Geräte eingeschaltet ist.

Einfacher wäre es, Dir eine Kontrollvariable zu erstellen die Du dann prüfst. In etwa so:

testVar = tonumber(fibaro:getValue( 89,‘value’)) + tonumber(fibaro:getValue( 94,‘value’)) + tonumber(fibaro:getValue( 95,‘value’))
Ist eine dieser Lampen eingeschaltet, so ist testVar > 0.

Und dann brauchst Du einr zweistufige If-Abfrage in der Du erst die Zeit prüfst und dann die Kontrollvariable:

if (ostime > night and ostime < midnight and tonumber(fibaro:getValue(175,'value')) > 0) then
	if (testVar > 0) then
	
		...
	
	end
end

BG Rene