Sample program using SenseClient library interacting with Sen.se platform in both ways.

Dependencies:   mbed SenseClient picojson

Committer:
mimil
Date:
Wed Jul 11 14:23:02 2012 +0000
Revision:
0:3b75e335bed4
SenseClient sample

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mimil 0:3b75e335bed4 1 #include "mbed.h"
mimil 0:3b75e335bed4 2
mimil 0:3b75e335bed4 3 #include "SenseClient.h"
mimil 0:3b75e335bed4 4 #include "EthernetNetIf.h"
mimil 0:3b75e335bed4 5 #include "picojson.h"
mimil 0:3b75e335bed4 6
mimil 0:3b75e335bed4 7
mimil 0:3b75e335bed4 8
mimil 0:3b75e335bed4 9 // sen.se client
mimil 0:3b75e335bed4 10 SenseClient sense("your sen.se key", "your http proxy or empty string");
mimil 0:3b75e335bed4 11 // update your IDs
mimil 0:3b75e335bed4 12 string deviceID = "5136";
mimil 0:3b75e335bed4 13 string feedID = "13309";
mimil 0:3b75e335bed4 14 string actionfeedID = "13310";
mimil 0:3b75e335bed4 15
mimil 0:3b75e335bed4 16 // ethernet network interface for ip stack
mimil 0:3b75e335bed4 17 EthernetNetIf eth;
mimil 0:3b75e335bed4 18
mimil 0:3b75e335bed4 19 DigitalOut led1(LED1);
mimil 0:3b75e335bed4 20 DigitalOut led4(LED4);
mimil 0:3b75e335bed4 21
mimil 0:3b75e335bed4 22 // just a post sample
mimil 0:3b75e335bed4 23 void postEvent() {
mimil 0:3b75e335bed4 24 picojson::object v;
mimil 0:3b75e335bed4 25 v["aa"] = picojson::value(string("tt"));
mimil 0:3b75e335bed4 26 v["bb"] = picojson::value(double(1.66));
mimil 0:3b75e335bed4 27 string str = picojson::value(v).serialize();
mimil 0:3b75e335bed4 28 // if you want to send your data as a json value,
mimil 0:3b75e335bed4 29 // you have to know that it is in fact a string inside another json
mimil 0:3b75e335bed4 30 // so it needs to be escaped as any json string
mimil 0:3b75e335bed4 31 string escapedStr = picojson::value(str).serialize();
mimil 0:3b75e335bed4 32
mimil 0:3b75e335bed4 33 sense.PostEvent(feedID, escapedStr);
mimil 0:3b75e335bed4 34
mimil 0:3b75e335bed4 35 if (sense.Result() == HTTP_OK) {
mimil 0:3b75e335bed4 36 printf("Success PostEvent()!\r\n");
mimil 0:3b75e335bed4 37
mimil 0:3b75e335bed4 38 if (sense.ResponseContent().get().compare("null") != 0) {
mimil 0:3b75e335bed4 39 picojson::value v2;
mimil 0:3b75e335bed4 40 const char* response = sense.ResponseContent().gets();
mimil 0:3b75e335bed4 41 printf("http response content: %s\r\n", response);
mimil 0:3b75e335bed4 42 string err = picojson::parse(v2, response, response + strlen(response));
mimil 0:3b75e335bed4 43 printf("--> res error: %s\r\n", err.c_str());
mimil 0:3b75e335bed4 44 printf("--> res isarray: %d\r\n", v2.is<picojson::array>());
mimil 0:3b75e335bed4 45
mimil 0:3b75e335bed4 46 printf("--> res date: %s\r\n", v2.get(0).get("timetag").get<string>());
mimil 0:3b75e335bed4 47 } else {
mimil 0:3b75e335bed4 48 printf("No events found\r\n");
mimil 0:3b75e335bed4 49 }
mimil 0:3b75e335bed4 50 } else {
mimil 0:3b75e335bed4 51 printf("Sen.se result / response code : %d / %d\r\n", sense.Result(), sense.Response());
mimil 0:3b75e335bed4 52 }
mimil 0:3b75e335bed4 53 }
mimil 0:3b75e335bed4 54
mimil 0:3b75e335bed4 55 // get last event call
mimil 0:3b75e335bed4 56 void getLastEvent() {
mimil 0:3b75e335bed4 57 sense.GetLastFeedEvent(feedID);
mimil 0:3b75e335bed4 58
mimil 0:3b75e335bed4 59 if (sense.Result() == HTTP_OK) {
mimil 0:3b75e335bed4 60 printf("Success LastFeedEvent()!\r\n");
mimil 0:3b75e335bed4 61
mimil 0:3b75e335bed4 62
mimil 0:3b75e335bed4 63
mimil 0:3b75e335bed4 64 if (sense.ResponseContent().get().compare("null") != 0) {
mimil 0:3b75e335bed4 65 picojson::value v2;
mimil 0:3b75e335bed4 66 const char* response = sense.ResponseContent().gets();
mimil 0:3b75e335bed4 67 printf("http response content: '%s'\r\n", sense.ResponseContent().get());
mimil 0:3b75e335bed4 68 string err = picojson::parse(v2, response, response + strlen(response));
mimil 0:3b75e335bed4 69 printf("--> res error: %s\r\n", err.c_str());
mimil 0:3b75e335bed4 70 const char* s = v2.get("value").get<string>().c_str();
mimil 0:3b75e335bed4 71 printf("value content: %s\r\n", s);
mimil 0:3b75e335bed4 72 picojson::value v3;
mimil 0:3b75e335bed4 73 string err2 = picojson::parse(v3, s, s + strlen(s));
mimil 0:3b75e335bed4 74 printf("--> res error: %s\r\n", err2.c_str());
mimil 0:3b75e335bed4 75 } else {
mimil 0:3b75e335bed4 76 printf("No events found\r\n");
mimil 0:3b75e335bed4 77 }
mimil 0:3b75e335bed4 78
mimil 0:3b75e335bed4 79 } else {
mimil 0:3b75e335bed4 80 printf("Sen.se result / response code : %d / %d\r\n", sense.Result(), sense.Response());
mimil 0:3b75e335bed4 81 }
mimil 0:3b75e335bed4 82 }
mimil 0:3b75e335bed4 83
mimil 0:3b75e335bed4 84 // get device last event call
mimil 0:3b75e335bed4 85 void getDeviceLastEvent() {
mimil 0:3b75e335bed4 86 sense.GetDeviceLastEvent(deviceID);
mimil 0:3b75e335bed4 87
mimil 0:3b75e335bed4 88 if (sense.Result() == HTTP_OK) {
mimil 0:3b75e335bed4 89 printf("Success LastDeviceEvent()!\r\n");
mimil 0:3b75e335bed4 90
mimil 0:3b75e335bed4 91 if (sense.ResponseContent().get().compare("null") != 0) {
mimil 0:3b75e335bed4 92 picojson::value v2;
mimil 0:3b75e335bed4 93 const char* response = sense.ResponseContent().gets();
mimil 0:3b75e335bed4 94 printf("http response content: %s\r\n", response);
mimil 0:3b75e335bed4 95 string err = picojson::parse(v2, response, response + strlen(response));
mimil 0:3b75e335bed4 96 printf("--> res error: %s\r\n", err.c_str());
mimil 0:3b75e335bed4 97 } else {
mimil 0:3b75e335bed4 98 printf("No events found\r\n");
mimil 0:3b75e335bed4 99 }
mimil 0:3b75e335bed4 100
mimil 0:3b75e335bed4 101 } else {
mimil 0:3b75e335bed4 102 printf("Sen.se result / response code : %d / %d\r\n", sense.Result(), sense.Response());
mimil 0:3b75e335bed4 103 }
mimil 0:3b75e335bed4 104
mimil 0:3b75e335bed4 105 }
mimil 0:3b75e335bed4 106
mimil 0:3b75e335bed4 107 //
mimil 0:3b75e335bed4 108 // This function MUST be defined with that definition in order to have the server working as it is defined as the following
mimil 0:3b75e335bed4 109 // in the SenseClient.SenseHandler class:
mimil 0:3b75e335bed4 110 //
mimil 0:3b75e335bed4 111 // extern void parseEvent(char* content);
mimil 0:3b75e335bed4 112 //
mimil 0:3b75e335bed4 113 void parseEvent(char* content) {
mimil 0:3b75e335bed4 114 led4 = !led4; // update led when we recieve a message from the server
mimil 0:3b75e335bed4 115 printf("content: %s\r\n", content);
mimil 0:3b75e335bed4 116 char* value = sense.getParam(content, "value");
mimil 0:3b75e335bed4 117 printf("value: %s\r\n", value);
mimil 0:3b75e335bed4 118
mimil 0:3b75e335bed4 119 picojson::value v;
mimil 0:3b75e335bed4 120 string err = picojson::parse(v, value, value + strlen(value));
mimil 0:3b75e335bed4 121 printf("--> res error: %s\r\n", err.c_str());
mimil 0:3b75e335bed4 122
mimil 0:3b75e335bed4 123 const char* s = v.get("track").get<string>().c_str();
mimil 0:3b75e335bed4 124 printf("track content: %s\r\n", s);
mimil 0:3b75e335bed4 125 }
mimil 0:3b75e335bed4 126
mimil 0:3b75e335bed4 127 int main() {
mimil 0:3b75e335bed4 128
mimil 0:3b75e335bed4 129 // setup the network interface (by dhcp)
mimil 0:3b75e335bed4 130 printf("Setuping ethernet!\r\n");
mimil 0:3b75e335bed4 131 int status = eth.setup();
mimil 0:3b75e335bed4 132
mimil 0:3b75e335bed4 133 if (status == ETH_OK) {
mimil 0:3b75e335bed4 134 IpAddr ethIp = eth.getIp();
mimil 0:3b75e335bed4 135 printf("Connected ok, IP : %d.%d.%d.%d\r\n", ethIp[0], ethIp[1], ethIp[2], ethIp[3]);
mimil 0:3b75e335bed4 136
mimil 0:3b75e335bed4 137 //testJSON();
mimil 0:3b75e335bed4 138 //parseJSON();
mimil 0:3b75e335bed4 139 //sense.PostEvent("4293", "value as json string or string");
mimil 0:3b75e335bed4 140 //picojson::object root;
mimil 0:3b75e335bed4 141 /*object root;
mimil 0:3b75e335bed4 142 root["test"] = picojson::value(string("param"));
mimil 0:3b75e335bed4 143
mimil 0:3b75e335bed4 144 picojson::value v1(root);
mimil 0:3b75e335bed4 145 string jsonres = v1.serialize();
mimil 0:3b75e335bed4 146
mimil 0:3b75e335bed4 147 printf(" serialized %s\r\n", jsonres.c_str());
mimil 0:3b75e335bed4 148 //string jsonres = "dsqd";
mimil 0:3b75e335bed4 149
mimil 0:3b75e335bed4 150 sense.PostEvent("4293", jsonres);*/
mimil 0:3b75e335bed4 151
mimil 0:3b75e335bed4 152 /*picojson::object json;
mimil 0:3b75e335bed4 153 json["test"] = picojson::value(string("param"));*/
mimil 0:3b75e335bed4 154
mimil 0:3b75e335bed4 155 //postEvent();
mimil 0:3b75e335bed4 156 getLastEvent(); // a test to get the last event
mimil 0:3b75e335bed4 157 //getDeviceLastEvent();
mimil 0:3b75e335bed4 158
mimil 0:3b75e335bed4 159 // start the http server on port 8080
mimil 0:3b75e335bed4 160 sense.startHttpServer(8080);
mimil 0:3b75e335bed4 161
mimil 0:3b75e335bed4 162
mimil 0:3b75e335bed4 163 Timer tm;
mimil 0:3b75e335bed4 164 tm.start();
mimil 0:3b75e335bed4 165 //Listen indefinitely
mimil 0:3b75e335bed4 166 while (true) {
mimil 0:3b75e335bed4 167 Net::poll();
mimil 0:3b75e335bed4 168 if (tm.read()>.5) {
mimil 0:3b75e335bed4 169 led1=!led1; //Show that we are alive
mimil 0:3b75e335bed4 170 tm.start();
mimil 0:3b75e335bed4 171 }
mimil 0:3b75e335bed4 172 }
mimil 0:3b75e335bed4 173
mimil 0:3b75e335bed4 174 } else {
mimil 0:3b75e335bed4 175 printf("Unable to get IP\r\n");
mimil 0:3b75e335bed4 176 }
mimil 0:3b75e335bed4 177
mimil 0:3b75e335bed4 178
mimil 0:3b75e335bed4 179 }