Lua-Skript
Erfüllen Sie komplexe Kundenwünsche mit Lua-Skripting.
🎬 Video-Tutorial
Am besten lernen Sie die Funktionsweise von Lua in 1Home anhand einer ausführlichen Schritt-für-Schritt-Anleitung kennen.
Inhaltsübersicht
Wo können Sie Ihre Lua-Skripte erstellen?
Sie können Lua-Skripting in Ihren 1Home Automatisierungen verwenden.
Es gibt viele Möglichkeiten, wie Sie das Lua-Skript auslösen können.
Sie können beliebige Auslöser im Wenn-Block Ihrer Automatisierung verwenden. Einige Beispiele:
- Jede Minute
- Bei Empfang eines KNX Telegramms
- Bei Sonnenaufgang/Sonnenuntergang oder zu einer bestimmten Stunde oder Tageszeit
- ...
Unter Wenn-Block finden Sie alle Optionen.

Nachdem Sie einen Auslöser hinzugefügt haben, fügen Sie den Lua-Skript-Block hinzu, indem Sie auf die Schaltfläche + klicken.

Führen Sie Ihr Skript aus
Der erste Schritt besteht darin, das Skript auszuführen. Es gibt drei Möglichkeiten, ein Skript auszuführen:
Testlauf verwenden- klicken Sie auf die SchaltflächeAusführenoben rechts im Lua-Editor. Dies ist insbesondere während der Entwicklung nützlich, um schnelle Tests durchzuführen.Testen Sie die gesamte Automatisierung- Wenn Sie mit der Skripterstellung fertig sind und den gesamten Bildschirm testen möchten (siehe Anleitung zum Testen der gesamten Automatisierung).Lösen Sie die eigentliche Automatisierung von Ihrem System aus- so, wie sie später auch standardmäßig ausgeführt wird.

Testausführung des Lua-Skripts
Die Protokolle werden in der Konsole unten ausgegeben.

Vorstellung der Helfer - Was kann ich mit Lua machen?
Wir haben viele verschiedene Codeschnipsel vorbereitet, mit denen Sie Ihr Lua-Skript schneller erstellen können, auch wenn Sie die Lua-Syntax noch nicht kennen.

Eine Liste der Helfer-Gruppen finden Sie in der Leiste auf der rechten Seite.

Ein Beispiel für eine erweiterte Helfer-Gruppe für die Lua-Syntax.
Wenn Sie auf den Helfer klicken, wird ein funktionierendes Codebeispiel eingefügt.
Die folgenden Module werden unterstützt, jedes mit vielen verschiedenen Codeschnipseln:
Eingaben- Helfer-Funktionen für Ihre auf der linken Seite definierten Eingaben (mehr dazu im Abschnitt Eingaben)Ausgaben- Helfer-Funktionen für Ihre auf der linken Seite definierten Ausgaben (mehr dazu im Abschnitt Ausgaben)Lua-Syntax- einige gängige Beispiele für die Lua-Syntaxknx- eine Möglichkeit zum Lesen und Schreiben von KNX Telegrammenlog,math,time,location,http,base64,json,uuid,strings,string,table,bit32, ...
Eingaben
Mit Eingaben können Sie die Daten aus dem System in Ihr Skript übernehmen.
Dazu gehören:
Verweise auf Geräte- zum Beispiel Ihr Licht, das Sie auf einen bestimmten Wert einstellen oder dessen Status Sie abfragen können.Werte aus vorherigen Blöcken- zum Beispiel der Wert des Auslösers (z.B. der Wert des Gruppenadressentelegramms, das die Automatisierung ausgelöst hat).

Fügen Sie Ihre Eingaben auf der linken Seite hinzu.
Wir generieren automatisch Helfer für alle Funktionen, die Ihre Eingaben unterstützen.

Alle Funktionen, die von den verschiedenen Eingaben unterstützt werden.
Ausgaben
Lua-Skripte kommen vor allem dann zum Einsatz, wenn bestimmte Anforderungen mit dem Drag-&-Drop-Automatisierungseditor nicht umgesetzt werden können.
Ausgaben bieten Ihnen die Möglichkeit, die Ergebnisse Ihres Lua-Skripts zu exportieren und systemübergreifend zu verwenden.
Sie können Ihre Ausgaben auf der linken Seite des Lua-Editors definieren.

Einstellen einer Ausgabe im Lua-Skript
Sie können Ihre Ausgaben dann in den nächsten Schritten der Automatisierung verwenden.

Wenn Sie das Skript testweise ausführen, haben Sie außerdem einen schnellen Überblick über das Ergebnis, das in Ihrer Ausgabe gespeichert ist.

