Come mettere in comunicazione dispositivi eWON via MQTT

E' possibile utilizzare dei dispositivi eWON come client MQTT e quindi fare in modo che vengano eseguite azioni particolari alla pubblicazione di messaggi su un topic a cui si è sottoscritti.

 


 

Procedura su Databoom

E' possibile sfruttare il broker MQTT di Databoom per la pubblicazione e sottoscrizione ai topic. E' necessaria la creazione di un Template Device di tipo MQTT.

  • Aggiungere un nuovo dispositivo con il pulsante Aggiungi dispositivo in cima alla lista dispositivi
  • Selezionare il tipo Template Device e compilare il resto dell'anagrafica del dispositivo
  • Nelle impostazioni aggiuntive del template, impostare il tipo dispositivo MQTT
  • Inserire
    • un Progetto,
      • es. eWon
    • un Topic dove si possono pubblicare dati
      • es. pub
    • un Topic dove si possono ricevere informazioni da Databoom
      • es. sub
  • Confermando la creazione del dispositivo si avranno a disposizione
    • Client ID
      • es. btr1-<valore unico arbitrario>
    • Topic per la pubblicazione
      • es. eWon/<valore unico arbitrario>/pub
    • Topic per la sottoscrizione
      • es. eWon/<valore unico arbitrario>/sub
  • Al momento dell'utilizzo dei campi nello script, va sostituito con un <valore unico arbitrario> scelto dall'utente

 


 

Procedura su eWON

Accedere alla pagina di gestione dell'eWON digitando l'indirizzo IP del dispositivo in un browser. Verranno richieste le credenziali di accesso, se non sono state impostate diversamente quelle di default sono:

Nome utente: adm  Password: adm

Posizionarsi in Configuration -> Script Setup (nei firmware più recenti la gestione degli script è in Setup -> BASIC IDE, assicurarsi che Script Execution sia a RUNNING affinché il contenuto dello script sia eseguito).

Per stabilire la connessione fra due eWON, uno dispositivo deve integrare la parte di pubblicazione su un determinato topic, l'altro deve invece integrare la parte di ricezione sullo stesso topic.

Lo script d'esempio seguente permette ad un dispositivo di scrivere il valore di una tag sul topic di pubblicazione ogni 5 secondi, quindi il valore viene letto alla ricezione dall'altro dispositivo e assegnato ad una tag.

 


 

La parte iniziale dello script, con la connessione al broker MQTT, è comune ad entrambi i casi. Nello script vengono utilizzati i campi generati in Databoom:

  • ClientID$ è  il codice identificativo visualizzato nel template MQTT con il <valore unico arbitrario> impostato. Per fare in modo che entrambi i client utilizzino lo stesso topic, è necessario assegnare dei client ID diversi
    • es. btr1-publisher, btr1-subscriber
  • Username$ è lo username utilizzato per l'accesso in Databoom,
    • es. databoomtester
  • Password$ è un token generato in Databoom nella sezione Impostazioni -> Credenziali 
    • es. o3Lk/Y9ypyXyr3HxIR75pp8nG6nn9DzECFA1JVCdeNk=
  • TopicToPublishOn$ e TopicToSubscribe$ sono i topic visualizzati nel template MQTT con lo stesso <valore unico arbitrario> impostato nel CLIENT_ID. Per stabilire la connessione fra due eWON, uno dispositivo deve integrare la parte di pubblicazione su un determinato topic, l'altro deve invece integrare la parte di ricezione sullo stesso topic.
    • es. eWon/test/pub

 


 

Segue lo script con la parte di pubblicazione dei dati sul topic.  In verde le parti da sostituire con i propri valori.

<TAG_EWON>@ è la tag che si vuole pubblicare sul topic. Va referenziata con il nome reale

  • es. pubVar@

 

//############### CONFIG ###############
MQTTBrokerURL$ = "mqtt.databoom.com"
MQTTPort$ = "1883"
ClientID$ = "btr1-publisher"
Username$ = "databoomtester"
Password$ = "o3Lk/Y9ypyXyr3HxIR75pp8nG6nn9DzECFA1JVCdeNk="
TopicToPublishOn$ = "eWon/test/pub"
//############### END CONFIG ###############
Last_ConnStatus% = 0
//Configure MQTT Connection parameters
Goto CONNECTMQTT

