何とか鍵を持たずスマホだけでエントランスから自室までの解錠したい!!という個人的欲求を年末年始で解決してみた。自宅マンションのオートロックは通常通りにエントランスから鍵を使うか、インターホンで部屋番号を呼び出し、自室から「解錠」ボタンを押さないと開かない。これをSwitcBotというスイッチガジェットをベースに考案。別途4000円ほどで専用ハブを購入すればwifi接続して外部からでも操作できるみたいですが、ここをできるだけ自力IoTしてみます。今回は以前から持っていたもののなかなか触る機会がなかったので改めてセットアップ。初期セットアップなどはいろんな所で紹介されているのでそちらを参考に。最低限としてOSにはRaspbianを入れてメインPCからSSH接続できるように設定。今回は安定して外部からの接続ができるようにwifiではなくLANケーブルを直接繋げてます。Transportの略で、publish/subscribeモデルという仕組みに基づいてつくられた軽量なメッセージプロトコルです。ネットワークをベースに作られています。今回はこのMQTTを利用できるサービスを利用します。New」ボタンをクリック。Channel」ボタンで新規作成します。リソース項目数などは後から編集はできないので、オートロック解除の仕様上、インターホンの応答ボタンを押さないと解錠ボタンが効かない様なパターンもあるので、それぞれの動作に複数の操作(スイッチ)が必要な場合はそれぞれ用にリソース数も設定が必要です。作成したチャンネルは右メニューの「Console」からテスト送信ができます。ラズパイからメイン処理でBeebotteへリクエストをするためのBeebotteの証明書をダウンロードしておきます。続いてスマートスピーカーへのトリガーの設定ですが、こちらは有名なIFTTTを利用します。IFTTTアプレットの新規作成わかりにくいですが、画像の「+」をクリックして新規アプレットを作成します。Thisの作成まずは"コレ"から"ソレ"の部分の"コレ"を設定します。phrase」をクリック。次は"コレ"から"ソレ"の部分の"ソレ"を設定します。request」をクリック。Homeアプリで設定してあるデバイス情報がアプレット作成後に自動で入ると思います。GoogleHomeで設定済みのbody設定例{"data":[{"room":"living","device":"release","action":"on"}]}アプレット名をわかりやすい名前に変更してFinishをクリックするとアプレットが作成されます。これでIFTTTを経由して"This"(GoogleHomeへの音声命令)から"That"(Beebotteへの外部リクエスト)が開通して、自宅のラズパイにリクエストを送る準備ができました。ラズパイのメイン処理ファイルを作成いよいよラズパイで動作させるメイン処理です。ラズパイ本体をディスプレイに繋いでターミナルアプリを起動するか、メインPCからSSH接続してファイルを作成します。各パッケージのインストール※ラズパイ上のpythonはデフォで2系のため、pyenv経由で3系を入れてる前提です。python3系でBluetoothを使うのに必要なパッケージを入れます。上記設定が完了したら実際にSwitchBotのボタンが押されるか確認してみます。PressMACアドレスはSwitchBotアプリのスイッチ一覧から歯車マークで各デバイス情報の右上アイコンの情報ページに記されています。主な変更点はトークン情報とSwitchBot本体のMACアドレス部分です。各ファイルディレクトリは"/usr/local/lib/switchbot/"をベースに置いていきます。事前にダウンロードしたBeebotteの証明書も同ディレクトリ内に置いておきます。fork()このファイルを実際に動かしてswitchbotが動けば準備はほぼ完了です。ラズパイにサービス登録設定ほぼ完了ではありますが、現状ではファイルをいちいち実行しないと動かないので一例の処理をサービスとして登録して、ラズパイを起動したらそのままサービスも起動する様に設定します。switchbotenabledもしエラーが出る場合はラズパイを再起動したり、サービスファイルのPIDFileパスの権限を変更するなど試してみてください。自分の場合は一度PIDFileの行をコメントアウトしたらエラーが出なくなったので、その後修正しました。後編では室外からでも操作できるようにします。