Kansai Electric Power usage meter (Denki-yohou)
Dependencies: mbed mbed-rtos EthernetInterface
関西電力 でんき予報メーター
関電のでんき予報のリアルタイム値(使用電力状況データ CSV )をもとに、mbedのLEDを点灯させます。
そのほかの情報はこちらへ: http://mbed.org/users/okini3939/notebook/denki-yohou/
Import programdenki-yohou_b
Kansai Electric Power usage meter (Denki-yohou)
- LED1 動作中表示
- LED2 70%以上
- LED3 85%以上
- LED4 95%以上
新しい Ethernet Interface ライブラリと、独自の Tiny HTTP クライアント ライブラリを使っています。
CSVの解析処理をはしょって改行を頼りにしているので、CSVファイルの構造が変わるとうまく動かなくなります。
東電でも同様に使えると思います。
main.cpp
- Committer:
- okini3939
- Date:
- 2012-07-02
- Revision:
- 0:2a2f00cbc761
- Child:
- 1:10bd46941b8b
File content as of revision 0:2a2f00cbc761:
#include "mbed.h" #include "EthernetInterface.h" #include "TinyHTTP_b.h" // Kansai Electric Power #define HTTP_HOST "www.kepco.co.jp" #define HTTP_URI "/yamasou/juyo1_kansai.csv" Serial pc(USBTX, USBRX); EthernetInterface eth; DigitalOut led1(LED1), led2(LED2), led3(LED3), led4(LED4); int denki_usage = 0; struct tm denki_update; int year, month, day, hour, minute; void callback_denkiyohou (char *buf, int len) { static int flg = 0, n = 0; static char data[200]; int i; for (i = 0; i < len; i ++) { if (buf[i] == '\r') continue; switch (flg) { case 0: // header if (buf[i] == '\n') { flg ++; } break; case 1: // end of header if (buf[i] == '\n') { flg ++; } else { flg = 0; } break; case 2: // update if (buf[i] == '\n') { data[n] = 0; sscanf(data, "%d/%d/%d %d:%d", &year, &month, &day, &hour, &minute); n = 0; flg ++; } else { data[n] = buf[i]; n ++; } break; case 4: // peak if (buf[i] == '\n') { n = 0; flg ++; } else { data[n] = buf[i]; n ++; } break; case 7: // yosou if (buf[i] == '\n') { n = 0; flg ++; } else { data[n] = buf[i]; n ++; } break; case 10: // usage if (buf[i] == '\n') { data[n] = 0; if (data[0] >= '0' && data[0] <= '9') { denki_usage = atoi(data); } n = 0; flg ++; } else { data[n] = buf[i]; n ++; } break; default: // text if (buf[i] == '\n') { flg ++; } break; } } } int main() { Timer timer; int flg = 1, r; pc.baud(115200); eth.init(); //Use DHCP if (eth.connect()) { return -1; } pc.printf("Denki-yohou %s\r\n", HTTP_HOST); timer.start(); while(1) { led1 = 1; if (flg || timer.read() >= 300) { timer.reset(); r = httpRequest(METHOD_GET, HTTP_HOST, 80, HTTP_URI, NULL, NULL, &callback_denkiyohou); if (r == 0) { pc.printf("%04d-%02d-%02d %02d:%02d : ", year, month, day, hour, minute); pc.printf("%d %%\r\n", denki_usage); led2 = denki_usage >= 70 ? 1 : 0; led3 = denki_usage >= 85 ? 1 : 0; led4 = denki_usage >= 95 ? 1 : 0; } flg = 0; } wait(0.1); led1 = 0; wait(0.9); } }