コンテンツへスキップ

初期検討時のシステム構想

機械学習どころか、プログラム言語Pythonも全く初めて、Raspberry PiやWEBカメラなどインフラ関係も知識なし。

めざましじゃんけん結果

WEBからの情報などで、こんな感じにしたいと思い描いたのが以下のシステム構想。

一般的なGeForce(GeForce GTX 960)ビデオカード搭載のWindowsメインマシン(Intel Core i7-6700 CPU)で機械学習・ニューラルネットワークを用いた学習モデルの作成。作成した学習モデルをRaspberry Pi 3
Model B+ へ移動し、Raspberry Piで画像検出を実施。

Raspberry Piでの画像検出結果により、じゃんけん結果をDBへ蓄積。蓄積したDBデータより、めざましじゃんけんの結果をホームページと速報としてTwitterで公開。

当初画像認識と画像検出の違いも分かっておらず、書籍などで紹介されていた画像認識を駆使したシステムを構築しようとしておりました。画像認識を試した時点ではRaspberry Piで処理可能に感じました。
画像認識・・・対象がアップ(画像一面)になっている画像の判定を行う
画像検出・・・対象が写り込んでいる画像より、対象を画像検出する

第一は、技術習得が1番のモチベーションであった、予期しないカメラのズレなどを考えても、画像検出のほうがシステムの安定稼働を望めるので、画像検出実装へ方針転換しました。実際には、画像認識は1日で実装出来たのですが、うまく動作せず、画像認識対象部分の画像切り取りなど、決め打ちの方式しか思いつかず、そうそうに画像検出に方針転換しました。他にも転用出来る素晴らしい技術に出会えたと思います。(Darknet、YOLO、Open CV、Python、DNN、ニューラルネットワーク)

V1での妥協と実装方式

本当は、リアルタイムでの画像検出を実装する予定でした。時間指定で動作するシステムよりもテレビさえ動いていれば、じゃんけんのスタートを自動検知し、結果を漏れなく収集するシステムを構想しました。
しかし、Raspberry Piの処理速度・信頼性より断念しました。画像検出中のRaspberry Piの発熱量など。
よって、V1ではめざましじゃんけん結果の判定の画像検出は、メインのWindowsマシンで実行しております。
めざましじゃんけんのみに特化して考えると、OpenCVの画像処理を駆使すれば軽くて高速なフィルタ作成も可能かなと考えています。

V1機能一覧と実装

機能名実装
画像検出フレームワーク準備学習データ収集Raspberry PiとWEBカメラで、めざましじゃんけん実施時の画面キャプチャー取得
学習データ整理メインのWindowsマシンで実施。
LabelImgで学習したい内容のラベル登録
学習メインのWindowsマシンでDarknetを用いて実施。
システム起動TV起動Raspberry PiよりNature Remo経由で実施。
TVチャネル変更Raspberry PiよりテレビREGZAのWEB APIを用いて実施。
じゃんけん時の「青」「赤」「緑」ボタン操作もRaspberry PiよりWEB APIを用いて実施。
メインマシン起動メインマシン(Windows)の起動をRaspberry Piより実施
画像検出画像蓄積Raspberry PiのWEBカメラを用いて目覚ましテレビの画像をキャプチャー
画像移動Raspberry PiでキャプチャーしたデータをWindowsのメインマインに移動
画像検出Windowsマシンで画像検出を実施。
検出結果結果をDB登録Windowsマシンより画像検出結果をSynology NASのSQL DBへ登録
情報発信WEBコンテンツSQL DB情報よりWEBコンテンツの更新。Synologyで実施。
Twitter発信WEBコンテンツ更新と同じタイミングでTwitter発信を実施。処理はSynologyで実施。

めざましじゃんけん 画像検出システム

めざましじゃんけん結果

テレビ画像よりフジテレビ、めざましテレビ内で実施されるめざましじゃんけんの結果を蓄積します。めざましじゃんけんは、デジタル放送のコンテンツであり、B-CAS(ビーキャス)カードを用いた受信装置により、データ放送を画面表示させ、リアルタイムに参加する必要があります。番組録画しても、データ放送のコンテンツは録画することは出来ません。

  1. 環境準備(インストール)

  2. Darknet/YOLOで学習モデル準備

  3. システム実装と結果公開

  4. プログラム関連技術

