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ファイルの構造が変わるとうまく動かなくなります。
東電でも同様に使えると思います。
Diff: main.cpp
- Revision:
- 0:2a2f00cbc761
- Child:
- 1:10bd46941b8b
diff -r 000000000000 -r 2a2f00cbc761 main.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Mon Jul 02 05:54:16 2012 +0000
@@ -0,0 +1,131 @@
+#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);
+ }
+}
Suga koubou
