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
GATE (siehe Logikelemente | Datenpunkt-Gate)
In 1-...
Jede Variable wird durch einen Eingang repräsentiert. Es sind maximal 20 Eingänge möglich.
Werte-Ausgänge
OUT 1-...
Es sind maximal 20 Ausgänge möglich.
Konfiguration

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.
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.
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.
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.
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.
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.
local t = {}
t["foo"] = "bar"
local json = BT:encodeJSON(t)
t = BT:decodeJSON(json)
Datum und Uhrzeit
BT:time()
Ist gleichbedeutend mit os.time()
.
-- Für die aktuelle Uhrzeit
local t = BT:time()
BT:date()
Ist gleichbedeutend mit os.date()
.
local d = BT:date("*t", 906000490)
Allgemein
BT:sleep()
Das Script wird für eine Zeit von x Millisekunden angehalten
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.
BT:log("Alles super")
BT:getTrigger()
Liefert den auslösenden Eingang.
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.
///