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

Committer:
vwochnik
Date:
Sun Feb 02 16:40:59 2014 +0000
Revision:
4:363b4cc49445
Parent:
3:32834ef7cb56
Child:
5:dee05a7c70f9
fix

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vwochnik 0:ed4d6fd405ea 1 #include "mbed.h"
vwochnik 0:ed4d6fd405ea 2 #include "C027.h"
vwochnik 0:ed4d6fd405ea 3 #include "UbloxUSBGSMModem.h"
vwochnik 0:ed4d6fd405ea 4 #include "UbloxUSBCDMAModem.h"
vwochnik 0:ed4d6fd405ea 5
vwochnik 4:363b4cc49445 6 #include "MbedSmartRest.h"
vwochnik 4:363b4cc49445 7 #include "StaticData.h"
vwochnik 4:363b4cc49445 8 #include "ComposedRecord.h"
vwochnik 4:363b4cc49445 9 #include "CharValue.h"
vwochnik 4:363b4cc49445 10 #include "IntegerValue.h"
vwochnik 4:363b4cc49445 11
vwochnik 4:363b4cc49445 12 const char * const serialNumber = "curltest-1234567";
vwochnik 4:363b4cc49445 13 StaticData srtpl(
vwochnik 4:363b4cc49445 14 // get device by identity
vwochnik 4:363b4cc49445 15 // Usage: 100,<SERIAL/NR>
vwochnik 4:363b4cc49445 16 "10,100,GET,/identity/externalIds/c8y_Serial/%%,,application/vnd.com.nsn.cumulocity.externalId+json,%%,STRING,\r\n"
vwochnik 4:363b4cc49445 17 // get device id from identity
vwochnik 4:363b4cc49445 18 // Response: 200,<DEVICE/ID>
vwochnik 4:363b4cc49445 19 "11,200,\"$.managedObject\",,\"$.id\"\r\n"
vwochnik 4:363b4cc49445 20 // Create device
vwochnik 4:363b4cc49445 21 // Usage: 101,<SERIAL/NR>
vwochnik 4:363b4cc49445 22 "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_IsDevice\"\":{}}\"\r\n"
vwochnik 4:363b4cc49445 23 // Get device id
vwochnik 4:363b4cc49445 24 // Response: 201,<DEVICE/ID>
vwochnik 4:363b4cc49445 25 "11,201,,\"$.c8y_IsDevice\",\"$.id\"\r\n"
vwochnik 4:363b4cc49445 26 // Insert global ID
vwochnik 4:363b4cc49445 27 // Usage: 102,<DEVICE/ID>,<SERIAL/NR>
vwochnik 4:363b4cc49445 28 "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"
vwochnik 4:363b4cc49445 29 );
vwochnik 4:363b4cc49445 30
vwochnik 4:363b4cc49445 31 long existing();
vwochnik 4:363b4cc49445 32 long create();
vwochnik 4:363b4cc49445 33 bool identify(long deviceId);
vwochnik 0:ed4d6fd405ea 34
vwochnik 0:ed4d6fd405ea 35 C027 c027;
vwochnik 4:363b4cc49445 36 MbedSmartRest client("http://developer.cumulocity.com/s", "vaillant/admin", "klanpi", "com_cumulocity_MbedTestDevice_1.0");
vwochnik 4:363b4cc49445 37 //MbedSmartRest client("http://nocore.info:8888/", "vaillant/admin", "klanpi", "com_cumulocity_MbedTestDevice_1.0");
vwochnik 0:ed4d6fd405ea 38
vwochnik 0:ed4d6fd405ea 39 int main()
vwochnik 0:ed4d6fd405ea 40 {
vwochnik 4:363b4cc49445 41 long deviceId;
vwochnik 4:363b4cc49445 42
vwochnik 4:363b4cc49445 43 c027.mdmPower(true);
vwochnik 4:363b4cc49445 44 UbloxUSBGSMModem modem;
vwochnik 4:363b4cc49445 45
vwochnik 4:363b4cc49445 46 if (modem.connect("public4.m2minternet.com")) {
vwochnik 4:363b4cc49445 47 puts("GPRS connection failure.");
vwochnik 4:363b4cc49445 48 return 2;
vwochnik 4:363b4cc49445 49 }
vwochnik 4:363b4cc49445 50
vwochnik 4:363b4cc49445 51 puts("Bootstrapping");
vwochnik 4:363b4cc49445 52 if (client.bootstrap(srtpl) != SMARTREST_SUCCESS) {
vwochnik 4:363b4cc49445 53 puts("Bootstrapping failed.");
vwochnik 4:363b4cc49445 54 return 2;
vwochnik 4:363b4cc49445 55 }
vwochnik 4:363b4cc49445 56
vwochnik 4:363b4cc49445 57 if ((deviceId = existing()) == 0) {
vwochnik 4:363b4cc49445 58 deviceId = create();
vwochnik 4:363b4cc49445 59 if (deviceId != 0)
vwochnik 4:363b4cc49445 60 identify(deviceId);
vwochnik 4:363b4cc49445 61 }
vwochnik 4:363b4cc49445 62
vwochnik 4:363b4cc49445 63 printf("Device ID: %ld\r\n", deviceId);
vwochnik 4:363b4cc49445 64
vwochnik 4:363b4cc49445 65 modem.disconnect();
vwochnik 4:363b4cc49445 66 c027.mdmPower(false);
vwochnik 4:363b4cc49445 67 return 0;
vwochnik 4:363b4cc49445 68 }
vwochnik 4:363b4cc49445 69
vwochnik 4:363b4cc49445 70 long existing()
vwochnik 4:363b4cc49445 71 {
vwochnik 4:363b4cc49445 72 ComposedRecord newMoRec(true); // set copy=true b/c tmp objects
vwochnik 4:363b4cc49445 73 ParsedRecord received;
vwochnik 4:363b4cc49445 74
vwochnik 4:363b4cc49445 75 puts("Checking for device existance...");
vwochnik 4:363b4cc49445 76
vwochnik 4:363b4cc49445 77 newMoRec.add(IntegerValue(100)).add(CharValue(serialNumber));
vwochnik 4:363b4cc49445 78
vwochnik 4:363b4cc49445 79 if (client.send(newMoRec) != SMARTREST_SUCCESS) {
vwochnik 4:363b4cc49445 80 puts("Send failed.");
vwochnik 4:363b4cc49445 81 return 0;
vwochnik 4:363b4cc49445 82 }
vwochnik 4:363b4cc49445 83
vwochnik 4:363b4cc49445 84 if (client.receive(received) != SMARTREST_SUCCESS) {
vwochnik 4:363b4cc49445 85 puts("No device found.");
vwochnik 4:363b4cc49445 86 return 0;
vwochnik 4:363b4cc49445 87 }
vwochnik 4:363b4cc49445 88
vwochnik 4:363b4cc49445 89 if (received.values() == 0) {
vwochnik 4:363b4cc49445 90 puts("Received no values.");
vwochnik 4:363b4cc49445 91 return 0;
vwochnik 4:363b4cc49445 92 }
vwochnik 4:363b4cc49445 93 if (received.value(0).integerValue() == 50) {
vwochnik 4:363b4cc49445 94 client.stop();
vwochnik 4:363b4cc49445 95 return 0;
vwochnik 4:363b4cc49445 96 }
vwochnik 4:363b4cc49445 97
vwochnik 4:363b4cc49445 98 if (received.value(0).integerValue() != 200) {
vwochnik 4:363b4cc49445 99 puts("Bad response.");
vwochnik 4:363b4cc49445 100 return 0;
vwochnik 0:ed4d6fd405ea 101 }
vwochnik 0:ed4d6fd405ea 102
vwochnik 4:363b4cc49445 103 client.stop();
vwochnik 4:363b4cc49445 104 return received.value(2).integerValue();
vwochnik 0:ed4d6fd405ea 105 }
vwochnik 4:363b4cc49445 106
vwochnik 4:363b4cc49445 107 long create()
vwochnik 4:363b4cc49445 108 {
vwochnik 4:363b4cc49445 109 ComposedRecord newMoRec(true); // set copy=true b/c tmp objects
vwochnik 4:363b4cc49445 110 ParsedRecord received;
vwochnik 4:363b4cc49445 111
vwochnik 4:363b4cc49445 112 puts("Creating device...");
vwochnik 4:363b4cc49445 113
vwochnik 4:363b4cc49445 114 newMoRec.add(IntegerValue(101)).add(CharValue(serialNumber));
vwochnik 4:363b4cc49445 115
vwochnik 4:363b4cc49445 116 if (client.send(newMoRec) != SMARTREST_SUCCESS) {
vwochnik 4:363b4cc49445 117 puts("Send failed.");
vwochnik 4:363b4cc49445 118 return 0;
vwochnik 4:363b4cc49445 119 }
vwochnik 4:363b4cc49445 120
vwochnik 4:363b4cc49445 121 if (client.receive(received) != SMARTREST_SUCCESS) {
vwochnik 4:363b4cc49445 122 puts("No device found.");
vwochnik 4:363b4cc49445 123 return 0;
vwochnik 4:363b4cc49445 124 }
vwochnik 4:363b4cc49445 125
vwochnik 4:363b4cc49445 126 if (received.values() != 3) {
vwochnik 4:363b4cc49445 127 puts("Bad received data.");
vwochnik 4:363b4cc49445 128 return 0;
vwochnik 4:363b4cc49445 129 }
vwochnik 4:363b4cc49445 130
vwochnik 4:363b4cc49445 131 if (received.value(0).integerValue() != 201) {
vwochnik 4:363b4cc49445 132 puts("Bad received data.");
vwochnik 4:363b4cc49445 133 return 0;
vwochnik 4:363b4cc49445 134 }
vwochnik 4:363b4cc49445 135
vwochnik 4:363b4cc49445 136 client.stop();
vwochnik 4:363b4cc49445 137 return received.value(2).integerValue();
vwochnik 4:363b4cc49445 138 }
vwochnik 4:363b4cc49445 139
vwochnik 4:363b4cc49445 140 bool identify(long deviceId)
vwochnik 4:363b4cc49445 141 {
vwochnik 4:363b4cc49445 142 ComposedRecord newMoRec(true); // set copy=true b/c tmp objects
vwochnik 4:363b4cc49445 143 ParsedRecord received;
vwochnik 4:363b4cc49445 144
vwochnik 4:363b4cc49445 145 puts("Adding global identifier...");
vwochnik 4:363b4cc49445 146
vwochnik 4:363b4cc49445 147 newMoRec.add(IntegerValue(102)).add(IntegerValue(deviceId)).add(CharValue(serialNumber));
vwochnik 4:363b4cc49445 148
vwochnik 4:363b4cc49445 149 if (client.send(newMoRec) != SMARTREST_SUCCESS) {
vwochnik 4:363b4cc49445 150 puts("Sending failed.");
vwochnik 4:363b4cc49445 151 return false;
vwochnik 4:363b4cc49445 152 }
vwochnik 4:363b4cc49445 153
vwochnik 4:363b4cc49445 154 if (client.receive(received) != SMARTREST_SUCCESS) {
vwochnik 4:363b4cc49445 155 puts("Failed.");
vwochnik 4:363b4cc49445 156 return false;
vwochnik 4:363b4cc49445 157 }
vwochnik 4:363b4cc49445 158
vwochnik 4:363b4cc49445 159 if (received.values() != 3) {
vwochnik 4:363b4cc49445 160 puts("Received bad data.");
vwochnik 4:363b4cc49445 161 return false;
vwochnik 4:363b4cc49445 162 }
vwochnik 4:363b4cc49445 163
vwochnik 4:363b4cc49445 164 if (received.value(0).integerValue() != 200) {
vwochnik 4:363b4cc49445 165 puts("Received bad data.");
vwochnik 4:363b4cc49445 166 return false;
vwochnik 4:363b4cc49445 167 }
vwochnik 4:363b4cc49445 168
vwochnik 4:363b4cc49445 169 client.stop();
vwochnik 4:363b4cc49445 170 return true;
vwochnik 4:363b4cc49445 171 }