eucalyのアイコン画像

obnizでスマートメーターにちょっかいを出してみる

eucaly 2021年05月16日に作成

obnizでスマートメーターにちょっかいを出してみる

おうちの消費電力がどれくらいか知りたい的な

まあ、いわゆるスマートメーター案件です。
詳しくは以下URL、まあそれなりに枯れた技術ですよ、と。
https://www.tepco.co.jp/pg/consignment/liberalization/smartmeter-broute.html

今回の目標

  • ROHMモジュールと、obnizの接続
  • ROHMモジュールの初期設定を、obnizで確認
    ・・・データ取得までは作りこめませんでした、ごめんなさい
    まあ、uart周りでかなり苦しめられたので、uart使うモジュールをjavascriptでアレする際は、ちょっとは参考になるかと思います。

キャプションを入力できます

無事動きました

初期化→登録→チャンネルスキャン→ターゲット発見!、までは、ね。
ほんとはここからサーバクライアント登録からの、データ取得を実装せねばなりませぬ。

ここに動画が表示されます

使用部品

  • ROHM BP35C0-T01
  • obniz board 1Y
  • SMAコネクタのアンテナ ( 900MHz帯で使えそうなもの )

キャプションを入力できます

まあ、Amazonとかに売っています。
適切にプログラミングしてあげれば、レベルシフタやリセットICなど、他の部品は要らないです。

回路

物理面はかなり簡単です。

  • 電源: obniz board 1Yの「3.3」を、VCCに接続
  • GND: GND同士を接続
  • UART: TXとRXをそれぞれ接続
  • リセット: VCCに接続

obniz javascript

ここで大ハマりしました。
とりあえずソースは以下です。

<html>
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" />
    <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
    <script src="https://unpkg.com/obniz@3.x/obniz.js" crossorigin="anonymous" ></script>
  </head>
  <body>
    <div id="obniz-debug"></div>
    <div class="container text-center">
      <h3 style="margin-bottom:20px;">Web Uart Console</h3>
      <div class="row">
        <div class="form-group col-sm-6">
          <h4>Send Messages</h4>
          <!--<textarea class="form-control" id="textToSend" rows="5" style="margin-bottom:10px;"></textarea>-->
          <button id="skver" class="btn btn-info">Version</button>&nbsp;
          <button id="skinfo" class="btn btn-info">Information</button>&nbsp;
          <button id="skreset" class="btn btn-info">Reset</button><br><br>
          <button id="sksetidpass" class="btn btn-info">Set RBID/Password</button>&nbsp;
          <button id="skscan" class="btn btn-info">Channel Scan</button>

        </div>
        <div class="form-group col-sm-6">
          <h4>Receive Messages</h4>
          <textarea class="form-control" id="receivedText" rows="20" style="margin-bottom:10px;"></textarea>
          <button id="clear" class="btn btn-info">Clear</button>
        </div>
      </div>
    </div>

  <script>
    $(function(){
      //put your obniz ID
      var obniz = new Obniz("OBNIZ_ID_HERE");
      var RBID = "NAISHO"
      var PWD = "NAISHO"

      //during obniz connection
      obniz.onconnect = async function() {
        var uart = obniz.getFreeUart();
        //wire cable to obniz
        //tx: 0
        //rx: 1
        uart.start({ tx: 0, rx: 1, gnd: 11,baud:115200, drive:'3v', pull:'0v'});

        //if the "Send" button is clicked
        $("#send").on('click', async function(){
          //send messages on UART
          var message = $("#textToSend").val();
          senddata(message);
//          uart.send(message);
//          uart.send([0x0d]);
//          $("#textToSend").val("");
        });

        //show received messages in the left textarea
        uart.onreceive = function(data, text){
          console.log(text, data);
          $('#receivedText').append(text);
          var psconsole = $('#receivedText');
          psconsole.scrollTop(
            psconsole[0].scrollHeight - psconsole.height()
          );
        }

        //if the "Clear" button is clickex
        $("#clear").on('click', async function(){
          //clear recieved messages
//          $("#receivedText").val("");

        });
        $("#reset").on('click', async function(){
          //clear recieved messages
          obniz.io2.drive("3v");
          obniz.io2.output(false);
          await obniz.wait(1000);
          obniz.io2.output(true);
        });
        $("#skver").on('click', async function(){
          senddata("SKVER");
        });
        $("#skinfo").on('click', async function(){
          senddata("SKINFO");
        });
        $("#skreset").on('click', async function(){
          senddata("SKRESET");
        });
        $("#sksetidpass").on('click', async function(){
          senddata("SKSETRBID " + RBID);
          await obniz.wait(500);
          senddata("SKSETPWD C  " + PWD);
        });
        $("#skscan").on('click', async function(){
          senddata("SKSCAN 0 FFFFFFFF 6 0");
        });
        function senddata(message){
          uart.send(message);
          uart.send([0x0d]);
        }
        
      }
    });
  </script>
  </body>
</html>

uart のハマりポイント

相手が3.3V系のCPUな場合

  • 相手側がプルアップしている場合がある
  • GNDピンを定義してあげないといまいち安定しない
  • pull「null」はプルアップしてしまう、プルダウンで今回は何とかなった

なので、初期化コマンドは、以下な感じになります。
ちなみにdrive 3V は、実際は3.4V弱ドライブします。

uart.start({ tx: 0, rx: 1, gnd: 11,baud:115200, drive:'3v', pull:'0v'});

お手本スクリプト、SENDしてもなんか変

どうやらテキスト文字のみに制限されていて、改行送らない仕様っぽいです。
別途、sendにバイナリ文字列「0x0d」、つまりCRを渡して、改行を送り込むことで誤魔化しました。

$("#skscan").on('click', async function(){
          senddata("SKSCAN 0 FFFFFFFF 6 0");
        });
        function senddata(message){
          uart.send(message);
          uart.send([0x0d]);
        }

おわりに

キャプションを入力できます
いやあ、、、解析地獄に陥ってしまい。
時間が無くなっちゃいました・・・。
データ取得からのクラウドアップデートは、これからコツコツ作っていこうと思います・・・。

eucalyのアイコン画像
いつも、てきとうです
  • eucaly さんが 2021/05/16 に 編集 をしました。 (メッセージ: 初版)
ログインしてコメントを投稿する