google home miniにベランダの気温を報告させる 改善編

この記事でつくったベランダ気温通知。通知の音が小さいのを改善しようとぐぐってたらVoiceText Webを発見。早速組み込んでみた。最初しゃべらなくて、確認のために生成されてるWAVをftpして持ってきてもノイズだらけの小さな声で、お試し制限なのかなぁと思ってた。何のことはないftpをバイナリーモードでしてなかっただけでwavは正しく生成されてた。google homeが再生してくれなかったのは単にパーミッションでforbiddenになってただけで、最終的にはちゃんと動きました。

iPhone SE導入

DoCoMo白ロムのA-GPS問題に辟易してたのでiPhone SEの白ROM(ストレージ32G)を導入しました。位置ゲー専用なのでデータ通信SIM。モバイルsuicaを使うのでDoCoMo白ロムは位置ゲー以外用として並行運用。
久々のiOSは(iPod touch(wifiだけの裏が銀の奴), iPhone 3GS以来)どうも戸惑う。戻るボタンが欲しい。アプリの設定変更がアプリの中から出来ないのも慣れない。自分にはiOS機は永遠のサブ機。でもこの4インチのサイズは片手かつ非利き手で持つにはいい感じ。フルキーの反応も良くTYPOが殆ど無い。この点は評価してるだけにもったい無いもんだ。

google home miniにベランダの気温を報告させる

昨年末にgoogle-home-notifierを試したときに思ったことを実現してみた。
何をできるかというと、
google home miniに「外の気温は?」と聞くと、「ベランダの気温は27.0度です。」と答えてくれるというもの。

概略を書いておくと
iftttのthisのGoogle Assistantで「外の気温は?」をトリガーにwebhookを動かす。それを自宅のraspberry pi上のhttpd(sslと認証は入れてある)で待受。webhookが来たら、自宅のセンサーの値をためてるmysqlから最新のベランダ気温をjsonで取ってくる。google homeに応答させる「ベランダの気温はxx度です。」を作って、google-home-notifierにrequests.postして、google-home-notifierがgoogle homeに話させて完了。google-home-notifierのngrokは使わないので止めた。センサーのデータは直接、ベランダのセンサーをコントロールしてるESP32に聞いてリアルタイムのデータのjsonももらえる。最初はそっちでやってた。他のセンサーと統一するためにDBから取得とした。で、雨センサー版も作ったけども音声トリガーが難しい。「雨降ってる?」だとgoogle home標準の天気機能が動いてしまう。要改善です。

使った実感として去年末も思ったがgoogle-home-notifierだと音声音量が小さいのよ、普通のgoogle homeの会話音声よりも。仕組み的に喋らせたいテキストからgoogle-tts-apiでmp3を作って再生させてる様だけども音量のパラメータが見当たらない。今春から使えるGoogle Cloud Text-to-Speech ならVolume Gain Controlもあるようなので、こっち対応させるかと。あ、誰か作ってるかも、検索検索っと。
もう1個改善したいのは、トリガーを引いたgoogle homeに応答を話させる事。居間と寝室にgoogle homeがあるけれど、今は居間のgoogle homeしか問い合わせ結果を話せない。iftttのGoogle Assistantがどの子からのトリガーかを伝える機能が無いから居間固定にしてる。google、iftttのアカウントを分ければできそうだけれど、そうするとスマートホーム機能が・・・。

tinker board s

連休前半用にasusのtinker boardをゲット。あわよくば、家の普段作業をここでと。

まずはtinker osとandroidの動作確認。microSDスロットがSD3.0対応なのでUHS-I U3のカードを入手。連休中はamazonが読めないのでbic実店舗に行って16Gをゲット。
armbianのtinker board用を入れる。sなのでeMMCにインストールしたいところだが、対応版osじゃないとイメージ入れても動かん。USBでマスストレージ認識させるためのちっこいブートパーティションがいる模様。仕方ないのでmicroSDで確認。言語関連を日本語にして、fcitx-mozcで日本語入力OK。fcitxでcapslockでime on/offできた。速度は・・・微妙。
だが、大きな落とし穴があった。それはarmアーキテクチャ。今までLinuxで使ってたソフトがarmにあるとは言えず。ソースみてポートするまでの余力はない。ので、livaと入れ替えることにする。livaは一応x86だし。

