すたっしゅlog

ブログです.

Google Homeにnasneの情報を喋らせる

Google Home Miniが量販店で半額になっていたので購入した.
普段から使用しているnasneの情報を喋らせたい.

ひとまず,nasneの次の録画予約と録画中の番組を返答できる状態にすることを目指す.

環境

構成

beebotteでChannel,resourceを作成

MyHomeというChannelを作成し,その中にnasneというresourceを作成した.

f:id:stash4:20180623181611p:plain

ここで表示されているChannel Tokenの値やChannel名,resource名は,IFTTTやNode-REDの設定で使用する.

IFTTTでアプレットを作成

例えば『OK Googlenasneの次の予約』と聞いた場合に,"nasne","次の予約"という情報を含むJSONを,beebotteで作成したChannelのresource(今回はMyHome/nasne)に送信できるようにする.

項目
What do you want to say? nasneの $
What do you want the Assistant to say in response? nasneの $ を調べています
Language Japanese
  • Webhook
項目
URL https://api.beebotte.com/v1/data/publish/作成したChannel名/作成したresource名?token=作成したChannelのtoken
Method POST
Content Type application/json
Body {"data": [{"target": "nasne", "action": "{{TextField}}"}]}

上の例で『OK Googlenasneの次の予約』と聞いた場合,$には"次の予約"という文字列が入っており,それが{{TextField}}にも入ることになる.

Node-REDをアップデートして起動確認

Raspbian Stretchには初めからNode-REDがインストールされている.

$ update-nodejs-and-nodered
$ node-red-start

ブラウザでhttp:{Raspberry PiのIPアドレス}:1880にアクセス.

自動起動の設定

$ sudo systemctl enable nodered

Node-Redからbeebotteに接続

mqtt inノードをフローに追加し,編集画面のサーバの項目で新規に mqtt-broker を追加...を選択.

タブ 項目
接続 サーバ mqtt.beebotte.com
ポート 8883
SSL/TLS接続を使用 チェックする
セキュリティ ユーザ名 token:作成したChannelのtoken

完了したら編集画面に戻る.

項目
サーバ 上で設定したもの
トピック 作成したChannel名/作成したresource名
QoS 2

これでデプロイすると,設定が正しければノードの下に"接続済"と表示される.

Node-RedからGoogle Homeに接続

右上のメニューからパレットの管理ノードの追加と進み,node-red-contrib-google-home-notifyを検索して追加.

googlehome-notifyノードをフローに追加し,IP AddressLanguageを設定する.ただし,初期状態ではLanguageEnglishしか選択できない.
一度IPアドレスを設定してデプロイすると,ノードがGoogle Homeを認識する.その後再びノードの設定画面を開くと,Japaneseやその他の言語も選択できるようになっている.

フローの作成・編集

これでGoogle HomeIFTTTbeebotteNode-REDGoogle Homeと全ての接続が可能になった.
あとはNode-REDでフローを作成・編集してnasneの情報を取得し,返答の文字列を作成してgooglehome-notifyノードに送れば良い.

  • メインフロー f:id:stash4:20180623191144p:plain
  • 次の予約 f:id:stash4:20180623191153p:plain
  • 録画中の番組 f:id:stash4:20180623191202p:plain

functionノードでjavascriptが書けたりexecノードで外部コマンドが実行出来たりするので割と何でもありだが,なるべく各種ノードを活用するようにした.

nasneの情報取得に使用したAPIに関しては,以下の記事が詳しい.

pocketstudio.jp


ここまでで,以下のような会話が可能になった.

  • OK Googlenasneの次の予約』『nasneの次の予約を調べています……次の予約は6月23日土曜日18時からのhogehogeです』
  • OK Googlenasneの録画中の番組』『nasneの録画中の番組を調べています……6月23日土曜日18時からのhogehogeを録画中です』

おわりに

衝動的に購入したGoogle Homeだが,できることを簡単に増やすことが出来て楽しい.まだしばらく遊んでいきたいと思う.

参考

Raspbian StretchにSamba4.8でTime Machineサーバを立てる

Sambaが4.8でTime Machineに対応したということで,Raspberry Pi上にTime Machineサーバを立てた. 結論としては,CentOS7上にSambaでTime Machineサーバを構築する - Qiitaの内容ほぼそのままで構築できた. Raspbianで構築している記事は無さそうだったので書き残しておく.

環境

  • Raspberry Pi 2 Model B
  • Raspbian Stretch (April 2018)
  • Samba 4.8.2 (2018/06/17現在のCurrent Stable Release)
  • My Book Essential 2TB (WDBACW0020HBK) (ext4でフォーマット)

