Настройка модуля GPS

Добавил модуль 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
1 лайк

Отлично!. Рад что получилось, добавлю ваш вариант в вики.

Спасибо! А я правильно понимаю, что этот вариант не использует сигнал 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 при загрузке:

  1. Корректируем /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
  1. Создаем ссылку для systemd

ln -s /lib/systemd/system/gpsd.service /etc/systemd/system/multi-user.target.wants/

  1. Перезапускаем systemctl

systemctl daemon-reload

  1. Возможно в /etc/default/gpsd нужно поставить USBAUTO=“false”, я сейчас ставлю, но не уверен влияет ли это на что-то или нет.
1 лайк

Добавил в Вики
Благодарю за дополнение!

какая получается точность?

с конфигом /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