mbed IoT Gateway board demo. This program received wireless data from JeeNode and uploads to Pachube. http://www.skpang.co.uk/catalog/mbed-iot-gateway-board-p-1051.html Full kit: http://www.skpang.co.uk/catalog/mbed-iot-gateway-full-kit-p-1052.html
Dependencies: EthernetNetIf mbed
Pachube/PachubeV2CSV.cpp@0:7f301f08b68f, 2012-01-02 (annotated)
- Committer:
- pangsk
- Date:
- Mon Jan 02 20:03:01 2012 +0000
- Revision:
- 0:7f301f08b68f
Initial release.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
pangsk | 0:7f301f08b68f | 1 | /** |
pangsk | 0:7f301f08b68f | 2 | * Pachube API interface driver. (Version 0.0.1) |
pangsk | 0:7f301f08b68f | 3 | * |
pangsk | 0:7f301f08b68f | 4 | * Copyright (C) 2010 Shinichiro Nakamura (CuBeatSystems) |
pangsk | 0:7f301f08b68f | 5 | * http://shinta.main.jp/ |
pangsk | 0:7f301f08b68f | 6 | */ |
pangsk | 0:7f301f08b68f | 7 | |
pangsk | 0:7f301f08b68f | 8 | #include "PachubeV2CSV.h" |
pangsk | 0:7f301f08b68f | 9 | #include "EthernetNetIf.h" |
pangsk | 0:7f301f08b68f | 10 | #include "HTTPClient.h" |
pangsk | 0:7f301f08b68f | 11 | |
pangsk | 0:7f301f08b68f | 12 | PachubeV2CSV::PachubeV2CSV(std::string APIKEY) : Pachube(APIKEY) { |
pangsk | 0:7f301f08b68f | 13 | } |
pangsk | 0:7f301f08b68f | 14 | |
pangsk | 0:7f301f08b68f | 15 | PachubeV2CSV::~PachubeV2CSV() { |
pangsk | 0:7f301f08b68f | 16 | } |
pangsk | 0:7f301f08b68f | 17 | |
pangsk | 0:7f301f08b68f | 18 | /* |
pangsk | 0:7f301f08b68f | 19 | * ================================================================= |
pangsk | 0:7f301f08b68f | 20 | * Environments (feeds) |
pangsk | 0:7f301f08b68f | 21 | * ================================================================= |
pangsk | 0:7f301f08b68f | 22 | */ |
pangsk | 0:7f301f08b68f | 23 | |
pangsk | 0:7f301f08b68f | 24 | /** |
pangsk | 0:7f301f08b68f | 25 | * List all available feeds: GET /v2/feeds |
pangsk | 0:7f301f08b68f | 26 | */ |
pangsk | 0:7f301f08b68f | 27 | int PachubeV2CSV::listAllAvailableFeeds( |
pangsk | 0:7f301f08b68f | 28 | int page, |
pangsk | 0:7f301f08b68f | 29 | int per_page, |
pangsk | 0:7f301f08b68f | 30 | std::string content, |
pangsk | 0:7f301f08b68f | 31 | std::string q, |
pangsk | 0:7f301f08b68f | 32 | std::string tag, |
pangsk | 0:7f301f08b68f | 33 | std::string user, |
pangsk | 0:7f301f08b68f | 34 | std::string units, |
pangsk | 0:7f301f08b68f | 35 | std::string status, |
pangsk | 0:7f301f08b68f | 36 | std::string order, |
pangsk | 0:7f301f08b68f | 37 | std::string &datatext) { |
pangsk | 0:7f301f08b68f | 38 | HTTPClient client; |
pangsk | 0:7f301f08b68f | 39 | client.setRequestHeader(Pachube::REQUESTHEADER, APIKEY); |
pangsk | 0:7f301f08b68f | 40 | |
pangsk | 0:7f301f08b68f | 41 | HTTPText text("text/csv"); |
pangsk | 0:7f301f08b68f | 42 | text.set(""); |
pangsk | 0:7f301f08b68f | 43 | HTTPText data; |
pangsk | 0:7f301f08b68f | 44 | |
pangsk | 0:7f301f08b68f | 45 | /* |
pangsk | 0:7f301f08b68f | 46 | * Example: http://api.pachube.com/v2/feeds |
pangsk | 0:7f301f08b68f | 47 | */ |
pangsk | 0:7f301f08b68f | 48 | char tmp[32]; |
pangsk | 0:7f301f08b68f | 49 | sprintf(tmp, "?page=%d&per_page=%d", page, per_page); |
pangsk | 0:7f301f08b68f | 50 | string URL = Pachube::URLBASE_V2 + "/feeds.csv" + std::string(tmp); |
pangsk | 0:7f301f08b68f | 51 | |
pangsk | 0:7f301f08b68f | 52 | if (content.length() > 0) { |
pangsk | 0:7f301f08b68f | 53 | URL = URL + "&content=" + content; |
pangsk | 0:7f301f08b68f | 54 | } |
pangsk | 0:7f301f08b68f | 55 | if (q.length() > 0) { |
pangsk | 0:7f301f08b68f | 56 | URL = URL + "&q=" + q; |
pangsk | 0:7f301f08b68f | 57 | } |
pangsk | 0:7f301f08b68f | 58 | if (tag.length() > 0) { |
pangsk | 0:7f301f08b68f | 59 | URL = URL + "&tag=" + tag; |
pangsk | 0:7f301f08b68f | 60 | } |
pangsk | 0:7f301f08b68f | 61 | if (user.length() > 0) { |
pangsk | 0:7f301f08b68f | 62 | URL = URL + "&user=" + user; |
pangsk | 0:7f301f08b68f | 63 | } |
pangsk | 0:7f301f08b68f | 64 | if (units.length() > 0) { |
pangsk | 0:7f301f08b68f | 65 | URL = URL + "&units=" + units; |
pangsk | 0:7f301f08b68f | 66 | } |
pangsk | 0:7f301f08b68f | 67 | if (status.length() > 0) { |
pangsk | 0:7f301f08b68f | 68 | URL = URL + "&status=" + status; |
pangsk | 0:7f301f08b68f | 69 | } |
pangsk | 0:7f301f08b68f | 70 | if (order.length() > 0) { |
pangsk | 0:7f301f08b68f | 71 | URL = URL + "&order=" + order; |
pangsk | 0:7f301f08b68f | 72 | } |
pangsk | 0:7f301f08b68f | 73 | |
pangsk | 0:7f301f08b68f | 74 | HTTPResult result = client.get(URL.c_str(), &data); |
pangsk | 0:7f301f08b68f | 75 | datatext = data.get(); |
pangsk | 0:7f301f08b68f | 76 | |
pangsk | 0:7f301f08b68f | 77 | return client.getHTTPResponseCode(); |
pangsk | 0:7f301f08b68f | 78 | } |
pangsk | 0:7f301f08b68f | 79 | |
pangsk | 0:7f301f08b68f | 80 | /** |
pangsk | 0:7f301f08b68f | 81 | * Create new feed: POST /v2/feeds |
pangsk | 0:7f301f08b68f | 82 | */ |
pangsk | 0:7f301f08b68f | 83 | int PachubeV2CSV::createNewFeed(void) { |
pangsk | 0:7f301f08b68f | 84 | error("CSV is not supported for creating Environments because it cannot represent the required parameters due to its very simple format."); |
pangsk | 0:7f301f08b68f | 85 | return 404; |
pangsk | 0:7f301f08b68f | 86 | } |
pangsk | 0:7f301f08b68f | 87 | |
pangsk | 0:7f301f08b68f | 88 | /** |
pangsk | 0:7f301f08b68f | 89 | * Read feed: GET /v2/feeds/<feed_id> |
pangsk | 0:7f301f08b68f | 90 | */ |
pangsk | 0:7f301f08b68f | 91 | int PachubeV2CSV::readFeed(int feed_id, std::string &datatext) { |
pangsk | 0:7f301f08b68f | 92 | HTTPClient client; |
pangsk | 0:7f301f08b68f | 93 | client.setRequestHeader(Pachube::REQUESTHEADER, APIKEY); |
pangsk | 0:7f301f08b68f | 94 | |
pangsk | 0:7f301f08b68f | 95 | HTTPText text("text/csv"); |
pangsk | 0:7f301f08b68f | 96 | text.set(""); |
pangsk | 0:7f301f08b68f | 97 | HTTPText data; |
pangsk | 0:7f301f08b68f | 98 | |
pangsk | 0:7f301f08b68f | 99 | /* |
pangsk | 0:7f301f08b68f | 100 | * Example: http://api.pachube.com/v2/feeds/1977 |
pangsk | 0:7f301f08b68f | 101 | */ |
pangsk | 0:7f301f08b68f | 102 | char feed_id_char[32]; |
pangsk | 0:7f301f08b68f | 103 | sprintf(feed_id_char, "%d", feed_id); |
pangsk | 0:7f301f08b68f | 104 | const string URL = Pachube::URLBASE_V2 + "/feeds/" + std::string(feed_id_char) + ".csv"; |
pangsk | 0:7f301f08b68f | 105 | |
pangsk | 0:7f301f08b68f | 106 | HTTPResult result = client.get(URL.c_str(), &data); |
pangsk | 0:7f301f08b68f | 107 | datatext = data.get(); |
pangsk | 0:7f301f08b68f | 108 | return client.getHTTPResponseCode(); |
pangsk | 0:7f301f08b68f | 109 | } |
pangsk | 0:7f301f08b68f | 110 | |
pangsk | 0:7f301f08b68f | 111 | /** |
pangsk | 0:7f301f08b68f | 112 | * Update feed: PUT /v2/feeds/<feed_id> |
pangsk | 0:7f301f08b68f | 113 | */ |
pangsk | 0:7f301f08b68f | 114 | int PachubeV2CSV::updateFeed(int feed_id) { |
pangsk | 0:7f301f08b68f | 115 | HTTPClient client; |
pangsk | 0:7f301f08b68f | 116 | client.setRequestHeader(Pachube::REQUESTHEADER, APIKEY); |
pangsk | 0:7f301f08b68f | 117 | |
pangsk | 0:7f301f08b68f | 118 | HTTPText text("text/csv"); |
pangsk | 0:7f301f08b68f | 119 | text.set(""); |
pangsk | 0:7f301f08b68f | 120 | |
pangsk | 0:7f301f08b68f | 121 | /* |
pangsk | 0:7f301f08b68f | 122 | * Example: http://api.pachube.com/v2/feeds/1977?_method=put |
pangsk | 0:7f301f08b68f | 123 | */ |
pangsk | 0:7f301f08b68f | 124 | char feed_id_char[32]; |
pangsk | 0:7f301f08b68f | 125 | sprintf(feed_id_char, "%d", feed_id); |
pangsk | 0:7f301f08b68f | 126 | const string URL = Pachube::URLBASE_V2 + "/feeds/" + std::string(feed_id_char) + "?_method=put"; |
pangsk | 0:7f301f08b68f | 127 | |
pangsk | 0:7f301f08b68f | 128 | HTTPResult result = client.post(URL.c_str(), text, NULL); |
pangsk | 0:7f301f08b68f | 129 | return client.getHTTPResponseCode(); |
pangsk | 0:7f301f08b68f | 130 | } |
pangsk | 0:7f301f08b68f | 131 | |
pangsk | 0:7f301f08b68f | 132 | /** |
pangsk | 0:7f301f08b68f | 133 | * Delete feed: DELETE /v2/feeds/<feed_id> |
pangsk | 0:7f301f08b68f | 134 | */ |
pangsk | 0:7f301f08b68f | 135 | int PachubeV2CSV::deleteFeed(int feed_id) { |
pangsk | 0:7f301f08b68f | 136 | HTTPClient client; |
pangsk | 0:7f301f08b68f | 137 | client.setRequestHeader(Pachube::REQUESTHEADER, APIKEY); |
pangsk | 0:7f301f08b68f | 138 | |
pangsk | 0:7f301f08b68f | 139 | HTTPText text("text/csv"); |
pangsk | 0:7f301f08b68f | 140 | text.set(""); |
pangsk | 0:7f301f08b68f | 141 | |
pangsk | 0:7f301f08b68f | 142 | /* |
pangsk | 0:7f301f08b68f | 143 | * Example: http://api.pachube.com/v2/feeds/1977?_method=delete |
pangsk | 0:7f301f08b68f | 144 | */ |
pangsk | 0:7f301f08b68f | 145 | char feed_id_char[32]; |
pangsk | 0:7f301f08b68f | 146 | sprintf(feed_id_char, "%d", feed_id); |
pangsk | 0:7f301f08b68f | 147 | const string URL = Pachube::URLBASE_V2 + "/feeds/" + std::string(feed_id_char) + "?_method=delete"; |
pangsk | 0:7f301f08b68f | 148 | |
pangsk | 0:7f301f08b68f | 149 | HTTPResult result = client.post(URL.c_str(), text, NULL); |
pangsk | 0:7f301f08b68f | 150 | return client.getHTTPResponseCode(); |
pangsk | 0:7f301f08b68f | 151 | } |
pangsk | 0:7f301f08b68f | 152 | |
pangsk | 0:7f301f08b68f | 153 | /* |
pangsk | 0:7f301f08b68f | 154 | * ================================================================= |
pangsk | 0:7f301f08b68f | 155 | * Datastreams |
pangsk | 0:7f301f08b68f | 156 | * ================================================================= |
pangsk | 0:7f301f08b68f | 157 | */ |
pangsk | 0:7f301f08b68f | 158 | |
pangsk | 0:7f301f08b68f | 159 | /** |
pangsk | 0:7f301f08b68f | 160 | * Create new datastream: POST /v2/feeds/<feed_id>/datastreams |
pangsk | 0:7f301f08b68f | 161 | * |
pangsk | 0:7f301f08b68f | 162 | * @param feed_id Feed ID. |
pangsk | 0:7f301f08b68f | 163 | * @param stream_id Stream ID text. |
pangsk | 0:7f301f08b68f | 164 | * @param value value. |
pangsk | 0:7f301f08b68f | 165 | * |
pangsk | 0:7f301f08b68f | 166 | * @return Return code from a web server. |
pangsk | 0:7f301f08b68f | 167 | */ |
pangsk | 0:7f301f08b68f | 168 | int PachubeV2CSV::createNewDataStream(int feed_id, std::string stream_id, std::string value) { |
pangsk | 0:7f301f08b68f | 169 | HTTPClient client; |
pangsk | 0:7f301f08b68f | 170 | client.setRequestHeader(Pachube::REQUESTHEADER, APIKEY); |
pangsk | 0:7f301f08b68f | 171 | |
pangsk | 0:7f301f08b68f | 172 | std::string data = stream_id + "," + value; |
pangsk | 0:7f301f08b68f | 173 | HTTPText text("text/csv"); |
pangsk | 0:7f301f08b68f | 174 | text.set(data); |
pangsk | 0:7f301f08b68f | 175 | |
pangsk | 0:7f301f08b68f | 176 | /* |
pangsk | 0:7f301f08b68f | 177 | * Example: http://api.pachube.com/v2/feeds/1977/datastreams |
pangsk | 0:7f301f08b68f | 178 | */ |
pangsk | 0:7f301f08b68f | 179 | char feed_id_char[32]; |
pangsk | 0:7f301f08b68f | 180 | sprintf(feed_id_char, "%d", feed_id); |
pangsk | 0:7f301f08b68f | 181 | const string URL = Pachube::URLBASE_V2 + "/feeds/" + std::string(feed_id_char) + "/datastreams"; |
pangsk | 0:7f301f08b68f | 182 | |
pangsk | 0:7f301f08b68f | 183 | HTTPResult result = client.post(URL.c_str(), text, NULL); |
pangsk | 0:7f301f08b68f | 184 | return client.getHTTPResponseCode(); |
pangsk | 0:7f301f08b68f | 185 | } |
pangsk | 0:7f301f08b68f | 186 | |
pangsk | 0:7f301f08b68f | 187 | /** |
pangsk | 0:7f301f08b68f | 188 | * Read datastream - GET /v2/feeds/<feed_id>/datastreams/<datastream_id> |
pangsk | 0:7f301f08b68f | 189 | * |
pangsk | 0:7f301f08b68f | 190 | * @param feed_id Feed ID. |
pangsk | 0:7f301f08b68f | 191 | * @param stream_id Stream ID text. |
pangsk | 0:7f301f08b68f | 192 | * |
pangsk | 0:7f301f08b68f | 193 | * @return Return code from a web server. |
pangsk | 0:7f301f08b68f | 194 | */ |
pangsk | 0:7f301f08b68f | 195 | int PachubeV2CSV::readDataStream(int feed_id, std::string stream_id, std::string &datatext) { |
pangsk | 0:7f301f08b68f | 196 | HTTPClient client; |
pangsk | 0:7f301f08b68f | 197 | client.setRequestHeader(Pachube::REQUESTHEADER, APIKEY); |
pangsk | 0:7f301f08b68f | 198 | |
pangsk | 0:7f301f08b68f | 199 | HTTPText text("text/csv"); |
pangsk | 0:7f301f08b68f | 200 | text.set(""); |
pangsk | 0:7f301f08b68f | 201 | HTTPText data; |
pangsk | 0:7f301f08b68f | 202 | |
pangsk | 0:7f301f08b68f | 203 | /* |
pangsk | 0:7f301f08b68f | 204 | * Example: http://api.pachube.com/v2/feeds/1977/datastreams/energy |
pangsk | 0:7f301f08b68f | 205 | */ |
pangsk | 0:7f301f08b68f | 206 | char feed_id_char[32]; |
pangsk | 0:7f301f08b68f | 207 | sprintf(feed_id_char, "%d", feed_id); |
pangsk | 0:7f301f08b68f | 208 | const string URL = Pachube::URLBASE_V2 + "/feeds/" + std::string(feed_id_char) + "/datastreams/" + stream_id + ".csv"; |
pangsk | 0:7f301f08b68f | 209 | |
pangsk | 0:7f301f08b68f | 210 | HTTPResult result = client.get(URL.c_str(), &data); |
pangsk | 0:7f301f08b68f | 211 | datatext = data.get(); |
pangsk | 0:7f301f08b68f | 212 | return client.getHTTPResponseCode(); |
pangsk | 0:7f301f08b68f | 213 | } |
pangsk | 0:7f301f08b68f | 214 | |
pangsk | 0:7f301f08b68f | 215 | /** |
pangsk | 0:7f301f08b68f | 216 | * Update datastream: PUT /v2/feeds/<feed_id>/datastreams/<datastream_id> |
pangsk | 0:7f301f08b68f | 217 | * |
pangsk | 0:7f301f08b68f | 218 | * @param feed_id Feed ID. |
pangsk | 0:7f301f08b68f | 219 | * @param stream_id Stream ID text. |
pangsk | 0:7f301f08b68f | 220 | * @param value value. |
pangsk | 0:7f301f08b68f | 221 | * |
pangsk | 0:7f301f08b68f | 222 | * @return Return code from a web server. |
pangsk | 0:7f301f08b68f | 223 | */ |
pangsk | 0:7f301f08b68f | 224 | int PachubeV2CSV::updateDataStream(int feed_id, std::string stream_id, std::string value) { |
pangsk | 0:7f301f08b68f | 225 | HTTPClient client; |
pangsk | 0:7f301f08b68f | 226 | client.setRequestHeader(Pachube::REQUESTHEADER, APIKEY); |
pangsk | 0:7f301f08b68f | 227 | |
pangsk | 0:7f301f08b68f | 228 | HTTPText text("text/csv"); |
pangsk | 0:7f301f08b68f | 229 | text.set(value); |
pangsk | 0:7f301f08b68f | 230 | |
pangsk | 0:7f301f08b68f | 231 | /* |
pangsk | 0:7f301f08b68f | 232 | * Example: http://api.pachube.com/v2/feeds/1977/datastreams/energy?_method=put |
pangsk | 0:7f301f08b68f | 233 | */ |
pangsk | 0:7f301f08b68f | 234 | char feed_id_char[32]; |
pangsk | 0:7f301f08b68f | 235 | sprintf(feed_id_char, "%d", feed_id); |
pangsk | 0:7f301f08b68f | 236 | const string URL = Pachube::URLBASE_V2 + "/feeds/" + std::string(feed_id_char) + "/datastreams/" + stream_id + "?_method=put"; |
pangsk | 0:7f301f08b68f | 237 | |
pangsk | 0:7f301f08b68f | 238 | HTTPResult result = client.post(URL.c_str(), text, NULL); |
pangsk | 0:7f301f08b68f | 239 | return client.getHTTPResponseCode(); |
pangsk | 0:7f301f08b68f | 240 | } |
pangsk | 0:7f301f08b68f | 241 | |
pangsk | 0:7f301f08b68f | 242 | /** |
pangsk | 0:7f301f08b68f | 243 | * Delete datastream: DELETE /v2/feeds/<feed_id>/datastreams/<datastream_id> |
pangsk | 0:7f301f08b68f | 244 | * |
pangsk | 0:7f301f08b68f | 245 | * @param feed_id Feed ID. |
pangsk | 0:7f301f08b68f | 246 | * @param stream_id Stream ID text. |
pangsk | 0:7f301f08b68f | 247 | * |
pangsk | 0:7f301f08b68f | 248 | * @return Return code from a web server. |
pangsk | 0:7f301f08b68f | 249 | */ |
pangsk | 0:7f301f08b68f | 250 | int PachubeV2CSV::deleteDataStream(int feed_id, std::string stream_id) { |
pangsk | 0:7f301f08b68f | 251 | HTTPClient client; |
pangsk | 0:7f301f08b68f | 252 | client.setRequestHeader(Pachube::REQUESTHEADER, APIKEY); |
pangsk | 0:7f301f08b68f | 253 | |
pangsk | 0:7f301f08b68f | 254 | HTTPText text("text/csv"); |
pangsk | 0:7f301f08b68f | 255 | text.set(""); |
pangsk | 0:7f301f08b68f | 256 | |
pangsk | 0:7f301f08b68f | 257 | /* |
pangsk | 0:7f301f08b68f | 258 | * Example: http://api.pachube.com/v2/feeds/1977/datastreams/energy?_method=delete |
pangsk | 0:7f301f08b68f | 259 | */ |
pangsk | 0:7f301f08b68f | 260 | char feed_id_char[32]; |
pangsk | 0:7f301f08b68f | 261 | sprintf(feed_id_char, "%d", feed_id); |
pangsk | 0:7f301f08b68f | 262 | const string URL = Pachube::URLBASE_V2 + "/feeds/" + std::string(feed_id_char) + "/datastreams/" + stream_id + "?_method=delete"; |
pangsk | 0:7f301f08b68f | 263 | |
pangsk | 0:7f301f08b68f | 264 | HTTPResult result = client.post(URL.c_str(), text, NULL); |
pangsk | 0:7f301f08b68f | 265 | return client.getHTTPResponseCode(); |
pangsk | 0:7f301f08b68f | 266 | } |