Http adapted library to connect the DISCO_F746NG board to thethings.iO
Dependents: thethingsiO-DISCO_F746NG-http
Diff: ThethingsiO_DISCO_F746NG.cpp
- Revision:
- 0:2f025da7eef3
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ThethingsiO_DISCO_F746NG.cpp Tue Sep 06 08:44:29 2016 +0000 @@ -0,0 +1,170 @@ +#include "ThethingsiO_DISCO_F746NG.h" + +ThethingsiO_DISCO_F746NG::ThethingsiO_DISCO_F746NG() +{ + this->interface.init(); + this->interface.connect(); + this->buffer = network::Buffer(1024); +} + +ThethingsiO_DISCO_F746NG::ThethingsiO_DISCO_F746NG(string token) +{ + this->interface.init(); + this->interface.connect(); + this->thingToken = token; + this->buffer = network::Buffer(1024); +} + +ThethingsiO_DISCO_F746NG::~ThethingsiO_DISCO_F746NG() +{ + +} + +string ThethingsiO_DISCO_F746NG::thingReadAll(int limit) +{ + std::string request("GET /v2/things/"); + request.append(thingToken); + request.append("/all_resources?limit="); + stringstream convert; + convert << limit; + request.append(convert.str()); + request.append(" HTTP/1.1\r\nHost: %s\r\nUser-Agent: curl/7.43.0\r\nAccept: application/json\r\n\r\n"); + if (socket.open() < 0) { + printf("Failed to open TCP Socket\n\r"); + return "Failed to open TCP Socket\n\r"; + } + if (socket.connect("api.thethings.io", 80) < 0) { + printf("Failed to connect with thethings.iO\n\r"); + return "Failed to connect with thethings.iO\n\r"; + } + if (socket.write((void *)request.data(), request.size()) < 0) { + printf("Failed to write HTTP request\n\r"); + return "Failed to write HTTP request\n\r"; + } + int result = this->socket.read(buffer); + //printf("Received %d bytes:\n\r%s\n\r", string string string string string string string int result, (char *)buffer.data()); + string response = string((char*)buffer.data()).substr(string((char*)buffer.data()).find("\r\n\r\n")); + buffer.flush(); + socket.close(); + return response; +} + +string ThethingsiO_DISCO_F746NG::thingRead(string resource, int limit) +{ + std::string request("GET /v2/things/"); + request.append(thingToken); + request.append("/resources/"); + request.append(resource); + request.append("?limit="); + stringstream convert; + convert << limit; + request.append(convert.str()); + request.append(" HTTP/1.1\r\nHost: %s\r\nUser-Agent: curl/7.43.0\r\nAccept: application/json\r\n\r\n"); + if (socket.open() < 0) { + printf("Failed to open TCP Socket\n\r"); + return "Failed to open TCP Socket\n\r"; + } + + if (socket.connect("api.thethings.io", 80) < 0) { + printf("Failed to connect with thethings.iO\n\r"); + return "Failed to connect with thethings.iO\n\r"; + } + + if (socket.write((void *)request.data(), request.size()) < 0) { + printf("Failed to write HTTP request\n\r"); + return "Failed to write HTTP request\n\r"; + } + int result = this->socket.read(this->buffer); + //printf("Received %d bytes:\n\r%s\n\r", string string string string string string string int result, (char *)buffer.data()); + string response = string((char*)this->buffer.data()).substr(string((char*)this->buffer.data()).find("\r\n\r\n")); + this->buffer.flush(); + socket.close(); + return response; +} + +int ThethingsiO_DISCO_F746NG::thingWrite(string resource, string value) +{ + string body; + body.append("{\"values\":[{\"key\":\""); + body.append(resource); + body.append("\",\"value\":\""); + body.append(value); + body.append("\"}]}"); + std::string writerequest("POST /v2/things/"); + writerequest.append(thingToken); + writerequest.append(" HTTP/1.1\r\nHost: %s\r\nUser-Agent: curl/7.43.0\r\nAccept: application/json\r\nContent-Type: application/json\r\nContent-Length: "); + stringstream convert; + convert << body.length(); + writerequest.append(convert.str()); + writerequest.append("\r\n\r\n"); + writerequest.append(body); + writerequest.append("\r\n"); + if (socket.open() < 0) { + printf("Failed to open TCP Socket\n\r"); + return -1; + } + if (socket.connect("api.thethings.io", 80) < 0) { + printf("Failed to connect with thethings.iO\n\r"); + return -1; + } + if (socket.write((void *)writerequest.data(), writerequest.size()) < 0) { + printf("Failed to connect with thethings.iO\n\r"); + return -1; + } + int result = socket.read(buffer); + //printf("Received %d bytes:\n\r%s\n\r", string string string string string string string int result, (char *)buffer.data()); + string response = string((char *) buffer.data()); + //printf("%s\n", (char *) buffer.data()); + int ret = response.find("status:created"); + buffer.flush(); + socket.close(); + if (ret >= 0) return 0; + else return -1; +} + +string ThethingsiO_DISCO_F746NG::thingActivate(string activationCode) +{ + string body; + body.append("{\"activationCode\":\""); + body.append(activationCode); + body.append("\"}"); + std::string writerequest("POST /v2/things/"); + writerequest.append(" HTTP/1.1\r\nHost: %s\r\nUser-Agent: curl/7.43.0\r\nAccept: application/json\r\nContent-Type: application/json\r\nContent-Length: "); + stringstream convert; + convert << body.length(); + writerequest.append(convert.str()); + writerequest.append("\r\n\r\n"); + writerequest.append(body); + writerequest.append("\r\n"); + if (socket.open() < 0) { + printf("Failed to open TCP Socket\n\r"); + return "Failed to open TCP Socket\n\r"; + } + if (socket.connect("api.thethings.io", 80) < 0) { + printf("Failed to connect with thethings.iO\n\r"); + return "Failed to connect with thethings.iO\n\r"; + } + if (socket.write((void *)writerequest.data(), writerequest.size()) < 0) { + printf("Failed to write HTTP request\n\r"); + return "Failed to write HTTP request\n\r"; + } + int result = socket.read(buffer); + //printf("Received %d bytes:\n\r%s\n\r", string string string string string string string int result, (char *)buffer.data()); + string response = string((char *) buffer.data()); + response = response.substr(response.find("\r\n\r\n")); + buffer.flush(); + socket.close(); + + //string string string int result = "{\"status\":\"created\",\"message\":\"thing activated\",\"thingToken\":\"5RWZ6xFogVSJEla3b2gbToHGF1Ko-R8vTNoS3FMl8mM\"}" + return response; +} + +string ThethingsiO_DISCO_F746NG::getToken() +{ + return this->thingToken; +} + +void ThethingsiO_DISCO_F746NG::setToken(string token) +{ + this->thingToken = token; +} \ No newline at end of file