Push Agent

Push agent consente di inviare i dati del Data logger sul Cloud. Questo script periodicamente preleva i dati dal Data logger e li invia sul Cloud incapsulati in un JSON. Il Push agent implementa il meccanismo Store&Forward che preleva i dati dal Data logger e li salva in uno Store di appoggio dal quale i dati vengono estratti ed inviati sul cloud attraverso un Broker MQTT.

Lo script supporta due modalità di trasferimento:

  • Per riga: invia una riga del Data logger per pacchetto

  • Per variabile: invia una o più variabili con le relative informazioni. Se la modalità del Data logger selezionata è Cambiamento valore (i valori vengono campionati solo se almeno una delle variabili monitorate cambia) il Push agent invia il valore di una determinata variabile se e solo se il suo valore è cambiato rispetto all’ultimo valore inviato.

Inoltre, è possibile impostare la modalità in cui i dati, oltre ad essere inviati sul cloud, vengono storicizzati nel Data logger. Se non si vuole la storicizzazione i dati inviati vengono rimossi dal Data logger una volta prelevati.

Impostazione

Questo script utilizza le seguenti librerie:

  • M2MQTT

  • NewtonSoft.Json

Una volta installate le librerie da NuGet, per importare le librerie all’interno del progetto bisogna:

  1. Aprire il NetLogic

  2. Click sul progetto e modificare file .csproj

  3. Aggiungere <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies> dopo la seguente proprietà <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>

  4. Compilare il progetto

Se si vuole la comunicazione sicura sono necessari:

  • Il certificato della CA in formato .pem. Il seguente comando genera il certificato nel formato desiderato:

    $ openssl x509 -inform DER -outform PEM -in certificate.crt -out certificate.pem
    
  • Il certificato del client generato utilizzando la CA. Il formato è .pfx e può essere generato con il seguente comando:

    $ openssl pkcs12 -export -out YOURPFXFILE.pfx -inkey *****-private.pem.key -in *****-certificate.pem.crt
    

Parametri di configurazione

  • DataLogger: riferimento all’istanza del Data logger

  • PushFullSample: se il valore è True allora si attiva la modalità di trasferimento per riga altrimenti la modalità di trasferimento per variabile

  • PreserveData loggerHistory: se il valore è True allora oltre all’invio dei dati è attiva anche la storicizzazione altrimenti ogni volta che i dati vengono trasferiti allo Store di appoggio questi vengono eliminati dal Data logger

  • MaximumStoreCapacity: indica la capacità massima dello Store di appoggio utilizzato dal PushAgent

  • MaximumRecordsPerPacket: il numero di record incapsulati in un pacchetto. Nel caso di modalità di trasferimento per riga, attualmente, si invia solo una riga per pacchetto

  • MaximumPublishTime: intervallo di tempo massimo dopo il quale si prelevano i dati dallo Store di appoggio e si inviano al Cloud. Questo intervallo viene utilizzato quando nello Store di appoggio ci sono al più MaximumRecordsPerPacket record

  • MinimumPublishTime: intervallo di tempo minimo dopo il quale si prelevano i dati dallo Store di appoggio e si inviano al Cloud. Questo intervallo viene utilizzato quando nello Store di appoggio ci sono almeno MaximumRecordsPerPacket record e di conseguenza si vuole aumentare la frequenza d’invio per scaricare la coda della Store

  • ClientId: l’Id del client che deve inviare i dati

  • BrokerIPAddress: contiene l’indirizzo del BrokerIPAddress

  • BrokerPort: porta del Broker (8883 se si vuole al comunicazione tramite SSL)

  • BrokerTopic: nome del topic sul quale si vuole pubblicare

  • QoS: Quality Of Service utilizzata per l’invio delle informazioni. I valori ammessi sono:

    • 0: AT_MOST_ONCE

    • 1: AT_LEAST_ONCE

    • 2: EXACTLY_ONCE

  • UseSSL: attiva/disattiva la comunicazione sicura

    • CACert: il percorso del file che contiente la CA (deve essere in formato .pem)

    • ClientCert: il percorso che contiene il certificato del Client (deve essere in formato .pfx)

    • ClientCertPassword: la password del certificato del Client

  • Username: contiene username per una comunicazione autenticata con il Broker

  • Password: contiene la password per la comunicazione autenticata con il Broker

