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
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
