コモノポリタン

コモノ、デジモノが好きなKomonopolitan住民 (はてなダイアリーからの引っ越しです)

【Nabaztag】うさぎ復活計画(その2)

前回うさぎを一応生き返らせることが出来ました。

maky-ba.hatenablog.com

しかしながら、確かに課題も幾つかあって、

  • なんだか自由度が低い(時報太極拳だけでは…まあopenJabNabの機能を理解しきれてないだけだとも思いますが…)
  • 日本語をほとんど喋らない(独り言はなぜか日本語で話すのですが…)
  • セキュアなWiFi接続が成功しない(ちょっと古いうさぎなのです…)

なんて所は少しづつ手を入れていきたいところです。

3番目は、モバイルルーター「ちびファイ」で機能しそうなのですが稼働しっぱにする目的のルータではないので、古めの普通のWifiルータを入手して常設できるようにしようかと思います。ということで後回し。

2番目は結構重症で、既に当時の日本語音声は失われているらしいとのこと。ウサギ好きでNabaztag好きのHarukaさんが調査済みの様子。ううむ、大変そう。
rabb-it-days.tokyo

ということで、今回、その2では、1番目の「自由度が低い」というのをちょっとだけ改善してみたいと思います。やり方としては、firmwareを入れ替えてスマートホームHome Assistantから操作できるようにする、ということを考えています。

1. うさぎちゃんをサーバレス化する

前回の記事の「2.2. うさぎのfirmwareを入れて替えて何とかする方式」で紹介した下記のサイトに従って、Nabaztagをサーバいらずにプチ改造します。

github.com

1.1. (失敗編)firmware書き換え用サーバの準備

(失敗編ですので「1.2. (とりあえず編)firmware/mp3用Webサーバの準備」へ)

1度しか使いませんがWebサーバが必要となります。スマートホームサーバHome Assistant (Hass.io)が導入済みの私としては、Nabaztag/tag, the smart rabbit is back! (•ㅅ•)の言う通りにHass.ioをWebサーバにしたいところですが、sshでセキュア化済みですので断念。
( Home Assistant (Hass.io)サーバのConfigフォルダの下にwwwというフォルダを作っても、https://<your hass.io ip>/local/xxxx.htmlでしかアクセスできない。うさちゃんはhttps://で接続できないのです…)

Nabaztagと同じネットワーク(つまりはHome Assistant (Hass.io) と同じネットワーク)にあるWindows PCを使ってWebサーバを準備しましょう。以前、環境サーバを設定した時に導入したWSL (Windows Subsystem for Linux)を今回も使います。

多分pythonは3系列が入っていると思うのですが、念のためpython3のバージョン確認。

$ python3 --version
Python 3.5.2

次に、gitでandreax79さんのファイルを取得し、wwwというディレクトリを作って、そこにandreax79さんのweb/vlディレクトリを置きます。

$ git clone https://github.com/andreax79/ServerlessNabaztag nabaztag
$ mkdir www
$ cp -r nabaztag/web/vl www/

python3の標準モジュールにWebサーバ(httpサーバ)があるのでそれを起動します。

$ cd www
$ python3 -m http.server 8080

これでwwwディレクトリをトップとする簡易webサーバが立ち上がりました。http://<Windows PC's IP>:8080/でアクセスできるようになりました。
その1の「3.1.うさぎをWifiに接続する」1.~3.までに従ってNabaztagの設定画面に入ります。
Advanced configurationに移って、一番下のGeneral InfoにあるViolet Platformに「<Windows PC's IP>:8080/vl」と入力して"update and start"します。

おお!
http://<Nabaztag IP>/で操作画面が出て、耳を動かしたり、太極拳をさせてたり、おなかランプを光らせたりできる!

むむ?
Windows上のPython Webサーバーにアクセスが続いているぞ…もしかして「ServerlessNabaztag is a firmware allowing control of the Nabaztag/tag directly via the web, without an external server (a web server is needed only for downloading the firmware and the mp3s).」とは、「Webサーバが全くいらない」ではなくて「操作画面としては、Nabaztagオリジナルの様な外部のWebサーバはいらず直接うさぎに接続でき」&「firmwareとmp3をダウンロードして利用・再生するためにはWebサーバが(常時)必要」という事か!!
そうするとHome Assistant (Hass.io)にプレーンなWebサーバが無いのが残念だ。ううむ。

1.2. (とりあえず編)firmware/mp3用Webサーバの準備

仕方が無いので、余っているRaspberry Pi ZeroWH(余っているというよりはテスト用なのですが…)にWebサーバを構築しましょう。
下記で構築したRaspberry Pi Zero Wと同じものを4GB microSDカードを使って構築します。 maky-ba.hatenablog.com 下記の順ですすめます。

  1. 3.1. ディスプレイ/キーボード/有線LAN無しでRaspberry Pi Zero Wを使う準備
  2. 3.3. Raspberry Pi Zero W起動後の初期設定
  3. 3.4. ソフトの最新化・インストール
    ( 3) pipのインストールはいらないかな)

