Install
Run this where your agent runs. ClawHub downloads the skill into its workspace.
npx clawhub@latest install dirigera-controlDocumentation
Control lights, outlets, scenes, and other IKEA smart home devices through the Dirigera hub.
Prerequisites
pip install dirigera
Hub Setup
Find Hub IP
Check the router/DHCP client list for "Dirigera" and note its IP address.
If the agent is on the same LAN, try the IP discovery script. It can:
- Scan the subnet for likely candidates (no token required).
- Verify the exact hub IP if a token is available.
- As a last resort, try
generate-tokenagainst candidates (interactive).
python scripts/find_dirigera_ip.py
# or
python scripts/find_dirigera_ip.py --subnet 192.168.1.0/24
# verify with token (if you have it)
python scripts/find_dirigera_ip.py --token <dirigera-token>
# last resort: try generate-token against candidates
python scripts/find_dirigera_ip.py --try-generate-token
Generate Token
IMPORTANT: Token generation REQUIRES PHYSICAL USER ACTION. Follow this workflow:
Step 1: Start Token Generation Script
Run the wrapper script in the background. It will automatically wait for the button press:
python scripts/generate_token_wrapper.py <dirigera-ip-address> &
The token will be saved to dirigera_token.txt by default. To specify a custom location:
python scripts/generate_token_wrapper.py <dirigera-ip-address> --output /path/to/token.txt &
Step 2: END YOUR TURN AND INFORM THE USER
CRITICAL: After starting the script, you MUST:
- End your turn immediately - do not wait or continue processing
- Tell the user: "I've started the token generation process. Please press the ACTION BUTTON on the bottom of your Dirigera hub now. Let me know when you've pressed it."
Step 3: Wait for User Confirmation
The user will:
- Physically press the button on their Dirigera hub
- Reply to you confirming they pressed it (e.g., "Done" or "Pressed")
The script will automatically detect the button press and save the token to the file.
Step 4: Retrieve the Saved Token
After the user confirms, read the token from the file:
from pathlib import Path
token = Path("dirigera_token.txt").read_text().strip()
Or from a custom location:
TOKEN=$(cat /path/to/token.txt)
Then use the token to connect:
import dirigera
hub = dirigera.Hub(token=token, ip_address="<dirigera-ip>")
Alternative: Manual Command
For manual use (not recommended for agents):
generate-token <dirigera-ip-address>
This requires interactive terminal access and doesn't save output automatically.
Troubleshooting
If you cannot find the hub IP address:
- Check the router/DHCP list and look for "Dirigera".
- If the name is missing, match the hub's MAC address label to a new device entry.
- Ensure the hub and client are on the same network.
- If you have candidate IPs, run
generate-tokenagainst them until one succeeds. - If you already have a token, run
python scripts/find_dirigera_ip.py --token <dirigera-token>. - If everything else fails, run
python scripts/find_dirigera_ip.py --try-generate-tokenand follow the prompt.
Hub Connection
import dirigera
hub = dirigera.Hub(
token="token",
ip_address="ip_address"
)
CRITICAL: Attribute Access
Device state is in .attributes, not top-level.
# CORRECT
light.attributes.is_on
light.attributes.light_level
# WRONG - raises AttributeError
light.is_on
light.light_level
Top-level: device.id, device.is_reachable, device.room
State: device.attributes.is_on, device.attributes.light_level
Quick Commands
Discovery
lights = hub.get_lights()
outlets = hub.get_outlets()
controllers = hub.get_controllers()
scenes = hub.get_scenes()
Light Control
light = hub.get_light_by_name(lamp_name="bedroom light")
# Check reachability first
if light.is_reachable:
light.set_light(lamp_on=True)
light.set_light_level(light_level=75)
light.set_color_temperature(color_temp=2700) # Warm white
# Reload after changes
light.reload()
Outlet Control
outlet = hub.get_outlet_by_name(outlet_name="living room")
outlet.set_on(outlet_on=True)
outlet.reload()
Scene Triggering
scene = hub.get_scene_by_name(scene_name="Sove tid")
scene.trigger()
Check Capabilities
# Verify device supports feature before using
if 'colorTemperature' in light.capabilities.can_receive:
light.set_color_temperature(color_temp=3000)
Common Patterns
See references/patterns.md for room-based control, batch operations, status reports, and battery monitoring.
Helper Scripts
Use scripts/helpers.py for common operations: get lights by room, check battery levels, find unreachable devices.
Complete Reference
See references/api.md for:
- Complete attribute reference
- All control methods
- Device capabilities
- Color temperature/hue values
- Troubleshooting
Best Practices
- Always check
device.is_reachablebefore control - Call
device.reload()after control commands - Use
.attributesfor all state access - Add 0.5s delays between rapid commands
- Check capabilities before using features