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
main.cpp@4:363b4cc49445, 2014-02-02 (annotated)
- 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?
User | Revision | Line number | New 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 | } |