センサー一覧

その後のベランダセンサーのi2c

 前述のように変更してから半月以上経つが、異常なデータが取れたりハングしたりすることなく稼働中。
 外したBME280は室内用に転換して再検証しようと思った。というのも、室内に設置してた温度湿度計付きの電波時計。こいつのの液晶パターンが一部駄目になってきたから。8月中に出来れば良いかな。


BME280をやめてBMP085に

 ベランダにて環境値測定している自作機器。i2cバスのセンサー値がおかしくなったり、ハングしたりどうにも安定しない。先代はマイコン部をATmega328pでやってて全然安定稼働していたのに、ESP32に変えてから不安定。全く動かないのではなく連続稼働させてるとだめになる。仕方なしに1日1回リセットするようにしたがそれでもおかしくなる。ESP32のi2cは癖があるらしいけどドライバのメンテまでしたくない。
 思い切って、i2cの気圧・湿度センサーBME280を手持ちの気圧センサーBMP085と湿度センサーSi7021に載せ替えた版を作って、7/12のハング時に切り替えた。1日1回のリセットも無しのバージョン。で、本日7/21で変更してから1週間以上たつが、今まで色々対策してた苦労が嘘だったかのように安定稼働している。これならリセット無しのバージョンのままで良いかなと思う。3時間おきにセンサー値のDBが更新されてるかチェックしてメール飛ばしてるのも、データ未更新時と朝1回の更新チェック機能自体の確認のメールだけに変更しようと思う。


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


室温センサー作り変え

micropythonでやってた室温センサー。連続動作4時間ぐらいでハングって動かなくなるので、1時間ごとにESP.restart()するようにしてたが、なんか腑に落ちないので。ESP32のArduinoで作り直した。httpまわりはmbedより楽だな。室内光センサとしてCDSもつけてDBにアップした。この室内光データを他のデバイスからも参照して、就寝中は表示デバイスを消したりするのに使います。


ベランダセンサー調整

 どうも変な状態が発生して変なデータが取れてしまう。ADCで採ってるCDSの値は正常なので、i2cバスがおかしくなっている。1度この状態になるとずっと直らないので対策を入れた
 まず、ハングしていなければリモートから再起動できるようにRESETコマンドを導入した。また、i2cバスのセンサーは1つでもおかしい値があった時は、httpデータ送信後にESP.restart()するようにした。連続稼働時間がわかるようにDISPコマンドの結果にmillis()を出力するようにした。
 これでおさまってくれたら良いのだけども、i2cの方でエラー拾ってリトライ・busリセットするのが良いかな。


liva経由アップロード

センサーデータのアップロードの仕組みを変更した。

自宅CentOS7なlivaにmysql5.7を入れて、各センサーノードはここへまずアップロード。livaの中でcronでmysqlからambientやgcpにアップロード。自宅内の一次DBなのでディスク容量の余裕ができたため、データのアップロード間隔を短くした。cronで外にアップロードするのは5分とか10分おきで様子見。

一次DBのデータを元にpiと5インチLCDで気温とか消費電力やら表示させる予定。スマートスピーカでの音声問答まで行けたらいいなと思ってます。


ひたすら作業

ひたすらGCPのサーバの環境構築作業。
wordpressの方は動作確認して、後はデータを移すくらい。imageのリンク切れがあるのでそこは直したい。古いタイプのgoogle mapの埋め込み地図の残骸とかも。
センサーのデータに関する部分は、テーブルにアップ出来るとこまでは確認した。水槽画像はアカヒレとエビしかいないので一旦停止して、raspberry piともっと性能の良いカメラで再構築か。今のカメラはシリアル接続ですよ。マイコン部分は最初Arduinoでmbedにコード移植して安定してるけどね。
早ければ連休明けにはこっちを閉じられるかな。 左手だけのキータイプなのでtypoが多くて時間がかかります。


ベランダセンサーの値が変

16:40からベランダのセンサーの値がおかしい。気温なんかマイナス135.08度だし、UV指数は655.35。どれも固定値で変動はなし。ただ、CDSをつかった明るさセンサーは通常の動作を記録していた。他のセンサーとの違いはCDSは分圧した電圧をADCで計測している。他のセンサーは全部i2cバス接続。んーi2cでなんか起こったか?調べる手立てもないので(ロッジックアナライザは退院後の掃除で捨てた)リセットして復帰させた。あまりに変な値だったら、自己リセットするようにコードを書き換えたらいいかな。



センサ関連だいたい移行

 雨センサを移行したので今までの arduino,mbedの環境を停止し片付けた。雨センサのXBeeからの情報はraspberry piにUSB-UARTアダプタでつないだXBeeで受信してる。受信ソフトはpython3 (3.6)で書いて。XBeeのライブラリはxbee-python。digi謹製のdigi-xbeeと両方試したが前者の方がほしい情報に早く行きついた。余裕あるときにdigi-xbee用に書き換えてもよい。
 っていうより、雨なのに雨センサが感知してないです。コード断線したかな、チェックしよう。センサーの電池の電圧はXBeeのremote_at(%V)でモニターできてます。センサー側がperiodic sleepで寝てるので、雨データを送ってきた時に寝る前にすかさずremote_atを送り込んで返してもらってます。
 さて、ベランダのセンサーの値はココのperconaとambientにおくってるけど、piにも置いておこうとsqliteを検討。そのデータをすぐみられるように、piにAmazonでタイムセールになってた5インチモニタをつけた。静電容量で無く感圧だがタッチパネル。で、表示するアプリの環境はErectronを考えてる。となると、センサーか読みとってここやambientに送ってる部分やXBeeまわりを node.jsに変えたくなるなぁ。どうも pythonの閉じがないブロックに慣れない。


わかりにくいけど、やっぱ切れてました。センサー接続部が。まとめ買いした基板のあまりがあったので、線をはんだ付けして取り替えました。線をよじってつなげるだけでも片手だと大変です。なので右手も参加してもらうんだけど手関節(=手首)が自由に動かないもんだから方向が合わないんです。