LoginSignup
4
1

More than 1 year has passed since last update.

Beebotte の REST API と MQTT の組み合わせを公式情報を見つつ試す(curl と Node.js)【2022年4月版】

Last updated at Posted at 2022-04-16

過去に、以下の記事でも扱った Beebotte で、REST API と MQTT を組み合わせて使う話です。

通信方法に関するドキュメントを見てみる

Beebotte の MQTT

MQTT を使う話は、冒頭でも掲載していた過去記事をご参照ください。

Beebotte の REST API

Beebotte の REST API について、まずは公式ページの情報を見ていきます。
公式ドキュメントを見ていくと「Data Operations の Publishing Data という項目」に情報が書いてありそうでした。

curlコマンドを使うやり方

以下は「Server side Publish (REST API)」と「Server side Bulk publish (REST API)」というそれぞれの項目で、cURL を選んだ場合の表示です。
Server side: curl

プライベートなチャンネルにデータをパブリッシュする場合、以下のコマンドになるようです。

## Publish to private channel
curl -i -H "Content-Type: application/json" \
  -H "X-Auth-Token: YOUR_CHANNEL_TOKEN" \
  -X POST -d '{"data":"Hello World"}' \
  http://api.beebotte.com/v1/data/publish/private-dev/res1

この後で詳しく触れますが、最後の行の「publish」の後の部分で「private-」がついているのがポイントのようです。

Node.js を使ったやり方

以下は「Server side Publish (REST API)」と「Server side Bulk publish (REST API)」というそれぞれの項目で、Node.js を選んだ場合の表示です。公式のライブラリを使ったやり方が掲載されているようです。
Server side: Node.js

実際に通信をさせてみる

それでは、REST API と MQTT を組み合わせた通信を試してみます。なお、以下では Beebotte公式のライブラリは利用せずに進めていきます。

channel の準備

そのために、冒頭で掲載していた過去記事で書いていた、MQTT を利用するための準備を行ってください。準備を終えると、MQTT での通信を行うための情報として、以下がそろうと思います。

  • MQTT の接続先: mqtt://mqtt.beebotte.com
  • MQTT用のポート番号(SSL の利用なし): 1883
  • 認証方法: Channel token
    • 「user name: 【Channel token】、 password: 【(空)】」、または、「user name・password: 【Channel token】」を設定
  • MQTT のトピック
    • 【channel/resource】

この情報と、上で見ていった REST API の情報を組み合わせて、通信を行ってみます。

curl を用いたお試し

curl を使って REST API でのパブリッシュを行い、サブスクライブを Node.js のプログラムで行います。

サブスクライブ側は、過去の記事でも用いた以下のプログラムを用います。以下では、MQTT.js を使っているので、 npm install mqtt を実行して MQTT.js を使えるようにしてください。

const mqtt = require("mqtt");

const client = mqtt.connect("mqtt://mqtt.beebotte.com", {
  clientId: "javascript_sub",
  username: "【Channel token】",
  password: "",
});

client.on("connect", function () {
  console.log("connected!");

  client.subscribe("【channel/resource】");
});

client.on("message", function (topic, message) {
  console.log(topic + ": " + message.toString());
});

【Channel token】 と 【channel/resource】 の部分は、ご自身で Beebotte から取得した情報に置きかえてください。

上記を nodeコマンドで実行した状態で、REST API を使ってみます。以下に 2種類のコマンドを掲載します。

curl -i -H "Content-Type: application/json" \
  -H "X-Auth-Token: 【Channel token】" \
  -X POST -d '{"data":"REST API より"}' \
  http://api.beebotte.com/v1/data/publish/【channel/resource】

curl -i -H "Content-Type: application/json" \
  -H "X-Auth-Token: 【Channel token】" \
  -X POST -d '{"data":"REST API より"}' \
  http://api.beebotte.com/v1/data/publish/【(名称の先頭に private- を付与した channel/resource】

上記の 2つの違いは最後の行の URLで、その中の「publish」の後ろの部分です。1つ目は 【channel/resource】 をそのまま記載していますが、2つ目のほうは channel の部分に private- を付与しています。仮に Beebotte上で mychannel というチャンネル名にしていた場合、2つ目のコマンドでは private-mychannel という書き方にします。

この対応を行うことで、パブリックでなくプライベートなメッセージになるようです。
プライベートにする方法

上記の 2つのコマンドを順番に実行した後、サブスクライブ側の Node.js のプログラムの出力を見てみました。サブスクライブで受信できた JSON に関し、 ispublic の部分が true・false という異なる内容になっており、パブリック・プライベートの設定が反映されているのが分かります。
サブスクライブ側

Node.js を用いたお試し

次は、パブリッシュ側も Node.js を使って試してみます。Beebotte公式のライブラリを使わず、REST API を使います。

上で出ていた curlコマンドの内容から、Node.js のプログラムで設定するべきパラメータを決めました。具体的には以下のプログラムになるのですが、axios を使っているので、 npm install axios を実行して axios を使えるようにしておいてください。

const axios = require("axios");

const sendPostRequest = async () => {
  try {
    const res = await axios({
      method: "post",
      url: "http://api.beebotte.com/v1/data/publish/【(名称の先頭に private- を付与した channel/resource】",
      headers: {
        "X-Auth-Token": "【Channel token】",
        "Content-Type": "application/json",
      },
      data: { data: "Node.js より" },
    });
    console.log(res.data);
  } catch (err) {
    console.error(err);
  }
};
sendPostRequest();

あとは、パブリッシュ・サブスクライブの両方のプログラムを、それぞれ nodeコマンドで実行します。この Node.js のプログラムを使ったお試しでも、REST API ⇒ MQTT の通信が行えることを確認できました。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1