Power Automate Desktop が Excel ファイルから obniz のテープ LED のカラーを変えるメモ
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 データからやるというのは、結構いろいろな用途に使えそうですね!