Vai al contenuto

MlsDevice, Milesight device manager

Vai all indice del manuale di programmazione
Tipo: Blocco Funzione
Libreria LogicLab: eLLabMQTTLib
Libreria Codesys: Non disponibile

Questo blocco funzione da eseguire in task Back, esegue la gestione dei dispositivi Milesight. Il FB si connette al gateway LoRaWAN tramite il FB MQTTClient.

Descrizione

Enable (BOOL) Attivandolo viene abilitata l’esecuzione del FB.
SpyOn (BOOL) Se attivo permette di spiare il funzionamento del FB (Vedi articolo).
MQTT (@MQTTClient_v3) Indirizzo allocazione FB MQTTClient di supporto.
DTopic (@STRING) Definizionme topic a cui il device appartiene (Es. application/1/device).
EUI (@STRING]) Definizione 64-bit (Extended Unique Identifier), identificativo univoco del dispositivo.
Timeout (TIME) Tempo controllo dispositivo attivo, se non si ricevono dati in questo tempo viene segnalato errore (Deve essere impostato almeno al doppio del valore di report interval).
Fault (BOOL) Attivo per un loop se errore esecuzione.
DInit (BOOL)Si attiva per un loop alla inizializzazione del dispositivo. E’ possibile eseguire l’invio di comandi in downlink di inizializzazione.
Active (BOOL) Attivo se dispositivo linkato.
OnError (BOOL) Attivo se dispositivo in errore.
RxOTrig (BOOL) Si attiva per un loop alla ricezione di un uplink dal dispositivo.
RSSI (REAL) (Received Signal Strength Indicator), indica la qualità del segnale ricevuto dal dispositivo (dBm).
SNR (REAL) (Signal-to-Noise Ratio), indica il livello del segnale rispetto al rumore di ambiente (dB).
Battery (USINT) Livello batteria (%).
ETime (TIME) Tempo trascorso da ultima ricezione uplink da dispositivo.
RxObject (@STRING) Se attivo RxOTrig ritorna dato ricevuto in uplink da dispositivo.
RxOLength (UDINT) Se attivo RxOTrig ritorna dimensione dato ricevuto in uplink da dispositivo.
RxOTrig (BOOL) Si attiva per un loop alla ricezione di un uplink dal dispositivo.
RxPkts (UDINT) Counter pacchetti dati ricevuti (Uplink) dal dispositivo.
TxPkts (UDINT) Counter pacchetti dati trasmessi (Downlink) al dispositivo.
Errors (UDINT) Counter errori comunicazione con dispositivo.

Immagine FB MlsDevice
RSSI

Il Received Signal Strength Indicator RSSI indica la potenza del segnale ricevuto in milliwatt e viene misurata in dBm. Questo valore è utilizzato come misura della capacità di un ricevitore di “sentire” un segnale proveniente da un mittente. L’RSSI è un valore negativo e quanto più vicino allo 0, migliore è il segnale, i valori RSSI LoRa tipici sono:

  • RSSI minimo = -120 dBm.
  • Se RSSI=-30dBm: il segnale è forte.
  • Se RSSI=-120dBm: il segnale è debole.
SNR

Il Signal-to-Noise Ratio SNR è il rapporto tra il segnale ricevuto ed il livello del rumore di fondo. Il rumore di fondo è costituito da tutte le sorgenti di segnale indesiderate che possono corrompere il segnale trasmesso che ne provocano la ritrasmissione. Se SNR è maggiore di 0, il segnale ricevuto opera al di sopra del rumore di fondo. Se SNR è inferiore a 0, il segnale ricevuto opera al di sotto del rumore di fondo. Anche se normalmente nelle trasmissioni radio il rumore di fondo è il limite fisico della sensibilità, LoRa funziona al di sotto del livello di rumore. I valori SNR LoRa tipici sono:

  • Valore ottimali: SNR > 0 dB
  • Valori in media: -5dB > SNR <= 0dB
  • Valori che indicano un livello di segnale al di sotto del rumore di fondo: SNR < -5dB

Metodi disponibili

DeviceError

Questo metodo permette di segnalare al FB MlsDevice una condizione di errore.

Il metodo ritorna un (BOOL) TRUE.

