#!/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 "======================================"