投稿者: sassy

  • 降雨検知システムを作る3

    降雨検知システムを作る3

    ■ ドップラー方式

    以前ゲート(田舎なので入口と住いとの間に距離がある)に来客があるとセンサーで知らせる装置を設置
    していた。
    最初赤外線センサーも試したが、風のある日に舞う落ち葉などに反応して上手く行かなかったので色々
    調べてみたら秋月電子で「ドップラーセンサー」という物があるという事を知った。
    https://akizukidenshi.com/catalog/g/g108699/
    早速設置してみたところ、なかなかの性能で満足していたが、ある時、土砂降りの日に雨に反応して
    どうにもこうにもならなくなった。
    これは使えないという事であきらめたが、捨てるのももったいないなと考えているときに、そうだ雨に
    反応するなら「雨センサー」として使えないか?人物検知にフォーカスを当てている商品なので半信半疑ではあったがとりあえず実験してみた。
    結果は、そこそこ上手く行きました。
    ただし、その構造から分かるように、上空から舞い落ちてくる葉っぱや、上空から鳥の糞が落ちて来る
    やも知れず、その際の誤検知は避けられないことは最初から認識していたのでどちらかと言えば興味
    本位での製作である、都会で回りに落ち葉などが舞う事が無いようなマンションなど高い場所なら使
    えるかも。

    この方式の最大の利点は、マイクロ波式なので、プラスチックケースなどに収納すれば、センサーが
    外部環境に暴露する事無く設置できるところである。
    そうすることにより、メンテナンスフリーで寿命は他の方式に比べ圧倒的に長くなる。
    一方欠点は、舞い散る落ち葉、上空を飛びまわる虫などの異物による誤検出。
    小雨程度だと感知が難しい点。
    この対策としては、センスする距離を調整すること(感度)、またスクリプト内で雨粒と虫の動きの特
    徴を元に最適なプログラムを組む(誤検知防止)という事を行っています。
    基本設計が人の検知用に調整された完成品なのでそれ以上はいじれないという限界はある。

    NJR4265使用 24GHz帯ドップラーセンサーキット
    購入先 秋月電子 ¥3,800

    回路図 (実験スタンドアローン型)

    降雨センサー ドップラー方式回路図

    このセンサーの使い方としては、RS232Cによるアクセス方式と、スタンドアローンで使用する2種類
    の方法がある、今回の場合、使い方がシンプルなのと恐らくRS232C方式より応答が速いのではなかろうか?と考え、最初スタンドアローン方式にESP-WROOM-02を付け加えた形にした。
    IO4で状態を検知し、割り込み処理で処理を行う方式です。
    閾値設定は内部にある超小型のボリュウムで調整します。
    このボリュウムが超小型で壊れそうな代物なので細心の注意を払って回す必要があります。。
    回す角度というより実際に検知してほしい距離あたりに手などをかざして調整した方が上手く行き
    ました、しかし実際やってみると手動の感度調整は思いのほか難しくこの方式は断念しました。

    RS232C(TTL-RS232C)方式 ドップラーセンサー式降雨センサー

    まずドップラーセンサーのジャンパーJ1とJ2を外して外部端子RX TXからRS232Cを使えるように変
    更します。

    雨滴は上空から落ちてきますので離反検知は逆にノイズ成分になりますので離反側閾値は初期設定
    では最小に設定しています。-> @SM000
    感度は、最終的には実験しながら最適値を決めますので最初はデフォルト値に設定しておきます。
    -> @SP999

    「通常運用モード Operation(ope)」「管理モード Management  (mag)」という2つのモードを
    作成します。

    運用の流れ
    起動時は「通常運用モード Operation(ope)」

    起動後 RS232Cの受信バァファにデーターが来ていないか確認しています。
    雨粒の接近があったら「@C」が送られて来ますのでカウントアップします。
    1秒ごとにMQTT経由のJSON形式でセンサー側から送信します  topic -> rain_sensor/dp/data

    取得項目:
    mode → ope 運用モードであること示す
    C_count -> 観測した雨滴数(コマンド@Cの数)
    rain_level ->雨の勢いを示す (1->小雨 2->中雨 3->強雨)
    rain_index-> 雨->1 or 0

    管理モード(mag)に入る -> 観測停止
    切り替え方法 -> NODE-REDからMQTTで切替する topic -> rain_sensor/dp/mode
    payload -> mag 
    モードに入ったら続いてコマンドを送信する
    例: topic -> rain_sensor/dp/cmd
    payload -> @SP999  :近接側閾値設定コマンド(例:9.99mに設定)
    センサー側から応答をJSON化して返す
    topic -> rain_sensor/dp/response
    コマンドは下記のコマンド表参照の事

    再度運用モードに戻るには
    NODE-REDからMQTTで切替する topic -> rain_sensor/dp/mode
    payload -> ope 

    コマンド一覧表








    RS232C方式 ドップラーセンサー式降雨センサースクリプト

    #include <ESP8266WiFi.h>
    #include <PubSubClient.h>
    
    #define WIFI_SSID "your_ssid"
    #define WIFI_PWD  "your_passwd"
    
    const char* mqtt_server = "192.168.1.200";
    
    
    #define LED1 14
    #define LED2 16
    
    WiFiClient espClient;
    PubSubClient client(espClient);
    
    enum Mode {
      MODE_OPERATION,
      MODE_MANAGEMENT
    };
    
    Mode currentMode = MODE_OPERATION;
    
    unsigned long lastSend = 0;
    volatile int cCount = 0;
    
    // ================= WiFi =================
    void connectWiFi() {
      WiFi.begin(WIFI_SSID, WIFI_PWD);
      while (WiFi.status() != WL_CONNECTED) delay(500);
    }
    
    // ================= センサー初期設定 =================
    void initSensor() {
    
      Serial.print("@T\r\n");       // 検知モード
      delay(200);
    
      Serial.print("@SP999\r\n");   // 高感度
      delay(200);
    
      Serial.print("@SM000\r\n");   // 離反最小
      delay(200);
    }
    
    // ================= MQTT Callback =================
    void callback(char* topic, byte* payload, unsigned int length) {
    
      String msg = "";
      for (unsigned int i = 0; i < length; i++)
        msg += (char)payload[i];
    
      msg.trim();
      String t = String(topic);
    
      // ===== モード切替 =====
      if (t == "rain_sensor/dp/mode") {
    
        if (msg == "mag") {
          if (currentMode != MODE_MANAGEMENT) {
            currentMode = MODE_MANAGEMENT;
          }
        }
        else if (msg == "ope") {
          if (currentMode != MODE_OPERATION) {
            currentMode = MODE_OPERATION;
          }
        }
      }
    
      // ===== 管理コマンド =====
      else if (t == "rain_sensor/dp/cmd" && currentMode == MODE_MANAGEMENT) {
    
        Serial.print(msg);
        Serial.print("\r\n");
    
        client.publish("rain_sensor/dp/response", "OK");
        String response = Serial.readStringUntil('\n');
        response.trim();
    
        char payloadJson[256];
        snprintf(payloadJson, sizeof(payloadJson),
          "{\"mode\":\"mag\",\"cmd\":\"%s\",\"response\":\"%s\"}",
          msg.c_str(), response.c_str());
    
        client.publish("rain_sensor/dp/response", payloadJson);
      }
    }
    
    // ================= MQTT Reconnect =================
    void reconnect() {
    
      while (!client.connected()) {
    
        String clientId = "DP-";
        clientId += String(random(0xffff), HEX);
    
        if (client.connect(clientId.c_str())) {
    
          client.subscribe("rain_sensor/dp/mode");
          client.subscribe("rain_sensor/dp/cmd");
    
          if (currentMode == MODE_OPERATION)
            client.publish("rain_sensor/dp/mode", "ope", true);
          else
            client.publish("rain_sensor/dp/mode", "mag", true);
    
        } else {
          delay(2000);
        }
      }
    }
    
    // ================= ドップラー受信処理 =================
    void processSensor() {
    
      while (Serial.available()) {
    
        String line = Serial.readStringUntil('\n');
        line.trim();
    
        if (line == "@C") {
          cCount++;
        }
      }
    }
    
    // ================= データ送信 =================
    void sendData() {
    
    // ---- 強度取得 ----
    int rain_intensity = cCount;
    int rain_level = 0;
    cCount = 0;
    
    // ---- 雨状態判定 ----
    static unsigned long lastDetectTime = 0;
    unsigned long now = millis();
    
    if (rain_intensity > 0) {
        lastDetectTime = now;
    }
    
    bool isRaining = (now - lastDetectTime) < 10000;  // 10秒保持
    
    if (rain_intensity > 50) rain_level = 3;      // 強雨
    else if (rain_intensity > 10) rain_level = 2; // 中雨
    else if (rain_intensity > 0) rain_level = 1;  // 小雨
    
    // ---- JSON生成 ----
    char payload[256];
    
    snprintf(payload, sizeof(payload),
      "{\"mode\":\"ope\","
      "\"c_count\":%d,"
      "\"rain_level\":%d,"  
      "\"rain_index\":%d}",
      rain_intensity,
      rain_level,
      isRaining ? 1 : 0);
    
    client.publish("rain_sensor/dp/data", payload);
    }
    
    // ================= SETUP =================
    void setup() {
    
      pinMode(LED1, OUTPUT);
      pinMode(LED2, OUTPUT);
    
      digitalWrite(LED1, LOW);
      digitalWrite(LED2, LOW);
    
      Serial.begin(9600,SERIAL_8O1);
    
      WiFi.config(IPAddress(192,168,1,100),
                  IPAddress(192,168,1,1),
                  IPAddress(255,255,255,0));
    
      connectWiFi();
    
      client.setServer(mqtt_server, 1883);
      client.setCallback(callback);
    
      initSensor();
    }
    
    // ================= LOOP =================
    void loop() {
    
      if (!client.connected())
        reconnect();
    
      client.loop();
    
      processSensor();
    
      if (currentMode == MODE_OPERATION) {
    
        if (millis() - lastSend > 1000) {
          lastSend = millis();
          sendData();
        }
      }
    
      static unsigned long ledTimer = 0;
      if (millis() - ledTimer > 500) {
        ledTimer = millis();
        digitalWrite(LED2, !digitalRead(LED2));
      }
    }

    NODE-RED側

    まずは、ダッシュボードに表示する手順をご説明します。

    事前にRaspberry Pi4やPi5にNODE-RED とMQTTブローカーを下記の記事を参考に設定して準備します。
    https://marginalvillage.com/page/4/

    NODE-REDで右上にある三のアイコンをクリックして「パレットの管理」を開き
    「ノードを追加」で「@flowfuse/node-red-dashboard」を追加して下さい。
    ちょっと前までは通常「node-red-dashboard」を使っていましたが、最近不具合が発生しております。
    具体的には、私はダッシュボードが開かなる現象を経験しました。
    正常動作する場合も多いので厄介です。
    現在「非推奨」マークが付いています。
    新しいダシュボード2は今までと使い方が違うので慣れていない私には正直使いにくいと思います。

    雨以外の天気の「曇り」、「晴れ」、「快晴」の情報も無いと意味をなさ無いのでこのブログ内にある
    「AI空模様告知システム」を作成運用してからになります。
    https://marginalvillage.com/page/2/

    まず、空模様のアイコンを準備します。
    自分で作成するか、フリーの素材を活用させてもらうか、最近はAIソフトが作成してくれるとい
    う選択肢もあるようです

    快晴
    晴れ
    曇天

    自作する場合には以下のような無料サイトを利用すると良いでしょう。
    https://www.photopea.com/l/ja_jp/
    https://forest.watch.impress.co.jp/library/software/inkscape/
    https://www.adobe.com/jp/express/

    用意した天気の画像を入れるフォルダーは決まり事で通常 /home/pi/Public になります。
    このフォルダー内に画像を作って入れておくわけですが、デフォルトではその機能が無効になってい
    ますのでまずは機能を有効にします。

    Publicフォルダーを有効にする手順
    NODE-REDサーバーを動かしているRaspberry Piの.「.node-red」フォルダーの中に「setting.js」という
    のがあります。
    このファイルをMouspadで開き適当なところへ追加で書き加えます。
    尚、「.node-red」は隠しファイルなので見つからない場合には、「Ctrl-H」を押して表示させて下さい。
    「setting.js」に「httpStatic: ‘/home/pi/Public/’,」を加筆する。

        /**  
         * All static routes will be appended to httpStaticRoot
         * e.g. if httpStatic = "/home/nol/docs" and  httpStaticRoot = "/static/"
         *      then "/home/nol/docs" will be served at "/static/"
         * e.g. if httpStatic = [{path: '/home/nol/pics/', root: "/img/"}]
         *      and httpStaticRoot = "/static/"
         *      then "/home/nol/pics/" will be served at "/static/img/"
         */
        //httpStaticRoot: '/static/',
        httpStatic: '/home/pi/Public/',
        

    最後にある「,」を忘れないようにして下さい、無いとNODE-REDが起動しません。
    加筆したら保存してからNODE-REDを再起動させます。
    画像は一旦「Weather」フォルダーを作成してその中に入れます。

    雨センサー以外にお天気センサーも組み込みが必要にになりますので、ここでは原理的な解説に留め
    ます。
    このサンプルでは、雨が止んでも他のセンサーからの情報が入らないので一旦雨を検知すると雨のまま
    更新されませんので注意して下さい。
    デバッグ用の天気ボタンをクリックすれば、ダッシュボード上に天気アイコンが表示されます。

    快晴
    晴れ
    曇天

    運用の様子

    [{"id":"a8e4395b48fe4118","type":"tab","label":"ドップラー降雨センサー","disabled":false,"info":"","env":[]},{"id":"c0ea73aa8234feda","type":"inject","z":"a8e4395b48fe4118","name":"雨 ->\"0\"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"0","payloadType":"str","x":130,"y":100,"wires":[["4bcdff6e41ded247"]]},{"id":"df60697e1b9f5529","type":"inject","z":"a8e4395b48fe4118","name":"快晴 -> \"1\"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"1","payloadType":"str","x":140,"y":140,"wires":[["4bcdff6e41ded247"]]},{"id":"30fdc63113337b10","type":"inject","z":"a8e4395b48fe4118","name":"晴れ ->\"2\"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"2","payloadType":"str","x":140,"y":180,"wires":[["4bcdff6e41ded247"]]},{"id":"792ba7b7f3cf3c47","type":"inject","z":"a8e4395b48fe4118","name":"曇天 ->\"3\"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"3","payloadType":"str","x":140,"y":220,"wires":[["4bcdff6e41ded247"]]},{"id":"0a4b5283af0b7d43","type":"inject","z":"a8e4395b48fe4118","name":"雪 ->\"4\"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"4","payloadType":"str","x":130,"y":260,"wires":[["4bcdff6e41ded247"]]},{"id":"4bcdff6e41ded247","type":"function","z":"a8e4395b48fe4118","name":"天候画像変換","func":"var icon;\nvar weather = msg.payload;\nswitch(weather){\n    case \"0\":\n        icon = \"/Weather/rain.png\";\n        break;\n    case \"1\":\n        icon = \"/Weather/sunny.png\";\n        break; \n    case \"2\":\n        icon = \"/Weather/sunny_cloudy.png\";\n        break; \n    case \"3\":\n        icon = \"/Weather/cloudy.png\";\n        break;\n    case \"4\":\n        icon = \"/Weather/snow.png\";\n        break;\n    default :\n        icon = \"/Weather/cloudy.png\";\n\n}\nmsg.payload = icon;\nreturn msg","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":360,"y":100,"wires":[["3a2c7d9685db1425","63499b09232b3675"]]},{"id":"3a2c7d9685db1425","type":"debug","z":"a8e4395b48fe4118","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":550,"y":40,"wires":[]},{"id":"e5a60eecd76977b8","type":"function","z":"a8e4395b48fe4118","name":"rain = \"0\"","func":"var temp = parseFloat(msg.payload.rain_index);\nif (temp > 0.0){\n   global.set(\"rain_status\",\"1\");\n}else{\n    global.set(\"rain_status\",\"0\");\n}","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":500,"y":260,"wires":[[]]},{"id":"e8b33a7148293f02","type":"json","z":"a8e4395b48fe4118","name":"","property":"payload","action":"obj","pretty":false,"x":350,"y":260,"wires":[["e5a60eecd76977b8","ef7e29bed4158aa3"]]},{"id":"57eaa1fd1c9cc197","type":"mqtt in","z":"a8e4395b48fe4118","name":"","topic":"rain_sensor/dp/data","qos":"2","datatype":"auto-detect","broker":"d40fcfabe9ba4c73","nl":false,"rap":true,"rh":0,"inputs":0,"x":170,"y":360,"wires":[["68e7d2bc3c790e26","e8b33a7148293f02"]]},{"id":"68e7d2bc3c790e26","type":"debug","z":"a8e4395b48fe4118","name":"debug 9","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":340,"y":360,"wires":[]},{"id":"d7548197f8331dba","type":"mqtt in","z":"a8e4395b48fe4118","name":"","topic":"sky_pat","qos":"2","datatype":"auto-detect","broker":"d40fcfabe9ba4c73","nl":false,"rap":true,"rh":0,"inputs":0,"x":110,"y":60,"wires":[["993108b3d5c06078"]]},{"id":"993108b3d5c06078","type":"function","z":"a8e4395b48fe4118","name":"雨以外は通過","func":"var status =global.get(\"rain_status\");\nvar data =\"\";\nif (status == \"0\"){\n     var temp = String(msg.payload);\n     global.set(\"sun_status\",temp);\n    data = temp;\n}else{\n     data = \"0\";\n}\nmsg.payload = data;\nreturn msg;\n\n\n","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":280,"y":60,"wires":[["4bcdff6e41ded247"]]},{"id":"63499b09232b3675","type":"ui-template","z":"a8e4395b48fe4118","group":"a2862a7d5d758378","page":"","ui":"","name":"今の天気","order":1,"width":0,"height":0,"head":"","format":"<template>\n    <div style=\"text-align:center\">\n        <img\n      :src=\"msg.payload\"\n      alt=\"weather_icon\"\n      width=\"92\"\n      height=\"92\"\n    />\n    </div>\n</template>","storeOutMessages":true,"passthru":true,"resendOnRefresh":true,"templateScope":"local","className":"","x":540,"y":100,"wires":[[]]},{"id":"59670344aa7796a0","type":"ui-gauge","z":"a8e4395b48fe4118","name":"雨足","group":"a2862a7d5d758378","order":2,"value":"payload","valueType":"msg","width":"2","height":"2","gtype":"gauge-half","gstyle":"needle","title":"雨の勢い","alwaysShowTitle":false,"floatingTitlePosition":"top-left","units":"","icon":"","prefix":"","suffix":"","segments":[{"from":"0","color":"#59831b","text":"","textType":"label"},{"from":"2","color":"#fec701","text":"","textType":"label"},{"from":"3","color":"#ea5353","text":"","textType":"label"}],"min":0,"max":"3","sizeThickness":16,"sizeGap":4,"sizeKeyThickness":8,"styleRounded":true,"styleGlow":false,"className":"","x":650,"y":300,"wires":[[]]},{"id":"ef7e29bed4158aa3","type":"function","z":"a8e4395b48fe4118","name":"rain_level","func":"var temp = msg.payload.rain_level;\nif(temp > 0.1){\nmsg.payload = temp;\n}else{\nmsg.payload = 0;\n}\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":500,"y":300,"wires":[["59670344aa7796a0"]]},{"id":"d6ff8932f953715d","type":"inject","z":"a8e4395b48fe4118","name":"運用モード (ope)","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"ope","payloadType":"str","x":170,"y":520,"wires":[["add37008cc55d6cc"]]},{"id":"add37008cc55d6cc","type":"mqtt out","z":"a8e4395b48fe4118","name":"","topic":"rain_sensor/dp/mode","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"d40fcfabe9ba4c73","x":440,"y":520,"wires":[]},{"id":"4338bac676063d64","type":"comment","z":"a8e4395b48fe4118","name":"DPセンサー運用 管理モード切替","info":"","x":200,"y":460,"wires":[]},{"id":"801ee89edab399a8","type":"inject","z":"a8e4395b48fe4118","name":"管理モード (mag)","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"mag","payloadType":"str","x":170,"y":560,"wires":[["add37008cc55d6cc"]]},{"id":"c3597e05bf0bc87e","type":"mqtt in","z":"a8e4395b48fe4118","name":"","topic":"rain_sensor/dp/response","qos":"2","datatype":"auto-detect","broker":"d40fcfabe9ba4c73","nl":false,"rap":true,"rh":0,"inputs":0,"x":690,"y":520,"wires":[["92632208a446f110"]]},{"id":"92632208a446f110","type":"debug","z":"a8e4395b48fe4118","name":"debug 1","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":900,"y":520,"wires":[]},{"id":"d603f31681bf24e5","type":"mqtt out","z":"a8e4395b48fe4118","name":"","topic":"rain_sensor/dp/cmd","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"d40fcfabe9ba4c73","x":430,"y":620,"wires":[]},{"id":"2642bbd160d17065","type":"inject","z":"a8e4395b48fe4118","name":"近接側閾値設定","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"@SP999","payloadType":"str","x":220,"y":620,"wires":[["d603f31681bf24e5"]]},{"id":"e79fb4fbcb0dc6b1","type":"inject","z":"a8e4395b48fe4118","name":"近接側閾値取得","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"@SP?","payloadType":"str","x":220,"y":660,"wires":[["d603f31681bf24e5"]]},{"id":"aa5db6f1f3283a7e","type":"inject","z":"a8e4395b48fe4118","name":"離反側閾値設定","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"@SM000","payloadType":"str","x":220,"y":700,"wires":[["d603f31681bf24e5"]]},{"id":"1d83ddbd61a1e91d","type":"inject","z":"a8e4395b48fe4118","name":"離反側閾値取得","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"@SM?","payloadType":"str","x":220,"y":740,"wires":[["d603f31681bf24e5"]]},{"id":"4b77e54efc690ee1","type":"inject","z":"a8e4395b48fe4118","name":"雨滴検知モード","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"@T","payloadType":"str","x":220,"y":780,"wires":[["d603f31681bf24e5"]]},{"id":"ad69df6b5262c916","type":"inject","z":"a8e4395b48fe4118","name":"スリープモード","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"@U","payloadType":"str","x":220,"y":820,"wires":[["d603f31681bf24e5"]]},{"id":"2878d7f08e1d4f73","type":"inject","z":"a8e4395b48fe4118","name":"現在のモード","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"@Q2?","payloadType":"str","x":210,"y":860,"wires":[["d603f31681bf24e5"]]},{"id":"36bfbdce8bc150e1","type":"inject","z":"a8e4395b48fe4118","name":"ソフトウエアのバージョン","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"@V?","payloadType":"str","x":247.8958282470703,"y":902.9027709960938,"wires":[["d603f31681bf24e5"]]},{"id":"be777b7166693b0f","type":"inject","z":"a8e4395b48fe4118","name":"リセットコマンド","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"@R","payloadType":"str","x":230,"y":940,"wires":[["d603f31681bf24e5"]]},{"id":"0bcb6cac0b673165","type":"comment","z":"a8e4395b48fe4118","name":"検知->@T      スリープ->@U","info":"","x":490,"y":860,"wires":[]},{"id":"d9f654ae2a8957eb","type":"mqtt in","z":"a8e4395b48fe4118","name":"","topic":"rain_sensor/dp/mode","qos":"2","datatype":"auto-detect","broker":"d40fcfabe9ba4c73","nl":false,"rap":true,"rh":0,"inputs":0,"x":680,"y":580,"wires":[["db74c4aaec2de39f"]]},{"id":"db74c4aaec2de39f","type":"debug","z":"a8e4395b48fe4118","name":"debug 2","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":900,"y":580,"wires":[]},{"id":"d40fcfabe9ba4c73","type":"mqtt-broker","name":"","broker":"192.168.1.200","port":1883,"clientid":"","autoConnect":true,"usetls":false,"protocolVersion":4,"keepalive":60,"cleansession":true,"autoUnsubscribe":true,"birthTopic":"","birthQos":"0","birthRetain":"false","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closeRetain":"false","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willRetain":"false","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""},{"id":"a2862a7d5d758378","type":"ui-group","name":"今日の天気","page":"cef20d4917f1c9a7","width":6,"height":1,"order":1,"showTitle":false,"className":"","visible":"true","disabled":"false","groupType":"default"},{"id":"cef20d4917f1c9a7","type":"ui-page","name":"気象","ui":"9b30a45d7b963492","path":"/page1","icon":"home","layout":"grid","theme":"a45c7f2adf09be21","breakpoints":[{"name":"Default","px":"0","cols":"3"},{"name":"Tablet","px":"576","cols":"6"},{"name":"Small Desktop","px":"768","cols":"9"},{"name":"Desktop","px":"1024","cols":"12"}],"order":1,"className":"","visible":"true","disabled":"false"},{"id":"9b30a45d7b963492","type":"ui-base","name":"My Dashboard","path":"/dashboard","appIcon":"","includeClientData":true,"acceptsClientConfig":["ui-notification","ui-control"],"showPathInSidebar":false,"headerContent":"page","navigationStyle":"default","titleBarStyle":"default","showReconnectNotification":true,"notificationDisplayTime":1,"showDisconnectNotification":true,"allowInstall":false},{"id":"a45c7f2adf09be21","type":"ui-theme","name":"気象","colors":{"surface":"#505050","primary":"#505050","bgPage":"#505050","groupBg":"#5f5f5f","groupOutline":"#cccccc"},"sizes":{"density":"default","pagePadding":"12px","groupGap":"12px","groupBorderRadius":"4px","widgetGap":"12px"}},{"id":"2771abafb25f5d4a","type":"global-config","env":[],"modules":{"@flowfuse/node-red-dashboard":"1.30.2"}}]

    課題

    雨センサーとしての個人的評価は、Xである。
    なぜなら感度が低いことに尽きる。
    元々、人検知用途にカスタマイズされたセンサーなので仕方が無いと思うが、改造して雨用にという
    分けにも行かず出来ることに限界がある。
    もしこのドップラー方式を実用域に持ってゆくためには、別の雨検知の出来るドップラーセンサーを
    見つけることに尽きると思う。