Immagine metodo MlsDevice.DeviceError
DLinkValue

Questo metodo permette di inviare un payload al dispositivo vedi comandi di downlink. Nei dispositivi in classe A il comando verrà inviato solo in seguito alla ricezione di un uplink, nei dispositivi in classe C il comando viene subito inviato.

Name (@STRING) Definizione nome variabile da inserire nel payload.
VType (VR_TYPE) Tipo variabile da inserire nel payload (Vedi definizione).
VAddress (PVOID) Indirizzo variabile da inserire nel payload.

Il Il metodo ritorna un (BOOL) TRUE.

Immagine metodo MlsDevice.DLinkValue
DLinkJSON

Questo metodo permette di inviare un payload al dispositivo vedi comandi di downlink. Nei dispositivi in classe A il comando verrà inviato solo in seguito alla ricezione di un uplink, nei dispositivi in classe C il comando viene subito inviato.

Payload (@STRING) Definizione payload in formato JSON da inviare in downlink al dispositivo.

Il Il metodo ritorna un (BOOL) TRUE.

Immagine metodo MlsDevice.DLinkJSON

Milesight payload codec

Il Milesight payload codec è un sistema per codificare e decodificare i dati scambiati con i sensori Milesight, progettato per:

  • Ridurre al minimo le dimensioni dei dati: le reti LoRaWAN hanno limitazioni sulla quantità di dati inviati in un singolo messaggio (payload). Il codec comprime i dati in un formato più piccolo ed efficiente.
  • Garantire l’integrità dei dati: il codec spesso include meccanismi per il rilevamento e la correzione degli errori, assicurando che i dati ricevuti siano corretti.
  • Standardizzare il formato dei dati: fornisce una interfaccia JSON per i dati, rendendone più facile la gestione.

Il codec presente sul gateway esegue

  • Decodifica (Decoder): Il sensore raccoglie i valori (ad esempio, temperatura, umidità, ecc), li codifica in formato binario e li invia in uplink al gateway. Il gateway decodifica i dati ricevuti ritornandoli al programma applicativo in formato JSON.
  • Codifica (Encoder): Il programma applicativo invia i comandi al gateway in formato JSON, il gateway codifica i dati in formato binario e li invia in downlink al sensore che esegue il comando.

Molti codecs sono preinstallati di default nel gateway, è comunque possibile reperirne altri in rete in questa pagina. Anche se è possibile utilizzare i codecs standard, per ottenere il massimo delle prestazioni con il nostro FB è possibile scaricare dal ns sito codecs ottimizzati per i dispositivi più utilizzati.

Comandi di downlink

Il comando di downlink da inviare varia in base al programma di codifica Encoder utilizzato, di seguito le definizioni normalmente utilizzate:

DispositivoComando
EM300report_interval: Permette di impostare il tempo di reporting (S)
UC300report_interval: Permette di impostare il tempo di reporting (S)
UC51xreport_interval: Permette di impostare il tempo di reporting (S)
response_time: Permette di impostare il tempo di response (S)
Valori in uplink

uplink ritornato varia in base al programma di decodifica Decoder utilizzato, di seguito le definizioni normalmente utilizzate:

DispositivoValore
EM300temperature: Valore di temperatura (°C)
humidity: Valore di umidita (%)
UC300gpio_output_1: Stato uscita logica DO_1
gpio_output_2: Stato uscita logica DO_2
UC51xvalve_1: Stato solenoide valvola OUT1
valve_2: Stato solenoide valvola OUT2

Trigger di spy

Se SpyOn attivo è possibile utilizzare utilizzare la console di spionaggio per verificare il funzionamento della FB. Sono previsti vari livelli di triggers.

Livelli di trigger
TriggerDescrizione
16#00000001Rx: Dato ricevuto in uplink.
16#00000002Tx: Dato trasmesso in downlink.
16#10000000Lg: Log di esecuzione.
16#40000000Er: Errore di esecuzione.

Esempi

Come utilizzare gli esempi.

Gestione EM300-TH sensore temperatura ed umidità LoRaWAN della Milesight.

