Sample code that uses EvrythngApi library.

Dependencies:   EvrythngApi mbed

Committer:
vladounet
Date:
Thu Aug 30 13:57:45 2012 +0000
Revision:
0:85d6be554642
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vladounet 0:85d6be554642 1 /*
vladounet 0:85d6be554642 2 * (c) Copyright 2012 EVRYTHNG Ltd London / Zurich
vladounet 0:85d6be554642 3 * www.evrythng.com
vladounet 0:85d6be554642 4 *
vladounet 0:85d6be554642 5 * --- DISCLAIMER ---
vladounet 0:85d6be554642 6 *
vladounet 0:85d6be554642 7 * EVRYTHNG provides this source code "as is" and without warranty of any kind,
vladounet 0:85d6be554642 8 * and hereby disclaims all express or implied warranties, including without
vladounet 0:85d6be554642 9 * limitation warranties of merchantability, fitness for a particular purpose,
vladounet 0:85d6be554642 10 * performance, accuracy, reliability, and non-infringement.
vladounet 0:85d6be554642 11 *
vladounet 0:85d6be554642 12 *
vladounet 0:85d6be554642 13 * --- READ ME ---
vladounet 0:85d6be554642 14 *
vladounet 0:85d6be554642 15 * This is a demo application that uses EVRYTHNG's mbed wrapper to read and
vladounet 0:85d6be554642 16 * write value to EVRYTHNG's engine. Please refer to the online documentation
vladounet 0:85d6be554642 17 * available at http://dev.evrythng.com/mbed.
vladounet 0:85d6be554642 18 *
vladounet 0:85d6be554642 19 *
vladounet 0:85d6be554642 20 * Author: Michel Yerly
vladounet 0:85d6be554642 21 *
vladounet 0:85d6be554642 22 */
vladounet 0:85d6be554642 23
vladounet 0:85d6be554642 24 #include "mbed.h"
vladounet 0:85d6be554642 25 #include "EthernetInterface.h"
vladounet 0:85d6be554642 26 #include <time.h>
vladounet 0:85d6be554642 27 #include "EvrythngApi.h"
vladounet 0:85d6be554642 28 #include "util.h"
vladounet 0:85d6be554642 29 #include "eventqueue.h"
vladounet 0:85d6be554642 30
vladounet 0:85d6be554642 31 /*
vladounet 0:85d6be554642 32 * Configuration
vladounet 0:85d6be554642 33 */
vladounet 0:85d6be554642 34
vladounet 0:85d6be554642 35 // Your EVRYTHNG api key.
vladounet 0:85d6be554642 36 const char* API_KEY = "";
vladounet 0:85d6be554642 37
vladounet 0:85d6be554642 38 // Your thng id, the one that represents your mbed device.
vladounet 0:85d6be554642 39 const char* THNG_ID = "";
vladounet 0:85d6be554642 40
vladounet 0:85d6be554642 41 // The property you want values to be pushed to.
vladounet 0:85d6be554642 42 const char* THNG_PROP_SET = "prop3";
vladounet 0:85d6be554642 43
vladounet 0:85d6be554642 44 // The property you want values to be read from.
vladounet 0:85d6be554642 45 const char* THNG_PROP_GET = "prop3";
vladounet 0:85d6be554642 46
vladounet 0:85d6be554642 47
vladounet 0:85d6be554642 48
vladounet 0:85d6be554642 49 DigitalOut led1(LED1);
vladounet 0:85d6be554642 50 DigitalOut led2(LED2);
vladounet 0:85d6be554642 51 DigitalOut led3(LED3);
vladounet 0:85d6be554642 52 DigitalOut led4(LED4);
vladounet 0:85d6be554642 53
vladounet 0:85d6be554642 54 static char displayVal = 0;
vladounet 0:85d6be554642 55
vladounet 0:85d6be554642 56 /*
vladounet 0:85d6be554642 57 * Displays a value between 0 and 15 as binary on the 4 LEDs.
vladounet 0:85d6be554642 58 */
vladounet 0:85d6be554642 59 void display(char x)
vladounet 0:85d6be554642 60 {
vladounet 0:85d6be554642 61 led1 = x & (char)8 ? 1 : 0;
vladounet 0:85d6be554642 62 led2 = x & (char)4 ? 1 : 0;
vladounet 0:85d6be554642 63 led3 = x & (char)2 ? 1 : 0;
vladounet 0:85d6be554642 64 led4 = x & (char)1 ? 1 : 0;
vladounet 0:85d6be554642 65 displayVal = x;
vladounet 0:85d6be554642 66 }
vladounet 0:85d6be554642 67
vladounet 0:85d6be554642 68 /*
vladounet 0:85d6be554642 69 * Flashes the 4 LEDs, and restores the state of the last display().
vladounet 0:85d6be554642 70 */
vladounet 0:85d6be554642 71 void flash()
vladounet 0:85d6be554642 72 {
vladounet 0:85d6be554642 73 char s = displayVal;
vladounet 0:85d6be554642 74 for (int i = 0; i < 2; ++i) {
vladounet 0:85d6be554642 75 display(0x0F);
vladounet 0:85d6be554642 76 wait(0.1);
vladounet 0:85d6be554642 77 display(0x00);
vladounet 0:85d6be554642 78 wait(0.1);
vladounet 0:85d6be554642 79 }
vladounet 0:85d6be554642 80 display(s);
vladounet 0:85d6be554642 81 }
vladounet 0:85d6be554642 82
vladounet 0:85d6be554642 83 /*
vladounet 0:85d6be554642 84 * Function to get the number of milliseconds elapsed since the system startup.
vladounet 0:85d6be554642 85 * It is imprecise and if called repetitively and quickly, it may always return
vladounet 0:85d6be554642 86 * the same result. It MUST be called at least every 30 minutes.
vladounet 0:85d6be554642 87 * NOTE: I'm not proud of it.
vladounet 0:85d6be554642 88 */
vladounet 0:85d6be554642 89 int64_t getMillis()
vladounet 0:85d6be554642 90 {
vladounet 0:85d6be554642 91 static Timer tmr;
vladounet 0:85d6be554642 92 static int64_t clk = 0;
vladounet 0:85d6be554642 93
vladounet 0:85d6be554642 94 tmr.stop();
vladounet 0:85d6be554642 95 clk += tmr.read_ms();
vladounet 0:85d6be554642 96 tmr.reset();
vladounet 0:85d6be554642 97 tmr.start();
vladounet 0:85d6be554642 98
vladounet 0:85d6be554642 99 char str[21];
vladounet 0:85d6be554642 100 char* end;
vladounet 0:85d6be554642 101 sprinti64(str, clk, &end);
vladounet 0:85d6be554642 102 *end = '\0';
vladounet 0:85d6be554642 103 dbg.printf("%s ", str);
vladounet 0:85d6be554642 104
vladounet 0:85d6be554642 105 return clk;
vladounet 0:85d6be554642 106 }
vladounet 0:85d6be554642 107
vladounet 0:85d6be554642 108 /*
vladounet 0:85d6be554642 109 * Entry point.
vladounet 0:85d6be554642 110 *
vladounet 0:85d6be554642 111 * This demo application uses an event loop to set and get property values
vladounet 0:85d6be554642 112 * on EVRYTHNG engine at given intervals.
vladounet 0:85d6be554642 113 */
vladounet 0:85d6be554642 114 int main()
vladounet 0:85d6be554642 115 {
vladounet 0:85d6be554642 116 dbg.printf("Initializing ethernet interface\r\n");
vladounet 0:85d6be554642 117 EthernetInterface eth;
vladounet 0:85d6be554642 118 eth.init(); //Use DHCP
vladounet 0:85d6be554642 119 eth.connect();
vladounet 0:85d6be554642 120 dbg.printf("IP address: %s\r\n", eth.getIPAddress());
vladounet 0:85d6be554642 121
vladounet 0:85d6be554642 122 EvrythngApi api(API_KEY);
vladounet 0:85d6be554642 123
vladounet 0:85d6be554642 124 // intervals in ms
vladounet 0:85d6be554642 125 const int SET_INTERVAL = 5000;
vladounet 0:85d6be554642 126 const int GET_INTERVAL = 2000;
vladounet 0:85d6be554642 127
vladounet 0:85d6be554642 128 int curVal = 0;
vladounet 0:85d6be554642 129 display(curVal);
vladounet 0:85d6be554642 130
vladounet 0:85d6be554642 131 int putVal = 0;
vladounet 0:85d6be554642 132 char strPutVal[3];
vladounet 0:85d6be554642 133 int64_t timestamp = 1345736694000LL; // 2012-08-23 10:44:54am EST
vladounet 0:85d6be554642 134
vladounet 0:85d6be554642 135 EventQueue eventQueue;
vladounet 0:85d6be554642 136 eventQueue.put(getMillis()+GET_INTERVAL, EVT_GET_PROP);
vladounet 0:85d6be554642 137 eventQueue.put(getMillis()+SET_INTERVAL, EVT_SET_PROP);
vladounet 0:85d6be554642 138
vladounet 0:85d6be554642 139 while (!eventQueue.empty()) {
vladounet 0:85d6be554642 140 EventType event = eventQueue.waitNext(getMillis());
vladounet 0:85d6be554642 141
vladounet 0:85d6be554642 142 switch (event) {
vladounet 0:85d6be554642 143
vladounet 0:85d6be554642 144 case EVT_SET_PROP:
vladounet 0:85d6be554642 145
vladounet 0:85d6be554642 146 eventQueue.put(SET_INTERVAL + getMillis(), EVT_SET_PROP);
vladounet 0:85d6be554642 147
vladounet 0:85d6be554642 148 putVal = (putVal + 1) & 0xF;
vladounet 0:85d6be554642 149 sprintf(strPutVal, "%d", putVal);
vladounet 0:85d6be554642 150 timestamp++;
vladounet 0:85d6be554642 151 api.setThngPropertyValue(THNG_ID, THNG_PROP_SET, string(strPutVal), timestamp);
vladounet 0:85d6be554642 152
vladounet 0:85d6be554642 153 break;
vladounet 0:85d6be554642 154
vladounet 0:85d6be554642 155 case EVT_GET_PROP:
vladounet 0:85d6be554642 156
vladounet 0:85d6be554642 157 eventQueue.put(GET_INTERVAL + getMillis(), EVT_GET_PROP);
vladounet 0:85d6be554642 158
vladounet 0:85d6be554642 159 string v;
vladounet 0:85d6be554642 160 int r = api.getThngPropertyValue(THNG_ID, THNG_PROP_GET, v);
vladounet 0:85d6be554642 161 if (r == 0) {
vladounet 0:85d6be554642 162 flash();
vladounet 0:85d6be554642 163 int newVal = atoi(v.c_str());
vladounet 0:85d6be554642 164 if (newVal != curVal) {
vladounet 0:85d6be554642 165 curVal = newVal;
vladounet 0:85d6be554642 166 display(curVal);
vladounet 0:85d6be554642 167 }
vladounet 0:85d6be554642 168 }
vladounet 0:85d6be554642 169 break;
vladounet 0:85d6be554642 170 }
vladounet 0:85d6be554642 171 }
vladounet 0:85d6be554642 172
vladounet 0:85d6be554642 173 dbg.printf("Disconnecting ethernet interface\r\n");
vladounet 0:85d6be554642 174 eth.disconnect();
vladounet 0:85d6be554642 175
vladounet 0:85d6be554642 176 dbg.printf("Done.\r\n");
vladounet 0:85d6be554642 177 while(1) {}
vladounet 0:85d6be554642 178 }