で、メインマシン上のVMやら古いマシンやらにxubuntuを入れて試してた。ちょうど18.04も出たところだし。LubuntuよりはXubuntuがいいかな。

29インチ/21:9 ウルトラワイド

 29インチ/21:9 ウルトラワイドのモニターが欲しいと思って2ヶ月くらい。コンソール開いて、メモしながら、Web記事を参照にしつつ作業をすると 1920×1080では足りない。どうしてもWindowを上に持ってくる作業が入って不効率。ダダでさえ片手かつタッチタイピングも封じられてるのにだ。タッチタイプができずキーボードを見てるとIMEがオンのままでメチャクチャなコマンド打ってたり。
 ただ、21:9 ウルトラワイドはLGくらいしか製造してないニッチなんだよね。複数LCDだとやっぱベゼルのとこで分断すてしまうし。ついでなのでスピーカ付きにしてみようかとか。
 問題は今使ってるベアボーンがHDMIにサウンドを流すようになってるかわからないとこ。放送波見る方のTVに繋いで確かめるかね。HD4600なので2560×1080は対応してると思うけど。ってか縦1080にも文句は言いたいよ。昔1920×1200使ってたから。悪貨に駆逐されてしまったけど。

今日の電子工作作戦0407

1) 水槽水温計をmbedからmicropython on ESP32に移行した。ココだけでなくabmientへのデータアップロードも対応。水温センサー部分はmbed版のを流用。ブレッドボード作成なので、ジップロックで埃よけとした。

2) ここへのデータアップロードが正しく動作してるかの確認用にスクリプトを入れた。3時間毎に起動して、直近1時間に1件もアップがないモノをリストアップして自分メール。だたこのサーバ入れてるgoogle cloud platformのgoogle compute engineでは、port25,465,58でsmtpが通りません。こないだ宅内liva用にsendgridのアカウントを作ったのでそれを利用。postfixをインスコして設定。無事メール送信できるようになった。

3) micropython on ESP32でWi-SUNのテスト。
ネット上のいくつかのコードをサンプルに移植をしてたが、
・通常pythonからmicro系への変換
・不要機能のコードの削除、変更
・python2系からpython3系の変換
と変える部分が多くて、一番やっかいなのがpython2系からの変換。まとめてやってたら疲れちゃったのでこの件は一旦放置とする。
Linux上でpython2で動作確認した上で、python3への変更と動作確認・不要機能の削除を実施。そのうえでmicropythonへの移植 と段階をおかないと駄目だ。

google home mini を壁に貼り付けた。。。が、はがれた

『「Google Home Mini」の壁掛けホルダーを試して分かったこと』というキーワードを見かけた。記事では3Dプリンタで作成したホルダーを使っていた。うちにもデルタな3DプリンタがあるのでSTLファイル手に入れれば作れるではあろう。だが1年以上動かしてないのでどう動くかわからんのと、変な動きをした時に片手で止められるかという心配もあって動作確認できていない。このプリンタで印刷したこのプリンタ用のスプールホルダーが折れちゃってるのもマイナス要因。予備も作ってあったけど片手で取り付けにくい取り付け方法なのです。

ってことで、なんの工夫もなく壁に両面テープで貼ってみた。この壁がマンションの外壁になる壁のため鋲のたぐいは刺さらない。なんかいい感じになった。机の上においてるとモノが触れたりして音量が変わったりしていたがそれを防げる。寝室のgoogle home miniも壁付けしたくなった。でも、寝室の設置したい壁は石膏ボードになるなぁ。google home miniの底部って引っ掛けられるような穴とか凹みが無いんだよなぁ。3Mのコマンドタブでささえられるかしらん。

で、数時間後。両面テープのgoogle home mini側がはがれた。めんどくさい材質だな。やっぱホルダー的なモノを介さないとだめか?とりあえずは、網と壁で挟んでる。

ESPR irでgoogle home連携

