前回まで/次回以降の取り組みはこちらから。
運用条件が見えてきた
pythonアプリを作っていく段階で、「条件がよくわからないのでアプリ側で設定できるようにしておく」という作りをした部分がありますが、この1週間で設定値が見えてきました。
具体的には「水やりの判断をする土の水分量」と「タンクの水がなくなったことを検知する水センサの読み取り値」です。
実際のデータを見ながら、それぞれこのように決めました。
- 土の水分量:今回の条件では水分量で水やり判断をすることは不可能なので、時刻だけで制御することにしました。
水やりの前後・1日の時間経過の中でもほとんど680~700の範囲で安定していて、ノイズのようにガクっと下がったり、かと思えば水やりしていなくても元に戻ったりという挙動をしています。
水やりをしたからと言って数値が上がったり、夕方に近づくにつれて数値が下がったり、そういう挙動を想定していたんですが全くそうなりません。土の種類などにもよるのかも?
あさがおの育て方で調べた通り、現段階では1日に6:00に1回だけ、花が咲き始めたら6:00と18:00の2回水やりを行うことにします。 - タンクの水センサ:通常水がある状態では650が中央値になりますが、かなりノイズが乗っています。(センサ回路の設計をミスっていて、ノイズが乗りやすい回路になっています。)
当初水切れ判断のしきい値を500にしていましたがこのノイズで500を切り、水切れ警報の誤動作も発生したので400に変更しました。
水が切れた状態でもノイズが乗っていますが、400までは来ないので大丈夫でしょう。
通信エラー…の?
通信エラーで例外が発生した時の処理で別の例外が起きてしまっていました。(ええいややこしい)
復旧を急ぐあまりスクリーンショット取り損ねたんですが、以前追加した「Abmientへのデータ送信エラーが発生した時の例外処理」を間違えていたというのが原因でした。
修正内容と修正前のコマンドはコメントで書いてあります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | def Ambient_send(sendtime): if(ui.checkBox_AmbientSend.checkState()==2): #Ambient送信 try: #例外でプログラム全体が落ちてしまうので対処:V1.4.1.1 amSend = ambient.Ambient(ui.lineEdit_AmbientID.text(),ui.lineEdit_AmbientKey.text()) amSend.send({'d1': temp, 'd2':humid, 'd3':press, 'd4':bright, 'd5':water, 'd6':tank}) ui.lineEditAmbientLastUpdate.setText(sendtime.strftime('%Y/%m/%d %H:%M:%S')) except: file = "./logging.txt" fileObject = open(file, "a", encoding="utf-8") fileObject.write("Connection Error! Ambient Date Send : "+"\n") #引数taketimeの大文字小文字間違い #fileObject.write(str(takeTime.strftime('%Y/%m/%d %H:%M:%S'))+"\n") fileObject.write(str(taketime.strftime('%Y/%m/%d %H:%M:%S'))+"\n") fileObject.close() |
地味にLine通知やGoogleドライブへのアップロードの部分も間違えていたので同様に修正しました。
このために7/1の17:40~20:30のタイムラプス写真・温湿度などの記録が抜け落ちてしまいました。
タイムラプス動画を作る時に時間が飛んでしまうので、その部分には真っ暗な時の写真をコピーして、撮影エラーとわかるように赤い枠と斜線を追加したデータを作っておきました。
エラー修正のために追加した部分が新たなエラーを生む、という失敗をしてしまいました。
もうちょっと続きます。
コメント