メインコンテンツまでスキップ

「ifttt」タグの記事が3件件あります

全てのタグを見る

· 約3分
moritalous
お知らせ

過去にQiitaに投稿した内容のアーカイブです。

ESP32-DevKitCでAmazon Dashボタンもどきを作ります。 C言語はわからないのでMicroPythonです。 簡単です。

準備

ESP32-DevKitC IFTTTアカウントとWebhookをトリガーとしたアプレット

開発環境

Windows 10 Visual Studio Code Putty Python 3.7(ストア版)

開発環境構築

Pythonの仮想環境作成

python -m venv .venv
.venv\Scripts\activate

ライブラリー導入

pip install esptool adafruit-ampy

ESP32にMicroPythonファームの導入

http://micropython.org/download#esp32 からファームウェアをダンロードします。 (2019/12/29の最新版はesp32-idf3-20191220-v1.12.bin)

esptool --port COM4 erase_flash
esptool --chip esp32 --port COM4 write_flash -z 0x1000 esp32-idf3-20191220-v1.12.bin

COM4は環境に合わせて修正します。

これでMicroPythonのファームウェアが導入でき、シリアル接続をすると対話インタプリタモード(REPL)でMicroPythonがESP32上で実行できます。

Puttyで接続する場合はCOM4ポートにSpeed115200を指定し、シリアル接続します。

コメント 2019-12-29 143339.png

Dashボタンプログラムの導入

MicroPythonはREPLで実行もできますが、ソースコードをESP32側に導入することでも実行できます。boot.pymain.pyというファイルが標準で用意されていて、boot.pyのあとでmain.pyが呼ばれる仕組みのようです。 main.pyを書き換えます。

main.py
wifi_ssid = '[Wi-Fi SSID]'
wifi_password = '[Wi-Fi パスワード]'
get_url = '[IFTTTのWebhook URL]'

def do_connect():
import network
sta_if = network.WLAN(network.STA_IF)
if not sta_if.isconnected():
print('connecting to network...')
sta_if.active(True)
sta_if.connect(wifi_ssid, wifi_password)
while not sta_if.isconnected():
pass
print('network config:', sta_if.ifconfig())

try:
do_connect()

import urequests
r = urequests.get(get_url)
finally:
pass

import machine
print('deepsleeping..')
machine.deepsleep()

IFTTTのWebhookは予め準備しておいてください。 処理の流れとしては

  1. 電源が入る
  2. Wi-Fi接続
  3. IFTTTにリクエスト送信
  4. ディープスリープに入る

となってます。

肝心のDASHボタンのボタンは、基板上に用意されているENボタンを使います。 ボタンが押されたらリセットし、頭から処理をするだけです。処理が終わったらディープスリープに入って省電力モードに入るとうわけです。

簡単!

電池の持ちは実験してみようと思います。

· 約3分
moritalous
お知らせ

過去にQiitaに投稿した内容のアーカイブです。

我が子の小学校で、「ツイタもん」が導入されました。

児童見守り安心システム ツイタもん https://tsuitamon.jp/

学校の門を通ると、「ツイタもん」とメールが来ます。 今どきなサービスですが、毎日メールが来ると、そのうち気にしなくなりそうです。 そこで、万が一、門を通ってないときだけ「ツイテないもん」と連絡が来る仕組みを考えました。

仕組み

仕組みとしては、子供が学校に行くまでの時間に、 「ツイテないもん」通知を行うスケジュール を有効にし、「ツイタもん」メールが来たらこの 「ツイテないもん」通知を行うスケジュール を無効にします。 学校についたら、スケジュールはキャンセルされて通知は実行されず、学校についてなければ、通知スケジュールに従って通知されるわけです。

これをIFTTTとAWSのLambdaやCloudWatch Eventsを組み合わせて実現します。

構成

全体構成

ツイテないもん.png

学校についた場合

ツイテないもん-ついた場合.png

学校についてない場合

ツイテないもん-ついてない場合.png

Lambdaの処理

CloudWatch Eventsを無効にするLambda

超適当 CloudWatch Eventsのイベント名は環境変数にセットしました。 無効ではなく有効にする場合はdisable_ruleenable_ruleになります。

import os
import boto3

def lambda_handler(event, context):
# TODO implement
event_name = os.environ.get("EVENT_NAME")

client = boto3.client('events')

response = client.disable_rule(
Name=event_name
)

return response

ツイテないもん通知を行うLambda

超適当

import requests
import os

def lambda_handler(event, context):
requests.post(os.environ.get("REQUEST_URL"))
return 'Hello from Lambda'

· 約6分
moritalous
お知らせ

過去にQiitaに投稿した内容のアーカイブです。

スマートホーム楽しいですね。

  1. Echo Dot購入
  2. 「天気が聞ける目覚まし」だともったいない
  3. 家電を操作したい
  4. できた!感動!!
  5. さらにスマホのAlexaアプリで外からも操作できる!!!
  6. でもAlexaアプリが使いにくい⤵⤵⤵
  7. Googleアシスタントでもできるようにしよう!!!!

ここまで来ました。

Echoからの家電操作

Echoからの家電操作は以下の投稿が参考になると思います。 Node-REDがキモです。初代Raspberry Piでも問題なく動作します。

Raspberry Pi での Node-RED 利用 https://qiita.com/minatomirai21/items/184e04bab76bee70470e

ラズベリー・パイ専用 学習リモコン基板 ADRSIRを動かす(AlexaやNode-REDも使って) https://qiita.com/michan06/items/08514e8e67960e45ff69

Amazon Echoで「○○をつけて」と言って家電を操作する https://qiita.com/machu/items/122c8403b35748bd5f4c

Amazon Echoとラズパイで、音声で照明をon/offする https://qiita.com/kikuzo/items/753b5065dde9633bda18

irMagician + Node-RED + Amazon Echo (互換機) - 設定編 https://qiita.com/ooo_6502/items/da30035e41b3dbe5391b

Googleアシスタントからの家電操作

さて、Googleアシスタントを使った家電操作について調べたところ、大きく2つの方法が見つかりました。

  • Raspberry PiをWebサーバーにしてDDNSで公開
  • Beebotteというサービスを使う

Google HomeでRaspberry Piを経由してリモコンをコントロールする https://qiita.com/from_Unknown/items/5cf452cbf0ca74c4248a

IFTTT から Raspberry Pi に指示を出す https://qiita.com/minatomirai21/items/4c4e777b43ede1e42900

LINEをトリガーに家のGoogleHomeを喋らせる https://qiita.com/ktetsuo/items/5cd3cc72f18fa885affd

ポートの開放することなく、Respberry Piに外からアクセスすると投稿している以上、ポートを開放しない縛りでいきたいのと、単純に模倣するだけでは面白くないのでBeebotteを使わずTwitterを使うことにしました。

仕組み

スマートホーム (2).png

No説明番号
1Googleアシスタントに「テレビつけて」と言う
2Googleアシスタントで「テレビつけて」を受けたら、Twitterに「テレビつけて」とツイートする②③
3Node-REDでTwitterを監視。自分のアカウントが「テレビをつけて」とつぶやいたら家電操作④⑤

簡単!ノンプログラミング!サーバーレス!マイクロサービス!

IFTTTの設定

トリガーにGoogleアシスタント、アクションにTwitterを設定したのですが、一つ問題が発生しました。 Twitterの制限で同じ内容のツイートは1回しか呟けないようです。 そこで末尾にタイムスタンプをつけて回避します。

トリガーがGoogleアシスタントのときには{{CreatedAt}}というパラメーターを付与できるのですが上手くいかなかったので以下のようにして回避しました。

Noトリガーアクション
1Googleアシスタントに「テレビつけて」Webリクエストで次のNo.2を呼ぶ
2WebhookでNo.1のリクエストを受けるTwitterに「テレビつけて{{OccurredAt}}」とツイート

Node-REDの設定

Twitter in ノードを使うことで、特定のユーザーのツイートを監視することができます。ツイートをトリガーにして、フローを作っていきます。

スクリーンショット (288).png

スクリーンショット (289).png

switchで「テレビつけて」が含まれるものだけにフィルターをかけ、execノードでテレビを付けるスクリプトを実行します。

スクリーンショット (290).png

スクリプトだけは自力で作りました。 スクリプト実行後は、「つけました」と呟くもいいですし、更にIFTTTのWebhookにリクエストするなど、もう、なんでもできます。

終わりに

ポートの開放もないですし、各サービスのアカウントを乗っ取られない限り、 比較的セキュリティも確保できるのではないでしょうか?

注意点としてはTwitterのアカウントを専用に用意しツイートを非公開にすることをオススメします。そうしないと「テレビ消します」=外出中がバレてしまいますので。

ちょっとタイムラグはありますが、実用的です。

番外編

私の朝食は食パンですが、よく買い忘れます。 上で紹介した仕組みを改良して、食パンがないときにスマホに通知が来るようにしました。 もうスマートホームではありません。スマート食パンです。

Noトリガー&アクションサービス
1家の近くのコンビニに近づいたら、Twitterに「食パンある?」と呟くIFTTT + Android Location
2Twitterの「食パンある?」つぶやきを監視し、HC-SR04(超音波距離センサー)で食パンとの距離を計測。30cm以上だったら「食パンなし」とするRaspberry Pi + HC-SR04
3食パンがないときは、Webhookを呼ぶIFTTT + Webhook
4Webhookを受けたらLINE Notifyで「食パンないよ」と通知IFTTT + LINE Notify
5食パン買い忘れない!!

スクリーンショット (292).png

次は冷蔵庫の中監視したいな。。