LUA Beispiel

<< 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