Lua Script
Gestisci richieste complesse dei clienti utilizzando Lua Scripting.
🎬 Video tutorial
Non c'è modo migliore per imparare come funziona Lua in 1Home che guardare una guida dettagliata.
Indice dei contenuti
Dove potete creare i vostri script Lua?
È possibile utilizzare Lua Scripting nelle 1Home Automazioni.
Esistono molti modi per attivare lo script Lua.
È possibile utilizzare qualsiasi trigger nel blocco “Quando” dell'automazione. Alcuni esempi:
- Ogni minuto
- Alla ricezione del telegramma KNX
- All'alba/al tramonto o in un'ora o momento specifico della giornata
- ...
Vedere When Block per trovare tutte le opzioni.

Dopo avere aggiunto un trigger, aggiungi il blocco script Lua facendo clic sul pulsante +.

Esegui il suo script
La prima cosa da fare è provare a eseguire lo script. Ci sono tre opzioni su come eseguire lo script:
Esegui test- cliccare sul pulsanteEseguiin alto a destra nell'editor Lua. Questa funzione è utile durante lo sviluppo rapido per eseguire dei test.Testare l'intera automazione- Una volta terminata la scrittura dello script e quando si desidera testare l'intera schermata (vedere la documentazione su come testare l'intera automazione).Avvia l'automazione effettiva dal suo sistema: si tratterebbe della normale esecuzione dell'automazione.

Test Esecuzione dello script Lua
I log verranno visualizzati nella Console nella parte inferiore.

Presentazione degli Helpers - Cosa posso fare con Lua?
Abbiamo preparato molti frammenti di codice diversi che sono di aiuto per creare il proprio script Lua più rapidamente, anche se non si conosce ancora la sintassi Lua.

Vedi l'elenco dei gruppi di aiutanti nel pannello a destra.

Un esempio di gruppo di helper esteso per la sintassi Lua.
Se clicchi sull'helper, verrà inserito un esempio di codice funzionante.
Sono supportati i seguenti moduli, ciascuno con molti frammenti di codice diversi:
Inputs- funzioni di supporto per gli input definiti sul lato sinistro (per ulteriori informazioni, consultare la sezione Inputs)Outputs- funzioni di supporto per gli output definiti sul lato sinistro (per ulteriori informazioni, consultare la sezione Outputs)Sintassi Lua- alcuni esempi comuni di sintassi Luaknx- un modo per leggere e scrivere telegrammi KNXlog,math,time,location,http,base64,json,uuid,strings,string,table,bit32, ...
Inputs
Gli input permettono di importare i dati dal sistema nel proprio script.
Ciò include:
Riferimenti ai dispositivi- ad esempio, la luce che potrai impostare su un valore specifico o di cui potrai ottenere lo stato.Valori dai blocchi precedenti- ad esempio il valore del trigger (ad esempio il valore del telegramma dell'indirizzo di gruppo che ha attivato l'automazione).

Aggiungi i suoi input sul lato sinistro.
Generiamo automaticamente Helpers per tutte le funzioni supportate dal suo input.

Tutte le funzioni supportate da diversi input.
Outputs
Sometimes you want to use Lua script only for things you can't do in the drag and drop Automations editor.
Outputs give you an option to export the results of your Lua script and use it across the system.
You can define your Outputs on the left side of the Lua editor.

Impostazione di un output nello script Lua.
È quindi possibile utilizzare gli output nei passaggi successivi dell'automazione.

Quando esegui il test dello script, hai anche una rapida panoramica del risultato che viene memorizzato nell'output.

Impostazioni
È possibile impostare un timeout in secondi per il tempo massimo di esecuzione dello script.
A causa di limitazioni tecniche, il timeout funziona solo durante la funzione time.sleep(...). Se hai script che durano a lungo, inserisci dei brevi periodi di sospensione tra uno e l'altro, ad esempio nei loop.

Per capire come eseguire gli script in parallelo, uno alla volta ecc., consulta la pagina Modifica impostazioni di automazione.
Utilizzo di ChatGPT (o di un servizio AI simile) per aiutarti a scrivere codice
ChatGPT (o altri servizi di intelligenza artificiale) può essere molto utile quando scrivi il suo codice.
Per ottenere risultati ottimali, suggeriamo di seguire questi passaggi:
- Determinare quali funzioni
Helpersaranno necessarie per lo script. - Aggiungere le funzioni Helper così come sono nell'editor Lua di 1Home. Ad esempio, se si intende scrivere su KNX, è possibile aggiungere la funzione helper KNX write (non è necessario modificarla).
- Chiedi a ChatGPT quale codice desideri creare e incolla gli helper del passaggio precedente, aggiungendo un testo sopra gli helper: “Aiutati con gli esempi di codice riportati di seguito per creare lo script Lua desiderato”.
Modello da inserire nel prompt AI:
Crea uno script Lua che <INSERISCI LA DESCRIZIONE DELLA SUA IDEA>.
Si avvalga degli esempi di codice riportati di seguito per creare lo script Lua desiderato:
<INSERISCI GLI STRUMENTI DI AIUTO CHE UTILIZZERÀ>Crea uno script Lua che <INSERISCI LA DESCRIZIONE DELLA SUA IDEA>.
Si avvalga degli esempi di codice riportati di seguito per creare lo script Lua desiderato:
<INSERISCI GLI STRUMENTI DI AIUTO CHE UTILIZZERÀ>Esempi
Di seguito sono riportati alcuni esempi di codice Lua. Questo ti aiuterà a comprendere meglio come è strutturato il codice. Per maggiore chiarezza, guarda il video nella parte superiore di questa pagina.
Modifica il livello di luminosità della luce
-- 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")Scrivi indirizzo di gruppo KNX
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)Scrivi i dati meteorologici esterni relativi alla tua posizione
-- 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
Esempio meteorologico mostrato nell'editor Lua.