[Backlogmanager] [FIWARE-JIRA] (HELP-15359) [fiware-stackoverflow] Temperature Sensor: LWM2M objects 3303 created

Fernando Lopez (JIRA) jira-help-desk at jira.fiware.org
Fri Jan 25 08:47:00 CET 2019


     [ https://jira.fiware.org/browse/HELP-15359?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Fernando Lopez reassigned HELP-15359:
-------------------------------------

       Assignee: Jose Gato Luis
    Description: 
Created question in FIWARE Q/A platform on 24-01-2019 at 14:01
{color: red}Please, ANSWER this question AT{color} https://stackoverflow.com/questions/54347716/temperature-sensor-lwm2m-objects-3303-created


+Question:+
Temperature Sensor: LWM2M objects 3303 created

+Description:+
Working with wakaama client implementation of the LWM2M and Fiware Orion (of course using IoTAgent). I already have raspberry Pi sensor collecting temperature and stores in SQLite DB.

The scenario I want implement is to have the IoTAgent observes the wakaama LWM2M client (I mean client send the data to the IoTAgent.

I already created the 3303 object in wakaama/example/client/object_temperature.c then build, and I can confirm the client connects to the IoTAgent as far IoT logs (see below).

time=2019-01-24T12:51:15.270Z | lvl=DEBUG | corr=3e578c67-f589-4348-afaf-225509e9c787 | trans=3e578c67-f589-4348-afaf-225509e9c787 | op=IoTAgentNGSI.MongoDBDeviceRegister | srv=n/a | subsrv=n/a | msg=Looking for device with id [raspiSensorTV]. | comp=IoTAgent
time=2019-01-24T12:51:15.299Z | lvl=DEBUG | corr=n/a | trans=n/a | op=LWM2MLib.Registration | msg=Registration request ended successfully
time=2019-01-24T12:51:15.349Z | lvl=DEBUG | corr=n/a | trans=n/a | op=LWM2MLib.InformationReporting | msg=Observing value from resource /3303/0/0 in device [1]


But unfortunately, no are measure is sent by the client. Is anything wrong with my object_temperature.c? Code reproduced:

#include "liblwm2m.h"
#include "lwm2mclient.h"

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <time.h>
#include <sqlite3.h>

//Resource Id's
#define RES_SENSOR_VALUE  5700
#define RES_SENSOR_UNITS  5701

typedef struct _prv_instance_
{
  struct _prv_instance_ * next;
  uint16_t     shortID;
  double       temp;
   char        unit[10];
} prv_instance_t;


static uint8_t prv_temperature_read(uint16_t instanceId,
                               int * numDataP,
                               lwm2m_data_t ** dataArrayP,
                               lwm2m_object_t * objectP)
{
   prv_instance_t * targetP;
   int i;
   sqlite3 *db;
   sqlite3_stmt *res;
   char temperature_val[30];

targetP = (prv_instance_t *)lwm2m_list_find(objectP->instanceList, instanceId);
if (NULL == targetP) return COAP_404_NOT_FOUND;

fprintf(stderr, "----------------- Entering in prv_temperature ----------------\n");
   // connect to the backend
int rc = sqlite3_open("../../urbansense.sqlite3", &db);

if (rc != SQLITE_OK) {
   fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));
   sqlite3_close(db);
   return 1;
   }
   else {
   fprintf(stderr, "Connection successful.\n" );
   }
rc = sqlite3_prepare_v2(db, "SELECT temperature_data FROM basic_environment ORDER BY ID DESC LIMIT 1", -1, &res, 0);
if (rc != SQLITE_OK) {
  fprintf(stderr, "Failed to fetch data: %s\n", sqlite3_errmsg(db));
  sqlite3_close(db);
  return 1;
  }
rc = sqlite3_step(res);
if (rc == SQLITE_ROW) {
  sprintf(temperature_val, "%s", sqlite3_column_text(res, 0));
  fprintf(stdout, "Temperature value ==== : %s\n", sqlite3_column_text(res, 0));
  sqlite3_finalize(res);
  sqlite3_close(db);
  }
 if(*numDataP == 0)
  {
     *dataArrayP = lwm2m_data_new(1);
     if (*dataArrayP == NULL) return COAP_500_INTERNAL_SERVER_ERROR;
     *numDataP = 1;
     (*dataArrayP)[0].id = RES_SENSOR_VALUE;
     (*dataArrayP)[1].id = RES_SENSOR_UNITS; 
   }
 for (i = 0; i < *numDataP; i++)
  {
     switch((*dataArrayP)[i].id)
     {
      case RES_SENSOR_VALUE:
          lwm2m_data_encode_float(targetP->temp, *dataArrayP +1);
           break;
      case RES_SENSOR_UNITS:
          lwm2m_data_encode_string(targetP->unit, *dataArrayP +1);
          break;
      default:
          return COAP_404_NOT_FOUND;
     }
  }
 return COAP_205_CONTENT;
}

