Newer
Older
homeassistant-infra / scripts / export-ha-config.sh
#!/bin/bash
#
# Export konfiguracji Home Assistant (integracje, encje, automatyzacje)
# UΕΌycie: ./export-ha-config.sh [test|prod]
#

set -e

ENVIRONMENT="${1:-test}"

if [ "$ENVIRONMENT" = "test" ]; then
    HA_URL="http://192.168.50.151:8123"
    OUTPUT_DIR="ha-config-test"
elif [ "$ENVIRONMENT" = "prod" ]; then
    HA_URL="http://192.168.50.242:8123"
    OUTPUT_DIR="ha-config-prod"
else
    echo "❌ Użycie: $0 [test|prod]"
    exit 1
fi

echo "╔═══════════════════════════════════════════════════════════════════╗"
echo "β•‘                                                                   β•‘"
echo "β•‘         πŸ“₯ Export konfiguracji Home Assistant                    β•‘"
echo "β•‘                                                                   β•‘"
echo "β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•"
echo ""
echo "Środowisko: ${ENVIRONMENT^^}"
echo "URL: $HA_URL"
echo ""

# SprawdΕΊ czy token jest juΕΌ ustawiony
if [ -z "$HA_TOKEN" ]; then
    echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
    echo "πŸ” Potrzebny Long-Lived Access Token"
    echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
    echo ""
    echo "Jak uzyskać token:"
    echo "  1. OtwΓ³rz: $HA_URL"
    echo "  2. Zaloguj siΔ™ (WK / QWer!@34)"
    echo "  3. Kliknij na nazwΔ™ uΕΌytkownika (lewy dolny rΓ³g)"
    echo "  4. PrzewiΕ„ do \"Long-Lived Access Tokens\""
    echo "  5. Kliknij \"Create Token\""
    echo "  6. Nazwa: \"Export Script\""
    echo "  7. Skopiuj wygenerowany token"
    echo ""
    read -p "πŸ“ Wklej token tutaj: " HA_TOKEN
    echo ""
    
    if [ -z "$HA_TOKEN" ]; then
        echo "❌ Brak tokenu!"
        exit 1
    fi
fi

# Weryfikacja tokenu
echo "πŸ” Weryfikacja tokenu..."
API_CHECK=$(curl -s -w "%{http_code}" -o /dev/null \
    -H "Authorization: Bearer $HA_TOKEN" \
    "${HA_URL}/api/")

if [ "$API_CHECK" != "200" ]; then
    echo "❌ Token nieprawidΕ‚owy lub wygasΕ‚ (HTTP $API_CHECK)"
    exit 1
fi

echo "βœ… Token OK!"
echo ""

# Tworzenie katalogu
mkdir -p ~/$OUTPUT_DIR
cd ~/$OUTPUT_DIR

echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "πŸ“₯ Pobieranie danych..."
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""

# Integracje
echo "  πŸ“¦ Integracje (config_entries)..."
curl -s -H "Authorization: Bearer $HA_TOKEN" \
    "${HA_URL}/api/config/config_entries" > integrations.json

# Encje (states)
echo "  πŸ”’ Encje (states)..."
curl -s -H "Authorization: Bearer $HA_TOKEN" \
    "${HA_URL}/api/states" > states.json

# Core config
echo "  βš™οΈ  Core config..."
curl -s -H "Authorization: Bearer $HA_TOKEN" \
    "${HA_URL}/api/config/core" > core_config.json

# Services
echo "  πŸ› οΈ  Services..."
curl -s -H "Authorization: Bearer $HA_TOKEN" \
    "${HA_URL}/api/services" > services.json

# Events
echo "  πŸ“’ Events..."
curl -s -H "Authorization: Bearer $HA_TOKEN" \
    "${HA_URL}/api/events" > events.json

echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "βœ… Dane pobrane!"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""

# Analiza integracji Deye
echo "πŸ” Szukam integracji Deye..."
echo ""

python3 << 'PYEOF'
import json, os

with open('integrations.json') as f:
    integrations = json.load(f)

deye_found = False
for entry in integrations:
    domain = entry.get('domain', '')
    title = entry.get('title', '')
    
    if 'deye' in domain.lower() or 'deye' in title.lower():
        deye_found = True
        print(f"βœ… Znaleziono: {domain}")
        print(f"   TytuΕ‚: {title}")
        print(f"   ID: {entry.get('entry_id')}")
        print(f"   Data: {json.dumps(entry.get('data', {}), indent=6)}")
        print()

if not deye_found:
    print("⚠️  Nie znaleziono integracji Deye w config_entries")
    print("   Może być skonfigurowana przez YAML")
    print()

# Lista wszystkich integracji
print("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")
print("πŸ“‹ Wszystkie integracje:")
print("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")
print()

domains = {}
for entry in integrations:
    domain = entry.get('domain', 'unknown')
    domains[domain] = domains.get(domain, 0) + 1

for domain, count in sorted(domains.items()):
    print(f"  β€’ {domain}: {count} config(s)")

PYEOF

echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "πŸ’Ύ Dane zapisane w:"
echo "   ~/$OUTPUT_DIR/"
echo ""
ls -lh
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "πŸš€ NastΔ™pne kroki:"
echo "   1. SprawdΕΊ pliki w ~/$OUTPUT_DIR/"
echo "   2. Skopiuj do repozytorium Git"
echo "   3. Deploy na PROD (jeΕ›li gotowe)"
echo ""