https://a.storyblok.com/f/270183/35040/c0fc451120/blog_sms_whatsapp_raspberrypi_1200x600.png

メッセージ付きノードで起動時にRaspberry PiのIPアドレスを送信する

最終更新日 April 19, 2021

所要時間:8 分

Raspberry Pi愛好家である私は、自分のプロジェクトを改善するために再利用可能なスクリプトが必要になることが何度かあった。その典型的な例が、ヘッドレスモード(モニター、キーボード、マウスなし)で起動したときのRaspberry PiのIPアドレスを知ることだ。

最近、NodeとRaspberry Piを使ったホーム監視システムの構築方法についてのチュートリアルを公開した。 NodeとRaspberry Piによるホーム監視システム.このプロジェクトを実装する場合、Raspberry Piをモニターに接続しないことを想定しているため、モニターから離れた場所でRaspberry Piを起動したときにIPアドレスを知るデフォルトの方法がありません。このチュートリアルでは、IPアドレスがわからないという問題の解決方法を説明します。

前提条件

コード

プロジェクト・ディレクトリ内に .envというファイルを作成して開き、環境変数を追加します。あなたの API_KEYAPI_SECRETVonage Developer Dashboard.以下の例の最初の2行にこれらの値を追加します:

API_KEY= API_SECRET= APPLICATION_ID= APPLICATION_PRIVATE_KEY_PATH=private.key SMS_FROM="MyIPAddress" SMS_TO= WHATSAPP_FROM= WHATSAPP_TO=

SMS通知を送信する場合は、あなたの携帯電話番号を次の部分に追加してください。 SMS_TO=あなたの .envファイルに追加してください。WhatsAppで通知する場合、WhatsApp対応の携帯電話番号をファイルの一部に追加してください。 WHATSAPP_TO=ファイルの .envを追加してください。

あなたの WHATSAPP_FROM番号は メッセージ・サンドボックスAPIページで確認できます。

npm init

上のコマンドの入力要求にすべて従ってください。完了したら、以下のコマンドを実行して Nexmo Node SDK, Express, Body-ParserDotEnvパッケージをプロジェクトにインストールします:

npm install nexmo@beta express body-parser dotenv -s

プロジェクト・ディレクトリに index.jsという名前の新しいファイルを作成し、このファイルを開く。最初に必要なのは、Raspberry PiのIPアドレスを取得することです。

以下のコードを新しい index.jsファイルに追加します。この OSモジュールは、デバイスのオペレーティング・システムの情報へのアクセスを提供します。 network interfaces.

以下のコードは、各インターフェイスをループし、次の名前のインターフェイスを探します。 wlan0という名前のインターフェイスを探し、そのインターフェイスが IPv4であり、内部向けインターフェースでないことを確認する。

const os = require('os');

var ifaces = os.networkInterfaces();

Object.keys(ifaces).forEach(function (ifname) {
  ifaces[ifname].forEach(function (iface) {
    if ('wlan0' === ifname && "IPv4" === iface.family && iface.internal === false) {
      console.log(iface.address);

      return;
    }
  });
});

ターミナルで以下のコマンドを実行すると、デバイスのWifi IPアドレスが出力されるはずです:

node index.js

次にIPアドレスを通知として送信します。このチュートリアルではSMSテキストメッセージ、WhatsAppメッセージ、またはその両方で通知を送信できます。

SMSを送る

SMSを送信するには、APIキーとAPIシークレットを使用する必要があります。 .envファイルに保存してあります。まず index.jsファイルの先頭に、以下の行を追加して Nexmoパッケージと DotEnvパッケージを追加します:

+const Nexmo = require('nexmo'); const os = require('os'); +const dotenv = require('dotenv'); +dotenv.config();

次に、ファイルの一番下に、APIキーとシークレットを使って Nexmoオブジェクトを開始します。次の行は変数 textに "Your IP Address is: "という文字列を代入し、その文字列を関数に渡す。 ipAddressが関数に渡されます。

このメソッドの最後の部分はSMSを送信する。