Una volta configurato il Data logger e il Push agent è possibile testare l’invio dei dati sul Cloud tramite MQTT.

Esempio configurazione Eclipse Mosquitto

Alcune configurazioni valide per comunicare con il Broker utilizzando le differenti modalità supportate:

  1. Anonima:

    • ClientId: testId

    • BrokerIPAddress: 127.0.0.1

    • BrokerPort: 1883

    • BrokerTopic: my_custom_topic

    • QoS: 2

    • UseSSL: false

    • Username:

    • Password:

  2. Autenticata:

    • ClientId: testId

    • BrokerIPAddress: 127.0.0.1

    • BrokerPort: 1883

    • BrokerTopic: my_custom_topic

    • QoS: 2

    • UseSSL: false

    • Username: pippo

    • Password: pluto

  3. Sicura:

    • ClientId: testId

    • BrokerIPAddress: 127.0.0.1

    • BrokerPort: 8883

    • BrokerTopic: my_custom_topic

    • QoS: 2

    • UseSSL: true

      • CACert: percorso/al/certificato/CA

      • ClientCert: percorso/al/certificato/del/client

      • ClientCertPassword: passwordCertificatoClient

    • Username: pippo

    • Password: pluto

Esempio configurazione Azure IoT Hub

Una configurazione valida per l’invio e ricezione dati con IoT Hub è la seguente:

  • ClientId: MyDevice01

  • BrokerIPAddress: contoso.azure-devices.net

  • BrokerPort: 8883

  • BrokerTopic: devices/MyDevice01/messages/event/

  • QoS:1

    • Iot Hub non supporta il QoS di livello 2. Nel caso in cui venisse utilizzato IoT Hub chiude la connesione ad ogni invio di messaggio.

  • UseSSL: true

    • CACert:

    • ClientCert:

    • ClientCertPassword:

  • Username: contoso.azure-devices.net/MyDevice01/?api-version=2018-06-30

  • Password: SharedAccessSignaturesig={signature-string}&se={expiry}&sr={URL-encoded-resourceURI}

Esempio configurazione Subscriber

Il Push agent include tutta la parte relativa all’invio dei dati sul cloud; tuttavia, c’è anche la possibilità di ricevere i dati dal cloud configurando correttamente la parte di Subscribe.

La ricezione viene gestita da una funzione custom che viene richiamata ad ogni ricezione del messaggio. La funzione riceve il messaggio e lo elabora in base alla logica definita nella funzione. Un esempio di funzione che elabora un messaggio ricevuto aggiornando il valore di una variable Message è illustrato di seguito:

private void SubscribeClientMqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e)
{
   var messageVariable = Project.Current.GetVariable("Model/Message");
   messageVariable.Value = "Message received: " + System.Text.Encoding.UTF8.GetString(e.Message);
}

Questa funzione viene passata come parametro di configurazione per il Subscriber. La configurazione del Subscriber avviene nel metodo Start(), nel quale, oltre alla configurazione base del Publisher, si specifica anche la configurazione del Subscriber:

public void Start()
{
   // PushAgent Default configuration

   // Add subscriber
   mqttClientConnector.AddSubscriber("my_custom_subscriber_topic", 1, SubscribeClientMqttMsgPublishReceived);
}

Esempio Push agent

L’esempio mostra le principali funzionalità del Push agent. L’interfaccia grafica contiene una griglia di dati che illustra i campioni rilevati dal Data logger in base alla modalità selezionata, che può essere cambiata nel menù a tendina.

In prosimità alla griglia dati troviamo il pulsante Refresh che aggiorna la griglia e il pulsante Log che inserisce nel Data logger una riga con i valori delle variabili campionate. In questo esempio le variabili monitorate sono 5 ed ognuna di queste è stata configurata per mostrare le varie modalità supportate dal Data logger.

Nella parte inferiore dell’interfaccia è possibile modificare i parametri di configurazione delle variabili monitorate e del Data logger. Per inviare i dati sul cloud è necessario configurare tutti i parametri relativi al broker.

A titolo di esempio è stata inserita un configurazione che si collega ad un broker Mosquitto in locale. I dati inviati possono essere visualizzati da un qualsiasi Subscriber, ad esempio utilizzando il programma MQTT.fx.

Scarica il progetto di esempio da qui.

Vedi anche

Riferimenti

Broker Supportati