Skip to content

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?

🎬 Video tutorial timestamp

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

Trigger Lua

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

Scripting

Esegui il suo script

🎬 Video tutorial timestamp

La prima cosa da fare è provare a eseguire lo script. Ci sono tre opzioni su come eseguire lo script:

  • Esegui test - cliccare sul pulsante Esegui in 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.

Input in esecuzione

Test Esecuzione dello script Lua

I log verranno visualizzati nella Console nella parte inferiore.

Logs

Presentazione degli Helpers - Cosa posso fare con Lua?

🎬 Video tutorial timestamp

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.

Helpers

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

Sintassi degli Helpers

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 Lua
  • knx - un modo per leggere e scrivere telegrammi KNX
  • log, math, time, location, http, base64, json, uuid, strings, string, table,bit32, ...

Inputs

🎬 Video tutorial timestamp

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

Inputs

Aggiungi i suoi input sul lato sinistro.

Generiamo automaticamente Helpers per tutte le funzioni supportate dal suo input.

Input negli helper

Tutte le funzioni supportate da diversi input.

Outputs

🎬 Video tutorial timestamp

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.

Lua Outputs

Impostazione di un output nello script Lua.

È quindi possibile utilizzare gli output nei passaggi successivi dell'automazione.

Output temperatura esterna Lua

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

Risultato dell'output Lua

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.

Impostazioni Lua

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

🎬 Video tutorial timestamp

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:

  1. Determinare quali funzioni Helper saranno necessarie per lo script.
  2. 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).
  3. 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

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

Lua
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

Lua
-- 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&current_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&current_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

Meteo Lua

Esempio meteorologico mostrato nell'editor Lua.