本システム実装に関連した、プログラム関係のTips。

    • PHP
    • Python
  1. 【機械学習導入】ニューラルネットワークChainerフレームワーク

    • 導入方法
    • 機械学習
    • Out of Memoryへの対応
    • 学習モデルのRaspberry Piでの実行

雨が降り出す前に通知①Google Homeスピーカーとライン通知

Use Case(ユースケース)

約2−3週間利用してみてのベストプラクティスです。

YahooのYOLP(地図)気象情報APIを利用し、緯度経度で指定した地点の10分間隔の天気予報を定期的にチェックし、トリガーとします。(日本ならではの細かなWEBサービスを利用します)
天候が「Rain(雨)」に変化した際に、Webhooks経由でトリガーを受け、LINEに通知および、トリガー発生時間(日中)を判定しGoogle Homeスピーカーで雨が降り出す旨のアナウンスを実行します。Google Homeスピーカーは就寝時間などには音声を出させたくないので、時間判定を入れました。

前提条件

  • Yahoo! JAPANのアプリケーションID Yahoo!JAPANアプリケーションの管理
    アプリケーションIDはYahoo! JAPAN IDをお持ちの方ならどなたでも登録できます。アプリケーションIDは、各リクエスト送信時に必要で、開発者自身ではなく、アプリケーションを特定します。
  • (Raspberry Piの)Google Home Notifier導入が終わっている「google-home-notifier」導入
  • (Raspberry Piの)PHPが動作するWEBサーバがセットアップされている
  • (Raspberry Piの)WEBサーバの公開設定が終わっている
  • IFTTTサービスの利用登録が実施済みである
  • IFTTTサービスにおいて、Webhooksが利用可能である IFTTT(イフト)でWebhooksの利用
  • IFTTTサービスにおいて、LINE Notifyの利用設定を実施している

全体の流れ

  1. Weather.phpファイルの準備
  2. Weather.phpの定期実行設定、雨を検知した時点でWEB APIへトリガー
  3. WEB APIよりLINEへメッセージ送信
  4. Google Homeスピーカーでアナウンス(Google Home Notifier経由)

Weather.phpファイルの準備

こちらのページを参照して下さい。

Weather.phpの定期実行

Synologyの「コントロールパネル」「タスクスケジューラー」で10分毎の実行で、以下のコマンドラインを登録して、定期実行しております。

トリガー

Weather.phpよりRaspberry PiのWEB APIへ直接トリガーされます。3つのパラメータを設定します。

    • APIKEY=apikey
    • KEY=Weather
    • text="$text"

アクション

以下が、準備したサンプルのPHPスクリプトとなります。

アクション1

LINE送信のアクションを設定します。すでに、他ユースケースなどでIFTTT側にLINE送信のレシピを導入されている方は、アクション2の定義に進んで下さい。

アクション1:トリガー

アクセスキーなどの初期設定値は、IFTTTより取得して下さい。

IFTTT(イフト)でWebhooksの利用

アクション1:IFTTTでのトリガー


Webhooksを{event}:pushLINEで設定します。

アクション1:アクション


LINE送信のアクションを定義します。
Recipientでラインの送付先を指定します。すでに作成しているLINEのグループにも送信することが出来ます。
Message部分は、自由に変更出来ます。今回は、PHPより2つの引数を渡しているので、2つの引数をMessageに入れております。pushLine('【テスト】',$text);

アクション2

Google Home Notifier経由で、Google Homeからアナウンスを流します。「google-home-notifier」導入

時間判定について checkTime関数

対象時間の開始と終了を指定して、true, falseを戻り値とする関数を準備しました。
日付を跨る設定などは考慮しておりません。

checkTime('6:00','23:00')とすれば、朝6時から夜23時まで「True」となります。
このチェック関数を用いて、Google Homeのアナウンス対象時間か否かを確認しています。

 

Use Case(ユースケース)

Yahoo Japan防災速報の情報を利用します。YahooのIoTプラットフォームである「myThings」の利用も考えたのですが、トリガー登録の単位が細かすぎたりと煩雑だったので、防災速報のメール登録を行い、メール受信をトリガーにライン通知とGoogle Homeからのアナウンスを実現しております。Yahooからの防災速報メールの着信監視とメールの簡単な加工はMicrosoft Flowを利用しております。

