Official reference client implementation for Cumulocity SmartREST on u-blox C027.
Dependencies: C027_Support C12832 LM75B MMA7660 MbedSmartRest mbed-rtos mbed
Fork of MbedSmartRestMain by
Diff: measurement/LocationUpdate.cpp
- Revision:
- 101:dbcd3bc51758
- Parent:
- 100:47ea098f8a47
- Child:
- 102:ef2827b2d00a
--- a/measurement/LocationUpdate.cpp Thu May 07 13:56:19 2015 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,101 +0,0 @@ -#include "LocationUpdate.h" -#include "Aggregator.h" -#include "ComposedRecord.h" -#include "CharValue.h" -#include "IntegerValue.h" -#include "FloatValue.h" -#include "LCDDisplay.h" -#include "logging.h" - -#define THRESHOLD_PERCENT_LOC 0.05 // Percentage cut-off for avoiding sending similar acceleration sensor data. -// Time interval for forcing a sending even if analog sensor readings are constantly similar (in seconds). -#define TIME_LIMIT_LOC 900 - -LocationUpdate::LocationUpdate(AbstractSmartRest& client, SmartRestTemplate& tpl, - DeviceInfo& deviceInfo) : - _tpl(tpl), - _client(client), - _gpsTracker(), - _deviceInfo(deviceInfo) -{ - _init = false; - oldValues[0] = 0; - oldValues[1] = 0; - oldValues[2] = 0; - t_start = time(NULL); -} - -bool LocationUpdate::init() -{ - if (_init) - return false; - - // Update device position - // USAGE: 108,<DEVICE/ID>,<ALTITUDE>,<LATITUDE>,<LONGITUDE> - if (!_tpl.add("10,108,PUT,/inventory/managedObjects/%%,application/vnd.com.nsn.cumulocity.managedObject+json,application/vnd.com.nsn.cumulocity.managedObject+json,%%,UNSIGNED NUMBER NUMBER NUMBER,\"{\"\"c8y_Position\"\":{\"\"alt\"\":%%,\"\"lat\"\":%%,\"\"lng\"\":%%},\"\"c8y_MotionTracking\"\":{\"\"active\"\":true}}\"\r\n")) - return false; - - // Insert measurement - // USAGE: 109,<DEVICE/ID>,<ALTITUDE>,<LATITUDE>,<LONGITUDE> - if (!_tpl.add("10,109,POST,/event/events,application/vnd.com.nsn.cumulocity.event+json,application/vnd.com.nsn.cumulocity.event+json,%%,NOW UNSIGNED NUMBER NUMBER NUMBER,\"{\"\"time\"\":\"\"%%\"\",\"\"source\"\":{\"\"id\"\":\"\"%%\"\"},\"\"type\"\":\"\"c8y_LocationUpdate\"\",\"\"text\"\":\"\"Mbed location update\"\",\"\"c8y_Position\"\":{\"\"alt\"\":%%,\"\"lat\"\":%%,\"\"lng\"\":%%}}\"\r\n")) - return false; - - _init = true; - return true; -} - -bool LocationUpdate::run() -{ - GPSTracker::Position position; - if (!_gpsTracker.position(&position)) { - return false; - } - float data[3] = { position.altitude, position.latitude, position.longitude }; - - if (abs(oldValues[0]-data[0]) <= abs(oldValues[0])*THRESHOLD_PERCENT_LOC && - abs(oldValues[1]-data[1]) <= abs(oldValues[1])*THRESHOLD_PERCENT_LOC && - abs(oldValues[2]-data[2]) <= abs(oldValues[2])*THRESHOLD_PERCENT_LOC) { - time_t t_interval = time(NULL) - t_start; - if (t_interval < TIME_LIMIT_LOC) { - if (strcmp(LCDDisplay::inst().getThirdLine(), "")) { - LCDDisplay::inst().setThirdLine(""); - } - return true; - } else { - aDebug("GPS: Timeout at %d s.\n", t_interval); - } - } - char status[27] = {0}; - snprintf(status, 27, "Send GPS %.1f,%.1f,%.1f", data[0], data[1], data[2]); - LCDDisplay::inst().setThirdLine(status); - - Aggregator aggregator; - ComposedRecord record1, record2; - IntegerValue msgId1(108); - IntegerValue msgId2(109); - IntegerValue devId(deviceID); - FloatValue altitude(position.altitude, 2); - FloatValue latitude(position.latitude, 6); - FloatValue longitude(position.longitude, 6); - if ((!record1.add(msgId1)) || (!record1.add(devId)) || (!record1.add(altitude)) || (!record1.add(latitude)) || (!record1.add(longitude))) - return false; - if ((!record2.add(msgId2)) || (!record2.add(devId)) || (!record2.add(altitude)) || (!record2.add(latitude)) || (!record2.add(longitude))) - return false; - if ((!aggregator.add(record1)) || (!aggregator.add(record2))) - return false; - - time_t t0 = time(NULL); - if (_client.send(aggregator) != SMARTREST_SUCCESS) { - aWarning("GPS: Send failed.\n"); - _client.stop(); - return false; - } - time_t t1 = time(NULL); - _client.stop(); - aDebug("GPS: Sent in %d s.\n", t1-t0); - oldValues[0] = data[0]; - oldValues[1] = data[1]; - oldValues[2] = data[2]; - t_start = time(NULL); - return true; -}