Aussenbeleuchtung

Hallo Hier meine Aussenbeleuchtungssteuerung.

Tastendruck 1 = 5 min Licht
Tastendruck 2 = Dauerlicht
Tastendruck 3 = Aus

BWM stellt automatisch die jeweiligen Lampen auf 5 min Licht
Der Timer ist ein Nachtriggerbaren-Monoflop (Sorry Timer fängt immer wieder bei Trigger von vorne an).

--Declaration
{
  conditions = { {
      isTrigger = true,
      operator = "match",
      property = "cron",
      type = "date",
      value = { "*", "*", "*", "*", "*", "*" }
    }, {
      id = 830,
      isTrigger = true,
      operator = "==",
      property = "value",
      type = "device",
      value = true
    }, {
      id = 831,
      isTrigger = true,
      operator = "==",
      property = "value",
      type = "device",
      value = true
    }, {
      id = 835,
      isTrigger = true,
      operator = "==",
      property = "value",
      type = "device",
      value = true
    }, {
      id = 836,
      isTrigger = true,
      operator = "==",
      property = "value",
      type = "device",
      value = true
    }, {
      id = 840,
      isTrigger = true,
      operator = "==",
      property = "value",
      type = "device",
      value = true
    }, {
      id = 841,
      isTrigger = true,
      operator = "==",
      property = "value",
      type = "device",
      value = true
    }, {
      id = 815,
      isTrigger = true,
      operator = "==",
      property = "value",
      type = "device",
      value = true
    } },
  operator = "any"
}

--Aktion
-print("Start Aussenlicht")
--[[
------------------------------------------------------------------------------------
---------------------------------- Aussenlichter ----------------------------------- 
--------------------------- Gesteuert von Tastendrücken ---------------------------- 
------------------------------------------------------------------------------------

Wenn die Aussenhelligkeit < 50Lx ist
Wenn es Tag oder Nacht ist

Tastendruch 1 = 5min Licht
Tastendruck 2 = Dauerlicht
Tastendruch 3 = Aus

BWM erzeugt das Gleiche wie der 2 Tastendruck (5min Licht)

Das String-Array speichert die Tastendaten und die Zeiten der Lampe
Z_EG_xxxxxxx = Anzahl der Tastendrücke
T_EG_xxxxxxx = Abgelaufene Zeit in Minuten
So eine Globale Variabel Anlegen
local zaehler_licht = 
    {
    Z_EG_Haustuer,
    T_EG_Haustuer,
    Z_EG_Garage,
    T_EG_Garage,
    Z_EG_Seite,
    T_EG_Seite,
    Z_KG_Seite,
    T_KG_Seite,
    Z_KG_Wohnzimmer,
    T_KG_Wohnzimmer,
    Z_KG_Eingang,
    T_KG_Eingang,
    }

Register der Eingangsmodule müßen folgendermassen gesetzt werden :
FGS-224
R20     = 1     First channel – momentary switch
R21     = 1     Second channel – momentary switch
R150    = 2     First channel – auto OFF
R151    = 2     Second channel – auto OFF
R154    = 0,5   First channel – time parameter for delayed/auto OFF and flashing modes
R155    = 0,5   Second channel – time parameter for delayed/auto OFF and flashing modes
Ohne das funktioniert die Scene nicht wegen der Signalverzögerung

--]]
------------------------------------------------------------------------------------
---------------------------------- Funktion Timer ---------------------------------- 
------------------------------ Aufruf Timer(Minuten) -------------------------------
------------------------------------------------------------------------------------
function Zeitzaehler(Zaehler)
    local zaehler = tonumber(Zaehler)
    if zaehler > 0 then
        zaehler = zaehler +1
    end
return tostring(zaehler)
end -- function Zeitzaehler
------------------------------------------------------------------------------------

