Автоматическая отправка бэкапа Home Assistant в Telegram

### Установка inotify
sudo apt-get update
sudo apt-get install inotify-tools curl -y


nano /usr/local/bin/ha-backup-watcher.sh #Добавить содержимое сниппета
chmod +x /usr/local/bin/ha-backup-watcher.sh
### Добавим демона
nano /etc/systemd/system/ha-backup-watcher.service # вставить содержимое ↓
#### Конфиг
```
[Unit]
Description=HA Backup to Telegram
After=network.target

[Service]
ExecStart=/usr/local/bin/ha-backup-watcher.sh
Restart=always
User=homeassistant
Group=homeassistant

[Install]
WantedBy=multi-user.target
```

  
### Запуск
sudo systemctl daemon-reload
sudo systemctl enable --now ha-backup-watcher.service

#!/bin/bash

BACKUP_DIR="/var/lib/homeassistant/backup"
BOT_TOKEN="ТОКЕН_ТВОЕГО_БОТА"
CHAT_ID="ТВОЙ_CHAT_ID"

STABLE_CHECKS=3   # сколько раз подряд размер должен совпасть
CHECK_INTERVAL=10 # интервал проверки (сек)

inotifywait -m -e create -e moved_to --format "%f" "$BACKUP_DIR" | while read FILENAME
do
    if [[ "$FILENAME" == *.tar ]]; then
        FILEPATH="$BACKUP_DIR/$FILENAME"
        START_TIME=$(date +%s)
        echo "$(date) Новый бэкап: $FILEPATH"

        # ждём пока файл "замрёт" по размеру
        stable_count=0
        last_size=0
        while true; do
            size=$(stat -c %s "$FILEPATH" 2>/dev/null || echo 0)
            if [[ "$size" -eq "$last_size" && "$size" -gt 0 ]]; then
                ((stable_count++))
            else
                stable_count=0
            fi
            last_size=$size

            if [[ $stable_count -ge $STABLE_CHECKS ]]; then
                break
            fi
            sleep $CHECK_INTERVAL
        done

        END_TIME=$(date +%s)
        DURATION=$((END_TIME - START_TIME))

        # собираем инфу
        FILESIZE=$(du -h "$FILEPATH" | cut -f1)
        FILEDATE=$(stat -c %y "$FILEPATH" | cut -d'.' -f1)
        FILEHASH=$(sha256sum "$FILEPATH" | awk '{print $1}')

        CAPTION="📦 Новый бэкап готов

🗄 Имя файла: $FILENAME
📏 Размер: $FILESIZE
⏰ Дата создания: $FILEDATE
🔑 SHA256: $FILEHASH
⏳ Время до готовности: ${DURATION} сек."

        curl -s -F document=@"$FILEPATH" \
             -F chat_id="$CHAT_ID" \
             -F caption="$CAPTION" \
             "https://api.telegram.org/bot$BOT_TOKEN/sendDocument" \
             >/dev/null

        echo "$(date) Отправлено в Telegram: $FILENAME ($FILESIZE)"
    fi
done