デジタルガジェット一覧

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分だけあかりをつけて」ってのも便利だなぁとか。