------------------------------------------------------------------------------------
------------------------- Funktion Tastenlichtsteuerung ---------------------------- 
------------------------------------------------------------------------------------
function Tastenlicht(id_licht,Dimmer,Min_dimmwert,Zaehler,Timer)
    local zaehler = tonumber(Zaehler)             -- Tastendruckzähler
    local timer = tonumber(Timer)                 -- Lichttimer
    local dimmer = tonumber(Dimmer)               -- ist es ein Dimmer
    local min_dimmwert = tonumber(Min_dimmwert)   -- minimale Helligkeit im Dunkeln
    --print("id_licht = ", id_licht," rein zaehler = ",zaehler,"Timer = ",timer,"Tag = ",tag," Nacht = ",nacht," LUX = ",lux_messer)
    if zaehler >= 0 then
        if zaehler >= 4 then -- Dauerlicht aus
            --print("ID = ",id_licht," zaehler = 4 !")
            zaehler = 0
            timer   = 0
        end
        if zaehler == 3 then -- Dauerlicht
            --print("ID = ",id_licht," zaehler = 3 !")
            fibaro.call(id_licht, "turnOn") -- Licht an
            fibaro.call(id_licht, "setValue", 100) -- Wenn Dimmer dann 100%
        end
        if zaehler == 2 then -- warten auf Lichttimer Ende
            --print("ID = ",id_licht," zaehler = 2 !","Timer =",timer)
            if tonumber(fibaro.getValue(id_licht, "value")) <= 1 then
                fibaro.call(id_licht, "turnOn") -- Licht an
                if dimmer == 1 then
                    fibaro.call(id_licht, "setValue", 100) -- Wenn Dimmer dann 100%
                end
            end
            if timer == 3 then -- Licht kann aus 2 min sind um
                fibaro.call(id_licht, "turnOff") -- Licht aus
                if dimmer == 1 then
                    fibaro.call(id_licht, "setValue",  min_dimmwert) -- Wenn Dimmer dann min%
                end
                zaehler = 0
                timer   = 0
            end
        end
        if zaehler == 1 then -- Lichttimer start
            --print("ID = ",id_licht," zaehler = 1 !")
            if tonumber(fibaro.getValue(id_licht, "value")) <= 1 then
                fibaro.call(id_licht, "turnOn") -- Licht an
                if dimmer == 1 then
                    fibaro.call(id_licht, "setValue", 100) -- Wenn Dimmer dann 100%
                end
            end
            zaehler = 2
            timer   = 1
        end
        if zaehler == 0 then -- Lichttimer start
            --print("ID = ",id_licht," zaehler = 0 !")
        end
    end
    if lux_messer > 50 and zaehler >= 0 then -- bei 50 Lux
        fibaro.call(id_licht, "turnOff") -- Licht aus
        if dimmer == 1 then
            fibaro.call(id_licht, "setValue", 0) -- Wenn Dimmer dann 0%
        end
        zaehler = -1
        timer   = 0
    end
    if lux_messer < 50 and zaehler == -1 then
        if dimmer == 1 then
            fibaro.call(id_licht, "turnOn") -- Licht an
            fibaro.call(id_licht, "setValue", min_dimmwert) -- Wenn Dimmer min Helligkeit
        end
        zaehler = 0
        timer   = 0
    end
return tostring(zaehler),tostring(timer)
end -- function Tastenlicht
------------------------------------------------------------------------------------

------------------------------------------------------------------------------------
-------------------------------------- MAIN ---------------------------------------- 
------------------------------------------------------------------------------------

-- Geräte-ID´s 
-- Eingänge
local taster_EG_Haustuer      = 830
local taster_EG_Garage        = 835
local taster_KG_Wohnzimmer    = 840
local taster_KG_Eingang       = 815
local bwm_Strassenseite       = 831
local bwm_Seite               = 836
local bwm_Gartenzeite         = 841

local lux_Gartenhaus          = 765

-- Ausgänge
local licht_EG_Haustuer       = 850
local licht_EG_Garage         = 855
local licht_EG_Seite          = 860
local licht_KG_Seite          = 860
local licht_KG_Wohnzimmer     = 865
local licht_KG_Eingang        = 927


-- Globale nach Localen Variablen übertragen
tag = tonumber(fibaro.getGlobalVariable("Tag"))
--tag = 0
nacht = tonumber(fibaro.getGlobalVariable("Nacht"))
--nacht = 1
data = fibaro.getGlobalVariable("Zaehler_Licht")
zaehler_licht = json.decode(data)
lux_messer = tonumber(fibaro.getGlobalVariable("LUX_Messer"))
--lux_messer = 30

-- Anzeige was hat das Programm gestartet
--print("ID        = ", json.encode(sourceTrigger.id))
--print("propperty = ", json.encode(sourceTrigger.property))
--print("type      = ", json.encode(sourceTrigger.type))
--print("value     = ", json.encode(sourceTrigger.value))

if json.encode(sourceTrigger.property) == '"cron"' then
    --print("gestartet von cron")
    -- Alle Zeitzähler einen hochzählen
    zaehler_licht.T_EG_Haustuer = Zeitzaehler(zaehler_licht.T_EG_Haustuer)
    zaehler_licht.T_EG_Garage = Zeitzaehler(zaehler_licht.T_EG_Garage)
    zaehler_licht.T_EG_Seite = Zeitzaehler(zaehler_licht.T_EG_Seite)
    zaehler_licht.T_KG_Seite = Zeitzaehler(zaehler_licht.T_KG_Seite)
    zaehler_licht.T_KG_Wohnzimmer = Zeitzaehler(zaehler_licht.T_KG_Wohnzimmer)
    zaehler_licht.T_KG_Eingang = Zeitzaehler(zaehler_licht.T_KG_Eingang)
    ----------------------------
-- Ab Hier reaktion auf Taster oder BWM
elseif json.encode(sourceTrigger.id) == tostring(taster_EG_Haustuer) and nacht == 1 then
    zaehler_licht.Z_EG_Haustuer = tostring(zaehler_licht.Z_EG_Haustuer) + 1