前提条件

  • (Raspberry Piの)Google Home Notifier導入が終わっている「google-home-notifier」導入
  • (Raspberry Piの)PHPが動作するWEBサーバがセットアップされている
  • (Raspberry Piの)WEBサーバの公開設定が終わっている
  • IFTTTサービスの利用登録が実施済みである
  • IFTTTサービスにおいて、Webhooksが利用可能である IFTTT(イフト)でWebhooksの利用
  • IFTTTサービスにおいて、LINE Notifyの利用設定を実施している
  • Microsoft Flowの利用登録が実施済みである (YahooJapan防災速報メール受信をトリガー出来たらば別の方法で問題ないです)

全体の流れ

  1. Yahoo Japan防災速報のメール版に登録
    「通知先の設定(メールアドレス)」「地域の設定」および「通知する情報を選択」
  2. 今回は、GoogleのGmailを用いたので、Microsoft Flowを用いて、Yahoo Japan防災速報のメールをトラップします
  3. Yahoo Japan防災速報のメールタイトルのみを自分自身の防災速報専用のツイッタアカウントに発信します
  4. IFTTTのTwitterで自分自身の発信した防災速報情報をトラップし、防災速報情報受信時のアクションを実行(Raspberry PiのWEB APIへ発信)
  5. WEB APIよりLINEへメッセージ送信
  6. Google Homeスピーカーでアナウンス(Google Home Notifier経由)

トリガー

Yahoo Japan防災速報のメールをトラップし、Twitterで発信

MicrosoftFlowのGmailで準備されている「新しいメールが届いたとき」のトリガーに、「開始」にYahoo Japan防災速報が送付されてくるメールアドレスを登録します。
「alerts-emg@mail.yahoo.co.jp」
メールにはID情報などが含まれているため、メールの件名をツイートします。

Tweetをトリガーに設定

トリガー(this)に自分のTweetを受信した際をトリガーとします。「New tweet by you」のトリガーを選択します。

アクション

IFTTTのWebhooksよりRaspberry PiのWEB APIへPUSH通知

IFTTT(イフト)でWebhooksの利用

  • URL:準備したAPIのURLを指定します。外部からWEBアクセス可能なURLを指定する必要があります。また、APIトークンを送信するので、https:// での指定を強くオススメします。
  • Method:今回は、POST受信に対応したPHPを用いるので、POSTを指定します。
  • Content Type:application/x-www-form-urlencoded: キーと値は、その間に '=' がある形でキーと値の組になり、 '&' で区切られてエンコードされます。キーや値の英数字以外の文字は、パーセントエンコーディングされます。
  • Body:準備したPHPの仕様に合わせて、3つのパラメータを設定します。
    • APIKEY=apikey
    • KEY=Weather
    • text=" {{Text}}"

以下が、準備したサンプルのPHPスクリプトとなります。

アクション1

LINE送信のアクションを設定します。すでに、他ユースケースなどでIFTTT側にLINE送信のレシピを導入されている方は、アクション2の定義に進んで下さい。

アクション1:トリガー

アクセスキーなどの初期設定値は、IFTTTより取得して下さい。

IFTTT(イフト)でWebhooksの利用

アクション1:IFTTTでのトリガー


Webhooksを{event}:pushLINEで設定します。

アクション1:アクション


LINE送信のアクションを定義します。
Recipientでラインの送付先を指定します。すでに作成しているLINEのグループにも送信することが出来ます。
Message部分は、自由に変更出来ます。今回は、PHPより2つの引数を渡しているので、2つの引数をMessageに入れております。pushLine('【テスト】',$text);

アクション2

Google Home Notifier経由で、Google Homeからアナウンスを流します。「google-home-notifier」導入

時間判定について checkTime関数

対象時間の開始と終了を指定して、true, falseを戻り値とする関数を準備しました。
日付を跨る設定などは考慮しておりません。

checkTime('6:00','23:00')とすれば、朝6時から夜23時まで「True」となります。
このチェック関数を用いて、Google Homeのアナウンス対象時間か否かを確認しています。

 

Use Case(ユースケース)

Google音声コマンド経由で別のGoogle Homeデバイスにメッセージ送信を行います。(Google Home Notifier経由)

