見出し画像

温湿度露点ロガー(S0100-0) 9

当初、ID=00のロガーは指定時刻になると1レコードをINSERTして測定値をUPDATEし、次のID番号を持つロガーはID番号順に各々2秒遅れてデータをUPDATEする仕組みでした。(実験はID=00, 01 の2台で行いました。)
要するに、定刻00秒と02秒に記録する狙いです。

この条件では時々ID=01のデータが記録されずに欠落することを確認しました。

前回、2秒の遅延時間を4秒に伸ばし、同じ台数て実験を行いました。
つまり、定刻00秒と04秒に記録する狙いです。

56.5時間(227レコード)まで正常に記録が続きました。
DB Browser for SQLite を立ち上げっぱなしにしたせいかSQLite 簡易サーバーの動作が遅くなり、対処している内に1レコードについてID=01のデータが記録されない不具合がありましたが簡易サーバーの電源をOFF/ONして、続く378レコードの正常記録を確認しました。(実験終了)

簡易サーバーの動作が遅くなった件を別にすれば、アクセス間隔02秒と04秒では、後者の方が明らかに安定しており、一つの解決策と思われます。

ここで心配なのは Raspberry Pi の時計の精度が ±2 秒を超えて揺らぐようだと、いつか当初実験と同じ結果に見舞われそうなことです。

同じLANに接続されている Raspberry Pi の時刻表示(時分表示)が変化する瞬間を見ることがありますが、1~2秒を超えて一方が遅れる様子を見たことはなく、意外に正確なんだな~と感じています。

そうは言っても、本当にその程度なのか保証が無いと思うので、必要に応じてLAN内で時刻同期をするべきかも知れません。時刻同期は、このアプリケーション(S0100-0)の外で対策されるものと思います。

S0100-0に出来ることして、実現可能な範囲でRaspberry Pi 間の時刻ズレに対するマージンを大きくする対策を試みます。

対策案と実験案

今のところ、最初の実験でデータ欠落が生じた原因はID=00によるINSERT処理がID=01のUPDATE処理に間に合わなかったのではないかと考えています。
逆にINSERTさえ済んでいれば、数台程度のロガーが同時にUPDATEしても問題ないだろうと言う予想です。

そこで、ID=00とID>00のロガーのアクセス(予定)時間を15秒とし、ID>00のロガー同士のアクセス(予定)間隔を2秒とします。
つまり、定刻00秒にID=00がINSERTとUPDATEを行い、定刻15秒にID=01が、定刻17秒にID=02が各々UPDATEすると言うスケジュールです。


さらに、少なくとも2台のロガーが(予定として)同時刻にUPDATEしても不具合がないことを確認しようと思います。

そのために、現有2台のロガーの他に Raspberry Pi (ID=02)を使って実験を試みます。ID=02はセンサーを備えていないので、ダミーデータ(固定値)を記録します。ただし、ID=02はID=01と(予定として)同時刻にUPDATEするように仕掛けして暫く様子を見てみようと思います。

準備に少し時間が必要なため、「温湿度露点ロガー(S0100-0) 8」に追記中の実験を続けながら準備していました。

温湿度露点ロガー(S0100-0) 8」は終了しました。


S0100-0 は、動作確認が遅れていますが、今後とも宜しくお願い致します。

何等か参考になれば幸いです。


追伸

実験開始

内容

1台のSQLite 簡易サーバーに対して、3台のロガー(ID=00, 01, 02)がデータを記録します。ID=00 はINSERTとUPDATE、ID=01, 02はUPDATEのみ行います。ID=02はダミーデータ(固定値)を記録し、ID=01と同じ時刻にUPDATEを行うように仕掛けしています。
各ロガーのアクセス予定時刻は以下の通りです。
ID=00 予定時刻+0秒   (INSERT & UPDATE)
ID=01 予定時刻+15秒  (UPDATE)
ID=02 予定時刻+15秒  (UPDATE) (注)

(注) ID=02は予定時刻+17秒にアクセスるべきところを
    15秒に変更して実験しています。

実験の記録
10/24日 18:00  実験開始(正常記録)
10/25日 09:30  (15.50hr)  63レコード目まで正常記録
10/25日 18:30  (24.50hr)  99レコード目まで正常記録
10/26日 19:00  (49.00hr) 197レコード目まで正常記録
10/27日 18:30  (72.50hr) 291レコード目まで正常記録
10/28日 18:30  (96.50hr) 387レコード目まで正常記録
10/29日 19:15 (121.25hr) 486レコード目まで正常記録
100時間を超えたところで、実験終了とします。

正常記録とは
Null カラムの無いレコードが、1時間当たり4つ(毎正時+0.00, 0.25, 0.50, 0.75 [時間])記録されていることを(DB Browser for SQLite で)目視確認します。


出来ればサポート頂けると、嬉しいです。 新しい基板や造形品を作る資金等に使いたいと思います。