Добавил модуль GPS конфигурацию Wirenboard как указано в https://wirenboard.com/wiki/index.php?title=Wiren_Board_6:_WBE2R-R-GPS_GPS/GLONASS_Extension_Module
Что делать дальше? Как синхронизировать внутренние часы контроллера по GPS? Настройка ntp я так понимаю не требуется.
Из коробки синхронизация не настроена. У нас описана процедура установки и настройки ntpd для работы с временем из NMEA-сообщений приёмника и PPS-сигналом.
Если микросекундная точность не нужна, то можно ограничиться только NMEA-сообщениями.
Опишите пожалуйста подробнее задачу, постараемся подобрать решение.
Модуль в система представлен просто портом. Для того чтоб NTP демон “знал” как от него получить время - надо заменить ntpd или использовать скрипты.
Есть оборудование которое должно включаться по расписанию, тут Уходит время контроллера было указано что внутренние часы уходят на 10мин в год, для наших задач это много. Возможности синхронизировать время через интернет по ntp нет, поэтому сейчас поставили GPS модуль. Задача заключается в том, чтобы синхронизировать внутренние часы контроллера от GPS, точности ±1сек более чем достаточно.
https://wirenboard.com/wiki/NTP_GPS описано как сделать
Ну и https://www.lammertbies.nl/comm/info/gps-time с пункта “Install gpsd”
Смысл действий - поставить
локальный демон
apt install gpsd -y
Который с одной стороны берет время у GPS а с другой - отдает его ntp.
Застрял на здесь:
root@wirenboard-AP2OY26Z:~/ntp-4.2.8p15# ./configure --enable-linuxcaps
checking for a BSD-compatible install… /usr/bin/install -c
checking whether build environment is sane… yes
checking for a thread-safe mkdir -p… /bin/mkdir -p
checking for gawk… no
checking for mawk… mawk
checking whether make sets $(MAKE)… no
checking whether make supports nested variables… no
checking whether make supports nested variables… (cached) no
checking build system type… armv7l-unknown-linux-gnu
checking host system type… armv7l-unknown-linux-gnu
checking for style of include used by make… none
checking for cc… cc
checking whether the C compiler works… no
configure: error: in /root/ntp-4.2.8p15': configure: error: C compiler cannot create executables See
config.log’ for more details
config.log.txt (10.6 КБ)
Попробуйте пропустить этап со сборкой ntpd и попробовать обычный ntpd из пакетов.
Варианты с NMEA Reference Clock Driver (с драйвером 20 - 127.127.20.0) так и не заработали, работающее решение нашлось здесь https://blog.rapid7.com/2015/07/27/adding-a-gps-time-source-to-ntpd/. Используется SHM Reference Clock (с драйвером 28 - 127.127.28.0)
У меня получилось следующее:
1. ставим пакеты
apt install ntp gpsd gpsd-clients
2. настраиваем gpsd
/etc/default/gpsd:
DEVICES="/dev/ttyMOD3"
GPSD_OPTIONS="-n"
3. настраиваем ntpd
на всякий случай оставил локальный сервер со stratum 10
/etc/ntp.conf:
# local
server 127.127.1.0
fudge 127.127.1.0 stratum 10
# GPS
server 127.127.28.0 minpoll 4 maxpoll 4 prefer
fudge 127.127.28.0 time1 0.0 refid GPS
driftfile /var/lib/ntp/ntp.drift
restrict default nomodify notrust
disable auth
4. проверяем работу
root@wirenboard-AP2OY26Z:~# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
LOCAL(0) .LOCL. 10 l 388 64 100 0.000 0.000 0.002
*SHM(0) .GPS. 0 l 7 16 377 0.000 9.404 20.126
Отлично!. Рад что получилось, добавлю ваш вариант в вики.
Спасибо! А я правильно понимаю, что этот вариант не использует сигнал PPS?
Я не стал использовать, а вообще использование PPS в данном варианте возможно.
Похоже что системное время не сохраняется в rtc и после перезагрузки контроллера время по ntp уже естественно не синхронизируется от GPS т.к. разбег времени слишком большой.
Установил системное время вручную, далее
root@wirenboard-AGRFJBJT:~# hwclock;date
2016-12-01 13:36:05.224965+0300
Tue Jul 21 09:16:15 MSK 2020
после перезагрузки:
root@wirenboard-AGRFJBJT:~# hwclock;date
2016-12-01 13:45:40.763811+0300
Thu Dec 1 13:45:39 MSK 2016
Разве системное время не должно было сохраниться в rtc?
Вообще в WB6 “время” устроено так: таймер в самом кристалл и “энергонезависимый”, на батарейке на основной плате.
Чтобы установить “энергонезависимый” попробуйте
hwclock --systohc --localtime
https://support.wirenboard.com/t/uhodit-vremya-kontrollera/3686/6?u=brainroot
Дополнение к предыдущему варианту конфигурации, если вдруг кто-то будет повторять.
В процессе эксплуатации выявилась следующая проблема. После перезагрузки gpsd автоматически не стартует и соответственно ntp не синхронизируется от спутника. Но если запустить клиента gpsd, например, выполнить команду cgps, то после этого служба gpsd начинает стартовать и время синхронизируется от спутника.
Оказывается это известный баг:
Troubleshooting GPSD
Please note that systemd will only start gpsd on request by clients connecting to the unix or tcp socket.
Командой /etc/init.d/gpsd status можно увидеть текущий статус. Должен быть active (running) и не должно быть ошибок при загрузке.
Для корректной работы нужно настроить systemd на запуск gpsd при загрузке:
- Корректируем /lib/systemd/system/gpsd.service. По умолчанию gpsd стартует после службы chronyd.service, меняем на запуск после wb-hwconf-manager.service, чтобы gpsd стартовала после инициализации GPS-модуля.
[Unit]
Description=GPS (Global Positioning System) Daemon
Requires=gpsd.socket
# Needed with chrony SOCK refclock
# After=chronyd.service
After=wb-hwconf-manager.service
[Service]
EnvironmentFile=-/etc/default/gpsd
ExecStart=/usr/sbin/gpsd -N $GPSD_OPTIONS $DEVICES
[Install]
Also=gpsd.socket
- Создаем ссылку для systemd
ln -s /lib/systemd/system/gpsd.service /etc/systemd/system/multi-user.target.wants/
- Перезапускаем systemctl
systemctl
daemon-reload
- Возможно в /etc/default/gpsd нужно поставить USBAUTO=“false”, я сейчас ставлю, но не уверен влияет ли это на что-то или нет.
Добавил в Вики
Благодарю за дополнение!
какая получается точность?
с конфигом /etc/ntp.conf:
server 127.127.28.2 minpoll 4 maxpoll 4 prefer
fudge 127.127.28.2 time1 -0.021 refid PPS
driftfile /var/lib/ntp/ntp.drift
restrict default nomodify notrust
restrict 127.0.0.1
disable auth
точность синхронизации стремится к 0
root@wirenboard-AJUJOAR3:~# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*SHM(2) .PPS. 0 l 4 16 377 0.000 0.000 0.002
при этом, если подключить PPS к одному из входов на WB-DI14, то метка времени соответствует началу секунды
согласно мануалу выше gpsd выдает ошибки
root@wirenboard:~# systemctl status gpsd
● gpsd.service - GPS (Global Positioning System) Daemon
Loaded: loaded (/etc/systemd/system/gpsd.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2022-01-28 19:51:09 MSK; 3 days ago
Main PID: 339 (gpsd)
CGroup: /system.slice/gpsd.service
└─339 /usr/sbin/gpsd -N -n /dev/ttyMOD4 /dev/pps2
Jan 28 19:51:09 wirenboard systemd[1]: Started GPS (Global Positioning System) Daemon.
Jan 28 19:51:10 wirenboard gpsd[339]: gpsd:ERROR: device open of /dev/ttyMOD4 failed: No such file or directory - retrying read-only
Jan 28 19:51:10 wirenboard gpsd[339]: gpsd:ERROR: read-only device open of /dev/ttyMOD4 failed: No such file or directory
Jan 28 19:51:10 wirenboard gpsd[339]: gpsd:ERROR: initial GPS device /dev/ttyMOD4 open failed
Jan 28 19:51:10 wirenboard gpsd[339]: gpsd:ERROR: device open of /dev/pps2 failed: No such file or directory - retrying read-only
Jan 28 19:51:10 wirenboard gpsd[339]: gpsd:ERROR: read-only device open of /dev/pps2 failed: No such file or directory
Jan 28 19:51:10 wirenboard gpsd[339]: gpsd:ERROR: initial GPS device /dev/pps2 open failed
видимо из-за неготовности девайсов
если рестартовать руками, то начинает работать
пробовал After=wb-rules.service и
Restart=on-failure
RestartSec=5s
- безрезультатно
я не очень понял, что это значит. Если я правильно понимаю вывод ntpq, то всё как раз хорошо: offset стал нулевым, jitter около нуля.
wb-rules тут совершенно не при чём. Надо ставить после wb-hwconf-manager - он инициализирует модули расширения.
я не очень понял, что это значит. Если я правильно понимаю вывод ntpq, то всё как раз хорошо: offset стал нулевым, jitter около нуля.
все верно, чем ближе к 0, тем лучше, однако, если сравнивать с другими девайсами и публичными NTP, то разница времени - ~20 мс
вот вывод другого девайса
remote refid st t when poll reach delay offset jitter
==============================================================================
oPPS(0) .PPS. 2 l 2 8 377 0.000 -0.010 0.015
*SHM(0) .SHM. 5 l 3 8 377 0.000 -2.577 23.920
192.168.0.225 .STEP. 16 u - 1024 0 0.000 0.000 0.000
192.168.0.226 .STEP. 16 u - 1024 0 0.000 0.000 0.000
пример так и должен выглядеть ntpq -p
GPSD для NMEA и ATOM/PPS для PPS
Вывод Wirenboard
remote refid st t when poll reach delay offset jitter
==============================================================================
*SHM(2) .PPS. 0 l - 16 377 0.000 0.001 0.002
при использовании PPS значок должен быть “o”, не уверен, что PPS в принципе используется.
wb-rules тут совершенно не при чём. Надо ставить после wb-hwconf-manager - он инициализирует модули расширения.
стоял до этого wb-hwconf-manager, все равно ошибка
техподдержка посоветовала wb-rules - не помогло.
в ntp.conf смещение относительно 0 было определено экспериментально (time1 -0.021)
скорее всего это не совсем точное значение, да и подбирать руками сдвиг, когда точность идет на микросекунды, не верно.
у нас есть другой NTP сервер, в котором используется ATOM PPS
прикладываю конфиг
restrict 127.0.0.1
driftfile /var/lib/ntp.drift
server 127.127.22.0 minpoll 2 maxpoll 2 prefer
fudge 127.127.22.0 time1 0.099 refid PPS stratum 2
server 127.127.28.0 minpoll 2 maxpoll 4 prefer
fudge 127.127.28.0 flag1 1 time1 0.228 refid SHM stratum 5
tinker panic 0 stepout 1
server 192.168.0.225 iburst
server 192.168.0.226 iburst
На Wirenboard запустить PPS ATOM Не удалось.
в источниках PPS помечается “x”
root@wirenboard-AJUJOAR3:~# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
xSHM(0) .GPS. 0 l 11 16 377 0.000 15.026 9.085
xPPS(2) .PPS. 0 l 10 16 377 0.000 325.717 0.004