|
<< Click to Display Table of Contents >> Navigation: Komponenten > Steuerung, Logik & Zeit > Script IDE (LUA / Python) > LUA Beispiel |
Beispiel:
Wenn man an der MinMaxDurchschnitt-Komponente z.B. die An-Zeiten (z.B. wie lange war das Licht an o.ä.) loggen möchte, kann die LUA-Komponente vorgeschaltet werden, die die An-Zeiten ermittelt und einmal täglich dann an die MinMaxDurchschnitt-Komponente weiter leitet.
Kanäle:
Name |
Bedeutung |
Richtung |
Anzahl Elemente |
Ausgang nur bei Wertänderung schreiben |
Als Trigger verwenden |
DiffSinceLastTrigger |
Zwischenspeicher |
Ausgang |
1 |
ja |
|
Input |
Das binäre Signal, dessen "Aktiv-Zeit" gezählt werden soll |
Eingang |
1 |
|
ja |
LastDay |
Zwischenspeicher |
Ausgang |
1 |
ja |
|
LastTimestamp |
Zwischenspeicher |
Ausgang |
1 |
ja |
|
OnTimeOutSeconds |
aktuelle An-Zeit (bei jedem Trigger geupdated) |
Ausgang |
1 |
ja |
|
OnTimeOutSecondsDay |
Tages-An-Zeit (wird nur bei Tageswechsel getriggert - diese muss an den Eingang der MinMaxDurchschnitt Komponente) |
Ausgang |
1 |
ja |
|
UpdateTrigger |
zusätzlicher Trigger (z.B. sekündlich), um die aktuelle An-Zeit auszugeben und den Tageswechsel festzustellen (Kann auch seltener kommen - sollte aber auf jeden Fall zum Tageswechsel einmal triggern, damit der Tageswechsel bemerkt und die An-Zeit auf den Ausgang ausgegeben werden kann) |
Eingang |
1 |
|
ja |
WasActive |
Zwischenspeicher |
Ausgang |
1 |
ja |
|
LUA-Code:
function ScriptFunc()
isActive = Input
currentTimestamp = os.time()
currentDay = os.date("%M") -- %M for minute (test purposes) %d = Day
if LastDay == nil then LastDay = currentDay end
if OnTimeOutSeconds == nil then OnTimeOutSeconds = 0 end
-- add seconds since last timestamp if the input was on since last trigger
if WasActive == true then
if(LastTimestamp ~= nil) then
DiffSinceLastTrigger = tonumber(currentTimestamp - LastTimestamp)
OnTimeOutSeconds = tonumber(OnTimeOutSeconds + DiffSinceLastTrigger)
end
end
-- if is active - save timestamp for difference calculation on next trigger
if isActive == true then
LastTimestamp = currentTimestamp
end
-- day changed - trigger on day for last day and reset counter
if LastDay ~= currentDay then
OnTimeOutSecondsDay = tonumber(OnTimeOutSeconds)
OnTimeOutSeconds = 0
end
LastDay = currentDay
WasActive = isActive
end