前回。
今回はLINE通知機能を追加
前回から間が空いてしまいましたが、折角なので、ちょっと改造。消費電力が一定以上になったら、IFTTT経由でLINEに通知するようにしてみました。
回路はいつもどおりこんな感じ。
電源は3.3Vにアップコンして供給、イヤホンジャックにはクランプ電流センサーを接続します。
こんな感じで、家の分電盤に接続。
コーディングはこんな感じ
いつもどおりのクソコードです。
#include <ESP8266WiFi.h> #include <WiFiClient.h> char ssid[] = "xxxxxxxx"; char password[] = "yyyyyyyy"; char host[] = "maker.ifttt.com"; char url[] = "/trigger/TRIGGER_NAME/with/key/KEY"; int port = 80; int power = D1; double threshold = 20.0; // しきい値は20A。それ以上の場合はLINE通知する。 int trial = 0; // しきい値を超えていなくても、死活監視のため6時間おきくらいにLINE通知する。 int checkInterval = 60 * 1000; // 1分おきに計測 int notifyInterval = 6 * 60; // 6時間くらいおきには必ずLINE通知する void setup() { pinMode(power, OUTPUT); digitalWrite(power, LOW); Serial.begin(115200); Serial.println(""); } void loop() { trial++; digitalWrite(power, HIGH); double current = getCurrent(); digitalWrite(power, LOW); Serial.println(current); if (current > threshold || trial >= notifyInterval) { connectWifi(); httpPostJson(current); disconnectWifi(); trial = 0; } delay(checkInterval); } void connectWifi() { WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(100); } Serial.println("connected!"); } void disconnectWifi() { WiFi.disconnect(); Serial.println("disconnected!"); } double getCurrent() { Serial.println("get current..."); long total = 0.0; int sample = 200; for (int i = 0; i < sample; i++) { int sensorValue = analogRead(A0); float voltage = sensorValue * (3.2 / 1023.0); int voltageInt = voltage * 100; int current = (voltageInt - 158) * 30; total += current * current; } float result = total / sample / 10000.0; return sqrt(result); } void httpPostJson(double data) { WiFiClient wifiClient; String json = "{\"value1\":\"" + String(data) + "\"}"; if (!wifiClient.connect(host, port)) { Serial.println("connection failed"); return; } Serial.println("http post..."); wifiClient.println(String("POST ") + url + " HTTP/1.1"); wifiClient.println(String("Host: ") + host); wifiClient.println("Cache-Control: no-cache"); wifiClient.println("Content-Type: application/JSON"); wifiClient.print("Content-Length: "); wifiClient.println(json.length()); wifiClient.println(); wifiClient.println(json); }
IFTTT側の設定
IFTTT側も設定しておきます、予めLINEとIFTTTを連携しておいて、なにかIFTTTに大してHTTP POSTされたら、LINE通知がされるようにします。
いざ稼働開始
取り敢えず、しきい値を0Aにして、1分おきにLINE通知されるようにしてみます。
いっぱい来た・・・。ただ、リアルタイム性はなさそうな感じ・・・。試しに、しきい値を20Aに戻して、通常運転してみました。IFTTT→LINEに通知する際に、トリガーがあった時刻も含めるようにしてテスト・・・。
うーん、トリガーから30〜45分経って、やっとLINEに通知されました。ボトルネックは何処なのかはわかりませんが、やっぱりリアルタイム性は期待できそうにありません。
追記
IFTTTのKEYを更新したら、遅延がなくなりました。 快適快適!