LogicLab (Ptp208, ST_MlsDevice)
PROGRAM ST_MlsDevice
VAR
    Temperature:REAL; (* Temperature (°C) *)
    Humidity:REAL; (* Humidity (%) *)
    SPData : MQTT_TS_DATA; (* MQTT topic subscribe data *)
    TCPClient : SysTCPClient; (* TCP client management *)
    FIFO : FIFOFile_v1; (* FIFO on file *)
    MQTT : MQTTClient_v3; (* MQTT client FB *)
    MDev : MlsDevice; (* Milesight device manager *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_MlsDevice"
// *****************************************************************************
// Is managed a EM300-TH temperature and humidity sensor.
// -----------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // INITIALIZATION
    // -------------------------------------------------------------------------
    // Initialize the FBs parameters.

    IF (SysFirstLoop) THEN

        // Set FIFO parameters.

        FIFO.FIFOFilename:=eNULL; //Path and name of FIFO file
        FIFO.FIFOSize:=2048; //FIFO file size
        FIFO.FIFOIDx:=eNULL; //FIFO indexes

        // Set TCPClient parameters.

        TCPClient.PeerAdd:=ADR('192.168.1.150'); //Peer address
        TCPClient.PeerPort:=1883; //Peer port
        TCPClient.LocalAdd:=ADR('0.0.0.0'); //Local address
        TCPClient.LocalPort:=0; //Local port
        TCPClient.FlushTm:=0; //Flush time (mS)
        TCPClient.LifeTm:=90; //Life time (S)
        TCPClient.RxSize:=1512; //Rx buffer size
        TCPClient.TxSize:=512; //Tx buffer size

        // Set MQTTClient parameters.

        MQTT.SpyOn:=FALSE; //Spy active
        MQTT.FIFOFile:=ADR(FIFO); //FIFO on file
        MQTT.CFlags:=16#02; //Clean session
        MQTT.Username:=ADR('loraadm'); //Broker username
        MQTT.Password:=ADR('URloraadm123456'); //Broker password
        MQTT.ClientID:=eNULL; //Client identifier
        MQTT.KeepAlive:=T#90s; //Keep alive time
        MQTT.Delay:=T#1s; //Send delay time
        MQTT.Timeout:=T#5s; //Execution timeout

        // Topic subscribe definitions.
        // Subscribe to all applications and all devices rx data.

        MQTT.TSData:=ADR(SPData); //Topic subscribe data
        MQTT.TSNumber:=1; //Topic subscribe number
        eTO_JUNK(MQTT.Subscribe(0, ADR('application/+/device/+/rx'), eNULL, 0, 0));

        // Milesight device definitions.

        MDev.Enable:=TRUE; //FB enable
        MDev.SpyOn:=TRUE; //Spy On
        MDev.MQTT:=ADR(MQTT); //MQTT client
        MDev.DTopic:=ADR('application/1/device'); //Device topic
        MDev.EUI:=ADR('24e124136e313438'); //Device EUI
        MDev.Timeout:=T#10m; //Timeout
    END_IF;

    // -------------------------------------------------------------------------
    // FBs EXECUTION
    // -------------------------------------------------------------------------
    // FBs execution.

    TCPClient(Connect:=MQTT.Connect); //TCPClient management
    MQTT(Enable:=TRUE, File:=TCPClient.File); //MQTTClient management

    // Device management, send the init downlink settings.

    MDev(); //Milesight device manager
    IF (MDev.DInit) THEN
        eTO_JUNK(MDev.DLinkJSON(ADR('{"report_interval":120}'))); //Set reporting interval, 120 (S)
    END_IF;

    // Not needed, is just to show how to spy the complete uplink message.

    // IF (MDev.RxOTrig) THEN eTO_JUNK(SysWrSpyData(SPY_ASCII, 0, 16#00000001, ADR('----'), MQTT.RxValue)); END_IF;

    // The managed device is a EM300-TH so acquire its measures.

    IF NOT(MDev.RxOTrig) THEN RETURN; END_IF;
    eTO_JUNK(JSONDecoder(MDev.RxObject, ADR('temperature'), REAL_TYPE, ADR(Temperature), 1, 0));
    eTO_JUNK(JSONDecoder(MDev.RxObject, ADR('humidity'), REAL_TYPE, ADR(Humidity), 1, 0));

// [End of file]

Was this article helpful?