Skip to main content
Skip table of contents

Lua Script

Das Logikelement »Lua Script« bietet Ihnen die Möglichkeit in Lua verfasste Scripte im Kontext des LOGIKEDITOR zu verwenden.

Inhalt


Ein- und Ausgänge

Werte-Eingänge

Werte-Ausgänge

  • OUT 1-...

    Es sind maximal 20 Ausgänge möglich.


Konfiguration

image-20250713-183937.png

Eingänge

Geben Sie bis zu 20 Eingänge an, durch welche das Script gestartet und mit Daten versorgt werden kann. Für jeden Eingang können Sie wählen, was geschehen soll, wenn ein Wert eingeht.

  • Script nicht starten

  • Wenn Script aktiv, nicht starten

  • Wenn Script aktiv, sofort neu starten

  • Wenn Script aktiv, später starten

Wenn das Script gestartet werden soll, werden alle an den Eingängen anliegenden Werte ermittelt und für den Script-Start zur Verfügung gestellt. Wenn der Eingang so konfiguriert ist, dass das Script später neu starten soll, wird der Aufruf mit den zu diesem Zeitpunkt anliegenden Werten vorbereitet und dann zu gegebener Zeit ausgeführt.

Es können maximal fünf (5) Scriptaufrufe für einen späteren Start eingereiht werden. Der sechste Aufruf würde den ersten in der Reihe verdrängen und den fünften Platz in der Reihe einnehmen.

Es ist nicht möglich neue Eingangswerte an ein bereits gestartetes Script zu übergeben.

Ausgänge

Sie können aus dem Script heraus bis zu 20 Ausgänge beschreiben. Dies geschieht sobald Sie es im Script beauftragen. Auch die Reihenfolge bleibt erhalten.


Script

Die Scripte werden in der Sprache Lua verfasst. Sie können auf die gesamte Standardbibliothek von Lua und von BAB TECHNOLOGIE zusätzlich zur Verfügung gestellte Methoden zurück greifen.

Diese Dokumentation geht nicht auf Syntax und Grammatik der Sprache Lua ein. Bitte verwenden Sie für die generelle Einarbeitung in Lua eine der vielfältig verfügbaren Hilfe-Seiten im Internet. (Beispielhafter Suchbegriff: "Lua in 15 minutes")

Im Script steht Ihnen die Bibliothek "BT" zur Verfügung, die Ihnen folgende Möglichkeiten bietet:

Lesen und Schreiben von Ein- und Ausgängen

BT:getInValue()

Lesen Sie den Wert eines Logikelement-Eingangs aus.

LUA
local in1 = BT:getInValue('in1')

BT:sendValue()

Schreiben Sie einen Wert auf einen Ausgang. Generell ist es sinnvoll nur Zahlen, Boolean. und Texte zu versenden. Andere Daten (z.B. Lua-Tables) würde das Logikelement versuchen als Text zu verarbeiten.

LUA
local in1 = 1
local in2 = 2

BT:sendValue('out1', in2 * in1)
BT:sendValue('out2', in1 / in2)

Lesen und Schreiben von gespeicherten Werten (Properties)

BT:getProperties()

Lädt eine Lua-Table in der Sie Werte abspeichern können, die bei folgenden Aufrufen wieder verwendet werden können

BT:saveProperties()

Speichert die zuvor geladene Lua-Table.

LUA
local p = BT:getProperties()
p["foo"] = 42
BT:saveProperties()

Es is wichtig, die geladene Lua-Table zu verwenden. Gespeichert wird genau diese Referenz.

HTTP

BT:httpGet()

Machen Sie einfache Http GET-Anfragen. Möglich ist auch die Verwendung von https://. Als zweiten Parameter können Sie eine Lua-Table mit Http-Headern mitgeben.

LUA
local authToken = "sehrGeheimeDaten"
local header = {}
header["Client-Id"] = authToken
header["Accept"] = "application/json"

local getDaten = BT:httpGet(http://api.remote-service.de/data, header)

BT:httpPost()

Machen Sie einfache HTTP POST-Anfragen. Möglich ist auch die Verwendung von https://. Als zweiten Parameter übergeben Sie die zu sendenden Daten als Text oder Lua-Table (wird zu JSON konvertiert). Als dritten Parameter können Sie eine Lua-Table mit HTTP-Headern mitgeben.

LUA
local authToken = "sehrGeheimeDaten"
local header = {}
header["Client-Id"] = authToken

local payload = {}
payload["foo"] = 23
payload["bar"] = "foobar"
local postResult = BT:httpPost(http://api.remote-service.de/data, payload, header)

if postResult.status ~= 204 then
  BT:log("Got wrong resultcode: "..postResult.code)
  BT:exit()
end

Beide Aufrufe liefern eine Lua-Table mit folgendem Inhalt zurück:

  • body

  • response

  • code

  • header

  • status

JSON

BT:encodeJSON()

Eine Lua-Table wird in das JSON-Format überführt.

BT:decodeJSON()

Ein Text im JSON-Format wird in eine Lua-Table überführt.

LUA
local t = {}
t["foo"] = "bar"

local json = BT:encodeJSON(t)
t = BT:decodeJSON(json)

Datum und Uhrzeit

BT:time()

Ist gleichbedeutend mit os.time().

LUA
-- Für die aktuelle Uhrzeit
local t = BT:time()

BT:date()

Ist gleichbedeutend mit os.date().

LUA
local d = BT:date("*t", 906000490)

Allgemein

  • BT:sleep()
    Das Script wird für eine Zeit von x Millisekunden angehalten

LUA
BT:sleep(500) -- 1/2 second
  • BT:exit()
    Das Script wird an dieser Stelle beendet.

  • BT:log()
    Das Script sendet einen Log-Eintrag an den EIBPORT. Dieser wird in das Log des YaLE-Dienstes geschrieben und kann im LOGIKEDITOR über System/Systemlogs herunterladen abgerufen werden.
    Bitte beachten Sie, dass das Zusammenführen der Logs nach dem Klick eine kleine Weile dauern kann. Erneutes Klicken beschleunigt den Prozess nicht, sondern verlangsamt es.

LUA
BT:log("Alles super")
  • BT:getTrigger()
    Liefert den auslösenden Eingang.

LUA
local trigger = BT:getTrigger()
if trigger == "in2" then
-- do things
end
  • BT:getUUID()
    Liefert die eindeutige ID des Logikelements.

Einschränkungen

Im diesem Logikelement ist es nicht möglicht zusätzliche Bibliotheken einzubinden (z. B. per require('bibliothek')). Es können nur die Standardbibliothek und die von BAB zur Verfügung gestellten Funktionen verwendet werden. Dies gilt auch für textuell nachgeladenen Code (z.B. per loadstring('code')).

Ein Script hat eine maximale Laufzeit von 10 Sekunden. Danach wird das Script vom EIBPORT ohne Rückfrage beendet.

Bitte beachten Sie, dass viele oder rechnerisch aufwändige Scripte einen großen Einfluss auf die Leistung und Geschwindigkeit des EIBPORT haben können.


Script-Fehler

Sollte das Script aufgrund eines Fehlers während der Ausführung abstürzen, bekommen Sie eine Push-Nachricht in das Dashboard.

///

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.