lwm2m_object_t * get_object_temperature()
{
    /*
     * The get_object_temperature function create the object itself and return a pointer to the structure that represent it.
     */
    lwm2m_object_t * temperatureObj;

    temperatureObj = (lwm2m_object_t *)lwm2m_malloc(sizeof(lwm2m_object_t));

    if (NULL != temperatureObj)
    {
        memset(temperatureObj, 0, sizeof(lwm2m_object_t));

        /*
         * Assigns it's unique ID 3303
         */
        temperatureObj->objID = LWM2M_TEMPERATURE_OBJECT_ID;

        /*
         * and its unique instance
         *
         */
        temperatureObj->instanceList = (lwm2m_list_t *)lwm2m_malloc(sizeof(lwm2m_list_t));
        if (NULL != temperatureObj->instanceList)
        {
            memset(temperatureObj->instanceList, 0, sizeof(lwm2m_list_t));
        }
        else
        {
            lwm2m_free(temperatureObj);
            return NULL;
        }


        temperatureObj->readFunc     = prv_temperature_read;
        temperatureObj->userData = lwm2m_malloc(sizeof(prv_instance_t));


    }

    return temperatureObj;
}

void free_object_temperature(lwm2m_object_t * objectP)
{
    if (NULL != objectP->userData)
     {
       lwm2m_free(objectP->userData);
       objectP->instanceList = NULL;
      } 
    if(NULL != objectP->instanceList)
    {
      lwm2m_free(objectP->instanceList);
      objectP->instanceList = NULL; 
    }

    lwm2m_free(objectP);
}



  was:

Created question in FIWARE Q/A platform on 24-01-2019 at 14:01
{color: red}Please, ANSWER this question AT{color} https://stackoverflow.com/questions/54347716/temperature-sensor-lwm2m-objects-3303-created


+Question:+
Temperature Sensor: LWM2M objects 3303 created

+Description:+
Working with wakaama client implementation of the LWM2M and Fiware Orion (of course using IoTAgent). I already have raspberry Pi sensor collecting temperature and stores in SQLite DB.

