気の向くままに辿るIT/ICT/IoT
IoT・電子工作

ラズパイスマートスピーカーで空気清浄機を音声操作

ホーム前へ次へ
Raspberry Piって?

ラズパイスマートスピーカーで空気清浄機を音声操作

ラズパイスマートスピーカーで空気清浄機を音声操作

2019/04/15

 以前、作って運用しつつもブラッシュアップ中のRaspberry Pi 3 Model B+とJuliusOpen JTalkベースの自作スマートスピーカーがあります。

 主な機能は、

 尚、ラズパイ用ACアダプタを挿したスイッチ付きコンセントでのON/OFFとは別にラズパイ用boot/reboot/shutdown物理ボタン付き。

 音声認識にJuliusを使った自作スマートスピーカーに伝言とメモの機能を実装するにあたり、マイクとスピーカーを専有してしまうOSSやALSAからPulseAudioに移行しました。

 ちなみに便利なのでラズパイだけでなく、PC/Debianにも自作スマートスピーカー機能を搭載しています。

 自ずとモニタ付きとなるPC版スマートスピーカーには、PC及びラズパイ双方のスマートスピーカー機能のデスクトップアプリとしてPyQt5/Qt Designerによる操作パネルも作成しました。

リモコン付き空気清浄機を音声操作

自作ラズパイスマートスピーカーで操作する空気清浄機

 今回は、リモコン付き空気清浄機の音声操作について。

 家電操作リモコンには、やはり、ESP8266による自作スマートリモコンを使い、今回は、ESP-01/12/ESP32でリモコン付き空気清浄機をWiFi操作します。

概要

 詳細は、自作スマートスピーカー、自作スマートリモコン、エアコン操作など各リンク先に譲りますが、概要としては、次のようになります。

 何をどう操作するかイメージすべく、

$ pwd
/home/xxx/julius/path/to/dictation-kit
$ vi ./mydic.list
<sil> [] silB
<sil> [] silE
<sp> [] sp
スタンバイ [スタンバイ] s u t a N b a i
ニュートラル [ニュートラル] n u t o r a r u
...
空気清浄機つけて [空清ON/OFF] k u: k i s e i j o: k i t u k e t e
空気清浄機消して [空清ON/OFF] k u: k i s e i j o: k i k e s i t e
空気清浄機風量 [空清風量UP/DOWN] k u: k i s e i j o: k i f u: r y o:
空気清浄機タイマー [空清タイマーON/OFF] k u: k i s e i j o: k i t a i m a:
空気清浄機ターボ [空清ターボON/OFF] k u: k i s e i j o: k i t a: b o
...
$ iconv -f utf8 -t eucjp mydic.list > mydic.eucjp
$

 ちなみに家の空気清浄機は、ボタン押下ごとにON/OFFやタイマーの段階設定/OFFなど1つのボタンの押下回数で設定するようになっています。

 音声認識ソフトウェアJulius用には、

 []内が応答スクリプトvoicerecieve.plに音声テキスト(条件分岐の条件)として渡される部分。

$ pwd
/home/xxx/sound/
$ vi ./voicerecieve.pl
#!/usr/bin/env perl
...
      # 【空気清浄機】
      when("空清ON/OFF"){
       system("/home/xxx/sound/script/aircleaner1_control.pl power &");
      }
 ...
      when("空清風量UP/DOWN"){
       system("/home/xxx/sound/script/aircleaner1_control.pl wind_amount &");
      }
 ...
      when("空清タイマーON/OFF"){
       system("/home/xxx/sound/script/aircleaner1_control.pl timer &");
      }
 ...
      when("空清ターボON/OFF"){
       system("/home/xxx/sound/script/aircleaner1_control.pl turbo &");
      }
 ...
 

 Juliusから渡される音声テキストへの応答スクリプトvoicerecieve.plは、

 このようなPerlスクリプトの場合、system()を使って実際の家電操作スクリプトaircleaner1_control.plを呼ぶ。

$ pwd
/home/xxx/sound/script
$ vi ./aircleaner1_control.pl
#!/usr/bin/env perl
use utf8;
#use strict;
use warnings;
 
use 5.10.0;
 
use Encode;
use IO::Socket;
 
use LWP::Simple;
use LWP::UserAgent;
use HTTP::Request::Common( "GET" );
 
# 空気清浄機用スマートリモコンサーバー
local $esp_aircon1_server='esp_aircon1.local';
 
if ($ARGV[0] eq "power"){
  print "$esp_aircon1_server/power\n";
 
  #### インスタンスの生成
  my $ua = new LWP::UserAgent;
  $ua->timeout( 10 );
  #### 要求条件を生成
  my $req = GET( "http://esp_aircon1.local/power" );
  my $res = $ua->request( $req );
  print $res->as_string;
}
...
elsif ($ARGV[0] eq "wind_amount"){
  print "$esp_aircon1_server/wind_amount\n";
  my $ua = new LWP::UserAgent;
  $ua->timeout( 10 );
  my $req = GET( "http://esp_aircon1.local/wind_amount" );
  my $res = $ua->request( $req );
}
...
elsif ($ARGV[0] eq "timer"){
  print "$esp_aircon1_server/timer\n";
  my $ua = new LWP::UserAgent;
  $ua->timeout( 10 );
  my $req = GET( "http://esp_aircon1.local/timer" );
  my $res = $ua->request( $req );
}
...
elsif ($ARGV[0] eq "turbo"){
  print "$esp_aircon1_server/turbo\n";
  my $ua = new LWP::UserAgent;
  $ua->timeout( 10 );
  my $req = GET( "http://esp_aircon1.local/turbo" );
  my $res = $ua->request( $req );
}
...
else {
  print "Argument Error!";
}

 空気清浄機各種操作スクリプトaircleaner1_control.plは、

 ユーザーエージェントのインスタンス化、タイムアウト、リクエスト要求は、共用してもよいかも。

 また、use文は、要らないのもあるかも。

 自動起動時(や現在のログイン状態)に反映すべく、

 リモコン送受信回路については、

2023/06/03

 1ヶ月ちょい前に買い替えた空気清浄機はスマホ・タブレットやAmazonアレクサ、Googleアシスタントなどスマートスピーカーからも操作可能なスマート家電ダイキン加湿ストリーマ空気清浄機MCK70Y

 スマート家電をスマホで操作と言えば、普通、専用アプリでの操作が大前提となりますが、今回、同様の手順を踏めば、当該メーカーや空気清浄機に限らず、他のスマート家電でも汎用で使える市販スマート家電用ブラウザ操作パネルと操作スクリプトを自作

 これにより、スマホやタブレットに限らず、ブラウザで操作できる操作パネルなのでパソコンからでもパネル操作可能、また、スクリプトに落とし込めたことで専用機やパソコンに入れた自作Julius/Open JTalkスマートスピーカーからの音声操作もできるようになりました。

 よってこのページのJuliusとOpen JTalkを使ったスマートスピーカーでも手順は同様となり、MCK70Yも音声操作できています。

 尚、操作コマンドを取得するため、一時的に専用アプリを使うことにはなりますが、代替できるほどに作り込めば、以後は不要です。

 当該空気清浄機は数年前から会員登録、専用アプリへのログイン、宅内操作ですらクラウド経由となったとのことでしたが、自己責任で旧バージョンのアプリを使うことで、これを回避しました。

 また、外出先からの操作については、以前から導入済みのVPN+LANで。

ホーム前へ次へ