[ https://jira.fiware.org/browse/HELP-15359?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Fernando Lopez reassigned HELP-15359: ------------------------------------- Assignee: Fermín Galán (was: Jose Gato Luis) > [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: Fermín Galán > 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)
You can get more information about our cookies and privacy policies clicking on the following links: Privacy policy Cookies policy