Edge to Slack

Edge to Slack

Edge to Slack

IT 業界ではデファクト化しているコミュニケーションツールSlackですが、もちろんホモ・サピエンス間のチャットツールというだけでなく、IT システムやエッジデバイスからのアラート通知先としても利用することが多いのではないでしょうか?当社もご多分に漏れず、Slack をさまざまな情報共有インタフェースとして使っています。

今回は、当社が先般発表した IoT データ基盤ELmote® CLOUDのアラート機能を利用して、エッジデバイスから Slack へ情報を伝達させる簡単な方法をご紹介したいと思います。


1. 前提

当社が扱う IoT 周りの仕事では、組み込み系機器からクラウドへデータを上げるということがほぼ共通して実装される機能になります。 LPWAN 用通信モジュールはその時々で異なり、それゆえに AT コマンドもメーカー独自の仕様であり、新しいモジュールを扱う場合は基礎的な疎通確認から行う必要があります。 組み込み系の方なら一度は苦労されていると思いますが、それら AT コマンドを駆使して、Slack に直接通知させるのは至難の技だったりします。

ということで、今回のテーマは、以下の環境を前提としています(OS があるやつは便利な環境が整っているはずで、苦労は少ないはず)。

  • 組み込み系(OS ないです)
  • MCU から AT コマンドで LTE-M 用通信モジュールを制御
  • HTTP POST でデータ送信

nw1


2. どんな選択肢があるのか?

2.1. 一番シンプルな手段…しかし

SlackにはIncoming Webhookという機能があるので、そのインタフェースに合わせて LTE-M モジュールの AT コマンドを活用して直接送ることは、技術的には可能です。

この Incoming Webhook のインタフェースですが、手元の PC で curl コマンドなどで実現するなんてのは、朝飯前だと思います。しかし、LTE-M モジュールの AT コマンドを使うとなると、いろいろいろいろ http オプションやら https の証明書設定などで、(ChatGPT 全盛の時代ですら)不毛な時間が過ぎて行く時があります。


2.2. 中継系サービスを使う方法

ということで、気軽に使える中継系のサービスを使う方法も考えられます。例えば、IFTTTとかZapierが老舗であり有名でしょうか?この二つはフリーミアムモデルなので、基本的には無償で利用開始できます。が、webhook 関連のコネクタが有償版でないと使えません。

言わずもがな、AWS やら Azure のサービスを使いこなせる方は、そちらで中継部分を実装してしまうのもありだと思います。


Edge2Slackviafilter

ちなみに、IFTTT で、トリガーとして webhook、アクションに slack コネクタを選択・設定し、繋げてみましたが、うまく繋がりませんでした。 json の渡し方が悪いのか?、slack からエラーが戻ってきてしまいました。


3. ELmote® CLOUD という選択肢

こんなデッドロックな状態になった時にお勧めしたいのが、当社 IoT データ基盤ELmote® CLOUDのAlert機能です。


Edge2SlackviaELmoteCloud

Alert機能を利用することで、ELmote® CLOUDに届いたデータが、設定した条件に合致した際に、外部サービスに情報を送ることができます。設定する条件を、JaveScript で自由に記述できるので非常に汎用性も高いです。

今回は、簡単な実装とセキュアな通信経路を実現するために、soracom beamを利用してエッジと soracom 間は http 通信(s でない)を利用することにします。

以下、簡単な設定・実現手順です。


3.1. Slack の設定

Slack で、Incoming Webhook の設定を行います。ここで作成するエンドポイントやトークンを、ELmote® CLOUDが叩くことになります。

詳細は公式マニュアルに譲りますが、Slack app で自分用の Slack アプリを作成します。

なお、こちらの記事“Slack:Webhook URL 取得して Slack に通知する”がとてもわかりやすいかと思います。


3.2. ELmote® CLOUD の設定

ELmote® CLOUDにログインすると、Alertの設定をする入り口が画面下部にあります。


ELmoteCloud_Top

Alertをクリックすると、Alert条件を作成する画面に遷移します。


ELmoteCloud_Alert1

すでに設定された条件があれば、それらがウィジェットとして表示されているはずです。

新規に作成する場合は、Add Alert Setting部分をクリックします。


ELmoteCloud_Alert2

詳細を設定する画面です。

  • ID (これはシステムで自動で付与されます、これを soracom beam の設定に利用)
  • Name(このアラート条件の名前です)
  • Parser (細かい条件を JavaScript で記述)
  • URL (送り先の設定。今回は Slack のエンドポイントです)
  • header (適宜必要に応じて、http header を追記)

もう一つ、Alertの設定とは関係ないのですが、ユーザ毎に払い出される APIKey があり、soracom beam の設定に利用します。


ELmoteCloud_Core


ELmoteCloud_APIKey

3.3. soracom beam の設定

soracom beam をご利用のユーザは多いと思うので、詳細説明は割愛します。 http(s)/tcp/udp で待ち受けて、http(s)/tcp/udp で転送先にデータを届けてくれるサービスです。

基本的には ELmote® CLOUD で払い出された情報を設定するだけです。

soracombeam_config

soracombeam_config

soracombeam_config

3.4. エッジ は soracom beam のエンドポイントを叩くだけ

エッジデバイスは、LTE-M モジュールの AT コマンド仕様に従い、soracom beam のエンドポイントを叩くだけです。



4. おさらい

今回実現したことは、以下のとおりです。

  • 組み込み系(OS なし)デバイスで、
  • MCU から AT コマンドで LTE-M 用通信モジュールを制御し、
  • HTTP POST でデータ送信
  • 組み込み系側の実装が容易で、かつセキュアな通信経路を確保するためにsoracom beamと、
  • 当社 IoT データ基盤ELmote® CLOUDを利用し、
  • Slackにエッジ側のデータを通知する

↓ は、通知結果の例です。


Edge2Slack



5. 最後に

ここまでお読みいただき感謝です。

ただ、ふと疑問に思われた方がいると思います。 IoT データ基盤ELmote® CLOUDって、どうやって利用開始できるの? ユーザアカウントが欲しいのだけど…

そんな方は、現在、無償で利用できますので、お気軽にご連絡ください。お待ちしております。