Feature

Get the Best Solution for Your Fun

A platform to manage streams of data from the Internet of things, a simple version based on Arduino that anyone can use.

Feature Feature

Project: Read ZTE MF823 - LTE Modem - Status

Connection : Network
Need : Arduino
Need : Ethernet shield

LTE Value:

RSRP - Reference Signal Received Power:
Reporting range -44dBm | -140dBm

RSRQ - Reference Signal Received Quality:
Reporting range -3dB | -19.5dB

RSSI - Received Signal Strength Indicator:
Reporting range 0dB | 100dB

SINR - Signal to Interference & Noise Ratio:
Reporting range 0dB | 100dB

Table classification of RF conditions Vs LTE KPIs:

RSRP RSRQ SINR
Excellent >= -80 >= -10 >= 20
Good -80 to -90 -10 to -15 13 to 20
Mid Cell -90 to -100 -15 to 20 0 to 13
Cell Edge <= -100 < -20 <=0


ZTE MF823 GET Command:

The ZTE can be read via HTTP GET command

Basic Information

http://192.168.0.1/goform/goform_get_cmd_process?multi_data=1&cmd=network_provider,network_type,signalbar,system_uptime

Signal Information (we need this)

http://192.168.0.1/goform/goform_get_cmd_process?multi_data=1&cmd=lte_rsrp,lte_rsrq,lte_rssi,lte_snr
Response is json string:{"lte_rsrp":"-99","lte_rsrq":"-10","lte_rssi":"-72","lte_snr":"11.4"}

  • 1 - Steep register to www.dataino.it and login

  • 2 - Go to CREATE page

Edit project name, description, connection

  • 3 - Press icon cog

    The configuration panel will open. Push the button again to hide the configuration panel.

  • Change data

    You can change the name to the project , change the type of connection of the IoT, change the name to the IoT.

    Project name = LTE
    Connection = "Network"
    Iot name = ZTE MF823

Feature
Feature

Add gauges

  • 4 - Press gauge Button on the top left

    Will appear on the gauges panel, using the buttons at the top you can choose which of the gauge you want to add the dashboard. Push the button again to hide the gauge panel.

Add gauge

  • 5 - Add four "VU meter" gauges


    a) Label RSRP, type:int, max:-44, min:-140, value:-140, unit dBm
    b) Label RSRQ, type:dec, max:-3, min:-19.5, value:-19.5, unit dB
    c) Label RSSI, type:int, max:100, min:0, value:0, unit dB
    d) Label SINR, type:int, max:100, min:0, value:0, unit dB

Feature
Feature
Feature
Feature
Feature
Feature
Feature
Feature

Add gauges

  • 6 - Add four "LED" gauge


    a) Label "Excellent", color green
    b) Label "Good", color yellow
    c) Label "Mid Cell", color orange
    d) Label "Cell Edge", color red

Gauges position

  • 9 - Adjust the gauge position

    Gauges can be moved around the interface to your liking by dragging and drop.

  • 10 - Save project

Feature
Feature

Edit delete gauges

  • 11 - If something in a gauge must be changed or if the gauge should be deleted.

    Drag gauge over the buttons edit gauges panel will open.

Get code

  • 12 - Activate code container

    Button on top right button, select all and copy base code.

  • 13 - Save project

Feature
Feature

