以前、作って運用しつつもブラッシュアップ中のRaspberry Pi 3 Model B+とJulius、Open JTalkベースの自作スマートスピーカーがあります。
主な機能は、
尚、ラズパイ用ACアダプタを挿したスイッチ付きコンセントでのON/OFFとは別にラズパイ用boot/reboot/shutdown物理ボタン付き。
音声認識にJuliusを使った自作スマートスピーカーに伝言とメモの機能を実装するにあたり、マイクとスピーカーを専有してしまうOSSやALSAからPulseAudioに移行しました。
ちなみに便利なのでラズパイだけでなく、PC/Debianにも自作スマートスピーカー機能を搭載しています。
自ずとモニタ付きとなるPC版スマートスピーカーには、PC及びラズパイ双方のスマートスピーカー機能のデスクトップアプリとしてPyQt5/Qt Designerによる操作パネルも作成しました。
今回は、HTML5実装の一部であるWebSocketを介して電動部分を後付け、自作した既存のカーテン(ESP8266・ESP32/WebSocket電動カーテン)を音声操作で開閉させます。
今日、WebSocketは使わずに作った自動開閉タイマー機能を追加したブラッシュアップ版自動開閉タイマー付き自作スマートカーテンも同様に音声操作できます。
リモコン家電なら自作スマートリモコンでリモコンに対応していなくても自作スマートコンセント・スマートプラグにつなげば、同様にスマートスピーカーから音声操作できます。
ただ、スマートコンセントだとON/OFFしかできません。
また、自作電動化したカーテンをスマートリモコン対応にすることもできますが、別途リモコン用のデバイスを用意する必要があります。
その点、WebSocketなら、音声のみならず、ブラウザからも操作でき、その場合、PC、スマホ、タブレットなどがあればよいのでコスパも高く、スマートロールスクリーンに限らず、操作もプログラム次第と拡張も容易、非同期通信なので同期をとるTCPと違い、通信のタイミングを考慮する必要もありません。
非同期通信には、Pub/Sub方式のMQTTもあり、適材適所使い分けるにしてもブローカーを介すことのないWebSocketはより手軽です。
詳細は、各リンク先に譲りますが、概要としては、次のようになります。
何をどう操作するかイメージすべく、
部屋ごとなど複数のカーテンがある場合、例えば、誰々のカーテン、部屋Aのカーテン、リビングのカーテン...等々文言も工夫を要すでしょう。
音声認識ソフトウェアJulius用には、
[]内が応答スクリプトvoicerecieve.plに音声テキスト(条件分岐の条件)として渡される部分。
Juliusから渡される音声テキストへの応答スクリプトvoicerecieve.plは、
このようなPerlスクリプトの場合、system()を使って実際の家電操作スクリプトwebsocket_client.pyを呼ぶ。
カーテン操作スクリプトwebsocket_client.pyは、
ちなみにブラウザからも操作でき、その場合は、使用中のカーテンを無線電動化 ESP8266・ESP32/WebSocketに書いたようにJavaScriptをクライントとします。
リンク先のように、ここでは、ESP8266/ESP32にWebSocketサーバがあることを前提としています。
大幅に書き換えた自作スマートカーテン用のようにWebSocketではなく、HTTP GETリクエストを使う場合、このようなPerlスクリプトの場合、system()を使って実際の家電操作スクリプトmy_curtain.plを呼ぶ。
カーテン操作スクリプトmy_curtain.plは、
自動起動時(や現在のログイン状態)に反映すべく、