AK1

 
<<< Назад

Локальный сервер NTP на Raspberry Pi3 с аппаратными часами

Опыт подключения к RaspberryPi3 аппаратных часов DS3231 и установка локально сервера NTP

Заходит чукча в троллейбус, покупает у кондуктора билет.
Спустя некоторое время подходит опять, берет еще один билет.
опять подходит, берет еще... Кондуктор не выдерживает:

  • Слушай, на фига тебе целых три билета? ну первый - понятно, а другие?
    Чукча:
  • Если первый потеряется, однако еще один контролеру останется.
  • А третий зачем?
  • Однако если второй потеряется, то третий будет.
  • НУ А ЕСЛИ ТРЕТИЙ ПОТЕРЯЕТСЯ?
  • Э, однако, чукча не дурак, у чукчи проездной есть...

Это анекдот, а в жизни… Приключился случай – проблемы у провайдера, а у меня пропал интернет. Перезагрузил роутер. Интернета нет, но время сбилось. При перезагрузке некоторых устройств слетело время. Проблемы с задачами, выполняемыми по таймерам.
У части устройств (ESP с прошивкой 1М) в сети свои часы, но у других их нет.
Возникло желание сделать свой NTP сервер с резервными часами на DS3231.

В результате все получилось.

Подключение RTC DS3231 к микрокомпьютеру Raspberry Pi

первоисточники
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, то все работает

Сервер времени NTP в локальной сети на Raspberry Pi

Первоисточники:
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 мин)

Обсуждение (0) (5)

Смотрите так же:
05.09.2022 Частный случай управления GPIO на Raspberry Pi3
06.12.2020 Мажордом и Emoncms

Челябинск, Россия

На форуме: AK1