0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Alexa Echo FlexのモーションセンサとAmbientを使って人感監視する

Last updated at Posted at 2021-07-08

Alexa Echo Flexにモーションセンサがついているので、せっかくなのでIoTとしてモーション検知を蓄積してみます。
AlexaのスキルにIFTTTを使い、IoTイベントの蓄積および可視化には、Ambientを使わせていただきました。
モーション検知後のアクションに設定可能なAlexaスキルで適当なのはIFTTTぐらいでしたが、IFTTTからAmbientに直接リクエストを送れなかったので、いったん中間のWebAPIサーバを介しています。

image.png

IFTTTのサイトにアクセスし、まだアカウントを作っていない場合は作成します。

image.png

これから、2つのアプレットを作成します。モーション検知したときのものと、一定時間検知がなかったときのものです。
Createボタンを押下

image.png

If Thisに、Amazon Alexaを選択し、Triggerとして「Say as a specific phrase」を選択します。

Phraseには、適当に「センサーイン」と入力し、Create triggerボタンを押下します。

image.png

すると、Connect Serviceの画面が表示されて、Amazon Alexaのアカウントとして接続する画面が表示されます。

image.png

Connectボタンを押下すると、Amazonアカウントのログインが促されますので、Echo Flexに設定したAmazonアカウントと同じアカウントでログインします。
この設定は最初の1回だけです。以降はこのログイン状態はIFTTTのアカウントに紐づいて記憶されます。

image.png

続いて、Then Thatとして、「Webhooks」を選択します。検索テキストに、webhookと入力するとすぐに見つかります。

image.png

以下の入力画面が表示されます。

image.png

URL:これから立ち上げるWebAPIサーバのURLを指定します。
例えば、https://【WebAPIサーバのホスト名】:20443/echosensor とします。

Method:POST を選択します。

Content Type:application/jsonを選択します。

Body:WebAPIサーバで受け取りたいJSON値を指定します。以下のようにします。
{ “id”: “id1”, “state”: 1 }

idは、Ambientに登録する際のデータ列の名前です。8個まで登録できるのかな?
stateは、1でモーション検出、0でモーション検出解除を意味します。

最後に、Create actionボタンを押下します。

image.png

Continueボタンを押下することでトリガー待ちになります。

image.png

できました。

image.png

同様に、今度はセンサーアウトを作ります。

image.png

今度は、Bodyの中のstateを0としています。

image.png

#Ambientへのチャネルの登録

Ambientに、先ほどのJSONを受け取るチャネルを作成します。

Ambient – IoTデータ可視化サービス

image.png

まだユーザ登録していない場合は、右上の「ユーザー登録(無料)」から登録します。

image.png

「チャネルを作る」ボタンを押下

そうすると、チャネル名が割り当てられてチャネルが1つ増えます。
チャネル名をクリックします。表に表示されるチャネルIDとライトキーは後で使うので覚えておきます。

image.png

まだ何もチャートが作成されていないので、一番上のチャートっぽいボタンを押下します。

image.png

チャネル/データ設定をクリック。
チャート名には、例えば「モーションセンサー」、チャネルの種類として「稼働状態」を選択します。
そして、d1のラジオボタンを表示にします。d1というのが先ほどJSONで指定したやつです。
設定ボタンで完了です。まだ、データはないので何も表示されません。

image.png

#WebAPIサーバ

IFTTTから呼び出しを受けて、Ambientにデータを登録するWebAPIサーバを立ち上げます。

中身はこんな感じです。Lambdaをご存じであれば、すぐ理解できると思います。
npmモジュールとして、ambient-libを使わせていただきました。

ambient-lib

express_template/api/controllers/echosensor/index.js
'use strict';

const HELPER_BASE = process.env.HELPER_BASE || '../../helpers/';
const Response = require(HELPER_BASE + 'response');

const AMBIENT_CHANEL_ID = '【AmbientのチャネルID】';
const AMBIENT_WRITE_KEY = '【Ambientのライトキー】';

const Ambient = require('ambient-lib');
const am = new Ambient(AMBIENT_CHANEL_ID, AMBIENT_WRITE_KEY);

exports.handler = async (event, context, callback) => {
	var body = JSON.parse(event.body);
	console.log(body);

	var value = {};
	value[body.id] = body.state;

	am.send( value );

	return new Response({ message: 'Ambient.sended' });
};

以下の部分は先ほど覚えておいた値を指定します。

 AMBIENT_CHANEL_ID:【AmbientのチャネルID】
 AMBIENT_WRITE_KEY :【Ambientのライトキー】

こちらがエンドポイントのSwaggerです。

express_template/api/controllers/echosensor/swagger.yaml
swagger: '2.0'
info:
  version: 'first version'
  title: Lambda Laboratory Server
  
paths:
  /echosensor:
    post:
      parameters:
        - in: body
          name: body
          schema:
            $ref: "#/definitions/CommonRequest"
      responses:
        200:
          description: Success
          schema:
            $ref: "#/definitions/CommonResponse"

WebAPIサーバの構築は、以下を参考にしてください。
 簡単にRESTサーバ・GraphQLサーバを立ち上げる

#Alexa設定

Alexaアプリから、Alexaの設定をします。私の場合は、Android版のAlexaアプリを利用しました。

image.png

下のほうにあるデバイスを選択します。さらに、すべてのデバイスを選択します。

image.png

その中に、First motion sensorというのがありますでしょうか?
最初にモーションセンサーをセットアップしたときに指定した名前によってちょっとちがうかもしれません。

image.png

それでは、さっそく定型アクションを作成しましょう。

image.png

つづけて定型アクションを作成 をタッチします。

image.png

定型アクション名として、例えば、センサーインとします。
実行条件は、スマートホームのFirst motion sensorを選択します。
そしてモーションの状態として検出を選択します。

image.png

アクションの選択には、IFTTTを選択し、

image.png

センサーアウトとセンサーインの2つが表示されていますので、センサーインを選択します。この文字列は、IFTTTで入力したものです。

image.png

できました。

image.png

これと同じように、センサーアウトも作成します。

モーションの状態では、未検出間隔を聞かれますが、とりあえず3分にしてみました。お好みで。

image.png

2つ出来上がりました。

image.png

#動かして見てみる

これまでの設定で、すべて完了したはずです。
あとは、モーションセンサーの前でうろうろしてみましょう。

Alexaアプリを見てみると、以下のように検出されたことが表示されます。
このときに、IFTTTが起動し、WebAPIを介して、Ambientにデータが登録されているはずです。

image.png

短時間すぎると、可視化したグラフは面白くないので、1日蓄積してみた画像が以下です。

image.png

以上

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?