【ラズパイ × AWS IoT Core】 (3)センサーのしきい値でLambda関数を呼び出す

ラズパイ x AWS IoT Core

今回は、ラズパイに接続したセンサー温度が一定数を超えたら、Lambda関数を呼び出し、LINEで通知するようにしてみます。

設定手順

  1. IoT CoreコンソールのACTタブからルールを新規に作成します。センサーからの値を評価し、Lambda関数を呼び出すためのルールを定義します。 ルールの作成

  2. ルールクエリステートメントには室温が25℃を超えたらアクションが発生するように指定しました。SQL構文ではJSON拡張が使えるので、JSONオブジェクトのメンバーはJavaScriptと同様の構文でアクセスできます。

    SELECT * FROM 'myTopic' WHERE sensor.temp > 25

  3. Lambda関数のトリガーに「AWS IoT」が追加されます。 Lambda関数

  4. Lambda関数が呼ばれるかデバッグ文で確かめてみます。

    // add console.log('event:' + JSON.stringify(event)); Lambdaデバッグ

  5. CloudWatchのログを見ると、受信できているのがわかります。 CloudWatchログ

LINEで通知する

Alertを受信したら通知メッセージを送るようにしてみます。ここではLINEのメッセージを使います。 Lambda関数でJSON形式のメッセージを組み立てて、LINE BotのエンドポイントへPOSTします。

index.js:

const request = require('request');

exports.handler = function(event, context) {
    const message = '部屋の温度が上昇しています。室温:' + event.sensor.temp + '℃、外気温:' + event.weather.temp + '℃'; 
    const options = {
        uri: "https://api.line.me/v2/bot/message/push",
        headers: {
            "Content-type": "application/json; charset=utf-8",
            "Accept-Language": "jp",
            "Authorization": "Bearer {xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=}"
        },
        json: {
            "to": "Uxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
            "messages": [{
                "type": "text",
                "text": message
            }]
        }
    };
    request.post(options, function (error, response, body) {
        if (!error && response.statusCode == 200) {
            context.done(null, body);
        } else {
            console.log('error: ' + response.statusCode);
            context.done(null, 'error');
        }
    });
};

IoT機器の状態に応じて、自動的にメッセージを送信できるようになりました。 今回はLINEを使用しましたが、SlackやE-Mailなどを使っても良いと思います。

まとめ

今回はここまでです。

ラズパイを使って手軽にAWSのIoT Coreを試すことができました。

次回はセンサーからの情報をグラフを使って視覚化してみたいと思います。

参考にしたサイト

ラズパイ × AWS IoT Core の記事一覧