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 でデータ送信
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 のサービスを使いこなせる方は、そちらで中継部分を実装してしまうのもありだと思います。
ちなみに、IFTTT で、トリガーとして webhook、アクションに slack コネクタを選択・設定し、繋げてみましたが、うまく繋がりませんでした。 json の渡し方が悪いのか?、slack からエラーが戻ってきてしまいました。
3. ELmote® CLOUD という選択肢
こんなデッドロックな状態になった時にお勧めしたいのが、当社 IoT データ基盤ELmote® CLOUDのAlert機能です。
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の設定をする入り口が画面下部にあります。
Alertをクリックすると、Alert条件を作成する画面に遷移します。
すでに設定された条件があれば、それらがウィジェットとして表示されているはずです。
新規に作成する場合は、Add Alert Setting部分をクリックします。
詳細を設定する画面です。
- ID (これはシステムで自動で付与されます、これを soracom beam の設定に利用)
- Name(このアラート条件の名前です)
- Parser (細かい条件を JavaScript で記述)
- URL (送り先の設定。今回は Slack のエンドポイントです)
- header (適宜必要に応じて、http header を追記)
もう一つ、Alertの設定とは関係ないのですが、ユーザ毎に払い出される APIKey があり、soracom beam の設定に利用します。
3.3. soracom beam の設定
soracom beam をご利用のユーザは多いと思うので、詳細説明は割愛します。 http(s)/tcp/udp で待ち受けて、http(s)/tcp/udp で転送先にデータを届けてくれるサービスです。
基本的には ELmote® CLOUD で払い出された情報を設定するだけです。
3.4. エッジ は soracom beam のエンドポイントを叩くだけ
エッジデバイスは、LTE-M モジュールの AT コマンド仕様に従い、soracom beam のエンドポイントを叩くだけです。
4. おさらい
今回実現したことは、以下のとおりです。
- 組み込み系(OS なし)デバイスで、
- MCU から AT コマンドで LTE-M 用通信モジュールを制御し、
- HTTP POST でデータ送信
- 組み込み系側の実装が容易で、かつセキュアな通信経路を確保するためにsoracom beamと、
- 当社 IoT データ基盤ELmote® CLOUDを利用し、
- Slackにエッジ側のデータを通知する
↓ は、通知結果の例です。
5. 最後に
ここまでお読みいただき感謝です。
ただ、ふと疑問に思われた方がいると思います。 IoT データ基盤ELmote® CLOUDって、どうやって利用開始できるの? ユーザアカウントが欲しいのだけど…
そんな方は、現在、無償で利用できますので、お気軽にご連絡ください。お待ちしております。