smart-home

Installation
SKILL.md

Smart Home Control

Overview

Control smart home devices from the terminal via REST APIs.

Philips Hue

Discover bridge

curl -s https://discovery.meethue.com | jq '.[0].internalipaddress'

Create API user (one-time, press bridge button first)

curl -s -X POST "http://<bridge-ip>/api" \
  -d '{"devicetype":"codebuddy#terminal"}' | jq

Control lights

HUE_BRIDGE="http://<bridge-ip>/api/<username>"

# List all lights
curl -s "$HUE_BRIDGE/lights" | jq 'to_entries[] | {id: .key, name: .value.name, on: .value.state.on}'

# Turn on light 1
curl -s -X PUT "$HUE_BRIDGE/lights/1/state" -d '{"on":true}'

# Set color (hue: 0-65535, sat: 0-254, bri: 0-254)
curl -s -X PUT "$HUE_BRIDGE/lights/1/state" -d '{"on":true,"hue":46920,"sat":254,"bri":254}'

# Turn off all lights
curl -s "$HUE_BRIDGE/lights" | jq -r 'keys[]' | while read id; do
  curl -s -X PUT "$HUE_BRIDGE/lights/$id/state" -d '{"on":false}'
done

Scenes

# List scenes
curl -s "$HUE_BRIDGE/scenes" | jq 'to_entries[] | {id: .key, name: .value.name}'

# Activate scene
curl -s -X PUT "$HUE_BRIDGE/groups/0/action" -d '{"scene":"<scene-id>"}'

Home Assistant

API access

HA_URL="http://<ha-ip>:8123"
HA_TOKEN="your-long-lived-access-token"

# List entities
curl -s "$HA_URL/api/states" -H "Authorization: Bearer $HA_TOKEN" \
  | jq '.[].entity_id' | head -20

# Get entity state
curl -s "$HA_URL/api/states/light.living_room" -H "Authorization: Bearer $HA_TOKEN" | jq

# Turn on
curl -s -X POST "$HA_URL/api/services/light/turn_on" \
  -H "Authorization: Bearer $HA_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"entity_id": "light.living_room"}'

# Turn off
curl -s -X POST "$HA_URL/api/services/light/turn_off" \
  -H "Authorization: Bearer $HA_TOKEN" \
  -d '{"entity_id": "light.living_room"}'

Tips

  • Store bridge IP and API key in .env for convenience
  • Hue bridge button must be pressed within 30s of creating a user
  • Home Assistant long-lived tokens: Profile → Long-Lived Access Tokens
  • Use jq to filter large entity lists: | jq '.[] | select(.entity_id | startswith("light."))'
Related skills
Installs
2
GitHub Stars
7
First Seen
Mar 18, 2026