Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

191030 anna-with-python

241 visualizaciones

Publicado el

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

Publicado en: Viajes
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

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

×