Skip to content

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 memoriaPersistenti
Condivise tra le automazioni
Sopravvivono a un riavvio del serverNo (cancellate)Sì (salvate nel database)
Funzioniset / get / remove / getAllKeyssetPersisted / 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

FunzioneCosa faRestituisce
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.
lua
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
end
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
end

Persistenti

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.

FunzioneCosa faRestituisce
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
lua
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
end
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
end

Limiti

  • 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:

lua
local err = variables.set('key', value)
if err then
    log.error(err)
end
local err = variables.set('key', value)
if err then
    log.error(err)
end

Esempio: 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:

lua
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)
end
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)
end

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

Cambiare la modalità casa con una scena

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:

lua
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)
end
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)
end

Successivamente, 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.

Reagire alla modalità e impostare il LED di un pulsante

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