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/
AxedaWrapper.cpp@1:d42aaf6f2e19, 2013-12-20 (annotated)
- 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?
User | Revision | Line number | New 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 | } |