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ファイルの構造が変わるとうまく動かなくなります。
東電でも同様に使えると思います。

Committer:
okini3939
Date:
Mon Jul 02 06:55:49 2012 +0000
Revision:
1:10bd46941b8b
Parent:
0:2a2f00cbc761
Child:
2:b50c974ed0d5
bugfix

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okini3939 0:2a2f00cbc761 1 #include "mbed.h"
okini3939 0:2a2f00cbc761 2 #include "EthernetInterface.h"
okini3939 0:2a2f00cbc761 3 #include "TinyHTTP_b.h"
okini3939 0:2a2f00cbc761 4
okini3939 0:2a2f00cbc761 5 // Kansai Electric Power
okini3939 0:2a2f00cbc761 6 #define HTTP_HOST "www.kepco.co.jp"
okini3939 0:2a2f00cbc761 7 #define HTTP_URI "/yamasou/juyo1_kansai.csv"
okini3939 0:2a2f00cbc761 8
okini3939 0:2a2f00cbc761 9 Serial pc(USBTX, USBRX);
okini3939 0:2a2f00cbc761 10 EthernetInterface eth;
okini3939 0:2a2f00cbc761 11
okini3939 0:2a2f00cbc761 12 DigitalOut led1(LED1), led2(LED2), led3(LED3), led4(LED4);
okini3939 0:2a2f00cbc761 13
okini3939 1:10bd46941b8b 14 volatile int denki_flg = 0;
okini3939 1:10bd46941b8b 15 volatile int denki_usage = 0;
okini3939 1:10bd46941b8b 16 volatile int year, month, day, hour, minute;
okini3939 1:10bd46941b8b 17
okini3939 0:2a2f00cbc761 18
okini3939 0:2a2f00cbc761 19 void callback_denkiyohou (char *buf, int len) {
okini3939 1:10bd46941b8b 20 static int n = 0;
okini3939 1:10bd46941b8b 21 static char data[100];
okini3939 0:2a2f00cbc761 22 int i;
okini3939 0:2a2f00cbc761 23
okini3939 0:2a2f00cbc761 24 for (i = 0; i < len; i ++) {
okini3939 0:2a2f00cbc761 25 if (buf[i] == '\r') continue;
okini3939 0:2a2f00cbc761 26
okini3939 1:10bd46941b8b 27 switch (denki_flg) {
okini3939 0:2a2f00cbc761 28 case 0:
okini3939 0:2a2f00cbc761 29 // header
okini3939 0:2a2f00cbc761 30 if (buf[i] == '\n') {
okini3939 1:10bd46941b8b 31 denki_flg ++;
okini3939 0:2a2f00cbc761 32 }
okini3939 0:2a2f00cbc761 33 break;
okini3939 0:2a2f00cbc761 34 case 1:
okini3939 0:2a2f00cbc761 35 // end of header
okini3939 0:2a2f00cbc761 36 if (buf[i] == '\n') {
okini3939 1:10bd46941b8b 37 n = 0;
okini3939 1:10bd46941b8b 38 denki_flg ++;
okini3939 0:2a2f00cbc761 39 } else {
okini3939 1:10bd46941b8b 40 denki_flg = 0;
okini3939 0:2a2f00cbc761 41 }
okini3939 0:2a2f00cbc761 42 break;
okini3939 0:2a2f00cbc761 43 case 2:
okini3939 0:2a2f00cbc761 44 // update
okini3939 0:2a2f00cbc761 45 if (buf[i] == '\n') {
okini3939 0:2a2f00cbc761 46 data[n] = 0;
okini3939 0:2a2f00cbc761 47 sscanf(data, "%d/%d/%d %d:%d", &year, &month, &day, &hour, &minute);
okini3939 0:2a2f00cbc761 48 n = 0;
okini3939 1:10bd46941b8b 49 denki_flg ++;
okini3939 1:10bd46941b8b 50 } else
okini3939 1:10bd46941b8b 51 if (n < sizeof(data)) {
okini3939 0:2a2f00cbc761 52 data[n] = buf[i];
okini3939 0:2a2f00cbc761 53 n ++;
okini3939 0:2a2f00cbc761 54 }
okini3939 0:2a2f00cbc761 55 break;
okini3939 0:2a2f00cbc761 56 case 4:
okini3939 0:2a2f00cbc761 57 // peak
okini3939 0:2a2f00cbc761 58 if (buf[i] == '\n') {
okini3939 0:2a2f00cbc761 59 n = 0;
okini3939 1:10bd46941b8b 60 denki_flg ++;
okini3939 1:10bd46941b8b 61 } else
okini3939 1:10bd46941b8b 62 if (n < sizeof(data)) {
okini3939 0:2a2f00cbc761 63 data[n] = buf[i];
okini3939 0:2a2f00cbc761 64 n ++;
okini3939 0:2a2f00cbc761 65 }
okini3939 0:2a2f00cbc761 66 break;
okini3939 0:2a2f00cbc761 67 case 7:
okini3939 0:2a2f00cbc761 68 // yosou
okini3939 0:2a2f00cbc761 69 if (buf[i] == '\n') {
okini3939 0:2a2f00cbc761 70 n = 0;
okini3939 1:10bd46941b8b 71 denki_flg ++;
okini3939 1:10bd46941b8b 72 } else
okini3939 1:10bd46941b8b 73 if (n < sizeof(data)) {
okini3939 0:2a2f00cbc761 74 data[n] = buf[i];
okini3939 0:2a2f00cbc761 75 n ++;
okini3939 0:2a2f00cbc761 76 }
okini3939 0:2a2f00cbc761 77 break;
okini3939 0:2a2f00cbc761 78 case 10:
okini3939 0:2a2f00cbc761 79 // usage
okini3939 0:2a2f00cbc761 80 if (buf[i] == '\n') {
okini3939 0:2a2f00cbc761 81 data[n] = 0;
okini3939 0:2a2f00cbc761 82 if (data[0] >= '0' && data[0] <= '9') {
okini3939 0:2a2f00cbc761 83 denki_usage = atoi(data);
okini3939 0:2a2f00cbc761 84 }
okini3939 0:2a2f00cbc761 85 n = 0;
okini3939 1:10bd46941b8b 86 denki_flg ++;
okini3939 1:10bd46941b8b 87 } else
okini3939 1:10bd46941b8b 88 if (n < sizeof(data)) {
okini3939 0:2a2f00cbc761 89 data[n] = buf[i];
okini3939 0:2a2f00cbc761 90 n ++;
okini3939 0:2a2f00cbc761 91 }
okini3939 0:2a2f00cbc761 92 break;
okini3939 0:2a2f00cbc761 93 default:
okini3939 0:2a2f00cbc761 94 // text
okini3939 0:2a2f00cbc761 95 if (buf[i] == '\n') {
okini3939 1:10bd46941b8b 96 denki_flg ++;
okini3939 0:2a2f00cbc761 97 }
okini3939 0:2a2f00cbc761 98 break;
okini3939 0:2a2f00cbc761 99 }
okini3939 0:2a2f00cbc761 100 }
okini3939 0:2a2f00cbc761 101 }
okini3939 0:2a2f00cbc761 102
okini3939 0:2a2f00cbc761 103 int main() {
okini3939 0:2a2f00cbc761 104 Timer timer;
okini3939 0:2a2f00cbc761 105 int flg = 1, r;
okini3939 0:2a2f00cbc761 106
okini3939 0:2a2f00cbc761 107 pc.baud(115200);
okini3939 0:2a2f00cbc761 108 eth.init(); //Use DHCP
okini3939 0:2a2f00cbc761 109 if (eth.connect()) {
okini3939 0:2a2f00cbc761 110 return -1;
okini3939 0:2a2f00cbc761 111 }
okini3939 0:2a2f00cbc761 112
okini3939 1:10bd46941b8b 113 pc.printf("Denki-yohou: %s\r\n", HTTP_HOST);
okini3939 0:2a2f00cbc761 114
okini3939 0:2a2f00cbc761 115 timer.start();
okini3939 0:2a2f00cbc761 116 while(1) {
okini3939 0:2a2f00cbc761 117 led1 = 1;
okini3939 0:2a2f00cbc761 118
okini3939 0:2a2f00cbc761 119 if (flg || timer.read() >= 300) {
okini3939 0:2a2f00cbc761 120 timer.reset();
okini3939 1:10bd46941b8b 121 denki_flg = 0;
okini3939 0:2a2f00cbc761 122 r = httpRequest(METHOD_GET, HTTP_HOST, 80, HTTP_URI, NULL, NULL, &callback_denkiyohou);
okini3939 0:2a2f00cbc761 123 if (r == 0) {
okini3939 0:2a2f00cbc761 124 pc.printf("%04d-%02d-%02d %02d:%02d : ", year, month, day, hour, minute);
okini3939 0:2a2f00cbc761 125 pc.printf("%d %%\r\n", denki_usage);
okini3939 0:2a2f00cbc761 126
okini3939 0:2a2f00cbc761 127 led2 = denki_usage >= 70 ? 1 : 0;
okini3939 0:2a2f00cbc761 128 led3 = denki_usage >= 85 ? 1 : 0;
okini3939 0:2a2f00cbc761 129 led4 = denki_usage >= 95 ? 1 : 0;
okini3939 1:10bd46941b8b 130 } else {
okini3939 1:10bd46941b8b 131 pc.printf("http error\r\n");
okini3939 0:2a2f00cbc761 132 }
okini3939 0:2a2f00cbc761 133 flg = 0;
okini3939 0:2a2f00cbc761 134 }
okini3939 0:2a2f00cbc761 135
okini3939 0:2a2f00cbc761 136 wait(0.1);
okini3939 0:2a2f00cbc761 137 led1 = 0;
okini3939 0:2a2f00cbc761 138 wait(0.9);
okini3939 0:2a2f00cbc761 139 }
okini3939 0:2a2f00cbc761 140 }