The scenario I want implement is to have the IoTAgent observes the wakaama LWM2M client (I mean client send the data to the IoTAgent.

I already created the 3303 object in wakaama/example/client/object_temperature.c then build, and I can confirm the client connects to the IoTAgent as far IoT logs (see below).

time=2019-01-24T12:51:15.270Z | lvl=DEBUG | corr=3e578c67-f589-4348-afaf-225509e9c787 | trans=3e578c67-f589-4348-afaf-225509e9c787 | op=IoTAgentNGSI.MongoDBDeviceRegister | srv=n/a | subsrv=n/a | msg=Looking for device with id [raspiSensorTV]. | comp=IoTAgent
time=2019-01-24T12:51:15.299Z | lvl=DEBUG | corr=n/a | trans=n/a | op=LWM2MLib.Registration | msg=Registration request ended successfully
time=2019-01-24T12:51:15.349Z | lvl=DEBUG | corr=n/a | trans=n/a | op=LWM2MLib.InformationReporting | msg=Observing value from resource /3303/0/0 in device [1]


But unfortunately, no are measure is sent by the client. Is anything wrong with my object_temperature.c? Code reproduced:

#include "liblwm2m.h"
#include "lwm2mclient.h"

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <time.h>
#include <sqlite3.h>

//Resource Id's
#define RES_SENSOR_VALUE  5700
#define RES_SENSOR_UNITS  5701

typedef struct _prv_instance_
{
  struct _prv_instance_ * next;
  uint16_t     shortID;
  double       temp;
   char        unit[10];
} prv_instance_t;


static uint8_t prv_temperature_read(uint16_t instanceId,
                               int * numDataP,
                               lwm2m_data_t ** dataArrayP,
                               lwm2m_object_t * objectP)
{
   prv_instance_t * targetP;
   int i;
   sqlite3 *db;
   sqlite3_stmt *res;
   char temperature_val[30];

targetP = (prv_instance_t *)lwm2m_list_find(objectP->instanceList, instanceId);
if (NULL == targetP) return COAP_404_NOT_FOUND;

fprintf(stderr, "----------------- Entering in prv_temperature ----------------\n");
   // connect to the backend
int rc = sqlite3_open("../../urbansense.sqlite3", &db);

if (rc != SQLITE_OK) {
   fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));
   sqlite3_close(db);
   return 1;
   }
   else {
   fprintf(stderr, "Connection successful.\n" );
   }
rc = sqlite3_prepare_v2(db, "SELECT temperature_data FROM basic_environment ORDER BY ID DESC LIMIT 1", -1, &res, 0);
if (rc != SQLITE_OK) {
  fprintf(stderr, "Failed to fetch data: %s\n", sqlite3_errmsg(db));
  sqlite3_close(db);
  return 1;
  }
rc = sqlite3_step(res);
if (rc == SQLITE_ROW) {
  sprintf(temperature_val, "%s", sqlite3_column_text(res, 0));
  fprintf(stdout, "Temperature value ==== : %s\n", sqlite3_column_text(res, 0));
  sqlite3_finalize(res);
  sqlite3_close(db);
  }
 if(*numDataP == 0)
  {
     *dataArrayP = lwm2m_data_new(1);
     if (*dataArrayP == NULL) return COAP_500_INTERNAL_SERVER_ERROR;
     *numDataP = 1;
     (*dataArrayP)[0].id = RES_SENSOR_VALUE;
     (*dataArrayP)[1].id = RES_SENSOR_UNITS; 
   }
 for (i = 0; i < *numDataP; i++)
  {
     switch((*dataArrayP)[i].id)
     {
      case RES_SENSOR_VALUE:
          lwm2m_data_encode_float(targetP->temp, *dataArrayP +1);
           break;
      case RES_SENSOR_UNITS:
          lwm2m_data_encode_string(targetP->unit, *dataArrayP +1);
          break;
      default:
          return COAP_404_NOT_FOUND;
     }
  }
 return COAP_205_CONTENT;
}

lwm2m_object_t * get_object_temperature()
{
    /*
     * The get_object_temperature function create the object itself and return a pointer to the structure that represent it.
     */
    lwm2m_object_t * temperatureObj;

    temperatureObj = (lwm2m_object_t *)lwm2m_malloc(sizeof(lwm2m_object_t));

    if (NULL != temperatureObj)
    {
        memset(temperatureObj, 0, sizeof(lwm2m_object_t));

        /*
         * Assigns it's unique ID 3303
         */
        temperatureObj->objID = LWM2M_TEMPERATURE_OBJECT_ID;

        /*
         * and its unique instance
         *
         */
        temperatureObj->instanceList = (lwm2m_list_t *)lwm2m_malloc(sizeof(lwm2m_list_t));
        if (NULL != temperatureObj->instanceList)
        {
            memset(temperatureObj->instanceList, 0, sizeof(lwm2m_list_t));
        }
        else
        {
            lwm2m_free(temperatureObj);
            return NULL;
        }


        temperatureObj->readFunc     = prv_temperature_read;
        temperatureObj->userData = lwm2m_malloc(sizeof(prv_instance_t));


    }

    return temperatureObj;
}

