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

Committer:
pangsk
Date:
Mon Jan 30 21:44:36 2012 +0000
Revision:
1:63b6db2e24a5
Parent:
0:7f301f08b68f
Correct init code in RF12B.cpp

Who changed what in which revision?

UserRevisionLine numberNew 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 }