前提条件

  • (Raspberry Piの)Google Home Notifier導入が終わっている「google-home-notifier」導入
  • (Raspberry Piの)PHPが動作するWEBサーバがセットアップされている
  • (Raspberry Piの)WEBサーバの公開設定が終わっている
  • IFTTTサービスの利用登録が実施済みである
  • IFTTTサービスにおいて、Webhooksが利用可能である IFTTT(イフト)でWebhooksの利用

全体の流れ

  1. IFTTTのGoogle Assistantより指定スピーカーへの音声コマンドをトリガートリガー登録
  2. IFTTTのWebhooksでPCシャットダウン時の音声コマンド受領時のアクションを実行(Raspberry PiのWEB APIへ発信)
  3. Google Homeスピーカーでアナウンス(Google Home Notifier経由)

トリガー

トリガー(this)にGoogle Assistantを選択し「Say a phrase with a text ingredient」のトリガーを選択します。これで、コマンドに加えて、不定形のテキストメッセージを追加出来ます。

音声コマンドを登録します。
「リビングにアナウンス $」
「リビングに連絡 $」などを登録します。
$部分が、不定形のテキスト部分となります。

コマンド受付時のGoogle Homeからのレスポンスも登録します。
「リビングにアナウンスします」

Lanuguage(言語)は、Japanese(日本語)を選択します。

アクション

IFTTTのWebhooksよりRaspberry PiのWEB APIへPUSH通知

IFTTT(イフト)でWebhooksの利用

  • URL:準備したAPIのURLを指定します。外部からWEBアクセス可能なURLを指定する必要があります。また、APIトークンを送信するので、https:// での指定を強くオススメします。
  • Method:今回は、POST受信に対応したPHPを用いるので、POSTを指定します。
  • Content Type:application/x-www-form-urlencoded: キーと値は、その間に '=' がある形でキーと値の組になり、 '&' で区切られてエンコードされます。キーや値の英数字以外の文字は、パーセントエンコーディングされます。
  • Body:準備したPHPの仕様に合わせて、3つのパラメータを設定します。
    • APIKEY=apikey
    • KEY=ExecAnnounce1 3台のスピーカーがあり、リビングを1としています。ExecAnnounce2を子供1、ExecAnnounce3を子供2としているので、それぞれ別のレシピとして登録します。
    • text={{TextField}} 不定形テキスト「$」部分となります。

以下が、準備したサンプルのPHPスクリプトとなります。

アクション

準備したPHPファイルより「@GOOGLE_HOME_1@ http://192.168.0.200:9081 などgoogle home notifier向けのURL」に設定したgoogle home notifier経由で対象スピーカーよりアナウンスを実施します。
夜間に音を出したくないので、checkTime($startTime, $endTime)関数を用いて、実行時の時間を確認しています。

Use Case(ユースケース)

ツイッターで電車の運行情報をトリガーとして、LINEに通知および、トリガー発生時間(日中)を判定しGoogle Homeスピーカーで雨が降り出す旨のアナウンスを実行します。Google Homeスピーカーは就寝時間などには音声を出させたくないので、時間判定を入れました。

前提条件

  • (Raspberry Piの)Google Home Notifier導入が終わっている「google-home-notifier」導入
  • (Raspberry Piの)PHPが動作するWEBサーバがセットアップされている
  • (Raspberry Piの)WEBサーバの公開設定が終わっている
  • IFTTTサービスの利用登録が実施済みである
  • IFTTTサービスにおいて、Webhooksが利用可能である IFTTT(イフト)でWebhooksの利用
  • IFTTTサービスにおいて、LINE Notifyの利用設定を実施している
  • IFTTTサービスにおいて、Twitterの利用設定を実施している

全体の流れ

  1. IFTTTのTwitterサービスで列車遅延情報をトリガー
  2. IFTTTのWebhooksで列車遅延情報取得時のアクションを実行(Raspberry PiのWEB APIへ発信)
  3. WEB APIよりLINEへメッセージ送信
  4. Google Homeスピーカーでアナウンス(Google Home Notifier経由)

トリガー

トリガー(this)にTwitterを選択します。

Twitterサービスには、多くのトリガーが準備されています。ここでは、New tweet from search(ツイートの検索)をトリガーとしています。

Twitterで検索するSearchワードを登録します。
「From:JRE_F_Tokaido 東海道線:『遅延』」
この例では、JR東海の東海道線に関するツイートより、更に東海道線の遅延情報に絞ってトリガーとして登録しています。

