SenseClient is an API to interact with Sen.se platform. Sen.se is the place where Humans, Machines, Objects, Environments, Information, Physical and Virtual spaces mix up, talk, intertwine, interact, enrich and empower each other.

Dependencies:   NetServicesProxy

Dependents:   SenseClientSample

Committer:
mimil
Date:
Tue Sep 06 13:31:10 2011 +0000
Revision:
0:ed7287a3edbf
Child:
1:0249701444ee

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mimil 0:ed7287a3edbf 1 /*
mimil 0:ed7287a3edbf 2 Copyright [2011] [mimilowns@gmail.com]
mimil 0:ed7287a3edbf 3
mimil 0:ed7287a3edbf 4 Licensed under the Apache License, Version 2.0 (the "License");
mimil 0:ed7287a3edbf 5 you may not use this file except in compliance with the License.
mimil 0:ed7287a3edbf 6 You may obtain a copy of the License at
mimil 0:ed7287a3edbf 7
mimil 0:ed7287a3edbf 8 http://www.apache.org/licenses/LICENSE-2.0
mimil 0:ed7287a3edbf 9
mimil 0:ed7287a3edbf 10 Unless required by applicable law or agreed to in writing, software
mimil 0:ed7287a3edbf 11 distributed under the License is distributed on an "AS IS" BASIS,
mimil 0:ed7287a3edbf 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
mimil 0:ed7287a3edbf 13 See the License for the specific language governing permissions and
mimil 0:ed7287a3edbf 14 limitations under the License.
mimil 0:ed7287a3edbf 15 */
mimil 0:ed7287a3edbf 16 #ifndef SENSECLIENT_H_
mimil 0:ed7287a3edbf 17 #define SENSECLIENT_H_
mimil 0:ed7287a3edbf 18
mimil 0:ed7287a3edbf 19 #include "mbed.h"
mimil 0:ed7287a3edbf 20 #include "HTTPClient.h"
mimil 0:ed7287a3edbf 21
mimil 0:ed7287a3edbf 22 /**
mimil 0:ed7287a3edbf 23 * SenseClient is an API to interact with Sen.se platform.
mimil 0:ed7287a3edbf 24 *
mimil 0:ed7287a3edbf 25 * @code
mimil 0:ed7287a3edbf 26 * #include "SenseClient.h"
mimil 0:ed7287a3edbf 27 * #include "picojson.h" //eventualy
mimil 0:ed7287a3edbf 28 *
mimil 0:ed7287a3edbf 29 * SenseClient sense("my sen.se key", "http://proxy:port"); // or "" for no proxy
mimil 0:ed7287a3edbf 30 * string feedID = "a feed id";
mimil 0:ed7287a3edbf 31 * string deviceID = "a device id";
mimil 0:ed7287a3edbf 32 *
mimil 0:ed7287a3edbf 33 * int main() {
mimil 0:ed7287a3edbf 34 * // init network etc.
mimil 0:ed7287a3edbf 35 *
mimil 0:ed7287a3edbf 36 * sense.PostEvent(feedID, tosend);
mimil 0:ed7287a3edbf 37 * if (sense.Result() == HTTP_OK) {
mimil 0:ed7287a3edbf 38 * const char* response = sense.ResponseContent().gets();
mimil 0:ed7287a3edbf 39 * printf("http response content: %s\r\n", response);
mimil 0:ed7287a3edbf 40 * // ...
mimil 0:ed7287a3edbf 41 * } else {
mimil 0:ed7287a3edbf 42 * printf("Sen.se result / response code : %d / %d\r\n", sense.Result(), sense.Response());
mimil 0:ed7287a3edbf 43 * }
mimil 0:ed7287a3edbf 44 * @endcode
mimil 0:ed7287a3edbf 45 */
mimil 0:ed7287a3edbf 46 class SenseClient {
mimil 0:ed7287a3edbf 47
mimil 0:ed7287a3edbf 48 public:
mimil 0:ed7287a3edbf 49 /**
mimil 0:ed7287a3edbf 50 * Creates a client to interacte with sen.se platform.
mimil 0:ed7287a3edbf 51 *
mimil 0:ed7287a3edbf 52 * @param senseKey your credential on sen.se platform.
mimil 0:ed7287a3edbf 53 * @param httpproxy using format http://<ip addr>:<port> or an empty string if using a direct connection.
mimil 0:ed7287a3edbf 54 */
mimil 0:ed7287a3edbf 55 SenseClient(const string& senseKey, const string& httpproxy);
mimil 0:ed7287a3edbf 56 virtual ~SenseClient();
mimil 0:ed7287a3edbf 57
mimil 0:ed7287a3edbf 58 /**
mimil 0:ed7287a3edbf 59 * Posts an event from device to sen.se platform to the given feed. The value must be
mimil 0:ed7287a3edbf 60 * a valid json string which means that it must be surrounded by double-quotes and other
mimil 0:ed7287a3edbf 61 * quotes must be escaped etc.
mimil 0:ed7287a3edbf 62 *
mimil 0:ed7287a3edbf 63 * Some examples of value:
mimil 0:ed7287a3edbf 64 * @code
mimil 0:ed7287a3edbf 65 * string value1 = "\"a text\"";
mimil 0:ed7287a3edbf 66 * string value2 = "\"10\"";
mimil 0:ed7287a3edbf 67 * string value3 = "\"{\\"aa\\":\\"tt\\",\\"bb\\":1.660000}\"";
mimil 0:ed7287a3edbf 68 * @endcode
mimil 0:ed7287a3edbf 69 *
mimil 0:ed7287a3edbf 70 * You can also use picojson library (http://mbed.org/users/mimil/libraries/picojson/lwryzp) as the following:
mimil 0:ed7287a3edbf 71 * @code
mimil 0:ed7287a3edbf 72 * picojson::object v;
mimil 0:ed7287a3edbf 73 * v["aa"] = picojson::value(string("tt"));
mimil 0:ed7287a3edbf 74 * v["bb"] = picojson::value(double(1.66));
mimil 0:ed7287a3edbf 75 * string str = picojson::value(v).serialize();
mimil 0:ed7287a3edbf 76 * // if you want to send your data as a json value,
mimil 0:ed7287a3edbf 77 * // you have to know that it is in fact a string inside another json
mimil 0:ed7287a3edbf 78 * // so it needs to be escaped as any json string
mimil 0:ed7287a3edbf 79 * string value4 = picojson::value(str).serialize();
mimil 0:ed7287a3edbf 80 * @endcode
mimil 0:ed7287a3edbf 81 *
mimil 0:ed7287a3edbf 82 * The effective json sent to sen.se platform will be:
mimil 0:ed7287a3edbf 83 * @code
mimil 0:ed7287a3edbf 84 * {
mimil 0:ed7287a3edbf 85 * "feed_id":4293,
mimil 0:ed7287a3edbf 86 * "value":"{\"aa\":\"tt\",\"bb\":1.660000}"
mimil 0:ed7287a3edbf 87 * }
mimil 0:ed7287a3edbf 88 * @endcode
mimil 0:ed7287a3edbf 89 *
mimil 0:ed7287a3edbf 90 * The response of the call will be available on SenseClient::ResponseContent method and will be
mimil 0:ed7287a3edbf 91 * a json like this:
mimil 0:ed7287a3edbf 92 * @code
mimil 0:ed7287a3edbf 93 * [
mimil 0:ed7287a3edbf 94 * {
mimil 0:ed7287a3edbf 95 * "publish_id": "5234C4C389AC2",
mimil 0:ed7287a3edbf 96 * "value": "{\"aa\":\"tt\",\"bb\":1.660000}",
mimil 0:ed7287a3edbf 97 * "timetag": "2011-09-06T12:35:15.559778+00:00",
mimil 0:ed7287a3edbf 98 * "feed_id": 4293,
mimil 0:ed7287a3edbf 99 * "id": 29768312,
mimil 0:ed7287a3edbf 100 * "unit": ""
mimil 0:ed7287a3edbf 101 * }
mimil 0:ed7287a3edbf 102 * ]
mimil 0:ed7287a3edbf 103 * @endcode
mimil 0:ed7287a3edbf 104 *
mimil 0:ed7287a3edbf 105 * @param feedID the feed ID on which you want to post.
mimil 0:ed7287a3edbf 106 * @param value a valid json string.
mimil 0:ed7287a3edbf 107 */
mimil 0:ed7287a3edbf 108 void PostEvent(const string& feedID, const string& value);
mimil 0:ed7287a3edbf 109 /**
mimil 0:ed7287a3edbf 110 * Retrieves the latest event from the given feed.
mimil 0:ed7287a3edbf 111 *
mimil 0:ed7287a3edbf 112 * The response of the call will be available on SenseClient::ResponseContent method and will be
mimil 0:ed7287a3edbf 113 * a json like this:
mimil 0:ed7287a3edbf 114 * @code
mimil 0:ed7287a3edbf 115 * {
mimil 0:ed7287a3edbf 116 * "publish_id": "5234C4C389AC2",
mimil 0:ed7287a3edbf 117 * "value": "{\"aa\":\"tt\",\"bb\":1.660000}",
mimil 0:ed7287a3edbf 118 * "timetag": "2011-09-06T12:35:15+00:00",
mimil 0:ed7287a3edbf 119 * "feed_id": 4293,
mimil 0:ed7287a3edbf 120 * "id": 29768312,
mimil 0:ed7287a3edbf 121 * "unit": ""
mimil 0:ed7287a3edbf 122 * }
mimil 0:ed7287a3edbf 123 * @endcode
mimil 0:ed7287a3edbf 124 *
mimil 0:ed7287a3edbf 125 * @param feedID the feed ID you want to query.
mimil 0:ed7287a3edbf 126 */
mimil 0:ed7287a3edbf 127 void GetLastFeedEvent(const string& feedID);
mimil 0:ed7287a3edbf 128 /**
mimil 0:ed7287a3edbf 129 * Retrieves the latest event from the given device.
mimil 0:ed7287a3edbf 130 *
mimil 0:ed7287a3edbf 131 * The response of the call will be available on SenseClient::ResponseContent method and will be
mimil 0:ed7287a3edbf 132 * a json like this:
mimil 0:ed7287a3edbf 133 * @code
mimil 0:ed7287a3edbf 134 * {
mimil 0:ed7287a3edbf 135 * "publish_id": "5234C4C389AC2",
mimil 0:ed7287a3edbf 136 * "value": "{\"aa\":\"tt\",\"bb\":1.660000}",
mimil 0:ed7287a3edbf 137 * "timetag": "2011-09-06T12:35:15+00:00",
mimil 0:ed7287a3edbf 138 * "feed_id": 4293,
mimil 0:ed7287a3edbf 139 * "id": 29768312,
mimil 0:ed7287a3edbf 140 * "unit": ""
mimil 0:ed7287a3edbf 141 * }
mimil 0:ed7287a3edbf 142 * @endcode
mimil 0:ed7287a3edbf 143 *
mimil 0:ed7287a3edbf 144 * @param deviceID the device ID you want to query.
mimil 0:ed7287a3edbf 145 */
mimil 0:ed7287a3edbf 146 void GetDeviceLastEvent(const string& deviceID);
mimil 0:ed7287a3edbf 147
mimil 0:ed7287a3edbf 148 //void GetFeedEvents();
mimil 0:ed7287a3edbf 149 //void GetDeviceEvents();
mimil 0:ed7287a3edbf 150 //void GetAccountEvents();
mimil 0:ed7287a3edbf 151
mimil 0:ed7287a3edbf 152
mimil 0:ed7287a3edbf 153 /**
mimil 0:ed7287a3edbf 154 * Returns the HTTPClient result of the last HTTP call.
mimil 0:ed7287a3edbf 155 *
mimil 0:ed7287a3edbf 156 * @returns The last call result.
mimil 0:ed7287a3edbf 157 */
mimil 0:ed7287a3edbf 158 HTTPResult Result();
mimil 0:ed7287a3edbf 159 /**
mimil 0:ed7287a3edbf 160 * Returns the HTTP response code of the last HTTP call.
mimil 0:ed7287a3edbf 161 *
mimil 0:ed7287a3edbf 162 * @returns The last HTTP code.
mimil 0:ed7287a3edbf 163 */
mimil 0:ed7287a3edbf 164 int Response();
mimil 0:ed7287a3edbf 165 /**
mimil 0:ed7287a3edbf 166 * Returns the content payload of the last HTTP call.
mimil 0:ed7287a3edbf 167 *
mimil 0:ed7287a3edbf 168 * You can use picojson library to parse the content like this:
mimil 0:ed7287a3edbf 169 * @code
mimil 0:ed7287a3edbf 170 * picojson::value v2;
mimil 0:ed7287a3edbf 171 * const char* response = sense.ResponseContent().gets();
mimil 0:ed7287a3edbf 172 * printf("http response content: %s\r\n", response);
mimil 0:ed7287a3edbf 173 * string err = picojson::parse(v2, response, response + strlen(response));
mimil 0:ed7287a3edbf 174 * printf("--> res error: %s\r\n", err.c_str());
mimil 0:ed7287a3edbf 175 * printf("--> res isarray: %d\r\n", v2.is<picojson::array>());
mimil 0:ed7287a3edbf 176 * if(v2.is<picojson::array>()) {
mimil 0:ed7287a3edbf 177 * // this is a response from PostEvent
mimil 0:ed7287a3edbf 178 * printf("--> res date: %s\r\n", v2.get(0).get("timetag").get<string>());
mimil 0:ed7287a3edbf 179 * }
mimil 0:ed7287a3edbf 180 * @endcode
mimil 0:ed7287a3edbf 181 *
mimil 0:ed7287a3edbf 182 * @returns The content payload.
mimil 0:ed7287a3edbf 183 */
mimil 0:ed7287a3edbf 184 HTTPText SenseClient::ResponseContent();
mimil 0:ed7287a3edbf 185
mimil 0:ed7287a3edbf 186 private:
mimil 0:ed7287a3edbf 187 HTTPText _jsonContent;
mimil 0:ed7287a3edbf 188 HTTPText _jsonRespContent;
mimil 0:ed7287a3edbf 189 string _key;
mimil 0:ed7287a3edbf 190 string _proxy;
mimil 0:ed7287a3edbf 191
mimil 0:ed7287a3edbf 192 HTTPResult _result;
mimil 0:ed7287a3edbf 193 int _response;
mimil 0:ed7287a3edbf 194
mimil 0:ed7287a3edbf 195 };
mimil 0:ed7287a3edbf 196
mimil 0:ed7287a3edbf 197 #endif // SENSECLIENT_H_