Arduino IDE

  • 14 - Paste code on Arduino IDE

  • 15 - Edit code

    Add this line in the library

    #include <ArduinoJson.h>          // ++ 
    
    Edit this value
    char userName[] = "insert your login";           // Reserved not divulgate
    char password[] = "insert your password";        // Reserved not divulgate
    
    (see [Edit user data] page to retrive password)

    Add this line in initial definition
    //*****************************************************************************
    //**                              LTE Init                                   **
    //*****************************************************************************
    EthernetClient lteClient;                       // ++
    IPAddress LTE( 192, 168, 0, 1 );                // ++ numeric IP
    unsigned int JsonBufferIndex = 0;               // ++
    unsigned int contDouble = 0;                    // ++
    unsigned long start = millis();                 // ++
    boolean printData = false;                      // ++
    int linee = 0;                                  // ++
    
    
    Add this block of code lines in loop() void
      // **************************************************************************
      // **                         READ LTE STATS                               **
      // **************************************************************************
      //         10        20        30        40        50       60         70
      // 12345678901234567890123456789012345678901234567890123456789012345678901234
      // {"signalbar":4,"lte_rsrp":-95,"lte_rsrq":-8,"lte_rssi":-68,"lte_snr":12.2}
      // **************************************************************************
      StaticJsonBuffer<100> jsonBuffer;                 // ++
      char jbuffer[ MAX_STRING_LEN ] = "";              // ++
      // **************************************************************************
      // if there are incoming bytes available
      // from the server, read them and get json values:
      // **************************************************************************
      while ( lteClient.available() ) {                 // ++
        char c = lteClient.read();                      // ++
        //Serial.print( c );                            // ++
        if ( printData == true ) {                      // ++
          if ( c == 0x22  ) {                           // ++
            contDouble++;                               // ++
            if ( contDouble == 1 || contDouble == 2 ) { // ++
              jbuffer[ JsonBufferIndex ] = c;           // ++
              JsonBufferIndex++;                        // ++
            } else {                                    // ++
              c = lteClient.read();                     // ++
              jbuffer[ JsonBufferIndex ] = c;           // ++
              JsonBufferIndex++;                        // ++
            }                                           // ++
          } else {                                      // ++
            jbuffer[ JsonBufferIndex ] = c;             // ++
            JsonBufferIndex++;                          // ++
          }                                             // ++
        }                                               // ++
        // ************************************************************************
        // **                            End of Line                             **
        // ************************************************************************
        if ( c == 0x0A ) {                              // ++
          linee++;                                      // ++
          // **********************************************************************
          // **                     Line 6 contain values                        **
          // **********************************************************************
          if ( linee == 6 ) {                           // ++
            JsonBufferIndex = 0;                        // ++
            contDouble = 0;                             // ++
            printData = true;                           // ++
          }                                             // ++
        }                                               // ++
        // ************************************************************************
        // **                                                                    **
        // ************************************************************************
        if ( contDouble == 4 ) {                        // ++
          contDouble = 0;                               // ++
        }                                               // ++
        // ************************************************************************
        // **                                                                    **
        // ************************************************************************
        if ( c == 0x7D ) {                              // ++
          JsonBufferIndex = 0 ;                         // ++
          printData = false;                            // ++
          linee = 0;                                    // ++
          contDouble = 0;                               // ++
          // ***********************************************************************
          // **                                                                   **
          // ***********************************************************************
          JsonObject& root = jsonBuffer.parseObject( jbuffer ); // ++
    
          if ( !root.success() ) {                      // ++
            Serial.println("parseObject() failed");     // ++
          } else {                                      // ++
            // VU00 = RSRP -- VU01 = RSSI -- VU02 = RSRQ -- VU03 = SINR  // ++
            int signalbar = root["signalbar"];          // ++
            VU00 = root["lte_rsrp"];                    // ++
            VU02 = root["lte_rsrq"];                    // ++
            VU01 = root["lte_rssi"];                    // ++
            VU03 = root["lte_snr"];                     // ++
            strncpy( rqs, IOT, 5 );                     // ++
            SendValue( VU00iD );                        // ++
            SendValue( VU01iD );                        // ++
            SendValue( VU02iD );                        // ++
            SendValue( VU03iD );                        // ++
    
            LED00 = 0;                                  // ++
            LED01 = 0;                                  // ++
            LED02 = 0;                                  // ++
            LED03 = 0;                                  // ++
    
            SendValue( LED00iD );                       // ++
            SendValue( LED01iD );                       // ++
            SendValue( LED02iD );                       // ++
            SendValue( LED03iD );                       // ++
    
            if ( VU00 >= -80 && VU02 >= -10 && VU03 >= 20 ) {
              // ********************************************************************
              // **                        EXCELLENT                               **
              // ********************************************************************
              LED00 = 1;                                // ++
              SendValue( LED00iD );                     // ++
            } else if (
              ( VU00 >= -90 && VU00 < -80 ) &&
              (VU02 >= -15.00 && VU02 < -10.00 ) &&
              ( VU03 >= 13 && VU03 < 20 ) ) {
              // ********************************************************************
              // **                          GOOD                                  **
              // ********************************************************************
              LED01 = 1;                                // ++
              SendValue( LED01iD );                     // ++
            } else if (
              ( VU00 >= -100 && VU00 < -90 ) &&
              (VU02 >= -20.00 && VU02 < -50.00 ) &&
              ( VU03 >= 0 && VU03 < 13 ) ) {
              // ********************************************************************
              // **                           MID                                  **
              // ********************************************************************
              LED02 = 1;                                // ++
              SendValue( LED02iD );                     // ++
            } else if ( VU00 <= -100 && VU02 >= -20.00 && VU03 <= 0 ) {
              // ********************************************************************
              // **                           EDGE                                 **
              // ********************************************************************
              LED03 = 1;                                // ++
              SendValue( LED03iD );                     // ++
            } else {                                    // ++
              LED00 = 1;                                // ++
              LED01 = 1;                                // ++
              LED02 = 1;                                // ++
              LED03 = 1;                                // ++
              delay(250);                               // ++
              SendValue( LED03iD );                     // ++
              delay(250);                               // ++
              SendValue( LED02iD );                     // ++
              delay(250);                               // ++
              SendValue( LED01iD );                     // ++
              delay(250);                               // ++
              SendValue( LED00iD );                     // ++
            }                                           // ++
          }                                             // ++
        }                                               // ++
      }                                                 // ++
      // ************************************************************************
      // **                       Check new values on LTE                      **
      // ************************************************************************
      if ( millis() - start > 2500 ) {                  // ++
        start = millis();                               // ++
        // ***********************************************************************
        // **                        Make a HTTP request                        **
        // ***********************************************************************
        if ( lteClient.connect( LTE, 80) ) {            // ++
          lteClient.println( F( "GET /goform/goform_get_cmd_process?multi_data=1&cmd=signalbar,lte_rsrp,lte_rsrq,lte_rssi,lte_snr HTTP/1.1" ) ); // ++
          lteClient.println( F( "Host: 192.168.0.1" ) );// ++
          lteClient.println( F( "Connection: close" ) );// ++
          lteClient.println();                          // ++
        } else {                                        // ++
          // if you didn't get a connection to the server: // ++
          Serial.println( F("HTTP failed") );           // ++
        }                                               // ++
      }                                                 // ++
      // *************************************************************************
      // **         if the server's disconnected, stop the client               **
      // *************************************************************************
      if ( !lteClient.connected() && printData == false ) { // ++
        lteClient.stop();                                   // ++
      }                                                     // ++
    
    

  • 15 - Upload sketch

    My full code

    View Full Code

Watch Video

Dataino web-interface