この記事はIBM Cloud Advent Calendar 2019の17日目の記事です。IBM Cloud Functionsでobnizを動かすメモをまとめます。
ベースとなる仕組み
Noodlからobniz Messaging経由でIoTゆるメカトロ車を動かすメモ – 1ft-seabass.jp.MEMO
obniz側はこちらの仕組みで動かせるようにしておきます。
<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"> <link rel="stylesheet" href="/css/starter-sample.css"> <script src="https://obniz.io/js/jquery-3.2.1.min.js"></script> <script src="https://unpkg.com/obniz@2.4.0/obniz.js" crossorigin="anonymous"></script> </head> <body> <div class="wrap"> <div class="DCMotor"> <h3 class="text-center">Controling on a DCMotor</h3> </div> <div class="DCMotor"> <button class="btn btn-primary btn-block" id="forward">Forward</button> <button class="btn btn-primary btn-block" id="reverse">Reverse</button> <button class="btn btn-primary btn-block" id="rightroll">RightRoll</button> <button class="btn btn-primary btn-block" id="leftroll">LeftRoll</button> <button class="btn btn-success btn-block " id="powerup">Power 100</button> <button class="btn btn-success btn-block" id="powerdown">Power 30</button> <button class="btn btn-secondary btn-block" id="stop">Stop</button> </div> </div> <script> var obniz = new Obniz("Obniz_ID"); obniz.onconnect = async function () { var motor = obniz.wired("DCMotor", {forward:0, back:1}); var motor2 = obniz.wired("DCMotor", {forward:10, back:11}); obniz.display.clear(); obniz.display.print("Hello World"); obniz.onmessage = function(message, from) { if (message === "forward") { motor.forward(); motor2.reverse(); obniz.display.clear(); obniz.display.print(message); } if (message === "reverse") { motor.reverse(); motor2.forward(); obniz.display.clear(); obniz.display.print(message); } if (message === "rightroll") { motor.forward(); motor2.forward(); obniz.display.clear(); obniz.display.print(message); } if (message === "leftroll") { motor.reverse(); motor2.reverse(); obniz.display.clear(); obniz.display.print(message); } if (message === "powerup") { motor.power(100); motor2.power(100); obniz.display.clear(); obniz.display.print(message); } if (message === "powerdown") { motor.power(30); motor2.power(30); obniz.display.clear(); obniz.display.print(message); } if (message === "stop") { motor.stop(); motor2.stop(); obniz.display.clear(); obniz.display.print(message); } if (message.indexOf("power-") == 0) { var power = message.split("-")[1]; motor.power(power); motor2.power(power); obniz.display.clear(); obniz.display.print(message); } }; $('#forward').click(function () { motor.forward(); motor2.reverse(); obniz.display.clear(); obniz.display.print("forward"); }); $('#reverse').click(function () { motor.reverse(); motor2.forward(); obniz.display.clear(); obniz.display.print("reverse"); }); $('#rightroll').click(function () { motor.forward(); motor2.forward(); obniz.display.clear(); obniz.display.print("rightroll"); }); $('#leftroll').click(function () { motor.reverse(); motor2.reverse(); obniz.display.clear(); obniz.display.print("leftroll"); }); $('#powerup').click(function () { motor.power(100); motor2.power(100); obniz.display.clear(); obniz.display.print("powerup"); }); $('#powerdown').click(function () { motor.power(30); motor2.power(30); obniz.display.clear(); obniz.display.print("powerdown"); }); $('#stop').click(function () { motor.stop(); motor2.stop(); obniz.display.clear(); obniz.display.print("stop"); }); }; </script> </body> </html>
アクションを作成
作成>アクションの作成をクリック。
アクションの作成は以下のように設定。
アクション名は obniz 。パッケージを囲むはデフォルトパッケージでOKです。ランタイムは Node.js 10 を指定して作成ボタンを押します。
作成されました。
ソースコード
動かすソースコードはこちらです。
const needle = require('needle'); async function main() { try { let response = await needle('get', 'https://obniz.io/obniz/0000-0000/message?data=forward', { headers: { 'accept': 'application/json' } }); return { statusCode: 200, headers: { 'Content-Type': 'application/json' }, body: {response: 'OK'}, }; } catch (err) { console.log(err) return Promise.reject({ statusCode: 500, headers: { 'Content-Type': 'application/json' }, body: { message: err.message }, }); } } exports.main = main;
0000-0000 の部分を今回動かしたいobnizのIDに書き換えましょう。
保存します。
起動してみる
起動してみると、
このように実行され、forwardメッセージが送信されます!
こちらを、トリガーで実行してやると、1分ごとの実行や特定の時間実行が出来るようになり、IBM Cloudでのobniz利用の幅が広がります!
明日は
ssakaigawaさんです!