This is an old revision of the document!
Run the following commands in a terminal to set the ComfilePi's date and time and save it to the ComfilePi's RTC.
# Disable synchronization with the time server sudo timedatectl set-ntp false # Set the date and time (e.g. January 2nd, 2026 5:30am). This will set both the system time and the RTC's time. sudo timedatectl set-time '2026-1-2 5:30:00'
NOTE: Modern Linux has a built-in safety feature that checks system's date and time is prior to the date and time that the operating system was built, and if so, uses the build date and time instead of the set date and time. So, if manually setting the date and time for testing, be sure to use a date and time after the operating system's build date and time.
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:
sudo ntpdate pool.ntp.org to manually synchronize the system time to an Internet time server.sudo hwclock --systohc --utc --update-drift to synchronize the RTC with the system time, and to ensure the /etc/adjtime records the last calibration time.sudo ntpdate pool.ntp.org to manually synchronize the system time to an Internet time server.sudo hwclock --systohc --utc --update-drift to synchronize the RTC with the system time, and to record the drift compensation, as measured over the idle time period, to the /etc/adjtime file.That procedure will update the /etc/adjtime file with a drift compensation measurement determined from the above procedure.
Finally, to ensure the system time is updated from the RTC, with drift compensation, create the following udev rule file at /etc/udev/rules.d/85-hwclock.rules:
ACTION=="add", SUBSYSTEM=="rtc", KERNEL=="rtc0", TAG+="systemd", ENV{SYSTEMD_WANTS}+="hwclock.service"
And create the following service at /etc/systemd/system/hwclock.service:
[Unit] Description=Set system clock from RTC with adjtime compensation ConditionPathExists=/dev/rtc0 ConditionPathExists=/etc/adjtime [Service] Type=oneshot ExecCondition=/bin/sh -ec 'timedatectl show --property=NTP 2>/dev/null | grep -qx "NTP=no"' ExecStart=/sbin/hwclock --rtc=/dev/rtc0 --hctosys
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.