63 lines
2.0 KiB
Bash
Executable File
63 lines
2.0 KiB
Bash
Executable File
#!/bin/bash
|
|
# discover-home-assistant.sh — Query Home Assistant REST API for entity metadata
|
|
# Usage: ./discover-home-assistant.sh
|
|
# Requires: curl, jq
|
|
|
|
set -euo pipefail
|
|
|
|
HA_URL="https://hass.moritzgraf.de"
|
|
HA_TOKEN="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiI2NDMyZTI1MDIzZjU0ZmFiYTU3OTc0ODYyMzg3M2ExZSIsImlhdCI6MTc4MjczMTY4NiwiZXhwIjoyMDk4MDkxNjg2fQ.u8kFHoYL2kdhVenfe3BiWcNkN_en3yn91MRGSVJvbmw"
|
|
|
|
echo "=== Home Assistant Entity Discovery ==="
|
|
echo "URL: $HA_URL"
|
|
echo ""
|
|
|
|
# Get all entities
|
|
echo "→ Fetching all entities..."
|
|
ENTITIES=$(curl -s -H "Authorization: Bearer $HA_TOKEN" "$HA_URL/api/states")
|
|
|
|
if [ -z "$ENTITIES" ] || echo "$ENTITIES" | jq -e '. == null' >/dev/null 2>&1; then
|
|
echo "ERROR: Failed to fetch entities. Check token and connectivity."
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
echo "=== Entity Summary ==="
|
|
echo "$ENTITIES" | jq -r '
|
|
[.[] | {
|
|
entity_id,
|
|
state,
|
|
friendly_name: (.attributes.friendly_name // ""),
|
|
unit: (.attributes.unit_of_measurement // ""),
|
|
device_class: (.attributes.device_class // ""),
|
|
domain: (.entity_id | split(".")[0])
|
|
}]
|
|
| sort_by(.domain, .entity_id)
|
|
| .[]
|
|
| "\(.entity_id) | state=\(.state) | name=\(.friendly_name) | unit=\(.unit) | class=\(.device_class) | domain=\(.domain)"
|
|
'
|
|
|
|
echo ""
|
|
echo "=== Domains (entity types) ==="
|
|
echo "$ENTITIES" | jq -r '[.[].entity_id | split(".")[0]] | unique | .[]'
|
|
|
|
echo ""
|
|
echo "=== Entities with unit_of_measurement (likely sensor data in InfluxDB) ==="
|
|
echo "$ENTITIES" | jq -r '
|
|
[.[] | select(.attributes.unit_of_measurement != null) | {
|
|
entity_id,
|
|
unit: .attributes.unit_of_measurement,
|
|
friendly_name: (.attributes.friendly_name // ""),
|
|
device_class: (.attributes.device_class // "")
|
|
}]
|
|
| sort_by(.unit, .entity_id)
|
|
| .[]
|
|
| "\(.entity_id) | \(.unit) | \(.device_class) | \(.friendly_name)"
|
|
'
|
|
|
|
echo ""
|
|
echo "=== Device classes ==="
|
|
echo "$ENTITIES" | jq -r '[.[].attributes.device_class | select(. != null)] | unique | .[]'
|
|
|
|
echo ""
|
|
echo "=== Discovery complete ===" |