Raspberry Piを使用してプログラム可能な電源スイッチを作成しました。 (この問題はRPiに限定されていませんが、ハードウェアの欠陥のために問題が発生する「一般的なLinux」の問題に近いです。)Raspberryにはバッテリ対応のデバイスはありません。 RTCはオンラインで動作するように設計されており、ネットワーク経由で起動したらすぐに時計を同期します。
私の問題は、ネットワークを介してスイッチをプログラムするときに、ある時点で特定のコンセントをこのようにオンまたはオフにすることができますが、デバイス自体はネットワークに接続されていない場所を含む他の場所で使用されることです。プログラムされた位置から接続された位置に移動すると、電源が切れ、時計の状態が失われます。電源を入れ直しても日付を復元する接続はありません。
数分間電力が供給されないことは私にとって問題ではありません。時計が1~2分ほど遅くなるのも気にしません。ネットワークに接続されていない状態で電源を入れた後でも、43年間でそうであったようにオフになっていれば大丈夫です。
停電によりシステムがダウンする前の時間で起動時に時計を復元するための賢い方法はありますか? (毎秒毎にSDカード(RPiの記憶媒体)に記録すると、カードはすぐに終了するため、これはオプションではありません。)
答え1
この問題を解決する方法はいくつかあります。
ファイルシステムで最新の変更またはアクセス時間を持つファイルを検索します。この時間を使って時計を設定します。遅くて精度が低いかもしれませんが、うまくいきます。特定のディレクトリ/ファイルがかなり頻繁に変更されることがわかっている場合は、それをソースとして使用できます。
あなたが言及したアイデアに従って、「数秒ごとにファイルに触れてください」。多くのSDカードにはウェアレベリング機能があります。したがって、常に同じ位置に書くことはないので、まったく問題にはなりません。
NVRAMを使用してください。必要に応じて現在の日付をNVRAMに書き込み、起動時に日付を復元します。 NVRAMは小さいですが、問題なく数バイトを保存できます。
時間同期にGPSを使用してください。これは時間がかかりますが、ネットワークにアクセスできないデバイスで実行する操作です。 USB GPSデバイスは安価で非常に正確なタイムソースを提供します。
答え2
最も簡単な方法は、実際に次のリアルタイムクロックを追加することです。 http://learn.adafruit.com/adding-a-real-time-clock-to-raspberry-pi/