Raspberry PI 3 LibreELEC DS1307

Подготовка

Как ни странно установка часов реального времени для libreelec на Raspberry pi 3 вызвала некие трудности
Статей достаточно, но они не описывают последовательность целиком
Приступим
Покупаем модуль часов ds1307

Установка

Подключаем как группу P2 по шине I2C согласно распиновки Raspberry pi
А именно SDA,SCL – контакты 3,5. И питание, контакты 4,6. Всё подписано на плате ds1307, распиновку Raspberry pi 3 на всякий случай прилагаю
У меня старый корпус nespi case. Сейчас он продаётся уже с модулем часов.
В моём случае питание часов воткнуто туда где должен быть вентилятор, так я его не использую, достаточное охлаждение дают мощные радиаторы
В шлейфе уже задействованы провода SDA,SCL, их назначение мне неизвестно, так как I2C до этого момента не использовался
Так как я подпаял провода от старого корпуса компьютера, то я просто переставил их в этот же шлейф

Подготовка LibreELEC

Запускаем libreelec.
Теперь необходимо поставить дополнения для поддержки GPIO и i2c-tools
Идем Система – Настройки – Дополнения – Установить из репозитария – LibreELEC Add-ons – Программные дополнения
Ставим
Raspberry Pi Tools
System Tools

Перезагружаемся

kodi gpio

Программная часть

Включем SSH если не включен и подключаемся
По идее модуль уже включен в ядро. Может я его влючил на этапе эксприментов. Но на всякий случай можно сделать подключение
Или проверить там ли он изначально, просто переставлять систему у меня планов особо не было

modprobe rtc-ds1307

Затем проверим определились ли часы

i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- -- 

Цифра 68 значит что по адресу 0x68 появились часы. Так гласят все статьи. Если этого не случилось, то ищем проблему в подключении
Дальше даем системе понять что это часы. Здесь как раз расхождение в пути в отличии от большинства статей

echo ds1307 0x68 > /sys/class/i2c-dev/i2c-1/device/new_device

После этого в системе будет установлено время автоматом.
Не смотря на все указанные регионы у меня выставляется время +3 часа. Так что понятия не имею что делает в этот момент система
Читаем значение часов

LibreELEC:~ # hwclock -r
Tue Aug 20 10:47:23 2019  0.000000 seconds

Устанавливаем время в системе с часов

hwclock -s

Устанавливаем нужное время и дату для системы

LibreELEC:~ # date -s '2019-08-20 09:52:40'
Tue Aug 20 09:52:40 MSK 2019

Запишем правильное значение в часы

LibreELEC:~ # hwclock -r
Sat Jan  1 03:10:10 2000  0.000000 seconds
LibreELEC:~ # hwclock -w
LibreELEC:~ # hwclock -r
Tue Aug 20 09:53:18 2019  0.000000 seconds

Теперь сделаем чтобы время с модуля часов устанавливалось при загрузке

nano /storage/.config/autostart.sh
#!/bin/bash
echo ds1307 0x68 > /sys/class/i2c-dev/i2c-1/device/new_device

Оказалось что если на этом этапе сделать установку времени, то оно будет отображаться неправильно. Время надо устанавливать после запуска оболочки KODI. Поэтому прибегнем к планировщику. Будем каждую минуту читать время с модуля ds1307

crontab -e
 * * * * hwclock -s

Выключаемся

poweroff

Ждем минут 10. Отключаем сеть. Затем включаем и смотрим установилось ли время
Подключаемся по ssh и проверяем определены ли часы

hwclock -r

PS: ! Наблюдения в процессе работы !

При подключении сети после продолжительной работы в модуль часов периодически попадает время со значением минус 3 часа. Исходя из логики так как мой регион указан TIMEZONE=Europe/Moscow то возможно kodi или дополнения libreelec записывают hwclock в формате utc. Это объясняет то значение которое как я писал выше берется на старте. На данный момент принято решение читать время именно так.
Так же нашел в коде libreelec явную работу с часами подтверждающую догадки

find / -iname 80-clock.rules
cat /usr/lib/udev/rules.d/80-clock.rules
ACTION=="add", SUBSYSTEM=="rtc", RUN+="/sbin/hwclock --hctosys --utc --rtc=/dev/%k"
ACTION=="add", ENV{MAJOR}=="10", ENV{MINOR}=="135", RUN+="/sbin/hwclock --hctosys --utc --rtc=/dev/%k"

Это значит что от постоянного считывания часов через crontab можно отказаться. Они обрабатываются на старте правилами udev

Записать значения в формате utc так же:

LibreELEC:~ # hwclock -u -w
LibreELEC:~ # hwclock -r
Fri Aug 30 15:32:54 2019  0.000000 seconds
LibreELEC:~ # hwclock -u -r
Fri Aug 30 18:32:59 2019  0.000000 seconds

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *