Sample program using SenseClient library interacting with Sen.se platform in both ways.
Dependencies: mbed SenseClient picojson
main.cpp@0:3b75e335bed4, 2012-07-11 (annotated)
- Committer:
- mimil
- Date:
- Wed Jul 11 14:23:02 2012 +0000
- Revision:
- 0:3b75e335bed4
SenseClient sample
Who changed what in which revision?
User | Revision | Line number | New 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 | } |