function sendSms(ipAddress) {
  const nexmo = new Nexmo({
    apiKey: process.env.API_KEY,
    apiSecret: process.env.API_SECRET,
  });

  var text = "Your IP Address is: " + ipAddress;

  nexmo.message.sendSms(process.env.SMS_FROM, process.env.SMS_TO, text);
}

WhatsAppを送信

WhatsAppメッセージの送信にはもう少し情報が必要です。 Application IDPrivate Key.アプリケーションを作成するには application_id変数と private.keyファイルを生成するアプリケーションを作成するには、以下のコマンドを実行する:

nexmo app:create "My IP address app" --capabilities=messages --messages-inbound-url=https://example.com/webhooks/inbound-message --messages-status-url=https://example.com/webhooks/message-status --keyfile=private.key

あなたの .envファイルを開き APPLICATION_ID=新しい Application ID.

ファイルに戻って index.jsファイルの一番下に以下のコマンドを追加する:

function sendWhatsApp(ipAddress) {
  const nexmo = new Nexmo({
    apiKey: process.env.API_KEY,
    apiSecret: process.env.API_SECRET,
    applicationId: process.env.APPLICATION_ID,
    privateKey: process.env.APPLICATION_PRIVATE_KEY_PATH
  }, {
    apiHost: 'messages-sandbox.nexmo.com'
  });

  var text = "Your IP Address is: " + ipAddress;

  nexmo.channel.send(
    { "type": "whatsapp", "number": process.env.WHATSAPP_TO },
    { "type": "whatsapp", "number": process.env.WHATSAPP_FROM },
    {
      "content": {
        "type": "text",
        "text": text
      }
    },
    (err, data) => {
      if (err) {
        console.error(err);
      } else {
        console.log(data.message_uuid);
      }
    }
  );
}

上記の例では sendWhatsAppという新しい関数を作成します。 ipAddress.この関数は Nexmoオブジェクトの新しいインスタンスを開始します。 API_KEY, API_SECRET, APPLICATION_IDそして APPLICATION_PRIVATE_KEY_PATH.ここで必要な情報のうち、特に重要なのは apiHostを設定することである。 messages-sandboxAPIへの接続であることを確認することです。

メソッドの残りの部分では、IPアドレスを伝える文字列を作成し、メッセージを送信する。 WhatsAppメッセージを送信します。

通知の送信

を実行しても何も送信されません。 node index.js.IPアドレスが出力されるだけで、それ以上は何も出力されない。SMSであれWhatsAppメッセージであれ、あるいはその両方であれ、通知を送信するには次の行を見つける: console.log(iface.address);.この行の下に以下を追加する:

// To send an SMS:
sendSms(ipAddress);
// To send a WhatsApp message:
sendWhatsApp(ipAddress);

コマンドを実行する

コードが実装され、動作するようになったので、次はRaspberry Piが起動するたびにこのスクリプトを実行するようにオペレーティング・システムを設定する必要がある。これを行うには、ターミナルで以下のファイルを開く:

sudo vim /etc/rc.local

このファイルは、オペレーティング・システムが起動するたびにコマンドを実行する。行の上に exit 0の行の上に以下のコマンドを追加して、ビルドしたプロジェクトを実行する。ファイルのフルパスを必ず更新してください。 index.js:

node /home/pi/ip-address-notification/index.js

テストしてみよう!

Raspberry Piをセットアップし、WhatsApp、SMS、音声合成でRaspberry PiのIPアドレスを送信するコードを書きました。あとはRaspberry Piを再起動して、相手先の番号に通知が届くのを待つだけです。

さらに読む

Raspberry Piを使ったサービス構築や、WhatsAppメッセージの送信で参考になる記事をいくつかご紹介します。

また、コミュニティで共有したい質問、アドバイス、アイデアなどがありましたら、お気軽に私たちの コミュニティSlackワークスペース.

シェア:

https://a.storyblok.com/f/270183/250x250/b052219541/greg-holmes.png
Greg Holmesヴォネージの卒業生

元Vonage開発者エデュケーター。PHPのバックグラウンドを持つが、一つの言語に縛られることはない。熱心なゲーマーでRaspberry pi愛好家。屋内クライミング施設でボルダリングをしていることが多い。