Variabili Lua
Memorizza un valore in un'automazione e usalo in un'altra, oppure conserva il valore tra le esecuzioni delle automazioni o tra i riavvii del 1Home Server.
Indice dei contenuti
Cosa sono le variabili Lua?
Il modulo variables è disponibile in ogni blocco Script Lua. Ti offre un archivio condiviso di chiave/valore: una variabile che imposti in un'automazione può essere letta da qualsiasi altra automazione sullo stesso server. Questo è utile per mantenere uno stato in un unico punto —una modalità casa, un contatore, l'ultimo valore misurato, un flag— anziché ricalcolarlo ovunque.
Esistono due tipi di variabili:
- In memoria: veloci, condivise tra tutte le automazioni mentre il server è in funzione, ma cancellate al riavvio del server.
- Persistenti: salvate nel database del server, quindi sopravvivono a riavvii e reboot.
Il gruppo variables compare anche nel pannello Helpers dell'editor Lua, così puoi inserire frammenti di codice già pronti senza dover ricordare la sintassi esatta.
In memoria vs. persistenti
| In memoria | Persistenti | |
|---|---|---|
| Condivise tra le automazioni | Sì | Sì |
| Sopravvivono a un riavvio del server | No (cancellate) | Sì (salvate nel database) |
| Funzioni | set / get / remove / getAllKeys | setPersisted / getPersisted / removePersisted / getAllPersistedKeys |
Usa le variabili in memoria per i flag temporanei che devono esistere solo durante il normale funzionamento, e le variabili persistenti per lo stato che deve essere ricordato dopo un reboot o un'interruzione di corrente.
Funzioni
Le chiavi delle variabili sono sempre testo (una stringa). I valori possono essere una stringa, un numero, un booleano, nil, un oggetto dati o una tabella.
In memoria
| Funzione | Cosa fa | Restituisce |
|---|---|---|
variables.set('key', value) | Memorizza una variabile in memoria. | err: un messaggio di errore se è stato superato un limite o il valore non è stato memorizzato, altrimenti nil. |
variables.get('key') | Legge una variabile in memoria. | value, err: err è impostato quando la chiave non viene trovata, altrimenti nil. |
variables.remove('key') | Elimina una variabile in memoria. | err |
variables.getAllKeys() | Elenca le chiavi di tutte le variabili in memoria. | keys: un array di stringhe. |
local err = variables.set('home_mode', 'away')
if err then
log.error(err)
end
local mode, err = variables.get('home_mode')
if err then
log.error(err)
return
endlocal err = variables.set('home_mode', 'away')
if err then
log.error(err)
end
local mode, err = variables.get('home_mode')
if err then
log.error(err)
return
endPersistenti
Sia get che getPersisted restituiscono un secondo valore, err, che è impostato quando la chiave richiesta non è impostata. Una lettura persistente può fallire anche per un altro motivo: getPersisted e getAllPersistedKeys leggono dal database, quindi restituiscono err anche se quella lettura fallisce. Controlla sempre err prima di usare il valore.
| Funzione | Cosa fa | Restituisce |
|---|---|---|
variables.setPersisted('key', value) | Memorizza una variabile persistente. | err |
variables.getPersisted('key') | Legge una variabile persistente. | value, err: err è impostato quando la chiave non viene trovata o la lettura è fallita. |
variables.removePersisted('key') | Elimina una variabile persistente. | err |
variables.getAllPersistedKeys() | Elenca le chiavi di tutte le variabili persistenti. | keys, err |
local err = variables.setPersisted('home_mode', 'away')
if err then
log.error(err)
end
local mode, err = variables.getPersisted('home_mode')
if err then
log.error(err)
return
endlocal err = variables.setPersisted('home_mode', 'away')
if err then
log.error(err)
end
local mode, err = variables.getPersisted('home_mode')
if err then
log.error(err)
return
endLimiti
- Dimensione del valore: ogni valore può contenere circa 10.000 caratteri di testo. È più che sufficiente per il nome di una modalità, un numero o un piccolo elenco, ma non per grandi blocchi di testo o tabelle voluminose.
- Numero di variabili: puoi mantenere fino a 1.000 variabili in ogni archivio. Le variabili in memoria e quelle persistenti vengono conteggiate separatamente, quindi fino a 1.000 di ciascun tipo.
- Tipi di valore supportati: stringhe, numeri, booleani,
nil, oggetti dati e tabelle. Altri tipi —come le funzioni— non sono supportati. - Le chiavi devono essere testo (una stringa).
Quando viene raggiunto un limite, set e setPersisted restituiscono un messaggio di errore anziché memorizzare il valore. Controlla sempre l'err restituito e registralo, ad esempio:
local err = variables.set('key', value)
if err then
log.error(err)
endlocal err = variables.set('key', value)
if err then
log.error(err)
endEsempio: modalità A casa / Fuori casa
Un utilizzo comune è una «modalità casa» che una scena imposta e a cui reagiscono diverse automazioni. Questo esempio usa variabili in memoria. Costruirai due cose: una scena per cambiare la modalità (puoi attivarla dall'app mobile di 1Home) e un'automazione che legge la modalità e comanda il LED di un pulsante.
1. Cambiare la modalità con una scena
Crea una scena. Aggiungi un blocco Script Lua che legge l'attuale homeMode, lo alterna tra home e away e lo memorizza nuovamente come variabile condivisa:
local homeMode, err = variables.get('homeMode')
if err then homeMode = 'home'
end
if homeMode == 'home' then homeMode = 'away'
else homeMode = 'home'
end
local err = variables.set('homeMode', homeMode)
if err then
log.error(err)
endlocal homeMode, err = variables.get('homeMode')
if err then homeMode = 'home'
end
if homeMode == 'home' then homeMode = 'away'
else homeMode = 'home'
end
local err = variables.set('homeMode', homeMode)
if err then
log.error(err)
endLa prima volta che la scena viene eseguita, homeMode non è ancora impostato, quindi get restituisce un errore e la modalità assume il valore predefinito home prima di essere alternata. Ogni attivazione successiva alterna tra home e away.

2. Leggerla e reagire
In un'automazione, leggi la variabile e agisci di conseguenza: qui accendiamo o spegniamo il LED di un pulsante.
Per prima cosa, aggiungi un blocco Script Lua. Sul lato sinistro, definisci un output di tipo Testo chiamato homeMode (vedi Output). Quindi leggi la variabile, controlla se c'è un errore e scrivila in quell'output:
local homeModeVar, err = variables.get('homeMode')
if err then log.error(err) return
end
local err = OUTPUTS.homeMode.set(homeModeVar)
if err then
log.error(err)
endlocal homeModeVar, err = variables.get('homeMode')
if err then log.error(err) return
end
local err = OUTPUTS.homeMode.set(homeModeVar)
if err then
log.error(err)
endSuccessivamente, aggiungi un blocco Condizione. Scegli il tipo di condizione Risultato del blocco precedente, seleziona l'output homeMode del blocco Script Lua, imposta l'operatore su è uguale a e inserisci home. L'automazione si dirama quindi in base al risultato, ad esempio spegnendo il LED del pulsante quando la modalità è home e accendendolo quando è away.

TIP
Questo esempio usa variabili in memoria, quindi la modalità viene cancellata se il server si riavvia. Per ricordarla tra i riavvii, sostituisci variables.set / variables.get con variables.setPersisted / variables.getPersisted.
Vedi anche
- Script Lua: dove scrivi gli script che usano le variabili.
- Condizioni: dirama un'automazione in base alla lettura di una variabile in un output.
- Aggiungere e collegare i blocchi: come i blocchi si connettono tra loro.