This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Mqtt simple nrf9160, send JSON as utf-8

Hi,

I have configured the MQTT simple sample from nordic to send data to our broker, this works just fine at the moment.

I would like to send Json formated data to the broker ----->

{
"sensor_id": "c5278fbf-c6d5-4c48-b51d-652beb609b34",
"value": 13.0
}

When I subscribe to topic, I only see "{" as incoming data.

How can I make sure that the Json data is correctly formated i code ?

Any assistance would be appreciated.

I am using the <cJSON.h> library.

char field_name[80], value[80], *out;
                cJSON *root,*car;



                //char str1[80] = "{'sensor_id:' 'c5278fbf-c6d5-4c48-b51d-652beb609b34','value:' 13.0}";

                root  = cJSON_CreateObject();
                car=  cJSON_CreateArray();

                cJSON_AddItemToObject(root, "sensor_id", cJSON_CreateString("c5278fbf-c6d5-4c48-b51d-652beb609b34"));
                cJSON_AddItemToObject(root, "value", cJSON_CreateString("12"));
                cJSON_AddItemToArray(car, root);

                out = cJSON_Print(root);
                printk(out);
                //char out1 = {"sensor_id"":""c5278fbf-c6d5-4c48-b51d-652beb609b34","value"":""13.0"};
                k_sleep(K_MSEC(5000));
                data_publish(&client, MQTT_QOS_1_AT_LEAST_ONCE, car, sizeof(car));
                k_sleep(K_MSEC(5000));

David

Parents
  • Hello, David!

    I managed to publish and receive jSON data using the following code: 

    static void transmit() {
       char *out;
       char *id1 = "c5278fbf-c6d5-4c48-b51d-652beb609b34"; 
       char *id2 = "c5278fgf-c6d5-4c48-b51d-652beb6s9b34"; 
       char *value1 = "13.0";
       char *value2 = "117.0";
       cJSON *root, *sensors, *sensor;
    
       /* create root node and array */
       root = cJSON_CreateObject();
       sensors = cJSON_CreateArray();
    
       /* add sensors array to root */
       cJSON_AddItemToObject(root, "sensors", sensors);
    
       /* add 1st sensor to sensors array */
       cJSON_AddItemToArray(sensors, sensor = cJSON_CreateObject());
       cJSON_AddItemToObject(sensor, "value", cJSON_CreateString(value1));
       cJSON_AddItemToObject(sensor, "sensor_id", cJSON_CreateString(id1));
    
       /* add 1st sensor to sensors array */
       cJSON_AddItemToArray(sensors, sensor = cJSON_CreateObject());
       cJSON_AddItemToObject(sensor, "value", cJSON_CreateString(value2));
       cJSON_AddItemToObject(sensor, "sensor_id", cJSON_CreateString(id2));
    
       /* print everything */
       out = cJSON_Print(root);
       printk("%s\n", out);
    
       /* Publish with MQTT */
       data_publish(&client, MQTT_QOS_1_AT_LEAST_ONCE,
    				out, strlen(out));
    
       free(out);
    
       /* free all objects under root and root itself */
       cJSON_Delete(root);
    
       return;
    }

    Could you try to adapt this to your use? 

    Edit: code is based on the following stack overflow ticket.

    Best regards,
    Carl Richard

Reply
  • Hello, David!

    I managed to publish and receive jSON data using the following code: 

    static void transmit() {
       char *out;
       char *id1 = "c5278fbf-c6d5-4c48-b51d-652beb609b34"; 
       char *id2 = "c5278fgf-c6d5-4c48-b51d-652beb6s9b34"; 
       char *value1 = "13.0";
       char *value2 = "117.0";
       cJSON *root, *sensors, *sensor;
    
       /* create root node and array */
       root = cJSON_CreateObject();
       sensors = cJSON_CreateArray();
    
       /* add sensors array to root */
       cJSON_AddItemToObject(root, "sensors", sensors);
    
       /* add 1st sensor to sensors array */
       cJSON_AddItemToArray(sensors, sensor = cJSON_CreateObject());
       cJSON_AddItemToObject(sensor, "value", cJSON_CreateString(value1));
       cJSON_AddItemToObject(sensor, "sensor_id", cJSON_CreateString(id1));
    
       /* add 1st sensor to sensors array */
       cJSON_AddItemToArray(sensors, sensor = cJSON_CreateObject());
       cJSON_AddItemToObject(sensor, "value", cJSON_CreateString(value2));
       cJSON_AddItemToObject(sensor, "sensor_id", cJSON_CreateString(id2));
    
       /* print everything */
       out = cJSON_Print(root);
       printk("%s\n", out);
    
       /* Publish with MQTT */
       data_publish(&client, MQTT_QOS_1_AT_LEAST_ONCE,
    				out, strlen(out));
    
       free(out);
    
       /* free all objects under root and root itself */
       cJSON_Delete(root);
    
       return;
    }

    Could you try to adapt this to your use? 

    Edit: code is based on the following stack overflow ticket.

    Best regards,
    Carl Richard

Children
No Data
Related