アクション

IFTTTのWebhooksよりRaspberry PiのWEB APIへPUSH通知

IFTTT(イフト)でWebhooksの利用

  • URL:準備したAPIのURLを指定します。外部からWEBアクセス可能なURLを指定する必要があります。また、APIトークンを送信するので、https:// での指定を強くオススメします。
  • Method:今回は、POST受信に対応したPHPを用いるので、POSTを指定します。
  • Content Type:application/x-www-form-urlencoded: キーと値は、その間に '=' がある形でキーと値の組になり、 '&' で区切られてエンコードされます。キーや値の英数字以外の文字は、パーセントエンコーディングされます。
  • Body:準備したPHPの仕様に合わせて、3つのパラメータを設定します。
    • APIKEY=apikey
    • KEY=TransportationInfo
    • text={{Text}}

以下が、準備したサンプルのPHPスクリプトとなります。

ここでのポイントは、ツイート内容からハッシュタグ以降のURLリンクなどを切り取っている部分です。Twitterから取得したメッセージを、LINE送信やアナウンスに必要な部分に切り取って、次の処理に渡すとGoogle Homeからのアナウンスなどがスマートになります。

アクション1

LINE送信のアクションを設定します。すでに、他ユースケースなどでIFTTT側にLINE送信のレシピを導入されている方は、アクション2の定義に進んで下さい。

アクション1:トリガー

アクセスキーなどの初期設定値は、IFTTTより取得して下さい。

IFTTT(イフト)でWebhooksの利用

アクション1:IFTTTでのトリガー


Webhooksを{event}:pushLINEで設定します。

アクション1:アクション


LINE送信のアクションを定義します。
Recipientでラインの送付先を指定します。すでに作成しているLINEのグループにも送信することが出来ます。
Message部分は、自由に変更出来ます。今回は、PHPより2つの引数を渡しているので、2つの引数をMessageに入れております。pushLine('【テスト】',$text);

アクション2

Google Home Notifier経由で、Google Homeからアナウンスを流します。「google-home-notifier」導入

時間判定について checkTime関数

対象時間の開始と終了を指定して、true, falseを戻り値とする関数を準備しました。
日付を跨る設定などは考慮しておりません。

checkTime('6:00','23:00')とすれば、朝6時から夜23時まで「True」となります。
このチェック関数を用いて、Google Homeのアナウンス対象時間か否かを確認しています。

 

LINE通知のみはこちら

Use Case(ユースケース)

Nature Remoの室温室温センサーが30℃を超えた時点で、LINEに通知およびPCのシャットダウンを行う。

前提条件

  • Nature Remoがセットアップ済み
  • (Raspberry Piの)PHPが動作するWEBサーバがセットアップされている
  • (Raspberry Piの)WEBサーバの公開設定が終わっている
  • IFTTTサービスの利用登録が実施済みである
  • IFTTTサービスにおいて、Webhooksが利用可能である IFTTT(イフト)でWebhooksの利用
  • IFTTTサービスにおいて、LINE Notifyの利用設定を実施している
  • シャットダウン対象のPCにSSHサーバがインストールされている必要があります Raspberry Pi 3 B +にPHPのSSH2インストール

全体の流れ

  1. IFTTTのNature Remoより室温30℃以上をトリガートリガー登録
  2. IFTTTのWebhooksで天候変化時のアクションを実行(Raspberry PiのWEB APIへ発信)
  3. WEB APIよりLINEへメッセージ送信
  4. WEB APIよりPCをシャットダウン(SSH2経由でシャットコマンドを実行)

トリガー

トリガー(this)にNature Remoをを選択し「Temperature rises above」(室温上昇)のトリガーを選択します。
トリガーは以下が準備されております。

  • Temperature rises above : 室温上昇
  • Temperature drops below : 室温低下
  • Humidity rises above : 湿度上昇
  • Humidity drops below : 湿度低下
  • Becomes brighter : 部屋の照度上昇
  • Becomes darker : 部屋の照度低下

対象のNature Remoデバイスを選択

what value でトリガー対象の室温を設定します。今回は、30℃を指定しています。

アクション

IFTTTのWebhooksよりRaspberry PiのWEB APIへPUSH通知