Samba4.8.2のインストール

$ sudo apt install xattr python-crypto
$ sudo apt install libgnutls28-dev libacl1-dev libldap2-dev libpam0g-dev
$ sudo apt install bison flex libtracker-sparql-1.0-dev  #--enable-spotlightオプション用
$ wget https://download.samba.org/pub/samba/samba-4.8.2.tar.gz
$ tar -zxf samba-4.8.2.tar.gz
$ cd samba-4.8.2/
$ ./configure --enable-debug --systemd-install-services --with-systemd --enable-spotlight
$ sudo make
$ sudo make install

ログ保存用ディレクトリの作成

$ sudo mkdir /var/log/samba

smb.confの作成

Time Machine以外に共有フォルダを設定している.

  • /usr/local/samba/etc/smb.conf
[global]
workgroup = SAMBA
hosts allow = 192.168.1. localhost EXCEPT 192.168.1.1
security = user
map to guest = Bad User
vfs objects = catia fruit streams_xattr
fruit:encoding = native
fruit:metadata = stream
fruit:veto_appledouble = no
log file = /var/log/samba/log.%m
log level = 3

[share]
path = /media/hdd1/samba/share
browsable =yes
writable = yes
guest only = yes
read only = no

[timemachine]
path = /media/hdd1/samba/timemachine
writable = yes
guest only = no
fruit:time machine = yes
fruit:time machine max size = 1T

当初は[timemachine]guest only = yesにしていたが,OSStatusエラー17を回避1するためにguest only = noに変更.

Time Machine用ユーザの作成

$ sudo /usr/local/samba/bin/pdbedit -a username

サービスの設定

これは以下の記事そのまま.
サービスの設定(CentOS7上にSambaでTime Machineサーバを構築する - Qiita)

  • /usr/lib/systemd/system/smb.service
[Unit]
Description=Samba SMB Daemon
After=syslog.target network.target nmb.service winbind.service

[Service]
Environment=KRB5CCNAME=FILE:/run/samba/krb5cc_samba
Type=forking
NotifyAccess=all
PIDFile=/usr/local/samba/var/run/smbd.pid
LimitNOFILE=16384
EnvironmentFile=-/etc/sysconfig/samba
ExecStart=/usr/local/samba/sbin/smbd $SMBDOPTIONS
ExecReload=/usr/bin/kill -HUP $MAINPID
LimitCORE=infinity

[Install]
WantedBy=multi-user.target
  • /usr/lib/systemd/system/nmb.service
[Unit]
Description=Samba NMB Daemon
After=syslog.target network.target

[Service]
Environment=KRB5CCNAME=FILE:/run/samba/krb5cc_samba
Type=forking
NotifyAccess=all
PIDFile=/usr/local/samba/var/run/nmbd.pid
EnvironmentFile=-/etc/sysconfig/samba
ExecStart=/usr/local/samba/sbin/nmbd $NMBDOPTIONS
ExecReload=/usr/bin/kill -HUP $MAINPID
LimitCORE=infinity
[Install]
WantedBy=multi-user.target

ufwの設定

$ sudo ufw allow Samba

起動

$ sudo systemctl start smb
$ sudo systemctl start nmb

Raspberry Pi 2だとさすがにバックアップが遅いが,ちゃんとTime Machineサーバとして動いてくれている.

参考

『ファンタスティック・ビーストと魔法使いの旅』

IMAX 3Dで鑑賞.

これから5作続いていくシリーズの1作目ということで,世界観を紹介するという部分が大きかったように思う.
しかしそれだけではなく,1本の映画としてもきちんと楽しめる作りになっていたので良かった.
ハリポタシリーズは観ていなくても楽しめるが,観ていた人は小ネタでクスっと出来たり,ポンポン出てくる高等魔法にワクワク出来る.

その他:
3Dはしっかり効いていた. それに加えて,IMAX 3Dでは今年(2016年)夏に公開された『ゴーストバスターズ』同様にフレームブレイクの演出がなされており,これも効果的で楽しめた.

ちなみにこのフレームブレイク,ゴーストバスターズの時とは違いIMAX 3D限定なので,IMAX 3Dでの鑑賞がおすすめ.
ただし,これまたゴーストバスターズとは違いフルサイズのIMAXでは無いので,そこは残念ですね.
やはりエンドロールには "OPTIMIZED FOR IMAX THEATERS" の表記がありました.
参考:

stash4.hatenablog.com