| Both sides previous revisionPrevious revisionNext revision | Previous revision |
| comfilepi:set_date_and_time [2026/03/31 03:36] – [Drift Compensation] mfranklin | comfilepi:set_date_and_time [2026/04/05 23:54] (current) – [System Clock Compensation] mfranklin |
|---|
| |
| ===== Drift Compensation ===== | ===== Drift Compensation ===== |
| | |
| | There are two clocks that have the potential to drift: The RTC and the operating system's system clock. Both will drift independently, so the Linux operating system provides utilities to configure compensation for both. |
| | |
| | ==== RTC Drift Compensation ==== |
| | |
| If you notice the RTC drifting over time, and the drift is consistent and predictable, it is possible to configure the OS to compensate for the drift using the following procedure: | If you notice the RTC drifting over time, and the drift is consistent and predictable, it is possible to configure the OS to compensate for the drift using the following procedure: |
| |
| - With Internet time synchronization disabled, run <html><code>sudo ntpdate pool.ntp.org</code></html> to manually synchronize the system time to an Internet time server. | - With Internet time synchronization disabled, but with an Internet connection, run <html><code>sudo ntpdate pool.ntp.org</code></html> to manually synchronize the system time to an Internet time server. |
| - Run <html><code>sudo hwclock --systohc --utc --update-drift</code></html> to synchronize the RTC with the system time, and to ensure the ''/etc/adjtime'' records the last calibration time. | - Run <html><code>sudo hwclock --systohc --utc --update-drift</code></html> to synchronize the RTC with the system time, and to ensure the ''/etc/adjtime'' records the last calibration time. |
| - Power off the panel PC for a few days; the longer the better. | - Power off the panel PC for a few days; the longer the better. |
| |
| <code> | <code> |
| ACTION=="add", SUBSYSTEM=="rtc", KERNEL=="rtc0", TAG+="systemd", ENV{SYSTEMD_WANTS}+="hwclock-hctosys.service" | ACTION=="add", SUBSYSTEM=="rtc", KERNEL=="rtc0", TAG+="systemd", ENV{SYSTEMD_WANTS}+="hwclock.service" |
| </code> | </code> |
| |
| [Service] | [Service] |
| Type=oneshot | Type=oneshot |
| | ExecCondition=/bin/sh -ec 'timedatectl show --property=NTP 2>/dev/null | grep -qx "NTP=no"' |
| ExecStart=/sbin/hwclock --rtc=/dev/rtc0 --hctosys | ExecStart=/sbin/hwclock --rtc=/dev/rtc0 --hctosys |
| </code> | </code> |
| |
| Reboot, and after booting, the device should have its system time synchronized with the RTC, and adjusted to compensate for the RTC's drift. Confirm with the ''date'' command. | Reboot, and after booting, the ComfilePi should have its system time synchronized with the RTC, and adjusted to compensate for the RTC's drift. Confirm with the ''date'' command. |
| | |
| | ==== System Clock Compensation ==== |
| | |
| | After configuring the RTC's drift compensation, the system clock's drift compensation can be configured. For that we need [[https://manpages.debian.org/trixie/adjtimex/adjtimexconfig.8.en.html|adjtimexconfig]]. |
| | |
| | Run the following commands in a terminal. |
| | <code> |
| | sudo apt update |
| | sudo apt install adjtimex |
| | sudo adjtimexconfig |
| | sudo systemctl enable adjtimex.service |
| | </code> |
| | |
| | The ''adjustimexconfig'' command will measure the amount of drift the system clock has relative to the RTC, save it to ///etc/default/adjtimex// and the //adjtimex.service// will load that at every boot to compensate. |
| |
| [[comfilepi:index|ComfilePi - Industrial Raspberry Pi Panel PC]] | [[comfilepi:index|ComfilePi - Industrial Raspberry Pi Panel PC]] |