SmartREST client reference implementation for the u-blox C027 mbed compatible device.
Dependencies: C027 C027_Support mbed mbed-rtos MbedSmartRest LM75B MMA7660 C12832
Fork of MbedSmartRestTest by
Diff: program.cpp
- Revision:
- 6:642e7c233e83
- Child:
- 7:f77afd49c35d
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/program.cpp Mon Feb 10 15:46:26 2014 +0000 @@ -0,0 +1,192 @@ +#include "common.h" +#include "StaticData.h" +#include "ComposedRecord.h" +#include "CharValue.h" +#include "IntegerValue.h" +#include "FloatValue.h" + +const char * const serialNumber = "ublox-123456789"; +StaticData srtpl( +// get device by identity +// Usage: 100,<SERIAL/NR> +"10,100,GET,/identity/externalIds/c8y_Serial/%%,,application/vnd.com.nsn.cumulocity.externalId+json,%%,STRING,\r\n" +// get device id from identity +// Response: 200,<DEVICE/ID> +"11,200,\"$.managedObject\",,\"$.id\"\r\n" +// Create device +// Usage: 101,<SERIAL/NR> +"10,101,POST,/inventory/managedObjects,application/vnd.com.nsn.cumulocity.managedObject+json,application/vnd.com.nsn.cumulocity.managedObject+json,%%,STRING,\"{\"\"name\"\":\"\"Curl Test Device\"\",\"\"type\"\":\"\"com_yourcompany?CurlDevice_1.0\"\",\"\"c8y_Hardware\"\":{\"\"revision\"\":\"\"1\"\",\"\"model\"\":\"\"Curl Test Device\"\",\"\"serialNumber\"\":\"\"%%\"\"},\"\"c8y_SupportedMeasurements\"\":[\"\"c8y_SignalStrength\"\"],\"\"c8y_IsDevice\"\":{}}\"\r\n" +// Get device id +// Response: 201,<DEVICE/ID> +"11,201,,\"$.c8y_IsDevice\",\"$.id\"\r\n" +// Insert global ID +// Usage: 102,<DEVICE/ID>,<SERIAL/NR> +"10,102,POST,/identity/globalIds/%%/externalIds,application/vnd.com.nsn.cumulocity.externalId+json,application/vnd.com.nsn.cumulocity.externalId+json,%%,UNSIGNED STRING,\"{\"\"type\"\":\"\"c8y_Serial\"\",\"\"externalId\"\":\"\"%%\"\"}\"\r\n" +// Insert measurement +// USAGE: 103,<DEVICE/ID>,<RSSI>,<BER> +"10,103,POST,/measurement/measurements,application/vnd.com.nsn.cumulocity.measurement+json,application/vnd.com.nsn.cumulocity.measurement+json,%%,NOW UNSIGNED NUMBER UNSIGNED,\"{\"\"time\"\":\"\"%%\"\",\"\"source\"\":{\"\"id\"\":\"\"%%\"\"},\"\"type\"\":\"\"c8y_SignalStrength\"\",\"\"c8y_SignalStrength\"\":{\"\"rssi\"\":{\"\"value\"\":%%,\"\"unit\"\":\"\"dBm\"\"},\"\"ber\"\":{\"\"value\"\":%%,\"\"unit\"\":\"\"%\"\"}}}\"\r\n" +); + +long existing(); +long create(); +bool identify(long deviceId); +bool measurement(long deviceId, double rssi, int ber); + +MbedSmartRest client("http://developer.cumulocity.com/s", "vaillant/admin", "klanpi", "com_u-blox_C027_REV-A_0.3"); +//MbedSmartRest client("http://nocore.info:8888/", "vaillant/admin", "klanpi", "com_cumulocity_MbedTestDevice_2.0"); + +int program(void) +{ + long deviceId; double rssi; int ber; + + puts("Hello!"); + + puts("Bootstrapping"); + if (client.bootstrap(srtpl) != SMARTREST_SUCCESS) { + puts("Bootstrapping failed."); + return 2; + } + + puts("Starting action..."); + + if ((deviceId = existing()) == 0) { + deviceId = create(); + if (deviceId != 0) + identify(deviceId); + } + + printf("Device ID: %ld\r\n", deviceId); + + if (deviceId != 0) { + rssi = -50; + ber = 50; + + while (true) { + printf("[MEASUREMENT] RSSI: %lf, BER: %d %%\n", rssi, ber); + measurement(deviceId, rssi, ber); + wait(60000); + } + } + + return 0; +} + +long existing() +{ + ComposedRecord newMoRec(true); // set copy=true b/c tmp objects + ParsedRecord received; + + puts("Checking for device existance..."); + + newMoRec.add(IntegerValue(100)).add(CharValue(serialNumber)); + + if (client.send(newMoRec) != SMARTREST_SUCCESS) { + puts("Send failed."); + return 0; + } + + if (client.receive(received) != SMARTREST_SUCCESS) { + puts("No device found."); + return 0; + } + + if (received.values() == 0) { + puts("Received no values."); + return 0; + } + if (received.value(0).integerValue() == 50) { + client.stop(); + return 0; + } + + if (received.value(0).integerValue() != 200) { + puts("Bad response."); + return 0; + } + + client.stop(); + return received.value(2).integerValue(); +} + +long create() +{ + ComposedRecord newMoRec(true); // set copy=true b/c tmp objects + ParsedRecord received; + + puts("Creating device..."); + + newMoRec.add(IntegerValue(101)).add(CharValue(serialNumber)); + + if (client.send(newMoRec) != SMARTREST_SUCCESS) { + puts("Send failed."); + return 0; + } + + if (client.receive(received) != SMARTREST_SUCCESS) { + puts("No device found."); + return 0; + } + + if (received.values() != 3) { + puts("Bad received data."); + return 0; + } + + if (received.value(0).integerValue() != 201) { + puts("Bad received data."); + return 0; + } + + client.stop(); + return received.value(2).integerValue(); +} + +bool identify(long deviceId) +{ + ComposedRecord newMoRec(true); // set copy=true b/c tmp objects + ParsedRecord received; + + puts("Adding global identifier..."); + + newMoRec.add(IntegerValue(102)).add(IntegerValue(deviceId)).add(CharValue(serialNumber)); + + if (client.send(newMoRec) != SMARTREST_SUCCESS) { + puts("Sending failed."); + return false; + } + + if (client.receive(received) != SMARTREST_SUCCESS) { + puts("Failed."); + return false; + } + + if (received.values() != 3) { + puts("Received bad data."); + return false; + } + + if (received.value(0).integerValue() != 200) { + puts("Received bad data."); + return false; + } + + client.stop(); + return true; +} + +bool measurement(long deviceId, double rssi, int ber) +{ + ComposedRecord newMoRec(true); // set copy=true b/c tmp objects + + puts("Creating measurement..."); + + newMoRec.add(IntegerValue(103)).add(IntegerValue(deviceId)).add(FloatValue(rssi, 0)).add(IntegerValue(ber)); + + if (client.send(newMoRec) != SMARTREST_SUCCESS) { + puts("Send failed."); + return false; + } + + client.stop(); + return true; +} \ No newline at end of file