Einstellungen
Sie können ein Timeout in Sekunden festlegen, das die maximale Ausführungszeit des Skripts bestimmt.
Aufgrund technischer Einschränkungen funktioniert das Timeout nur in Verbindung mit der Funktion time.sleep(...). Wenn Sie lange laufende Skripte haben, fügen Sie daher kurze Pausen ein, z. B. innerhalb von Schleifen.

Wie Sie Skripte z. B. parallel, nacheinander usw. ausführen lassen können, erfahren Sie unter Automatisierungseinstellungen ändern.
Verwenden Sie ChatGPT, um Ihnen beim Schreiben von Code zu helfen (oder einen ähnlichen KI-Service)
ChatGPT (oder andere KI-Dienste) können beim Schreiben Ihres Codes sehr hilfreich sein.
Für optimale Ergebnisse empfehlen wir die folgenden Schritte:
- Bestimmen Sie, welche
Helfer-Funktionen Sie für Ihr Skript benötigen. - Fügen Sie die Helfer-Funktionen so ein, wie sie im 1Home Lua-Editor vorliegen. Wenn Sie zum Beispiel auf KNX schreiben möchten, können Sie die Helfer-Funktion KNX Write hinzufügen (eine Bearbeitung ist nicht erforderlich).
- Beschreiben Sie in ChatGPT den gewünschten Code und fügen Sie die im vorherigen Schritt verwendeten Helfer ein. Ergänzen Sie oberhalb der Helfer folgenden Hinweis: „Nutze die untenstehenden Codebeispiele, um das gewünschte Lua-Skript zu erstellen.“
Beispielvorlage für eine KI-Eingabe:
Erstelle ein Lua-Skript, das <BESCHREIBUNG IHRER IDEE EINSETZEN>.
Nutze die untenstehenden Codebeispiele, um das gewünschte Lua-Skript zu erstellen:
<HELFER EINSETZEN, DIE SIE VERWENDEN WERDEN>Erstelle ein Lua-Skript, das <BESCHREIBUNG IHRER IDEE EINSETZEN>.
Nutze die untenstehenden Codebeispiele, um das gewünschte Lua-Skript zu erstellen:
<HELFER EINSETZEN, DIE SIE VERWENDEN WERDEN>Beispiele
Im Folgenden finden Sie einige Lua-Codebeispiele. So können Sie besser verstehen, wie der Code aussieht. Für noch mehr Klarheit sehen Sie sich bitte das Video am Anfang dieser Seite an.
Helligkeitsstufe einer Leuchte ändern
-- NOTE: First add your dimming light as a `light` input on the left side of the editor.
local value = 100
local err = INPUTS.light.setLevel(value)
if err then
log.error(err)
return
end
log.info("success")-- NOTE: First add your dimming light as a `light` input on the left side of the editor.
local value = 100
local err = INPUTS.light.setLevel(value)
if err then
log.error(err)
return
end
log.info("success")KNX Gruppenadresse schreiben
local value, err = knx.read_5_001(knx.GATEWAY_TP, '1/1/1')
if err ~= nil then
log.error('Error reading from KNX', err)
return
end
log.info(value)local value, err = knx.read_5_001(knx.GATEWAY_TP, '1/1/1')
if err ~= nil then
log.error('Error reading from KNX', err)
return
end
log.info(value)Außendaten (Wetter) für Ihren Standort schreiben
-- NOTE: This example uses Open-Meteo’s free API for personal, non-commercial use.
-- If you use it commercially, please obtain a commercial API plan.
-- Fetch the Open-Meteo.com weather data for your location.
-- Set the location in the "System" settings or provide custom latitude/longitude below.
local url = string.format(
"https://api.open-meteo.com/v1/forecast?latitude=%f&longitude=%f¤t_weather=true",
location.latitude(), location.longitude()
)
local response, statusCode, error = http.get(url, {
responseBodyType = http.bodyType.JSON,
})
if error or statusCode ~= 200 then
log.error("Status code=%v, error=%v", code, error)
return
end
-- Print the response to the logs, so you can anlyse it to get more data.
log.info("Current weather: %v", response)
-- Print some values
local outsideTemperature = response.current_weather.temperature
local windSpeed = response.current_weather.windspeed
local windDirectionDegrees = response.current_weather.winddirection
local isDay = response.current_weather.is_day
local weatherCode = response.current_weather.weathercode
local isSunny = weatherCode < 3
log.info("Outside temperature: %v", outsideTemperature)
log.info("Wind speed: %v", windSpeed)
-- 0° for North, 90° for East, 180° for South, and 270° for West
log.info("Wind direction: %v", windDirectionDegrees)
log.info("Is sunny: %v", isSunny)
log.info("Is day: %v", isDay)
-- Send the outside temperature to KNX
local err = knx.write_9_xxx(knx.GATEWAY_TP, '7/7/7', knx.GROUP_WRITE, outsideTemperature)
if err ~= nil then
log.error(err)
return
end
-- # Different weather codes ----------------
-- 0 – Clear sky
-- 1 – Mainly clear
-- 2 – Partly cloudy
-- 3 – Overcast
-- 45 – Fog
-- 48 – Depositing rime fog
-- 51 – Drizzle: Light intensity
-- 53 – Drizzle: Moderate intensity
-- 55 – Drizzle: Dense intensity
-- 56 – Freezing drizzle: Light intensity
-- 57 – Freezing drizzle: Dense intensity
-- 61 – Rain: Slight intensity
-- 63 – Rain: Moderate intensity
-- 65 – Rain: Heavy intensity
-- 66 – Freezing rain: Light intensity
-- 67 – Freezing rain: Heavy intensity
-- 71 – Snow fall: Slight intensity
-- 73 – Snow fall: Moderate intensity
-- 75 – Snow fall: Heavy intensity
-- 77 – Snow grains
-- 80 – Rain showers: Slight intensity
-- 81 – Rain showers: Moderate intensity
-- 82 – Rain showers: Violent intensity
-- 85 – Snow showers: Slight intensity
-- 86 – Snow showers: Heavy intensity
-- 95 – Thunderstorm: Slight or moderate
-- 96 – Thunderstorm with slight hail
-- 99 – Thunderstorm with heavy hail-- NOTE: This example uses Open-Meteo’s free API for personal, non-commercial use.
-- If you use it commercially, please obtain a commercial API plan.
-- Fetch the Open-Meteo.com weather data for your location.
-- Set the location in the "System" settings or provide custom latitude/longitude below.
local url = string.format(
"https://api.open-meteo.com/v1/forecast?latitude=%f&longitude=%f¤t_weather=true",
location.latitude(), location.longitude()
)
local response, statusCode, error = http.get(url, {
responseBodyType = http.bodyType.JSON,
})
if error or statusCode ~= 200 then
log.error("Status code=%v, error=%v", code, error)
return
end
-- Print the response to the logs, so you can anlyse it to get more data.
log.info("Current weather: %v", response)
-- Print some values
local outsideTemperature = response.current_weather.temperature
local windSpeed = response.current_weather.windspeed
local windDirectionDegrees = response.current_weather.winddirection
local isDay = response.current_weather.is_day
local weatherCode = response.current_weather.weathercode
local isSunny = weatherCode < 3
log.info("Outside temperature: %v", outsideTemperature)
log.info("Wind speed: %v", windSpeed)
-- 0° for North, 90° for East, 180° for South, and 270° for West
log.info("Wind direction: %v", windDirectionDegrees)
log.info("Is sunny: %v", isSunny)
log.info("Is day: %v", isDay)
-- Send the outside temperature to KNX
local err = knx.write_9_xxx(knx.GATEWAY_TP, '7/7/7', knx.GROUP_WRITE, outsideTemperature)
if err ~= nil then
log.error(err)
return
end
-- # Different weather codes ----------------
-- 0 – Clear sky
-- 1 – Mainly clear
-- 2 – Partly cloudy
-- 3 – Overcast
-- 45 – Fog
-- 48 – Depositing rime fog
-- 51 – Drizzle: Light intensity
-- 53 – Drizzle: Moderate intensity
-- 55 – Drizzle: Dense intensity
-- 56 – Freezing drizzle: Light intensity
-- 57 – Freezing drizzle: Dense intensity
-- 61 – Rain: Slight intensity
-- 63 – Rain: Moderate intensity
-- 65 – Rain: Heavy intensity
-- 66 – Freezing rain: Light intensity
-- 67 – Freezing rain: Heavy intensity
-- 71 – Snow fall: Slight intensity
-- 73 – Snow fall: Moderate intensity
-- 75 – Snow fall: Heavy intensity
-- 77 – Snow grains
-- 80 – Rain showers: Slight intensity
-- 81 – Rain showers: Moderate intensity
-- 82 – Rain showers: Violent intensity
-- 85 – Snow showers: Slight intensity
-- 86 – Snow showers: Heavy intensity
-- 95 – Thunderstorm: Slight or moderate
-- 96 – Thunderstorm with slight hail
-- 99 – Thunderstorm with heavy hail
Wetterbeispiel im Lua-Editor angezeigt.