ESPR irは画像の左側のモジュール。ひとつのモジュールで赤外線受信機と赤外線LEDの双方が載ってるのでゲットしました。USB-UART変換は別に要るけどいっぱい持っている。
で、寝室の照明のリモコンをirRecvDumpでデータ化。どうやらNECフォーマットっぽい。
全灯 NEC: 176807F
調光 NEC: 17640BF
豆球 NEC: 176C03F
消灯 NEC: 17600FF
プログラムを変えて、赤外線照射のテスト。まずローカルで、ESPR上のWebサーバでsubmitボタン3つで、全灯・豆球・消灯を実装して寝室の照明の操作に成功。ある程度赤外線LEDの向きに気をつかう必要あり。ファイアウォールを変更してIFTTTからのwebhooksを受けられるように改造して、google assistantをthisに設定。
これでやっと寝室の明かりを音声で操作できるようになりましたさ。ESP8266はいっぱいあるので、赤外線LEDと組み合わせて手作りモジュールも作りたい。はんだ付けやらコードの皮むきとかの両手での作業を治具用意して片手でも出来るようにしよう。

で、ツレが「30分後に消して」とかの機能をリクエストしてきた。リモコン自体にも30分後/60分後の消灯ボタンがあるので、これを決め打ちで動かすのは出来る。だがn分後とかm時間後の任意のdelayをどう実現できるか?考えたい。IFTTT自体にはthisとthatの間にdelayを置く機能は今現在はない。案1は時間を$パラメータとしてもらってESP8266の中でwaitする。案2はこのWebサイトでwebhooksを受けてwaitしてからESPへwebhooksを引き継ぐ。ただ、waitしてる間に新たに点灯コマンドが入った時に消灯をキャンセルするとか考える必要あり。あ、夜中トイレにいくのに「5分だけあかりをつけて」ってのも便利だなぁとか。

マウス復帰?

昨日、会社の机にしまってあったAnyware MXを使ってみたら以前試したときよりスムーズに使えた。そのまま、左手用トラックボールから変更したままで仕事してた。
まぁ、トラックボールは本体を動かさないから場所をとらなくて良いというメリットがあるが、ポインタの移動が遅いというデメリットがある。移動を早く設定すると細かい動作ができなくなる。親指(トラックボールの場合)のうごきの細やかさと手関節(マウスの場合)の細やかさの違い。自分は病前でもマウスは手関節で動かしてて、肘は固定してた。
という感じで、家でもマウスを引っ張り出してきた。RAZERのゲーミングマウスの左手用。残念ながら有線だけど親指ボタンが使える。MXは右手用なので親指ボタンは左手でもったとき薬指のとこで、この位置では押しにくい。まぁ、カラダに刺激をあたえるのも兼ねて、いろいろ試してみます。

スマートプラグ

旅行前に発注しておいたスマートプラグが届きましたので設定。スマートプラグとはなんぞやと言うと無線LANでオンオフの制御が出来るACプラグ。
こんなの。

これでライトのオンオフを制御します。

まず設定。androidの「Smart Life – Smart Living」のソフトでSmart Lifeのサービスにアカウント作成して、無線Lanのパスワードを設定し、自宅のネットに接続可能に。無線Lanは2G限定なのでandroid側で5Gだとつながらん。あとプラグの名前も適当に変えとく。プラグには机のZライトと水槽のライトを配線。androidのgoogle homeアプリで場所とニックネームを設定。これでgoogle homeからは音声で制御可能。場所を「机」「水槽」、ニックネームを両方「ライト」にしたので「ねぇGoogle。机のライト点けて」とかで点く。androidの無線lanは1回設定しちゃえば5Gに戻してもOK。
水槽のライトのほうは日の出とともに点灯するようにIFTTTでアプレット作成。thisをWeather UndergroundでsunriseにしてthatをSmart Lifeで水槽のライトのオンにした。消灯は日の入りだと早すぎるから日の入りの2時間後とかしたいんだが1アカウントでlocationをUTC+7で緯度が東京と同じとこに変えたり出来るか検討中。それまではthisにdate&time使って19:30決め打ち。

このプラグ、停電からの復電時の動作を試してみたら、停電前の状態に復帰するみたい。オンならオンに、オフならオフに。「復電時は常にオフ」の設定も出来ると良かったかな。