elseif json.encode(sourceTrigger.id) == tostring(bwm_Strassenseite) and nacht == 1 then
    if zaehler_licht.Z_EG_Haustuer == "0" then
        zaehler_licht.Z_EG_Haustuer     = "2"   --Funktion Timer
        zaehler_licht.T_EG_Haustuer     = "1"   --Timer auf 1 damit es los geht
    end
    if zaehler_licht.Z_EG_Garage == "0"  then
        zaehler_licht.Z_EG_Garage       = "2"   --Funktion Timer
        zaehler_licht.T_EG_Garage       = "1"   --Timer auf 1 damit es los geht
    end
elseif json.encode(sourceTrigger.id) == tostring(taster_EG_Garage) and nacht == 1 then
    zaehler_licht.Z_EG_Garage = tostring(zaehler_licht.Z_EG_Garage) + 1
elseif json.encode(sourceTrigger.id) == tostring(bwm_Seite) and nacht == 1 then
    if zaehler_licht.Z_EG_Seite == "0" then
        zaehler_licht.Z_EG_Seite        = "2"   --Funktion Timer
        zaehler_licht.T_EG_Seite        = "1"   --Timer auf 1 damit es los geht
    end
    if zaehler_licht.Z_KG_Seite == "0" then
        zaehler_licht.Z_KG_Seite        = "2"   --Funktion Timer
        zaehler_licht.T_KG_Seite        = "1"   --Timer auf 1 damit es los geht
    end
elseif json.encode(sourceTrigger.id) == tostring(taster_KG_Wohnzimmer) and nacht == 1 then
    zaehler_licht.Z_KG_Wohnzimmer = tostring(zaehler_licht.Z_KG_Wohnzimmer) + 1
elseif json.encode(sourceTrigger.id) == tostring(taster_KG_Eingang) and nacht == 1 then
    zaehler_licht.Z_KG_Eingang = tostring(zaehler_licht.Z_KG_Eingang) + 1
elseif json.encode(sourceTrigger.id) == tostring(bwm_Gartenzeite) and nacht == 1 then
    if zaehler_licht.Z_KG_Wohnzimmer    == "0" then
        zaehler_licht.Z_KG_Wohnzimmer   = "2"   --Funktion Timer
        zaehler_licht.T_KG_Wohnzimmer   = "1"   --Timer auf 1 damit es los geht
    end
    if zaehler_licht.Z_KG_Eingang       == "0" then
        zaehler_licht.Z_KG_Eingang      = "2"   --Funktion Timer
        zaehler_licht.T_KG_Eingang      = "1"   --Timer auf 1 damit es los geht
    end
end

--Steuerung EG_Eingang Licht
----------------------------
zaehler_licht.Z_EG_Haustuer,zaehler_licht.T_EG_Haustuer = 
Tastenlicht(licht_EG_Haustuer,"1","1",zaehler_licht.Z_EG_Haustuer,zaehler_licht.T_EG_Haustuer)
--Steuerung EG_Garage Licht
----------------------------
zaehler_licht.Z_EG_Garage,zaehler_licht.T_EG_Garage = 
Tastenlicht(licht_EG_Garage,"1","0",zaehler_licht.Z_EG_Garage,zaehler_licht.T_EG_Garage)
--Steuerung EG_Seite & KG_Seite Licht
----------------------------
zaehler_licht.Z_EG_Seite,zaehler_licht.T_EG_Seite = 
Tastenlicht(licht_EG_Seite,"1","0",zaehler_licht.Z_EG_Seite,zaehler_licht.T_EG_Seite)
zaehler_licht.Z_KG_Seite,zaehler_licht.T_KG_Seite = 
Tastenlicht(licht_KG_Seite,"1","0",zaehler_licht.Z_KG_Seite,zaehler_licht.T_KG_Seite)
--Steuerung KG_Wohnzimmer Licht
----------------------------
zaehler_licht.Z_KG_Wohnzimmer,zaehler_licht.T_KG_Wohnzimmer = 
Tastenlicht(licht_KG_Wohnzimmer,"1","0",zaehler_licht.Z_KG_Wohnzimmer,zaehler_licht.T_KG_Wohnzimmer)
--Steuerung KG_Eingang Licht
----------------------------
zaehler_licht.Z_KG_Eingang,zaehler_licht.T_KG_Eingang = 
Tastenlicht(licht_KG_Eingang,"1","0",zaehler_licht.Z_KG_Eingang,zaehler_licht.T_KG_Eingang)
----------------------------

--Globale Variablen wieder zurückspielen
fibaro.setGlobalVariable("Zaehler_Licht", json.encode(zaehler_licht))

--print("Raus Aussenlicht")

Ist nichts besonderes aber gut zum lernen für Anfänger.
Grüße aus dem Sauerland
Frank