Показать сообщение отдельно
Старый 29.07.2020, 19:53   #66
AlekSher
Старший Пользователь
 
Регистрация: 28.01.2012
Возраст: 40
Город: Королёв
Регион: 50, 90, 150
Машина: VW POLO LIFTBACK
Сообщений: 106
AlekSher is on a distinguished road
По умолчанию Синхронизация времени с GPS

Всем доброго времени суток.

Продолжаю делиться наработками по теме.

В ситуации отсутствия интернета, ASUS Tinker Board при включении устанавливает системное время на 12 часов 50 минут 13 января 2013 года.

Синхронизация с GPS.

Код:
#!/system/bin/sh

dev=$(cat /etc/gps.conf | grep GPSPORT | cut -d " " -f 2)

while [ -z $(ls -1 ${dev}) ]; do
	sleep 5
done

indicator=$(cat ${dev} | grep -m 1 GGA | head -1 | cut -d "," -f 8)
if [ -z ${indicator} ]; then
	indicator=1
fi

while [ ${indicator} -le 1 ]; do
	sleep 5
	indicator=$(cat ${dev} | grep -m 1 GGA | head -1 | cut -d "," -f 8)
done

while [ 0 = 0 ]; do
RMC=$(cat ${dev} | grep -m 1 RMC | head -1)
get_time=$(echo ${RMC} | cut -d "," -f 2)
get_date=$(echo ${RMC} | cut -d "," -f 10)
month=$(echo ${get_date} | cut -c 3-4)
day=$(echo ${get_date} | cut -c 1-2)
hours=$(echo ${get_time} | cut -c 1-2)
minutes=$(echo ${get_time} | cut -c 3-4)
year=$(echo ${get_date} | cut -c 5-8)
seconds=$(echo ${get_time} | cut -c 5-6)
date -u ${month}${day}${hours}${minutes}${year}.${seconds}
if [ $(date +%s) -lt 1595765879 ]; then
    sleep 5
else
    sleep 1800
fi
done
exit 0
Добавляем в скрипт автозагрузки:
Код:
/system/bin/time_gps.sh > /dev/null &
В итоге:
1. Ждем включения GPS приемника;
2. Ждем сигналы времени (GGA) от двух и более спутников;
3. Синхронизируем время и дату (RMC);
3.1. Если установленная дата и время меньше 1595765879 секунд с 01.01.1970, то повторяем синхронизацию через 5 сек.;
3.2. Если установленная дата и время больше 1595765879 секунд с 01.01.1970, то повторяем синхронизацию через 30 мин.

Последний раз редактировалось AlekSher; 29.07.2020 в 23:00.
AlekSher вне форума   Ответить с цитированием