Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: C027_Support C12832 LM75B MMA7660 MbedSmartRest mbed-rtos mbed
Fork of MbedSmartRestMain by
program.cpp
- Committer:
- vwochnik
- Date:
- 2014-02-10
- Revision:
- 6:642e7c233e83
- Child:
- 7:f77afd49c35d
File content as of revision 6:642e7c233e83:
#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;
}
