Power Automate Desktop が Excel ファイルから obniz のテープ LED のカラーを変えるメモ

Power Automate Desktop が Excel ファイルから obniz のテープ LED のカラーを変えるメモです。

今回の仕組み

image

Power Automate Desktop が Excel ファイルを読み取り JSON データで Node-RED に連携するメモ で、Excel データを JSON にして送れることが分かったので、今回は obniz の メッセージング 機能 をつかって、特定の obniz に Power Automate Desktop から指示を出します。

元となる Excel ファイル

image

デスクトップに obniz.xlsz ファイル置きます。

image

中身はこのようになっています。項目を ID,R,G,B として RGB値でカラーを決めます。obniz 側で 17 つのLEDがついたテープLEDを使うため17行の指示になっています

Power Automate Desktop

Power Automate Desktop のフローの流れはこちらです。Power Automate Desktop が Excel ファイルを読み取り JSON データで Node-RED に連携 したものをベースにしています。

image

ワークシートは今回のセルの範囲に修正。Foreach 部分はRGBの項目に対応しています。Web サービスの呼び出しを メッセージング 機能 に合わせた、https://obniz.com/obniz/{obniz_id}/message?data={what you want to send} という形式にしています。{what you want to send} の部分に今回の Excel の内容は JSON データで入ってます。 {obniz_id} は今回扱いたい obniz のIDになります。

実際に送信されるデータは以下のようになります。

{"excelDatas":[{"R":"255","G":"0","B":"0"},{"R":"255","G":"0","B":"0"},{"R":"255","G":"0","B":"0"},{"R":"0","G":"255","B":"0"},{"R":"0","G":"255","B":"0"},{"R":"0","G":"255","B":"0"},{"R":"0","G":"0","B":"255"},{"R":"0","G":"0","B":"255"},{"R":"0","G":"0","B":"255"},{"R":"255","G":"0","B":"0"},{"R":"0","G":"255","B":"0"},{"R":"0","G":"0","B":"255"},{"R":"255","G":"0","B":"0"},{"R":"0","G":"255","B":"0"},{"R":"0","G":"0","B":"255"},{"R":"255","G":"0","B":"0"},{"R":"0","G":"255","B":"0"}]}

obniz の内容

image

obniz の obniz クラウドで以下のソースコードを実行します。

<html>
<head>
  <title>LED Control</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <script src="https://obniz.io/js/jquery-3.2.1.min.js"></script>
  <script src="https://unpkg.com/obniz@3.13.0/obniz.js" crossorigin="anonymous"></script>
</head>
<body>

<h1>obniz & Power Automate Desktop</h1>
<button id="on">ON</button>
<button id="off">OFF</button>
<p>
<div id="print">----</div>
</p>

<script>

var obniz = new Obniz("OBNIZ_ID_HERE");

obniz.onconnect = async function () {

  obniz.display.clear();
  obniz.display.print("obniz");
  obniz.display.print(" +");
  obniz.display.print("Power Automate");
  obniz.display.print("Desktop");
  
  var leds0 = obniz.wired("WS2812B", {gnd:2, vcc: 0, din: 1});

  // メッセージを受け付けた部分
  obniz.onmessage = function(message){
    console.log('message',message);

    var message = JSON.parse(message);

    obniz.display.clear();
    obniz.display.print("work tape LED!");
    $('#print').text("work tape LED!");
    
    var colors = [];
    for(var i = 0;i < 17;i++){
      var data = message.excelDatas[i];
      console.log('data',data);
      var r = Number(data["R"]);
      var g = Number(data["G"]);
      var b = Number(data["B"]);
      colors.push([r,g,b]);
    }
    leds0.rgbs(colors);
  }
  
  obniz.switch.onchange = function(state) {
    $('#print').text(state);
    obniz.display.clear();
    obniz.display.print(state);
    
    client.publish(publishTopic, JSON.stringify({ "state": state }));
    
  }

  $('#on').click(function () {

    obniz.display.clear();
    obniz.display.print("ON");
    $('#print').text("ON");
    
    var colors = [];
    for(var i = 0;i < 17;i++){
      colors.push([255,255,255]);
    }
    leds0.rgbs(colors);
  });

  $('#off').click(function () {

    obniz.display.clear();
    obniz.display.print("OFF");
    $('#print').text("OFF");
    
    var colors = [];
    for(var i = 0;i < 17;i++){
      colors.push([null,null,null]);
    }
    leds0.rgbs(colors);
  });
}

</script>
</body>
</html>

大事なのは、

  // メッセージを受け付けた部分
  obniz.onmessage = function(message){
    console.log('message',message);

    var message = JSON.parse(message);

    obniz.display.clear();
    obniz.display.print("work tape LED!");
    $('#print').text("work tape LED!");
    
    var colors = [];
    for(var i = 0;i < 17;i++){
      var data = message.excelDatas[i];
      console.log('data',data);
      var r = Number(data["R"]);
      var g = Number(data["G"]);
      var b = Number(data["B"]);
      colors.push([r,g,b]);
    }
    leds0.rgbs(colors);
  }

こちらのメッセージを受け付ける部分です。

動かしてみる

image

テープ LED をつないで、obniz を実行したままにして、

image

Power Automate Desktop を実行します。

実際このように動作します!17 行分、Foreach を回すのに時間がかかってはいますが、楽しい動作。このように IoT の指示を Power Automate Desktop が Excel データからやるというのは、結構いろいろな用途に使えそうですね!