Блог

Доработка скрипта резервного копирования

В статье Простой скрипт сохранения резервной копии на флешку или удалённый сервер для HomeAssistant я описал пример создания скрипта резервного копирования, но в нём есть один существенный недостаток, после его выполнения неизвестно завершилось ли наше копирование успешно или же нет. Лёгкий гуглинг не дал результатов как можно выяснить результат выполнения команды аддоном, в документации к SSH & Web Terminal я тоже ничего подобного не нашёл, поэтому было решено задействовать для этих целей MQTT, в результате скрипт я привёл к следующему виду:

#!/bin/bash date=`date " %F"` echo $date STORE_DAYS=3 SRC=/backup/ DST=/backup/remote/ # Новые переменные начало MQTT_USER=mqtt # имя пользователя MQTT MQTT_PASS=mqtt # пароль пользователя MQTT MQTT_HOST=192.168.1.1 # Адрес MQTT сервера MQTT_TOPIC="backup/status" # Топик для публикации выполнения скрипта # Новые переменные конец rsync -a \ --delete \ --remove-source-files \ --exclude 'remote' \ $SRC $DST/Processing-$date \ && cd $DST \ && mv Processing-$date $date \ && find. -type d -mtime $STORE_DAYS -exec rm -rf {} \; \ > /dev/null # Проверка статуса выполнения команды и публикация в топик if [ $? -eq 0 ] # Если предыдущая команда (rsync) выполнилась успешно (0) then MQTT_MSG="true" # Сообщаем, что всё хорошо else MQTT_MSG="false" # Сообщаем, что что-то пошло не по плану fi mosquitto_pub -u $MQTT_USER -P $MQTT_PASS -h $MQTT_HOST -t $MQTT_TOPIC -m $MQTT_MSG # Публикуем сообщение в MQTT

Затем нужно создать сенсор в Home Assistant

- platform: mqtt name: backup_state state_topic: backup/status

И доработать автоматизацию, чтобы уведомление в Telegram приходило в зависимости от статуса сенсора backup_state также после отправки уведомления, я меняю статус сенсора на unknown, это на случай того, что если вдруг что-то пойдёт не так, я об этом узнал.

- id: '1594305084220' alias: Бэкап на удалённый сервер description: '' trigger: - at: 01:50:00 platform: time condition: [] action: - data_template: name: hassio_{} service: hassio.snapshot_full - delay: 00:05:00 - data: addon: a0d7b954_ssh input: bash /config/scripts/backup.sh service: hassio.addon_stdin - delay: 00:05:00 - service: notify.telega data_template: message: > {% if is_state('sensor.backup_state', 'true')%} Резервное копирование выполнено {% elif is_state('sensor.backup_state', 'false')%} ВНИМАНИЕ! Резервное копирование не выполнено {% else %} АХТУНГ! АХТУНГ! Что-то сломалось в резервном копировании, нужно вмешательство! {%endif%} - service: mqtt.publish data: topic: backup/status payload: unknown

Пока делал это, меня посетила интересная мысль, что при помощи mosquitto_pub можно получать и статус домашнего компьютера на ОС Linux, а именно знать кто конкретно находится за компьютером (если несколько пользователей), знать активен ли сейчас пользователь и на этом настроить автоматизацию. Например у меня в "кабинете" есть датчик движения который включает свет, а вот от автоматического выключения пришлось отказаться, так как он не видит движения когда я нахожусь за компьютером. Изначально я хотел приладить какой-нибудь сонар или что-то подобное, но теперь это не нужно, достаточно просто знать активен ли пользователь за компьютером или же нет и на этом настроить выключение света. Скорее всего на Windows тоже можно провернуть что-то подобное. А может быть вы знаете какие-то другие решения? Поделитесь в комментариях.

PS Если кому-то кроме меня интересно отслеживание статуса пользователя через MQTT напишите об этом, будет повод написать статью :)

0

Вернуться назад
Вернуться назад