RaspberryPi一覧

久しぶりにmake系でも

寝室の照明のコントロールにraspbery pi zerowに赤外線LEDを付けたのを使ってる。こいつが反応しなくなっていたので調査。
ログファイルを見る限りgoogle homeからIFTTT通ってzerowまでは通っている。赤外線発光コマンド irsendがこけていた。どうやら最近のカーネルでlirc関連の制限値が変わったようで、それでエラーとなってる。仕方無いからカーネルバージョンを巻き戻したら難なく動きやがりました。まったくなんで値(LIRCBUF_SIZE)を小さく変えるんだよ。

m5camera
ESP32使ったカメラモジュール。前、ベランダでやってたように定期アップロードを試みた。前なんて、Arduinoでシリアル接続のカメラをベランダに置いて、部屋の中のmbedとXBeeで無線通信させて使っていたんだが。今は消しゴムサイズで全部やってくれる。
アップロード先は自分サーバではなくクラウドストレージにした。AmazonPhotoが空いてるので使おうかと思ったが、今はAPI公開してないらしい。なのでGoogleDrive。最初、サンプル見つけてなかなかうまくいかなかった。原因はサンプルについてるgoogle.comの証明書が古かった。修正して無事定期アップロードできた。あとは光センサーと連動さえて、真っ暗な時はアップロードしなくしよう。

台風で退避した雨センサー
台風19号の時に部屋に退避していた。ついでだからと電池を交換していたら外装が砕けた。ベランダの雨のあたるところに設置してあるから紫外線浴びまくりで樹脂がボロボロになってた。2年前退院してきた時も同じように壊れたが、あの時はまだ同じサイズのケースがあったので事なきを得た。
今回はジップロックに入れて仮運用となった。まぁ、中のXBeeモジュールもケースが錆さびだしそろそろ終わりかと。
そういうわけでESP使って新センサーを作ろうとは思ってる。間欠deepsleep運用すればWiFiでも電池でなんとかなるんでないかと。問題ははんだ付けとケース加工。時間かければ&ツレに手伝ってもらえばなんとかなろう。


電力スマートメータ表示機を変更

 今までmbedでやってたスマートメータからBルートで現在消費電力を持って来て使う工作。最近になってソースコードを変更したら動かない。まぁ、ベースの消費電力表示は動けども、他のサービスと連携するコードがだめだ。もうコードが古いから。
 ということで環境変更。ESP32でやってみていたけどもUARTが化けたりふんづまったりで安定しなかった。どうもロームのBP35A1はシビア臭い。前にESP-WROOM-02で試したときもそうだっった。
 で、raspberry piに環境を再変更。piならほかサービスとの連携部分が作りやすい。BP35A1との接続はUART−USB変換して繋いでみた。とんとん拍子で作成完了です。あとはGoogleの BigQueryからデータスタジオへの連携を作ればOK。

BP35A1はブレッドボード。早くハンダゴテを麻痺側で持てるようになってユニバーサル基板に作り変えたい。


pi2 aptで壊れて再構築

 宅内IoTにしてるraspberry piの一つが壊れた。ベランダセンサーからデータを取得したり雨センサーからの通知をxbeeで受け取ったり、そしてそのデータを別マシンのRDBに書き込む役割をしていた。こいつのソフトアップデートしとこうと木曜帰宅後にapt updateしてapt upgradeした。いつもより時間がかかる。1つのアプリで数時間かかりそうなのがあったので、キャンセルしてみた。で、再起動して再度aptを実行すると E: Error reading the CPU tableでどうにもならん。
 というわけで再インストール。昨晩、最新のRASPBIAN STRETCH LITEをダウンロードさせながら寝たので別microSDにインストール。もとのSDも読める部分はあるのでLinux Liteからpythonアプリのコードを無事退避。raspbianの初期設定(password変更、ホスト名変更、locale変更, timezone変更、ipv6禁止、ipv4固定化、swap禁止、vim-tyny消して普通のvimを導入 など)を実施。この辺り、自動化させないとなぁと思いつつしてない。(仕事でも自動化させたいブツが入りそうだがWindowsなんだよなぁ)。
 改めてapt update, apt upgradeを実施。pythonコードを戻して、pip3でライブラリをインストール。手起動でpythonコードの動作確認してcron登録して復帰完了。左手だけでも1時間半くらい。SDにイメージ焼くのとaptが時間かかる。
 さて、自動化のために ansibleのplaybook書くかね。


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

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


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のアカウントを分ければできそうだけれど、そうするとスマートホーム機能が・・・。


クラウドでなく自宅内の細々Linux機をいじる

piの構築を楽にするべくansibleを使うべくCentOSを入れようとx86なマシンを出してきた。Livaの初期型。メモリ2GでストレージはeMMC64Gでファンレス。Windows8が入ってて10にアップグレードしてあったけど捨ててCentOS7.4を投入した。CentOS、昔はeMMCにはインストールできなかったが、時が解決したようで何の問題も無かった。
で、SElinuxはdisabledにしたが、firewalldはiptableに戻すこと無くそのまま使う。通知メール用に最近取得したsendgridの無料アカウントでpostfixからメールも送れるようにした。logwatchもいれて、どうせなのでpiでやってるdnsmasqをこっちに移した。

その後、pi zero wでwi-sunモジュールのテストを試みるがまったくつながらない。pi B+では動いたのだが・・・。いろいろ調べると最近のbluetooth搭載piはttyAMA0がBTと直結になって邪魔してるみたい。切り離し方法を見つけてそのとおりにやったら無事動作しました。