30.01.2024: Ищу решение

Я уже много раз писал про мой Home Assistant, установленный на TV-приставку RK3318 и про то, что эта паль безбожно виснет время от времени. Самому надоело. Сегодня очередной виток этой истории.

Во-первых, я прикрутил к этой коробочке пятивольтовый кулер… Кулерок… Кулерёныш.

Не знаю как назвать это чудо инженерной мысли, но он действительно очень маленький.

Просто снял наклейку с верхней крышки, просверлил большое отверстие, прикрутил кулер мелкими болтиками, да пока так и оставил, даже не пытаясь запитать.

Радиатор на процессоре заново посадил на термопасту.

“Из коробки” он лежал на процессоре и, частично, на трех модулях памяти (из 4-х). Судя по всему, высота процессора и этих модулей немного разная, а потому радиатор прилегал не так плотно как хотелось.

Сейчас (на пассивном охлаждении) температура процессора уменьшилась градусов на 5.

Пришло время искать решение для перезапуска сервера в случае зависания. Мне оно видится простым.

Берём контроллер ESP32. Пишем автоматизацию (или сенсор) который Home Assistant будет пинговать, скажем, раз в 60-90 секунд по сети.

Контроллер прошиваем так, чтобы на нём работал таймер, допустим на 900 секунд. Как только таймер доходит до нуля, он на 15 секунд подаёт напряжение на какой-нибудь пин. Напряжение на пине заставляет реле разорвать контакт питания RK3318. После этого таймер сбрасывается на те же 900 секунд.

Если контроллер получает пинг от Home Assistant, то таймер сбрасывается (на 900 секунд).

Кроме того, в прошивке предусматриваем контроль ещё двух реле.

  • Первое – для того, чтобы разрывать питание у роутера, если тот не пингуется какое-то время.
  • Второе – для включения/выключения кулера.

Отличие в том, что эти два реле будут контролироваться с помощью автоматизаций Home Assistant.

Хочется, чтобы прошивка контроллера проводилась через ESPHome.

Итак, предварительное ТЗ есть! Ищу готовое решение и… не нахожу ничего подходящего.

  • Есть решения, где перезагружается “софтверная” часть Home Assistant.
  • Кто-то создаёт софтверную кнопку на панели Home Assistant для перезагрузки со смартфона, например.
  • Пишут про перезагрузку других устройств, подключенных к Home Assistant, когда те зависают.
  • Есть статьи по перезагрузке контроллеров ESP.
  • Некоторые умельцы подключают сервер с Home Assistant через “умную розетку”, а затем включают/выключают ее удалённо через какой-нибудь мобильный сервис. Например, через Умный дом от Яндекса или через eWelink.
  • Есть вариант перезагрузки роутера с помощью ESP8266 под контролем автоматизации Home Assistant.

Я что, не там ищу? Или человечество не додумалось до того, что я описал в ТЗ?

Как перезапускать сервер с Home Assistant (на базе Rockchip RK3318 с OS Armbian) при аппаратном сбое с помощью watchdog’а

Оказывается, пока я страдал и придумывал извращенские костыли, “человечество таки-додумалось и сделало хорошо”. Более того, внедрило возможность аппаратной перезагрузки прямо в имеющееся “железо” (Rockchip RK3318).

Что нужно, чтобы воспользоваться этим “благом цивилизации”?

Заходим на устройство по SSH, переходим в папку /dev и ищем там “файл” устройства watchdog. У меня там их сразу два: watchdog и watchdog0.

Или это можно сделать командой: ls -la /dev/watchdog*

В моей версии прошивки (Armbian 22) сервис watchdog уже предустановлен.

Если версия ниже 22.2, то установить можно было бы вот такими командами:

apt-get update
apt-get install watchdog

Ну а я сразу открываю /etc/default/watchdog на редактирование и ищу там вот такие строчки:

run_watchdog=1
run_wd_keepalive=1
watchdog_module="none"
watchdog_options="-s -v -c /etc/watchdog.conf"

Если закомментированы – раскомментируем. Если отсутствуют – добавляю.

У меня отсутствовала строка: watchdog_options=”-s -v -c /etc/watchdog.conf”

Теперь иду в /etc/watchdog.conf Там должны быть раскомментированы вот такие строки.

watchdog-timeout = 15
watchdog-device = /dev/watchdog
realtime = yes
priority = 1

У меня в строке watchdog-timeout стояло значение 60. Исправил на 15.

Поскольку я работал из под root’а, то две следующие команды, которые выполнил в консоли, выглядели так.

systemctl enable watchdog.service
systemctl start watchdog.service

Далее, перезагружаю “сервер”.

После этого снова захожу и в консоли пишу вот такую команду.

service watchdog status

Если всё хорошо, то в ответном сообщении будет строчка с “Active: active (running)”.

Прожимаю Ctrl-Z, чтобы выйти из просмотра статуса и устраиваю сбой, чтобы убедиться, что система перезагрузится. Для этого ввожу вот такую команду.

Применяя эту команду нужно быть готовым к тому, что устройство придётся выкинуть. Говорят, бывали прецеденты, а потому не советую так делать.

echo c > /proc/sysrq-trigger

И да, меня выкинуло из консоли, а спустя некоторое время сервер САМ перезагрузился, что и требовалось!

И не пришлось паять никаких костылей на ESP32 и прочих контроллерах.

Т.е. задача упрощается. Теперь мне нужны лишь реле для управления питанием роутера и кулера. Всё-таки знание – сила.

Напишите комментарий

Введите имя

Введите адрес электронной почты

Введите адрес вашего сайта

Нажмите эту кнопку, чтобы отправить комментарий.

Введите текст комментария