見出し画像

AtmosBot2.0Piのシステム変更(運用編)・・・AtmosBot2.1Piへ

はじめに

以前、AtmosBot2.0Piのシステム変更として通信プロトコルをHTTPからMQTTに変更する準備をしていることをnoteにした。

時間がなくて3ヶ月経ってしまったが、年末年始に本格的に取りかかった。

本運用するには障害時のログ解析やバッテリー状態のモニタリングなど、メンテナンス性の強化をすることにした。

システム構成

下記が検討したシステム構成図になる。赤矢印はPublish、青矢印はSubscribeになる。

MQTTを使ったシステム構成

右側の3つのクライアント(Ambient、ThingSpeak、SQLite)は以前のnoteにも記載していた部分。

それ以外のクライアント(Status、Syslog、Notification)が今後の運用を考慮して追加することにした。

仕様

  • クライアントStatus
    状態を管理するクライアント。稼働中、バッテリー低下、エラーの状態を管理する。状態が変化した場合、AtmosBot2Pi/statusとAtmosBot2Pi/syslogをPublishする。起動時にはSQLiteから最後のデータを取得し状態を決定する。

    エラー判定はAtmosBotからのデータ受信で判定し、AtmosBotから30分間データ受信がなかった場合、障害としてエラー状態に遷移させる。

    また、バッテリー電圧が下限値(2.3V)未満となった場合、バッテリー低下状態に遷移させる。

  • クライアントSyslog
    各クライアントからPublishされたAtmosBot2Pi/syslogをSubscribeしてログに書き込む。ログは早朝にローテーションして過去5日分を保存する。loggingをimportしてログへ書き込みを行う。

  • クライアントNotification
    クライアントStatusがPublishしたAtmosBot2Pi/statusをSubscribeし、LINE Notifyを使って状態遷移をスマートフォンに通知する。

また、以前はDBに保存したデータをBoxにバックアップしていたが、WebDAVが使用できなくなったため(詳細はこちら)、代替手段としてDropbox_Uploaderを使いcrondで定期的にDropboxにバックアップすることにした。

これまでと同様、各クライアントはPythonを使ってデーモンとして起動できるよう実装し、systemdで自動起動できるように設定する。

ところどころChatGPTにコードを生成してもらいながら実装した。

テスト

ログが取得できるようになると動きが把握しやすくなった。

2024-01-13 19:40:01,010 INFO:AtmosBot2.1Pi:atmosbot2pi/data: datetime=2024-01-13 19:40:01&temp=8.32&hum=80.74&press=1024.88&brightness=1&vol=2.29&ch=1
2024-01-13 19:40:01,026 INFO:AtmosBot2.1Pi:Battery Low: 2.29
2024-01-13 19:40:01,731 INFO:AtmosBot2.1Pi:Ambient: 200 : {"created": "2024-01-13 19:40:01", "d1": "8.32", "d2": "80.74", "d3": "1024.88", "d4": "1", "d8": "2.29"}
2024-01-13 19:40:02,003 INFO:AtmosBot2.1Pi:ThingSpeak: 200 : {"created_at": "2024-01-13T19:40:01+9:00", "field1": "8.32", "field2": "80.74", "field3": "1024.88", "field4": "1", "field5": "2.29"}
2024-01-13 19:40:03,262 INFO:AtmosBot2.1Pi:Change status: low battery
---
2024-01-13 22:15:00,299 INFO:AtmosBot2.1Pi:atmosbot2pi/data: datetime=2024-01-13 22:15:00&temp=7.76&hum=81.21&press=1026.85&brightness=1&vol=2.29&ch=1
2024-01-13 22:15:00,723 INFO:AtmosBot2.1Pi:Ambient: 200 : {"created": "2024-01-13 22:15:00", "d1": "7.76", "d2": "81.21", "d3": "1026.85", "d4": "1", "d8": "2.29"}
2024-01-13 22:15:01,416 INFO:AtmosBot2.1Pi:ThingSpeak: 200 : {"created_at": "2024-01-13T22:15:00+9:00", "field1": "7.76", "field2": "81.21", "field3": "1026.85", "field4": "1", "field5": "2.29"}
2024-01-13 22:45:07,629 INFO:AtmosBot2.1Pi:Change status: error
---
2024-01-14 07:45:00,737 INFO:AtmosBot2.1Pi:atmosbot2pi/data: datetime=2024-01-14 07:45:00&temp=4.29&hum=88.49&press=1028.33&brightness=14&vol=2.83&ch=1
2024-01-14 07:45:01,227 INFO:AtmosBot2.1Pi:Change status: running
2024-01-14 07:45:01,390 INFO:AtmosBot2.1Pi:Ambient: 200 : {"created": "2024-01-14 07:45:00", "d1": "4.29", "d2": "88.49", "d3": "1028.33", "d4": "14", "d8": "2.83"}
2024-01-14 07:45:01,716 INFO:AtmosBot2.1Pi:ThingSpeak: 200 : {"created_at": "2024-01-14T07:45:00+9:00", "field1": "4.29", "field2": "88.49", "field3": "1028.33", "field4": "14", "field5": "2.83"}

また、LIINE Notifyにより状態変化を通知できるようになった。特にバッテリー電圧は日々チェックしていたので便利になった。

LINE NotifyによるAtmosBot2.1Piの状態変化通知画面

AtmosBot2.1Piへ

以上のようにHTTP版からMQTT版へ変更を行った。

これまではAtmosBot2.0Piとしていたが、マイナーバージョンアップして以降はAtmosBot2.1Piと名称を変更することにした。

GitHubでの作業

別のnoteでGitリポジトリーの管理をGitHubに移行したことを書いた。今回実装するにあたり、タスクやバグをissueへ登録して管理し、issue毎にブランチを切って開発を行った。

仕事ではGitよりもこれまでSubversionを使うことが多く、Gitについては理解できていないことが多いが、AtmosBot2.1Piの実装を通じてGitやGitHubの理解が進んだ。仕事にも役立ちそうだ。

おまけ・・・Notion使ってる?

最近タスクやメモなどの管理などにNotionを使っている。

アカウントは以前から作っていてEvernoteの移行先にしようかと思っていたが、ちょっと毛色の違うツールな気がしたので移行を止めて使っていなかった。

どう活用するものか分からずにいたが、Evernoteでやっていたメモ管理だけでなく、タスク管理と合わせて使うのに便利なことに気づいた。

他にもいろいろな使い道がありそうなので探ってみたい。

いいなと思ったら応援しよう!

天文と気象(とその他いろいろ)
よろしければ、サポートをお願いします。 より多くの方に役立つnoteを書けるよう頑張ります!!