CONNECTMQTT
: MQTT "OPEN", ClientID$ , MQTTBrokerURL$ MQTT "SetParam", "Username", Username$ MQTT "SetParam", "Password", Password$ MQTT "SETPARAM", "PORT", MQTTPort$ MQTT "SETPARAM", "KEEPALIVE", "10" SETSYS PRG,"RESUMENEXT",1 //Continue in case of error at MQTT "CONNECT" MQTT "CONNECT" //If an error is raised --> Log a message ErrorReturned% = GETSYS PRG,"LSTERR" IF ErrorReturned% = 28 THEN @Log("[MQTT SCRIPT] WAN interface not yet ready") SETSYS PRG,"RESUMENEXT",0 ONTIMER 1, "GOTO SENDDATA" TSET 1,5 //publish every 5 seconds END
SENDDATA: //Read MQTT Connection Status (5 = Connected, other values = Not connected) ConnStatus% = MQTT "STATUS" IF Last_ConnStatus% <> ConnStatus% THEN IF ConnStatus% = 5 THEN //Connection is back online @Log("[MQTT SCRIPT] Flexy connected to Broker") ELSE @Log("[MQTT SCRIPT] Flexy disconnected from Broker") ENDIF Last_ConnStatus% = ConnStatus% ENDIF //IF Connected --> Publish messages IF ConnStatus% = 5 THEN //If connected --> Publish SETSYS PRG,"RESUMENEXT",1 MsgToPublish$ = SFMT <TAG_EWON>@,20,0,"%f" MQTT "PUBLISH", TopicToPublishOn$ , MsgToPublish$, 0,0 PRINT "[MQTT SCRIPT] Message published to the MQTT broker" ErrorReturned = GETSYS PRG,"LSTERR" IF ErrorReturned=28 THEN //ERROR while publishing --> No connection --> Better to close and open MQTT "CLOSE" GOTO CONNECTMQTT ENDIF ELSE //If not connected --> Save message in file @Log("[MQTT SCRIPT] Flexy not connected") ENDIF END

La pubblicazione della tag sul topic avviene nel passaggio.

MsgToPublish$ = SFMT <TAG_EWON>@,20,0,"%f"
MQTT "PUBLISH",  TopicToPublishOn$ , MsgToPublish$, 0,0

 


 

Segue lo script con la parte di ricezione dei dati sul topic. In verde le parti da sostituire con i propri valori.

 <TAG_EWON>@ è la tag che si vuole impostare con il valore pubblicato sul topic. Va referenziata con il nome reale

  • es. rcvVar@
//############### CONFIG ###############
MQTTBrokerURL$ = "mqtt.databoom.com"
MQTTPort$ = "1883"
ClientID$ = "btr1-subscriber"
Username$ = "databoomtester"
Password$ = "o3Lk/Y9ypyXyr3HxIR75pp8nG6nn9DzECFA1JVCdeNk="
TopicToSubscribe$ = "eWon/test/pub"
//############### END CONFIG ###############
Last_ConnStatus% = 0
//Configure MQTT Connection parameters
Goto CONNECTMQTT

CONNECTMQTT:
MQTT "OPEN", ClientID$ , MQTTBrokerURL$
MQTT "SetParam", "Username", Username$
MQTT "SetParam", "Password", Password$
MQTT "SETPARAM", "PORT", MQTTPort$
MQTT "SETPARAM", "KEEPALIVE", "10" SETSYS PRG,"RESUMENEXT",1 //Continue in case of error at MQTT "CONNECT" MQTT "CONNECT" //If an error is raised --> Log a message ErrorReturned% = GETSYS PRG,"LSTERR" IF ErrorReturned% = 28 THEN @Log("[MQTT SCRIPT] WAN interface not yet ready") SETSYS PRG,"RESUMENEXT",0 ONTIMER 1, "GOTO SENDDATA" TSET 1,5 //publish every 5 seconds END
MQTT "SUBSCRIBE",TopicToSubscribe$,1 //Launch the MQTT process in the background
//When receiving a message from Broker, "GOTO MQTTRECEIVEMSG"
ONMQTT "GOTO MQTTRECEIVEMSG"
END

MQTTRECEIVEMSG
: //Executed when receiving messages from Broker MessageQty%=Mqtt "READ" //Return the number of pending messages IF (MessageQty%>0) Then MsgTopic$= MQTT "MSGTOPIC" MsgData$ = MQTT "MSGDATA" @Log("[MQTT SCRIPT] Message '"+ MsgData$ + "' received on topic " +MsgTopic$) <TAG_EWON>@ = FCNV MsgData$,20,0,"%f" GOTO MQTTRECEIVEMSG ENDIF END FUNCTION Log($Msg$) LOGEVENT $Msg$ ,100 PRINT $Msg$ ENDFN

La ricezione della tag sul topic avviene nel passaggio

MsgData$ = MQTT "MSGDATA"
<TAG_EWON>@ = FCNV MsgData$,20,0,"%f"

 


 

Affinché la comunicazione fra i due eWON sia corretta è necessario assicurarsi che un dispositivo pubblichi su un determinato topic, mentre l'altro deve sottoscriversi al topic su cui pubblica il primo.

Altre domande? Invia una richiesta

0 Commenti

Accedi per aggiungere un commento.