MQTTCBeebotte, client MQTT Beebotte

List

Questa pagina fa parte del Manuale Programmazione IEC 61131-3. Vai all indice.

Questa funzione permette di pubblicare topic su servizio cloud Beebotte una piattaforma cloud per oggetti connessi in tempo reale (Articolo), la funzione utilizza il FB MQTTClient per inviare i dati con il protocollo MQTT.

Information Circle

Funzione

CODESYS: Non disponibile

LogicLab: eLLabMQTTLib

Decrizione

MQTT (@MQTTClient_v3) Occorre indicare l’indirizzo di allocazione del FB MQTTClient che sarà utilizzato dalla funzione per gestire il protocollo MQTT.
Topic (@STRING) Puntatore stringa definizione nome topic.
DType (VR_TYPE) Tipo variabile da pubblicare.
DBuffer (PVOID) Indicare indirizzo della variabile da pubblicare.
QoS (USINT) Quality of service pubblicazione topic. Valori accettati 0 e 1.

La funzione ritorna un (BOOL) FALSE se errore esecuzione, TRUE se esecuzione corretta.

Immagine funzione MQTTCBeebotte

Esempi

Come utilizzare gli esempi.
In questo esempio viene gestita la sottoscrizione e la pubblicazione al servizio Beebotte al canale UserTest di due variabili REALValue e STRINGValue. Pubblicando un valore sarà possibile visualizzarlo nella dashboard, e contemporaneamente il valore pubblicato andrà a valorizzare la variabile sottoscritta.

LogicLab (Ptp208, ST_TPBeebotte)
PROGRAM ST_TPBeebotte
VAR
    i : UDINT; (* Auxiliary variable *)
    Publish : BOOL; (* Publish command *)
    TCPClient : SysTCPClient; (* TCP client management *)
    FIFO : FIFOFile_v1; (* FIFO on file *)
    MQTT : MQTTClient_v3; (* MQTT client FB *)
    RxSData : STRING[ 128 ]; (* Rx subscription data *)
    SPData : ARRAY[0..1] OF MQTT_TS_DATA; (* MQTT topic subscribe data *)
    REALValue : ARRAY[0..1] OF REAL; (* REAL value [Tx][Rx] *)
    STRINGValue : ARRAY[0..1] OF STRING[ 32 ]; (* STRING value [Tx][Rx] *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_TPBeebotte"
// *****************************************************************************
// This program subscribes and publish dato to Beebotte service.
// To see the sent data please visit
// https://beebotte.com/dash/74b90ea0-47d2-11e9-8573-fb68fdbc6d81#.Yzw7UkxByCp
// -----------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // 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('mqtt.beebotte.com'); //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:=512; //Rx buffer size
        TCPClient.TxSize:=512; //Tx buffer size

        // Set MQTTClient parameters.

        MQTT.SpyOn:=TRUE; //Spy active
        MQTT.FIFOFile:=ADR(FIFO); //FIFO on file
        MQTT.Username:=ADR('token_O6vzjmPn1A3lU38w'); //Username
        MQTT.Password:=eNULL; //Broker password
        MQTT.ClientID:=eNULL; //Client identifier
        MQTT.KeepAlive:=T#90s; //Keep alive time
        MQTT.Delay:=T#2s; //Send delay time
        MQTT.Timeout:=T#5s; //Execution timeout

        // Topic subscribe definitions.

        MQTT.TSData:=ADR(SPData); //Topic subscribe data
        MQTT.TSNumber:=SIZEOF(SPData)/SIZEOF(SPData[0]); //Topic subscribe number
        MQTT.TSNumber:=2; //Topic subscribe number

        i:=MQTT.Subscribe(0, ADR('UsersTest/REALValue'), ADR(RxSData), SIZEOF(RxSData), 0);
        i:=MQTT.Subscribe(1, ADR('UsersTest/STRINGValue'), ADR(RxSData), SIZEOF(RxSData), 0);
    END_IF;

    // -------------------------------------------------------------------------
    // BEEBOTTE SUBSSCRIBE AND PUBLISH
    // -------------------------------------------------------------------------
    // FBs management.

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

    // Manage received subscriptions, is received a JSON string as below:
    // {"data":123456,"ispublic":true,"ts":1560781762147}

    IF (SPData[0].Status.0) THEN
        i:=JSONDecoder(ADR(RxSData), ADR('data'), REAL_TYPE, ADR(REALValue[1]), 1, SIZEOF(REALValue[1]));
    END_IF;

    IF (SPData[1].Status.0) THEN
        i:=JSONDecoder(ADR(RxSData), ADR('data'), STRING_TYPE, ADR(STRINGValue[1]), 1, 32);
    END_IF;

    // To publish topics set by debug the "Publish" variable.

    IF NOT(Publish) THEN RETURN; END_IF;
    Publish:=FALSE; //Publish command
    i:=MQTTCBeebotte(ADR(MQTT), ADR('UsersTest/REALValue'), REAL_TYPE, ADR(REALValue[0]), 0);
    i:=MQTTCBeebotte(ADR(MQTT), ADR('UsersTest/STRINGValue'), STRING_TYPE, ADR(STRINGValue[0]), 0);

// [End of file]
Was this article helpful?