IFTTT(イフト)でWebhooksの利用

  • URL:準備したAPIのURLを指定します。外部からWEBアクセス可能なURLを指定する必要があります。また、APIトークンを送信するので、https:// での指定を強くオススメします。
  • Method:今回は、POST受信に対応したPHPを用いるので、POSTを指定します。
  • Content Type:application/x-www-form-urlencoded: キーと値は、その間に '=' がある形でキーと値の組になり、 '&' で区切られてエンコードされます。キーや値の英数字以外の文字は、パーセントエンコーディングされます。
  • Body:準備したPHPの仕様に合わせて、3つのパラメータを設定します。
    • APIKEY=apikey
    • KEY=Weather
    • text="室温が{{ThresholdValue}}を超えます。現在の {{CreatedAt}}の室温は、 {{Value}}です。"

以下が、準備したサンプルのPHPスクリプトとなります。

アクション1

LINE送信のアクションを設定します。すでに、他ユースケースなどでIFTTT側にLINE送信のレシピを導入されている方は、アクション2の定義に進んで下さい。

アクション1:トリガー

アクセスキーなどの初期設定値は、IFTTTより取得して下さい。

IFTTT(イフト)でWebhooksの利用

アクション1:IFTTTでのトリガー


Webhooksを{event}:pushLINEで設定します。

アクション1:アクション


LINE送信のアクションを定義します。
Recipientでラインの送付先を指定します。すでに作成しているLINEのグループにも送信することが出来ます。

アクション2

準備したPHPファイルより「@WINDOWS_IP@:WindowsのIPアドレス、 @WINDOWS_USER@:Windowsのユーザー名、@WINDOWS_PASS@:Windowsのパスワード 」に設定したPCへSSH2用いてPCへログインし、シャットダウンコマンドを実行します。

Use Case(ユースケース)

Google音声コマンド経由でPCのシャットダウンを行います。

前提条件

全体の流れ

  1. IFTTTのGoogle AssistantよりPCシャットダウン時の音声コマンドをトリガートリガー登録
  2. IFTTTのWebhooksでPCシャットダウン時の音声コマンド受領時のアクションを実行(Raspberry PiのWEB APIへ発信)
  3. WEB APIよりPCをシャットダウン(SSH2経由でシャットコマンドを実行)

トリガー

トリガー(this)にGoogle Assistantを選択し「Say a simple phrase」のトリガーを選択します。

音声コマンドを登録します。
「パソコンをシャットダウンして」
「パソコンの電源を切って」などを登録します。

コマンド受付時のGoogle Homeからのレスポンスも登録します。
「パソコンをシャットダウンします」

Lanuguage(言語)は、Japanese(日本語)を選択します。

アクション

IFTTTのWebhooksよりRaspberry PiのWEB APIへPUSH通知

IFTTT(イフト)でWebhooksの利用

  • URL:準備したAPIのURLを指定します。外部からWEBアクセス可能なURLを指定する必要があります。また、APIトークンを送信するので、https:// での指定を強くオススメします。
  • Method:今回は、POST受信に対応したPHPを用いるので、POSTを指定します。
  • Content Type:application/x-www-form-urlencoded: キーと値は、その間に '=' がある形でキーと値の組になり、 '&' で区切られてエンコードされます。キーや値の英数字以外の文字は、パーセントエンコーディングされます。
  • Body:準備したPHPの仕様に合わせて、3つのパラメータを設定します。
    • APIKEY=apikey
    • KEY=shutdownPC

以下が、準備したサンプルのPHPスクリプトとなります。

アクション

準備したPHPファイルより「@WINDOWS_IP@:WindowsのIPアドレス、 @WINDOWS_USER@:Windowsのユーザー名、@WINDOWS_PASS@:Windowsのパスワード 」に設定したPCへSSH2用いてPCへログインし、シャットダウンコマンドを実行します。

 

Use Case(ユースケース)

Nature Remoの室温室温センサーが30℃を超えた時点で、LINEに通知する。

前提条件

  • Nature Remoがセットアップ済み
  • IFTTTサービスの利用登録が実施済みである
  • IFTTTサービスよりLINEが利用可能であること

全体の流れ

  1. IFTTTのNature Remoより室温30℃以上をトリガートリガー登録
  2. IFTTTのLINEでメッセージを送信

トリガー

