Опыт подключения к RaspberryPi3 аппаратных часов DS3231 и установка локально сервера NTP
Заходит чукча в троллейбус, покупает у кондуктора билет.
Спустя некоторое время подходит опять, берет еще один билет.
опять подходит, берет еще... Кондуктор не выдерживает:
Это анекдот, а в жизни… Приключился случай – проблемы у провайдера, а у меня пропал интернет. Перезагрузил роутер. Интернета нет, но время сбилось. При перезагрузке некоторых устройств слетело время. Проблемы с задачами, выполняемыми по таймерам.
У части устройств (ESP с прошивкой 1М) в сети свои часы, но у других их нет.
Возникло желание сделать свой NTP сервер с резервными часами на DS3231.
В результате все получилось.
первоисточники
https://onxblog.com/2019/03/30/raspberry-pi-hw-clo...
https://intrahouse.ru/knowledge-base/h-information...
Sudo raspi-config
Выбираем Interfacing Options
Затем I2C и активируем
Перезагружаем систему
Теперь установим зависимости и необходимый для работы софт:
Sudo apt-get install python-smbus i2c-tools
Проверим что у нас получилось и все ли хорошо
i2cdetect -y 1
Если все в порядке мы увидим следующее:
(Рис 2)
Наличие цифр 68 говорит о том, что у нас на I2C шине обнаружено устройство.
В конце файла /boot/config.txt дописать строку: dtoverlay=i2c-rtc,ds3231
Перезагружаем систему
Проверим что у нас теперь
i2cdetect -y 1
Мы должны увидеть следующее
(Рис 3)
Наличие символов UU говорит нам о том что все в порядке.
Теперь удалим эмуляцию аппаратных часов из системы, нам они это больше не понадобится.
Удалить fake-hwclock:
sudo apt-get purge fake-hwclock
Так же теперь нам необходимо исправить файл /lib/udev/hwclock-set поскольку мы больше не используем эмуляцию, а реальные часы.
Для этого закоментируем лишнее: ( левые скобки не учитываем. т.к. напечатаны для корректного отображения текста в блоге
(#if [ -e /run/systemd/system ] ; then
(# exit 0
(#fi
И было бы неплохо еще заккоментировать все что может в будущем вызвать ошибки:
(if [ yes = "$BADYEAR" ] ; then
(# /sbin/hwclock --rtc=$dev --systz --badyear
(/sbin/hwclock --rtc=$dev --hctosys --badyear
(else
(# /sbin/hwclock --rtc=$dev --systz
(/sbin/hwclock --rtc=$dev --hctosys
Установить корректный time zone:
sudo dpkg-reconfigure tzdata
Отредактировать файл /etc/rc.local, вставив перед строкой “exit 0” строку: /sbin/hwclock -s
Отредактировать файл /etc/default/hwclock: HWCLOCKACCESS=no
Проверить системное время командой date и записать его в модуль RTC: sudo hwclock -w . Если команда не проходит, выполнить ее после Reboot
Проверка работы:
Получаем время с аппаратных часов sudo hwclock –r
Если совпадает с date, то все работает
Первоисточники:
https://kvvhost.ru/2017/12/01/ntp-raspberry-pi/
https://arduinoplus.ru/avtomaticheskij-zapusk-prog...
Установка
sudo apt-get install ntp
Чтобы установить ближайшие к нам NTP серверы, откройте файл конфигурации ntp
sudo nano /etc/ntp.conf
И заменим сервера на российские
server 0.ru.pool.ntp.org
server 127.127.1.0 (данные своих системных часов)
server 1.ru.pool.ntp.org
server 2.ru.pool.ntp.org
server ntp21.vniiftri.ru
С синхронизацией разобрались, настроим конфиг на вещание. Добавим строку, которая описывает хосты, на запросы которых будет дан ответ и строки, включающие вещание в нашу локальную сеть:
restrict 192.168.1.1 mask 255.255.255.0
broadcast 192.168.1.255
broadcast 224.0.1.1
restrict 127.127.1.0
Измените первый адрес, выделенный жирным шрифтом, на широковещательный адрес вашей локальной сети. Адрес 224.0.1.1 не меняем, так как эта добавка назначается службой NTP.
Теперь закроем файл конфигурации (CTRL + O, CTRL + X ). Перезапускаем демон ntp:
sudo /etc/init.d/ntp restart
Запуск сервера при старте:
sudo crontab –e
Добавляем строки:
@reboot /etc/init.d/ntp restart (запуск при старте)
/15 * /etc/init.d/ntp restart (перезапуск каждые 15 мин)
Челябинск, Россия
На форуме: AK1