25.01.2024: Зачётный четверг
Кажется я словил депрессию. Такое… липкое, знобливое, мерзотное ощущение, словно душа скушала какую-то пакость и теперь её плохо.
Тем временем, сервер с Home Assistant («коробочка») пережил ночь и включил освещение утром. Не зря я его настраивал в третьем часу.
Но он ведь будет и дальше падать, как падал до этого? Или нет?
Вчера выяснил, что Home Assistant запускается на моей машине в нескольких docker-контейнерах. Самый висючий и бисючий как раз имеет имя «homeassistant». Иногда он просто исчезает из списка запущенных, а иногда в статусе пишется «Exited» и подниматься обратно он не собирается.
И как рестартовать контейнер «homeassistant» автоматически?
В сети описаны способы, например для случаев, когда home assistant установлен и прописан в docker-compose.yaml, но это не мой случай.
Кто-то предложил проверять запущен-ли контейнер и рестартовать его с помощью crontab раз в минуту. Но во-первых, как по мне, это слишком часто. Во-вторых, это никак не поможет от «Exited».
А что если… Погоди! Вот оно решение! Итак! Захожу под рутом (по SSH) в систему и ввожу команду:
crontab -e
Открывается файл с расписаниями для cron.
Вписываю туда вот такую строку.
*/30 * * * * docker ps --filter name=^homeassistant$ | grep -q Up || docker start homeassistant
Нажимаю Enter (чтобы после неё был отступ, иначе не сохранит), сохраняю. Можно ещё перезагрузиться.
Как это работает?
- Команда docker ps —filter name=^homeassistant$ фильтрует все запущенные контейнеры по имени и выводит только те, чьё имя «homeassistant».
- Команда grep -q Up ищет «Up» в этом выводе. «Up» должен быть в статусе контейнера, если он работает. Параметр -q означает, что результат не нужно показывать в консоли.
- Команда || docker start homeassistant запустит контейнер «homeassistant», если ничего не нашлось.
Соответственно, если нам нужно убедиться, что наш контейнер запущен и здоров, вводим в консоль docker ps —filter name=^homeassistant$ | grep Up и смотрим. Если контейнер вывелся, то всё ОК. Если пусто, то у нас проблемы.Надеюсь это поможет. А ещё надеюсь, что мне не придётся поступать так с остальными контейнерами.
Впрочем, их можно будет контролировать не кроном, а через автоматизацию. Ну или нет.
Тем не менее, восстанавливать уничтоженное вчера предстоит ещё долго. Ну а пока засчитаю себе маленькое достижение. Всё-таки новый для меня вариант автоматизации через cron и grep. Обычно я подобные вещи делал скриптами.
Восстанавливаю функцию проговаривания сообщений через колонку с Алисой.
До этого использовал способ проще, но он работать перестал. Пришлось вернуться к предыдущему.
service: media_player.play_media entity_id: media_player.yandex_station_ID_КОЛОНКИ_В_ХОУМ_АССИСТЕНТЕ data: media_content_id: "{{ trigger.data.mess }}" media_content_type: text
Проверил, работает.
Не работает проговаривание количества оставшихся приседаний. Они функционировали через свитч, но похерились на вчерашнем вайпе.
Обеденный перерыв. Налаживаю проговаривание приседаний и уведомления о старте HA в Телеграм.
С проговариванием всё как писал в одном из предыдущих постов. Там довольно сложная конструкция, упиханная в php-скрипт на одном сервере. Нужно лишь настроить говорилку (это делал выше) и создать кнопку без статуса.
command_line: # ********* тут куча свитчей, а уже дальше сенсоры # Счётчик приседаний - switch: name: 'Голосовой счётчик приседаний' icon: 'mdi:diving' command_on: '/usr/bin/curl -X GET https://сайт/путь_к_скрипту_генерации_фразы/squats/' command_off: '/usr/bin/curl -X GET https://сайт/путь_к_скрипту_генерации_фразы/squats/' unique_id: 'Squats_on_Day_http'
С Телеграмом ещё проще.
# Telegram telegram_bot: - platform: polling api_key: АПИ_БОТА allowed_chat_ids: - ID_ЧАТА1 - ID_ЧАТА2 notify: - name: jeeves platform: telegram chat_id: ID_ЧАТА1
Здесь делается служба, а затем вызывается в автоматизации как… служба. Имя службы, в данном случае, jeeves.
Таких notify можно сделать несколько, на разные чаты (читай — пользователи/каналы).
Обед продолжается, и раз сегодня 0°C, то полез чистить окна на потолке. Открыл, завалил снегом весь чердак, закрыл, убрал бардак.
Почистить полноценно не получится. Тут нужен небольшой грузовик и пара альпинистов с лопатам на крышу. А же туда вылезать не рискнул.
А так-ли теперь (после манипуляций с кроном) коробочке нужен вотчдог?
С одной стороны вроде как и нет, но с другой, его можно приспособить ещё и для включения системы охлаждения. Скажем, если температура процессора скакнёт выше 55°C.
Вечер. Попробовал перепрошить ESP8266 с помощью ESPHome. Несколько раз! И всякий раз попытка завершалась ошибками.
С горя засел играть в Palworld и залип до глубокой ночи.
Напишите комментарий