Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

191030 anna-with-python

219 views

Published on

アンナほえたワン with Python
2019年10月30日
西本卓也(株式会社シュアルタ)
すごい広島 with Python

Published in: Travel
  • Be the first to comment

  • Be the first to like this

191030 anna-with-python

  1. 1. アンナほえたワン with Python 2019-10-30 西本 卓也(株式会社シュアルタ) @nishimotz / @24motz 1
  2. 2. 音センサー + IchigoSoda + sakura.io 2
  3. 3. アンナほえたワン(2019年6月) 3
  4. 4. システム構成(バージョン1) 4 IchigoSoda 音センサー sakura.io (DataStore API) ifttt Slack Python つかってません 5分間にほえた回数が 2回以上の場合に回数を通知 IchigoJam BASIC で実装
  5. 5. 問題点 • ifttt で「ほえた回数」をペイロードから取り出していない • イベントを記録していない 5
  6. 6. システム構成(バージョン2) 6 IchigoSoda 音センサー sakura.io (MQTT) IoT Core Slack DynamoDB Lambda (Python) Lambda (node.js) AWS
  7. 7. sakura.io から AWS IoT まで • 公式チュートリアル • https://sakura.io/docs/pages/guide/tutorial/service/aws.html • エンドポイント URL や証明書は AWS IoT Core で作る 7
  8. 8. AWS IoT から DynamoDB まで • 参考 • https://qiita.com/Ichiro_Tsuji/items/3815f2b683336e7088f4 • 流れ • DynamoDB テーブルを作成 • Lambda を作成 • Lambda にルールを作成 • IoT のルールで起動 • DynamoDB に書き込む • node.js のコードをコピペする • まだ Python 使ってない 8
  9. 9. DynamoDB テーブル作成 • datetime をパーティションキーにする • channel-0 に受信した値が入る 9
  10. 10. Lambda (1個目)のトリガー • ルールクエリステートメント: SELECT * FROM 'sakuraio/#' 10
  11. 11. データが書き込まれる 11
  12. 12. DynamoDB ストリーム • 項目が書き込まれたら別の Lambda をトリガーできる • https://docs.aws.amazon.com/lambda/latest/dg/with-ddb.html 12
  13. 13. domovoi 13
  14. 14. 使い方は chalice そっくり $ domovoi new-project New Domovoi project name: ichigosoda New Domovoi project created in ichigosoda $ cd ichigosoda $ domovoi deploy 14
  15. 15. policy-dev.json に追加 { "Action": [ "dynamodb:DescribeStream", "dynamodb:GetRecords", "dynamodb:GetShardIterator", "dynamodb:ListStreams" ], "Resource": [ "arn:aws:dynamodb:*:*:*" ], "Effect": "Allow" } 15
  16. 16. app.py @app.dynamodb_stream_handler(table_name="IchigoSoda190925", batch_size=200 ) def handle_dynamodb_stream(event, context): first_event = event["Records"][0]["dynamodb"] new_image = first_event.get('NewImage') if not new_image: return channel_0 = new_image.get('channel-0') if not channel_0: return value = channel_0.get('N') if value is None: return slack.notify(text=f'アンナ {value} 回ほえたワン') 16
  17. 17. Slack カスタムインテグレーション • Incoming Webhook から WEBHOOK_URL を取得 17
  18. 18. Slack 投稿 import slackweb slack = slackweb.Slack(url=WEBHOOK_URL) 18
  19. 19. Ver 1 と Ver 2 19
  20. 20. まとめ • 回数がわかると状況がよくわかる • 3回ほえたワン • 93回ほえたワン • 今後の方針 • Lambda は2個必要なのか • 履歴の可視化 • モバイルネットワークやめて WiFi にする • RasPi で Python か • ESPxx で MicroPython か • ほえるタイミングの予測 20

×