トリガー(this)にNature Remoをを選択し「Temperature rises above」(室温上昇)のトリガーを選択します。
トリガーは以下が準備されております。

  • Temperature rises above : 室温上昇
  • Temperature drops below : 室温低下
  • Humidity rises above : 湿度上昇
  • Humidity drops below : 湿度低下
  • Becomes brighter : 部屋の照度上昇
  • Becomes darker : 部屋の照度低下

対象のNature Remoデバイスを選択

what value でトリガー対象の室温を設定します。今回は、30℃を指定しています。

アクション

IFTTTよりLINEへメッセージ送信。
「室温が30℃よりも上昇しました。現在のNature Remoデバイスの室温は○℃です。」
というメッセージが送付されます。メッセージ部分は、自由に変更出来ます。

今回は、PHPやWebhooksなしのユースケースでした。

Use Case(ユースケース)

Weather Undergroundサービスを用いて、天候変化をトリガーとします。
天候が「Rain(雨)」に変化した際に、Webhooks経由でトリガーを受け、LINEに通知および、トリガー発生時間(日中)を判定しGoogle Homeスピーカーで雨が降り出す旨のアナウンスを実行します。Google Homeスピーカーは就寝時間などには音声を出させたくないので、時間判定を入れました。

前提条件

全体の流れ

  1. IFTTTのWeather Undergroundサービスで天候変化「Rain」をトリガー
  2. IFTTTのWebhooksで天候変化時のアクションを実行(Raspberry PiのWEB APIへ発信)
  3. WEB APIよりLINEへメッセージ送信
  4. Google Homeスピーカーでアナウンス(Google Home Notifier経由)

トリガー

トリガー(this)にWeather Undergroundを選択します。

今日の天気レポート、明日の天気レポート、気温変化などたくさんのトリガーが準備されています。今回は、「Current condition chages to」気象条件の変化を選択します。

どの状態に変化した際のトリガーにするかを選択します。「Rain(雨)」「Snow(雪)」「Cloudy(くもり)」「Clear(晴れ)」より「Rain(雨)」を選びます。

また、ターゲットとするロケーションを地図または住所で指定し、天候変化のトリガーとしたい地点の選択を行います。

アクション

IFTTTのWebhooksよりRaspberry PiのWEB APIへPUSH通知

IFTTT(イフト)でWebhooksの利用

  • URL:準備したAPIのURLを指定します。外部からWEBアクセス可能なURLを指定する必要があります。また、APIトークンを送信するので、https:// での指定を強くオススメします。
  • Method:今回は、POST受信に対応したPHPを用いるので、POSTを指定します。
  • Content Type:application/x-www-form-urlencoded: キーと値は、その間に '=' がある形でキーと値の組になり、 '&' で区切られてエンコードされます。キーや値の英数字以外の文字は、パーセントエンコーディングされます。
  • Body:準備したPHPの仕様に合わせて、3つのパラメータを設定します。
    • APIKEY=apikey
    • KEY=Weather
    • text=" {{CheckTime}}確認、雨が降り出しそうです。"

以下が、準備したサンプルのPHPスクリプトとなります。

アクション1

LINE送信のアクションを設定します。すでに、他ユースケースなどでIFTTT側にLINE送信のレシピを導入されている方は、アクション2の定義に進んで下さい。

アクション1:トリガー

アクセスキーなどの初期設定値は、IFTTTより取得して下さい。

IFTTT(イフト)でWebhooksの利用

アクション1:IFTTTでのトリガー


Webhooksを{event}:pushLINEで設定します。

アクション1:アクション


LINE送信のアクションを定義します。
Recipientでラインの送付先を指定します。すでに作成しているLINEのグループにも送信することが出来ます。
Message部分は、自由に変更出来ます。今回は、PHPより2つの引数を渡しているので、2つの引数をMessageに入れております。pushLine('【テスト】',$text);

アクション2

Google Home Notifier経由で、Google Homeからアナウンスを流します。「google-home-notifier」導入

時間判定について checkTime関数

対象時間の開始と終了を指定して、true, falseを戻り値とする関数を準備しました。
日付を跨る設定などは考慮しておりません。

checkTime('6:00','23:00')とすれば、朝6時から夜23時まで「True」となります。
このチェック関数を用いて、Google Homeのアナウンス対象時間か否かを確認しています。