python3のWebサーバーを使うのも芸がないので、軽量*1webサーバーであるnginx(エンジンエックスって呼ぶらしい)を導入してみます。

$ sudo apt-get install -y nginx

既に自動起動サービスまで登録されてしまっています。確認は下記コマンドで。

$ systemctl status nginx         # 起動状態の確認
$ systemctl is-enabled nginx     # 自動起動登録の確認

http://<your RasPi IP>/にアクセスすると「Welcome to nginx!」という確認画面が表示されます。

コンテンツの置き場(http root)は、/etc/nginx/以下にあるconfファイルを確認するのが正しいのですが、下記コマンドで確認しておきましょう。

$ grep "root" -r /etc/nginx/ | grep "html"
/etc/nginx/sites-available/default:     root /var/www/html;

ということで、コンテンツは、/var/www/html以下ですので、そこにandreax79さんのweb/vlディレクトリを置きます。

$ cd
$ git clone https://github.com/andreax79/ServerlessNabaztag slnabaztag
$ sudo cp -r slnabaztag/web/vl  /var/www/html/

おお! (再度…) http://<Nabaztag IP>/で操作画面が出て、耳を動かしたり、太極拳をさせてたり、おなかランプを光らせたりできる!
f:id:maky_Ba:20190923145223p:plain

しかし、あまり喋りませんね。nginxのログ関係を確認します。

$ nano /var/log/nginx/access.log
$ nano /var/log/nginx/error.log

ううむ、/vl/config/clockall/ukのXX.mp3が無い(http code 404)って言っているなぁ。/vl/config/reco/uk/ComprendX.mp3も無いっていってる。後で探しておかないかと。
それからつぶやき(surprise)は英語だな。openJabNabの日本語ファイルを拾ってこれないかな…

2. サーバレスうさぎをHome Assistantからアクセスできるようにする

と言いながら、まだ完全には出来ていません…
community.home-assistant.io

基本的には、このサイトが定義してくれたPackageを使うのですが、UIやらConfigやらが大分変わって来ているので、エラー出たり、機能しなかったり。 f:id:maky_Ba:20190928110121j:plain あれやこれや手を入れて、とりあえず、上記のHome Assistantの画面から、うちのうさぎちゃんを操作できるようになりましたが、依然格闘継続中です。
ということで、一旦ここでこの記事をリリースします。一揃い落ち着いたら、Home Assistantでの設定は別の記事で上げたいと思います。

まあ、中の人は、ServerlessNabaztagなので「日本語は話さない」うさぎですが。
(時々突然、耳を動かしたり、英語でつぶやいたりするので、隣の机で大学のレポートを書く息子には不評(?)の様です)

つづく(とイイな) *2

*1:大量アクセスに対して「軽量」のような気がするので、今回の様な用途にはどうですか。ま、やったことないものに手を出す、という基本姿勢で。

*2:この記事を必要としている人が日本にどのぐらいいるのか?というのが気になる点。Nabaztag x Home Assistant ですから小数同士の掛け算…。いや、まあ、備忘録として書きましょう