A wrapper class for talking to Axeda from MBED devices. Uses HTTPClient and MbedJSONValue classes.

Dependents:   axeda_wrapper_dev MTS_Axeda_Example

AxedaWrapper simplifies pushing data to Axeda's cloud.

Uses HTTPClient and MbedJSONValue libs:

http://mbed.org/users/donatien/code/HTTPClient/

http://mbed.org/users/samux/code/MbedJSONValue/

Committer:
mfiore
Date:
Fri Dec 20 14:49:01 2013 +0000
Revision:
1:d42aaf6f2e19
Parent:
0:d472df0659a9
Child:
2:99baa98f84a3
pass std::string to sendBase() instead of MbedJSONValue object; add proper formatting of JSON objects to match what Axeda free backend expects; add HTTPJsonText.h

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mfiore 0:d472df0659a9 1 #include "AxedaWrapper.h"
mfiore 1:d42aaf6f2e19 2 #include "HTTPJsonText.h"
mfiore 0:d472df0659a9 3 #include <string>
mfiore 0:d472df0659a9 4 #include <vector>
mfiore 0:d472df0659a9 5 #include <stdlib.h>
mfiore 0:d472df0659a9 6
mfiore 0:d472df0659a9 7 using namespace mts;
mfiore 0:d472df0659a9 8
mfiore 0:d472df0659a9 9 static const char* PATH_BASE = "/ammp/data/1/";
mfiore 0:d472df0659a9 10
mfiore 0:d472df0659a9 11 AxedaWrapper::AxedaWrapper(const std::string& serial, const std::string& model, const std::string& host, int port) : _timeout(30000) {
mfiore 0:d472df0659a9 12 _http_client = new HTTPClient();
mfiore 0:d472df0659a9 13 _data = new MbedJSONValue();
mfiore 0:d472df0659a9 14
mfiore 0:d472df0659a9 15 char buf[256];
mfiore 1:d42aaf6f2e19 16 std::string path = PATH_BASE + model + "!" + serial;
mfiore 0:d472df0659a9 17 sprintf(buf, "http://%s:%d%s", host.c_str(), port, path.c_str());
mfiore 0:d472df0659a9 18 _url = std::string(buf);
mfiore 0:d472df0659a9 19 }
mfiore 0:d472df0659a9 20
mfiore 0:d472df0659a9 21 AxedaWrapper::~AxedaWrapper() {
mfiore 0:d472df0659a9 22 delete _http_client;
mfiore 0:d472df0659a9 23 delete _data;
mfiore 0:d472df0659a9 24 }
mfiore 0:d472df0659a9 25
mfiore 0:d472df0659a9 26 void AxedaWrapper::addKvp(const std::string& key, const std::string& value) {
mfiore 1:d42aaf6f2e19 27 (*_data)["data"][0]["di"][key] = value;
mfiore 0:d472df0659a9 28 }
mfiore 0:d472df0659a9 29
mfiore 0:d472df0659a9 30 void AxedaWrapper::addKvp(const char* key, const char* value) {
mfiore 1:d42aaf6f2e19 31 (*_data)["data"][0]["di"][std::string(key)] = value;
mfiore 0:d472df0659a9 32 }
mfiore 0:d472df0659a9 33
mfiore 0:d472df0659a9 34 void AxedaWrapper::addKvp(const std::string& key, int value) {
mfiore 1:d42aaf6f2e19 35 (*_data)["data"][0]["di"][key] = value;
mfiore 0:d472df0659a9 36 }
mfiore 0:d472df0659a9 37
mfiore 0:d472df0659a9 38 void AxedaWrapper::addKvp(const char* key, int value) {
mfiore 1:d42aaf6f2e19 39 (*_data)["data"][0]["di"][std::string(key)] = value;
mfiore 0:d472df0659a9 40 }
mfiore 0:d472df0659a9 41
mfiore 0:d472df0659a9 42 void AxedaWrapper::addKvp(const std::string& key, double value) {
mfiore 1:d42aaf6f2e19 43 (*_data)["data"][0]["di"][key] = value;
mfiore 0:d472df0659a9 44 }
mfiore 0:d472df0659a9 45
mfiore 0:d472df0659a9 46 void AxedaWrapper::addKvp(const char* key, double value) {
mfiore 1:d42aaf6f2e19 47 (*_data)["data"][0]["di"][std::string(key)] = value;
mfiore 0:d472df0659a9 48 }
mfiore 0:d472df0659a9 49
mfiore 0:d472df0659a9 50 void AxedaWrapper::addKvp(const std::string& key, bool value) {
mfiore 1:d42aaf6f2e19 51 (*_data)["data"][0]["di"][key] = value;
mfiore 0:d472df0659a9 52 }
mfiore 0:d472df0659a9 53
mfiore 0:d472df0659a9 54 void AxedaWrapper::addKvp(const char* key, bool value) {
mfiore 1:d42aaf6f2e19 55 (*_data)["data"][0]["di"][std::string(key)] = value;
mfiore 0:d472df0659a9 56 }
mfiore 0:d472df0659a9 57
mfiore 0:d472df0659a9 58 void AxedaWrapper::deleteAllKvp() {
mfiore 0:d472df0659a9 59 delete _data;
mfiore 0:d472df0659a9 60 _data = new MbedJSONValue();
mfiore 0:d472df0659a9 61 }
mfiore 0:d472df0659a9 62
mfiore 0:d472df0659a9 63 int AxedaWrapper::kvpMapSize() {
mfiore 0:d472df0659a9 64 return _data->size();
mfiore 0:d472df0659a9 65 }
mfiore 0:d472df0659a9 66
mfiore 0:d472df0659a9 67 bool AxedaWrapper::sendKvp(const std::string& key, const std::string& value) {
mfiore 0:d472df0659a9 68 MbedJSONValue data;
mfiore 1:d42aaf6f2e19 69 data["data"][0]["di"][key] = value;
mfiore 1:d42aaf6f2e19 70 return sendBase(data.serialize());
mfiore 0:d472df0659a9 71 }
mfiore 0:d472df0659a9 72
mfiore 0:d472df0659a9 73 bool AxedaWrapper::sendKvp(const char* key, const char* value) {
mfiore 0:d472df0659a9 74 MbedJSONValue data;
mfiore 1:d42aaf6f2e19 75 data["data"][0]["di"][key] = value;
mfiore 1:d42aaf6f2e19 76 return sendBase(data.serialize());
mfiore 0:d472df0659a9 77 }
mfiore 0:d472df0659a9 78
mfiore 0:d472df0659a9 79 bool AxedaWrapper::sendKvp(const std::string& key, int value) {
mfiore 0:d472df0659a9 80 MbedJSONValue data;
mfiore 1:d42aaf6f2e19 81 data["data"][0]["di"][key] = value;
mfiore 1:d42aaf6f2e19 82 return sendBase(data.serialize());
mfiore 0:d472df0659a9 83 }
mfiore 0:d472df0659a9 84
mfiore 0:d472df0659a9 85 bool AxedaWrapper::sendKvp(const char* key, int value) {
mfiore 0:d472df0659a9 86 MbedJSONValue data;
mfiore 1:d42aaf6f2e19 87 data["data"][0]["di"][key] = value;
mfiore 1:d42aaf6f2e19 88 return sendBase(data.serialize());
mfiore 0:d472df0659a9 89 }
mfiore 0:d472df0659a9 90
mfiore 0:d472df0659a9 91 bool AxedaWrapper::sendKvp(const std::string& key, double value) {
mfiore 0:d472df0659a9 92 MbedJSONValue data;
mfiore 1:d42aaf6f2e19 93 data["data"][0]["di"][key] = value;
mfiore 1:d42aaf6f2e19 94 return sendBase(data.serialize());
mfiore 0:d472df0659a9 95 }
mfiore 0:d472df0659a9 96
mfiore 0:d472df0659a9 97 bool AxedaWrapper::sendKvp(const char* key, double value) {
mfiore 0:d472df0659a9 98 MbedJSONValue data;
mfiore 1:d42aaf6f2e19 99 data["data"][0]["di"][key] = value;
mfiore 1:d42aaf6f2e19 100 return sendBase(data.serialize());
mfiore 0:d472df0659a9 101 }
mfiore 0:d472df0659a9 102
mfiore 0:d472df0659a9 103 bool AxedaWrapper::sendAllKvp(bool clear) {
mfiore 1:d42aaf6f2e19 104 std::string data = _data->serialize();
mfiore 1:d42aaf6f2e19 105 bool ret = sendBase(data);
mfiore 0:d472df0659a9 106 if (ret && clear) {
mfiore 0:d472df0659a9 107 deleteAllKvp();
mfiore 0:d472df0659a9 108 }
mfiore 0:d472df0659a9 109 return ret;
mfiore 0:d472df0659a9 110 }
mfiore 0:d472df0659a9 111
mfiore 1:d42aaf6f2e19 112 bool AxedaWrapper::sendBase(const std::string& data) {
mfiore 0:d472df0659a9 113 int ret;
mfiore 0:d472df0659a9 114 char buf[512] = {0};
mfiore 1:d42aaf6f2e19 115 HTTPJsonText to_send((char*) data.c_str());
mfiore 1:d42aaf6f2e19 116 HTTPText to_recv(buf, sizeof(buf));
mfiore 0:d472df0659a9 117
mfiore 1:d42aaf6f2e19 118 ret = _http_client->post(_url.c_str(), to_send, &to_recv, _timeout);
mfiore 0:d472df0659a9 119 if (ret != HTTP_OK) {
mfiore 0:d472df0659a9 120 return false;
mfiore 0:d472df0659a9 121 }
mfiore 0:d472df0659a9 122 return true;
mfiore 0:d472df0659a9 123 }