Sample program using SenseClient library interacting with Sen.se platform in both ways.
Dependencies: mbed SenseClient picojson
main.cpp
- Committer:
- mimil
- Date:
- 2012-07-11
- Revision:
- 0:3b75e335bed4
File content as of revision 0:3b75e335bed4:
#include "mbed.h" #include "SenseClient.h" #include "EthernetNetIf.h" #include "picojson.h" // sen.se client SenseClient sense("your sen.se key", "your http proxy or empty string"); // update your IDs string deviceID = "5136"; string feedID = "13309"; string actionfeedID = "13310"; // ethernet network interface for ip stack EthernetNetIf eth; DigitalOut led1(LED1); DigitalOut led4(LED4); // just a post sample void postEvent() { picojson::object v; v["aa"] = picojson::value(string("tt")); v["bb"] = picojson::value(double(1.66)); string str = picojson::value(v).serialize(); // if you want to send your data as a json value, // you have to know that it is in fact a string inside another json // so it needs to be escaped as any json string string escapedStr = picojson::value(str).serialize(); sense.PostEvent(feedID, escapedStr); if (sense.Result() == HTTP_OK) { printf("Success PostEvent()!\r\n"); if (sense.ResponseContent().get().compare("null") != 0) { picojson::value v2; const char* response = sense.ResponseContent().gets(); printf("http response content: %s\r\n", response); string err = picojson::parse(v2, response, response + strlen(response)); printf("--> res error: %s\r\n", err.c_str()); printf("--> res isarray: %d\r\n", v2.is<picojson::array>()); printf("--> res date: %s\r\n", v2.get(0).get("timetag").get<string>()); } else { printf("No events found\r\n"); } } else { printf("Sen.se result / response code : %d / %d\r\n", sense.Result(), sense.Response()); } } // get last event call void getLastEvent() { sense.GetLastFeedEvent(feedID); if (sense.Result() == HTTP_OK) { printf("Success LastFeedEvent()!\r\n"); if (sense.ResponseContent().get().compare("null") != 0) { picojson::value v2; const char* response = sense.ResponseContent().gets(); printf("http response content: '%s'\r\n", sense.ResponseContent().get()); string err = picojson::parse(v2, response, response + strlen(response)); printf("--> res error: %s\r\n", err.c_str()); const char* s = v2.get("value").get<string>().c_str(); printf("value content: %s\r\n", s); picojson::value v3; string err2 = picojson::parse(v3, s, s + strlen(s)); printf("--> res error: %s\r\n", err2.c_str()); } else { printf("No events found\r\n"); } } else { printf("Sen.se result / response code : %d / %d\r\n", sense.Result(), sense.Response()); } } // get device last event call void getDeviceLastEvent() { sense.GetDeviceLastEvent(deviceID); if (sense.Result() == HTTP_OK) { printf("Success LastDeviceEvent()!\r\n"); if (sense.ResponseContent().get().compare("null") != 0) { picojson::value v2; const char* response = sense.ResponseContent().gets(); printf("http response content: %s\r\n", response); string err = picojson::parse(v2, response, response + strlen(response)); printf("--> res error: %s\r\n", err.c_str()); } else { printf("No events found\r\n"); } } else { printf("Sen.se result / response code : %d / %d\r\n", sense.Result(), sense.Response()); } } // // This function MUST be defined with that definition in order to have the server working as it is defined as the following // in the SenseClient.SenseHandler class: // // extern void parseEvent(char* content); // void parseEvent(char* content) { led4 = !led4; // update led when we recieve a message from the server printf("content: %s\r\n", content); char* value = sense.getParam(content, "value"); printf("value: %s\r\n", value); picojson::value v; string err = picojson::parse(v, value, value + strlen(value)); printf("--> res error: %s\r\n", err.c_str()); const char* s = v.get("track").get<string>().c_str(); printf("track content: %s\r\n", s); } int main() { // setup the network interface (by dhcp) printf("Setuping ethernet!\r\n"); int status = eth.setup(); if (status == ETH_OK) { IpAddr ethIp = eth.getIp(); printf("Connected ok, IP : %d.%d.%d.%d\r\n", ethIp[0], ethIp[1], ethIp[2], ethIp[3]); //testJSON(); //parseJSON(); //sense.PostEvent("4293", "value as json string or string"); //picojson::object root; /*object root; root["test"] = picojson::value(string("param")); picojson::value v1(root); string jsonres = v1.serialize(); printf(" serialized %s\r\n", jsonres.c_str()); //string jsonres = "dsqd"; sense.PostEvent("4293", jsonres);*/ /*picojson::object json; json["test"] = picojson::value(string("param"));*/ //postEvent(); getLastEvent(); // a test to get the last event //getDeviceLastEvent(); // start the http server on port 8080 sense.startHttpServer(8080); Timer tm; tm.start(); //Listen indefinitely while (true) { Net::poll(); if (tm.read()>.5) { led1=!led1; //Show that we are alive tm.start(); } } } else { printf("Unable to get IP\r\n"); } }