void free_object_temperature(lwm2m_object_t * objectP)
{
    if (NULL != objectP->userData)
     {
       lwm2m_free(objectP->userData);
       objectP->instanceList = NULL;
      } 
    if(NULL != objectP->instanceList)
    {
      lwm2m_free(objectP->instanceList);
      objectP->instanceList = NULL; 
    }

    lwm2m_free(objectP);
}



     HD-Enabler: IDAS

> [fiware-stackoverflow] Temperature Sensor: LWM2M objects 3303 created
> ---------------------------------------------------------------------
>
>                 Key: HELP-15359
>                 URL: https://jira.fiware.org/browse/HELP-15359
>             Project: Help-Desk
>          Issue Type: Monitor
>          Components: FIWARE-TECH-HELP
>            Reporter: Backlog Manager
>            Assignee: Jose Gato Luis
>              Labels: c++, fiware
>
> Created question in FIWARE Q/A platform on 24-01-2019 at 14:01
> {color: red}Please, ANSWER this question AT{color} https://stackoverflow.com/questions/54347716/temperature-sensor-lwm2m-objects-3303-created
> +Question:+
> Temperature Sensor: LWM2M objects 3303 created
> +Description:+
> Working with wakaama client implementation of the LWM2M and Fiware Orion (of course using IoTAgent). I already have raspberry Pi sensor collecting temperature and stores in SQLite DB.
> The scenario I want implement is to have the IoTAgent observes the wakaama LWM2M client (I mean client send the data to the IoTAgent.
> I already created the 3303 object in wakaama/example/client/object_temperature.c then build, and I can confirm the client connects to the IoTAgent as far IoT logs (see below).
> time=2019-01-24T12:51:15.270Z | lvl=DEBUG | corr=3e578c67-f589-4348-afaf-225509e9c787 | trans=3e578c67-f589-4348-afaf-225509e9c787 | op=IoTAgentNGSI.MongoDBDeviceRegister | srv=n/a | subsrv=n/a | msg=Looking for device with id [raspiSensorTV]. | comp=IoTAgent
> time=2019-01-24T12:51:15.299Z | lvl=DEBUG | corr=n/a | trans=n/a | op=LWM2MLib.Registration | msg=Registration request ended successfully
> time=2019-01-24T12:51:15.349Z | lvl=DEBUG | corr=n/a | trans=n/a | op=LWM2MLib.InformationReporting | msg=Observing value from resource /3303/0/0 in device [1]
> But unfortunately, no are measure is sent by the client. Is anything wrong with my object_temperature.c? Code reproduced:
> #include "liblwm2m.h"
> #include "lwm2mclient.h"
> #include <stdio.h>
> #include <stdlib.h>
> #include <string.h>
> #include <ctype.h>
> #include <time.h>
> #include <sqlite3.h>
> //Resource Id's
> #define RES_SENSOR_VALUE  5700
> #define RES_SENSOR_UNITS  5701
> typedef struct _prv_instance_
> {
>   struct _prv_instance_ * next;
>   uint16_t     shortID;
>   double       temp;
>    char        unit[10];
> } prv_instance_t;
> static uint8_t prv_temperature_read(uint16_t instanceId,
>                                int * numDataP,
>                                lwm2m_data_t ** dataArrayP,
>                                lwm2m_object_t * objectP)
> {
>    prv_instance_t * targetP;
>    int i;
>    sqlite3 *db;
>    sqlite3_stmt *res;
>    char temperature_val[30];
> targetP = (prv_instance_t *)lwm2m_list_find(objectP->instanceList, instanceId);
> if (NULL == targetP) return COAP_404_NOT_FOUND;
> fprintf(stderr, "----------------- Entering in prv_temperature ----------------\n");
>    // connect to the backend
> int rc = sqlite3_open("../../urbansense.sqlite3", &db);
> if (rc != SQLITE_OK) {
>    fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));
>    sqlite3_close(db);
>    return 1;
>    }
>    else {
>    fprintf(stderr, "Connection successful.\n" );
>    }
> rc = sqlite3_prepare_v2(db, "SELECT temperature_data FROM basic_environment ORDER BY ID DESC LIMIT 1", -1, &res, 0);
> if (rc != SQLITE_OK) {
>   fprintf(stderr, "Failed to fetch data: %s\n", sqlite3_errmsg(db));
>   sqlite3_close(db);
>   return 1;
>   }
> rc = sqlite3_step(res);
> if (rc == SQLITE_ROW) {
>   sprintf(temperature_val, "%s", sqlite3_column_text(res, 0));
>   fprintf(stdout, "Temperature value ==== : %s\n", sqlite3_column_text(res, 0));
>   sqlite3_finalize(res);
>   sqlite3_close(db);
>   }
>  if(*numDataP == 0)
>   {
>      *dataArrayP = lwm2m_data_new(1);
>      if (*dataArrayP == NULL) return COAP_500_INTERNAL_SERVER_ERROR;
>      *numDataP = 1;
>      (*dataArrayP)[0].id = RES_SENSOR_VALUE;
>      (*dataArrayP)[1].id = RES_SENSOR_UNITS; 
>    }
>  for (i = 0; i < *numDataP; i++)
>   {
>      switch((*dataArrayP)[i].id)
>      {
>       case RES_SENSOR_VALUE:
>           lwm2m_data_encode_float(targetP->temp, *dataArrayP +1);
>            break;
>       case RES_SENSOR_UNITS:
>           lwm2m_data_encode_string(targetP->unit, *dataArrayP +1);
>           break;
>       default:
>           return COAP_404_NOT_FOUND;
>      }
>   }
>  return COAP_205_CONTENT;
> }
> lwm2m_object_t * get_object_temperature()
> {
>     /*
>      * The get_object_temperature function create the object itself and return a pointer to the structure that represent it.
>      */
>     lwm2m_object_t * temperatureObj;
>     temperatureObj = (lwm2m_object_t *)lwm2m_malloc(sizeof(lwm2m_object_t));
>     if (NULL != temperatureObj)
>     {
>         memset(temperatureObj, 0, sizeof(lwm2m_object_t));
>         /*
>          * Assigns it's unique ID 3303
>          */
>         temperatureObj->objID = LWM2M_TEMPERATURE_OBJECT_ID;
>         /*
>          * and its unique instance
>          *
>          */
>         temperatureObj->instanceList = (lwm2m_list_t *)lwm2m_malloc(sizeof(lwm2m_list_t));
>         if (NULL != temperatureObj->instanceList)
>         {
>             memset(temperatureObj->instanceList, 0, sizeof(lwm2m_list_t));
>         }
>         else
>         {
>             lwm2m_free(temperatureObj);
>             return NULL;
>         }
>         temperatureObj->readFunc     = prv_temperature_read;
>         temperatureObj->userData = lwm2m_malloc(sizeof(prv_instance_t));
>     }
>     return temperatureObj;
> }
> void free_object_temperature(lwm2m_object_t * objectP)
> {
>     if (NULL != objectP->userData)
>      {
>        lwm2m_free(objectP->userData);
>        objectP->instanceList = NULL;
>       } 
>     if(NULL != objectP->instanceList)
>     {
>       lwm2m_free(objectP->instanceList);
>       objectP->instanceList = NULL; 
>     }
>     lwm2m_free(objectP);
> }



--
This message was sent by Atlassian JIRA
(v6.4.1#64016)


More information about the Backlogmanager mailing list

You can get more information about our cookies and privacy policies clicking on the following links: Privacy policy   Cookies policy