苦しんで実現するホームオートメーション - あるいは、HTTP経由でHIDを操作する話 https://h.s64.jp/entry/ble-hid-keyboard-over-http-using-esp32
苦しんで実現するホームオートメーションあるいは、HTTP経由でHIDを操作する話システムライトニングトーク! at VOYAGE GROUP
View Slide
自宅の紹介交流会ということで、趣味の話をします
DemoSlack経由でオートロックが開くhttp://bit.ly/2MiFTuOエアコン点いたり、照明点いたり、カーテン開いたりも
自己紹介@shuma_yoshioka● ホームオートメーションが趣味● フリーランス● 株式会社fluctのAndroid向けSDKなどをお手伝い中● あと高校でプログラミング教えたりも
テレビをSlackから操作しようとした話
なぜSlack経由で操作したい?● アプリやジョブの管理を一箇所にまとめたい● 客人にも権限渡しやすい● Audit Logにもなる
前提● PIX-SMB400というチューナ搭載Android TV● 音声アシスタント操作機能はある● Play Storeもある● adb接続もできる● = アプリ作って入れることもできる
アイデア1: アプリ作って外からイベント発火● Android TVなので● 王道ルート でもコレはNGです
アプリNGの理由1: バックグランド処理● Android 8.0 Oreo から厳しくなった● アイドル状態のアプリは基本ダメ● 暗黙的ブロードキャストも同様
アプリNGの理由2: FCM● Firebase Cloud Messaging● AndroidでイベントPushといえばコレ● foregroundならロジックまで届く● backgroundだと通知トレイまでのみ● そしてTVには通知トレイが無い!
どうしよう...
あ、
リモコン作ればよくね?
アイデア2: リモコンを作る● 要はBluetoothのコントローラ● KeyEventを発火させればよい● 物理ボタンなくても、直でBLE叩けばよさそう
PCから操作できる無線キーボード
つくってみた
構成HTTP経由のリクエストをブリッジするバックエンドとBLEでキーボードを再現し入力するマイコン用プログラム
マイコン● ESP32系の開発ボードで動く● BLEでHIDキーボードを再現する● バックエンドへWebSocketで接続● イベントが降ってきたらBLE経由でキーを流す
バックエンド● Scala on Play Framework● POSTでkeycodeを受け取る● keycodeが来たらWebSocketでマイコンへ流す
とってもシンプル
DemoSlackで特定のキーワードが出たらWebHook扱いでバックエンドを叩くhttp://bit.ly/2S37Hsx
私はこれで● 朝起きれるようになりました● リモコンを無くしても困らなくなりました● リモコンの場所がわからなくなりました
まだまだ課題山積● エラー処理, メモリまわりの処理が不足している● 長時間放置すると動かなくなる● 再接続時に反応しない● etc...
鋭意開発中です
今回のおもちゃはこちらgithub.com/S64/hidremo
実は● adbコマンドでkeycode送れる● 宅内にサーバ置こう