MQTT: come funzionano topic e payload

Cosa sono i topic MQTT (Read, Response, Write, Event) e il payload, e come gli script in Ilevia Manager li elaborano per i diversi tipi di componente.

I topic

I topic sono: Read, Event, Write e Response. Ognuno ha tipi di messaggio differenti, che il broker usa per filtrare i messaggi per ogni client connesso. I topic sono composti da livelli separati da slash.

Esempio: home/livingroom/light

Questi sono i 4 topic a cui ci iscriveremo e con cui scambieremo informazioni al termine della configurazione:

Topic Read: è usato per ricevere lo stato del dispositivo;

Topic Response: è la risposta del dispositivo al server di automazione alla richiesta Read;

Topic Write: è usato per impostare il valore di un parametro del dispositivo;

Topic Event: è usato per riportare lo stato del dispositivo quando cambia.

Topic Response

Il Topic Response è richiesto per la risposta al messaggio del topic Read inviato dal dispositivo.

Esempio: messaggio inviato alla prima connessione per recuperare lo stato del dispositivo.

In questo caso lo script elabora una parte specifica del JSON proveniente dal dispositivo, nel nostro caso “ison”.

Esempio di script del topic Response

Cliccando su questo link puoi consultare la configurazione dello script.

Topic Write

Il “Topic Write” invia il comando quando il componente nel sistema Ilevia cambia stato.

Esempio: quando l’utente cambia lo stato di un interruttore nell’app Ilevia Control.

Ogni dispositivo può richiedere un tipo di messaggio differente.

Puoi creare il payload del messaggio MQTT con un breve script JavaScript che parte dal valore del componente nel sistema Ilevia e prepara il messaggio nel formato richiesto dal dispositivo: testo, JSON o altro.

Invio dati con Topic Write

L’interruttore e gli altri componenti binari usano i valori 0 e 1 nella variabile all’interno del payload.

Puoi usare questo script per creare il messaggio in base al valore:

Script del topic Write per un componente binario

Cliccando su questo link puoi consultare la configurazione dello script.

Nel sistema Ilevia la percentuale viene elaborata come valore da 0 a 1 e pubblicata come valore da 0 a 100 tramite una conversione. I componenti che usano questo tipo di valori sono Cursore e Valore regolabile; hanno questa configurazione nel topic Write.

Puoi usare questo script per creare il messaggio MQTT in base al valore:

Script del topic Write per un valore percentuale

Cliccando su questo link puoi consultare la configurazione dello script.

Per inviare informazioni RGB la configurazione è la seguente: si usa il componente Luce RGB per impostare la corretta configurazione MQTT RGB.

Script del topic Write per un componente RGB

Cliccando su questo link puoi consultare la configurazione dello script.

Topic Event

Il “Topic Event” riporta lo stato del dispositivo.

Esempio: un misuratore di potenza riporta la potenza consumata ogni volta che il valore cambia.

Nel caso di una temperatura, di una potenza o di un’energia, il componente predisposto per visualizzare il valore è il componente Info. Come puoi vedere nell’immagine sottostante, lo script recupera semplicemente il payload proveniente dal dispositivo.

Puoi usare questo script per ricevere i dati dal dispositivo:

Script del topic Event per un valore numerico

Cliccando su questo link puoi consultare la configurazione dello script.

Per riportare lo stato di un interruttore è necessario strutturare lo script nel modo seguente.

In questo caso lo script prende il payload proveniente dal dispositivo e riporta lo stato attuale del dispositivo.

Script del topic Event per lo stato di un interruttore

Cliccando su questo link puoi consultare la configurazione dello script.

Il payload

Il payload è il contenuto del messaggio MQTT. Per ogni topic viene eseguita una funzione JavaScript (script) che elabora il payload.

Per ogni topic è eseguita una funzione javascript per processare il payload del topic.

Esempio con stringa JSON:

var data = JSON.parse(payload); var color = {"mode":"color","red":data.r,"green":data.g,"blue":data.b}; return JSON.stringify(color);

Esempio di payload

Ultimo aggiornamento: