Newer
Older
homeassistant-infra / scripts / download-ha-config-api.sh
#!/bin/bash
#
# Pobieranie konfiguracji Home Assistant przez API (bez SSH)
# Użycie: ./download-ha-config-api.sh [test|prod]
#

set -e

ENVIRONMENT="${1:-test}"

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

HA_USER="WK"
HA_PASS="QWer!@34"

echo "======================================"
echo "📥 Pobieranie konfiguracji HA"
echo "======================================"
echo "Środowisko: $ENVIRONMENT"
echo "URL: $HA_URL"
echo "======================================"
echo ""

# Krok 1: Logowanie i uzyskanie tokenu
echo "🔐 Logowanie do Home Assistant..."

# Uzyskaj flow_id dla logowania
FLOW_INIT=$(curl -s -X POST "${HA_URL}/auth/login_flow" \
    -H "Content-Type: application/json" \
    -d '{"client_id": "http://localhost/", "handler": ["homeassistant", null], "redirect_uri": "http://localhost/"}')

FLOW_ID=$(echo "$FLOW_INIT" | grep -o '"flow_id":"[^"]*"' | cut -d'"' -f4)

if [ -z "$FLOW_ID" ]; then
    echo "❌ Nie można uzyskać flow_id"
    echo "   Odpowiedź API: $FLOW_INIT"
    exit 1
fi

echo "   Flow ID: $FLOW_ID"

# Zaloguj się używając username/password
AUTH_RESPONSE=$(curl -s -X POST "${HA_URL}/auth/login_flow/${FLOW_ID}" \
    -H "Content-Type: application/json" \
    -d "{\"client_id\": \"http://localhost/\", \"username\": \"${HA_USER}\", \"password\": \"${HA_PASS}\"}")

AUTH_CODE=$(echo "$AUTH_RESPONSE" | grep -o '"code":"[^"]*"' | cut -d'"' -f4)

if [ -z "$AUTH_CODE" ]; then
    echo "❌ Logowanie nie powiodło się"
    echo "   Odpowiedź: $AUTH_RESPONSE"
    echo ""
    echo "💡 Sprawdź czy login/hasło są poprawne:"
    echo "   Login: $HA_USER"
    echo "   Hasło: $HA_PASS"
    exit 1
fi

echo "✅ Zalogowano pomyślnie"

# Wymień code na token
TOKEN_RESPONSE=$(curl -s -X POST "${HA_URL}/auth/token" \
    -H "Content-Type: application/x-www-form-urlencoded" \
    -d "grant_type=authorization_code&code=${AUTH_CODE}&client_id=http://localhost/")

ACCESS_TOKEN=$(echo "$TOKEN_RESPONSE" | grep -o '"access_token":"[^"]*"' | cut -d'"' -f4)

if [ -z "$ACCESS_TOKEN" ]; then
    echo "❌ Nie można uzyskać tokenu"
    echo "   Odpowiedź: $TOKEN_RESPONSE"
    exit 1
fi

echo "✅ Token dostępu uzyskany"
echo ""

# Krok 2: Pobieranie informacji o integracji
echo "📊 Pobieranie informacji o konfiguracjach..."

# Lista integracji
INTEGRATIONS=$(curl -s "${HA_URL}/api/config/config_entries" \
    -H "Authorization: Bearer ${ACCESS_TOKEN}")

echo ""
echo "📋 Znalezione integracje:"
echo "$INTEGRATIONS" | python3 -c "
import sys, json
try:
    data = json.load(sys.stdin)
    for entry in data:
        domain = entry.get('domain', 'unknown')
        title = entry.get('title', 'N/A')
        entry_id = entry.get('entry_id', 'N/A')
        print(f'  • {domain}: {title} (ID: {entry_id})')
except:
    print('  Brak integracji lub błąd parsowania')
"

# Zapisz do pliku
mkdir -p ~/homeassistant-infra/ha-config-${ENVIRONMENT}
echo "$INTEGRATIONS" > ~/homeassistant-infra/ha-config-${ENVIRONMENT}/integrations.json

echo ""
echo "💾 Dane zapisane w: ~/homeassistant-infra/ha-config-${ENVIRONMENT}/"
echo "   Token: (zapisany w zmiennej \$ACCESS_TOKEN)"
echo ""
echo "🔧 Możesz teraz użyć API do dalszych operacji:"
echo "   export HA_TOKEN=\"${ACCESS_TOKEN}\""
echo "   curl -H \"Authorization: Bearer \$HA_TOKEN\" ${HA_URL}/api/states"
echo ""
echo "======================================"