Power Automate Desktop が Excel ファイルから obniz のテープ LED のカラーを変えるメモです。
今回の仕組み
Power Automate Desktop が Excel ファイルを読み取り JSON データで Node-RED に連携するメモ で、Excel データを JSON にして送れることが分かったので、今回は obniz の メッセージング 機能 をつかって、特定の obniz に Power Automate Desktop から指示を出します。
元となる Excel ファイル
デスクトップに obniz.xlsz ファイル置きます。
中身はこのようになっています。項目を ID,R,G,B として RGB値でカラーを決めます。obniz 側で 17 つのLEDがついたテープLEDを使うため17行の指示になっています
Power Automate Desktop
Power Automate Desktop のフローの流れはこちらです。Power Automate Desktop が Excel ファイルを読み取り JSON データで Node-RED に連携 したものをベースにしています。
ワークシートは今回のセルの範囲に修正。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 の内容
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); }
こちらのメッセージを受け付ける部分です。
動かしてみる
テープ LED をつないで、obniz を実行したままにして、
Power Automate Desktop を実行します。
実際このように動作します!17 行分、Foreach を回すのに時間がかかってはいますが、楽しい動作。このように IoT の指示を Power Automate Desktop が Excel データからやるというのは、結構いろいろな用途に使えそうですね!