Instalar en Claude Code
Copiargit clone --depth 1 https://github.com/tonylofgren/aurora-smart-home /tmp/node-red && cp -r /tmp/node-red/node-red ~/.claude/skills/node-redDespués abre una sesión nueva de Claude Code; el skill carga automáticamente.
Definición
SKILL.md
# Node-RED for Home Assistant
Build Node-RED flows using node-red-contrib-home-assistant-websocket nodes (v0.80+).
**Requirements:** Node-RED 4.x (Node.js 18+), Home Assistant 2024.3.0+.
## The Iron Law
```
USE CURRENT NODE NAMES - NEVER OUTDATED ONES
```
The node-red-contrib-home-assistant-websocket package has renamed several nodes. Using old names produces broken flows that silently fail.
## The Process
```
User request
│
▼
HA server config node exists in Node-RED?
│ no ─────────────────────────┐
│ yes ▼
│ Set up `server` config first
│ (URL, access token, allow self-signed if needed)
│ │
▼ ◀────────────────────────────┘
Pick trigger node (current names only — see table below)
│
│ time-based? ──▶ inject (time) or trigger-state with cron
│ state-change? ──▶ trigger-state OR events:state
│ event? ──▶ events:all (filtered by event_type)
│ external? ──▶ http in (webhook) / mqtt in
│
▼
Add filter/condition (current-state, switch, template)
│
▼
Pick action node (current names only)
│
│ call HA service? ──▶ call-service (`action`, not `service`)
│ set entity state? ──▶ call-service light.turn_on / etc.
│ send HTTP? ──▶ http request
│ notify? ──▶ call-service notify.*
│
▼
Battery-drain risk? ──yes──▶ Add throttle/delay (rate-limit msgs/sec)
│ no
▼
Add status indicators (debug node OR catch node for error path)
│
▼
Test in editor with debug node, fix wiring
│
▼
Deploy and verify in HA
│
▼
Document the flow (description on key nodes)
```
## Critical: Node Names Have Changed
**STOP.** If you're about to use any of these node types, you're using outdated names:
| WRONG (Old) | CORRECT (Current) |
|-------------|-------------------|
| `server-state-changed` | `trigger-state` or `events:state` |
| `poll-state` | `poll-state` (unchanged but check config) |
| `call-service` | `api-call-service` |
## Trigger Node Configuration (Current API)
```json
{
"type": "trigger-state",
"entityId": "binary_sensor.motion",
"entityIdType": "exact",
"constraints": [
{
"targetType": "this_entity",
"propertyType": "current_state",
"comparatorType": "is",
"comparatorValue": "on"
}
],
"outputs": 2
}
```
**entityIdType options:** `exact`, `substring`, `regex`
**There is NO `list` type.** To monitor multiple entities, use `regex`:
```json
"entityId": "binary_sensor\\.motion_(1|2|3)",
"entityIdType": "regex"
```
## Service Call Configuration (Current API)
```json
{
"type": "api-call-service",
"domain": "light",
"service": "turn_on",
"entityId": ["light.living_room"],
"data": "",
"dataType": "json"
}
```
Or dynamic via msg:
```json
{
"type": "api-call-service",
"domain": "",
"service": "",
"data": "",
"dataType": "msg"
}
```
With function node before:
```javascript
msg.payload = {
action: "light.turn_on",
target: { entity_id: ["light.living_room"] },
data: { brightness_pct: 80 }
};
return msg;
```
## Current State Node - Single Entity Only
`api-current-state` queries **ONE entity**, not patterns.
```json
{
"type": "api-current-state",
"entity_id": "person.john"
}
```
To check multiple entities, use function node:
```javascript
const ha = global.get("homeassistant").homeAssistant.states;
const people = Object.keys(ha)
.filter(id => id.startsWith("person."))
.filter(id => ha[id].state !== "home");
msg.awayPeople = people;
return msg;
```
## Entity Nodes Require Extra Integration
The following nodes require `hass-node-red` integration (separate from the websocket nodes):
- `ha-entity` (sensor, binary_sensor, switch, etc.)
- Entity config nodes
**Always mention this prerequisite when using entity nodes.**
## Stable Entity Nodes (v0.71.0+)
These nodes were promoted from beta to stable in September 2024:
- `number` - expose HA number entities
- `select` - expose HA select entities
- `text` - expose HA text entities
- `time-entity` - expose HA time entities
These support "Expose as" listening modes and input override blocking (v0.70.0+).
## Deprecations (v0.79-v0.80)
**State type configuration is deprecated** (removed in v1.0). Use entity state casting instead.
**Calendar event dates** now use ISO 8601 local strings with timezone offsets (v0.78.0+). A new `all_day` property identifies all-day events explicitly.
## Timer Pattern (Motion Light)
Use single trigger node with `extend: true`:
```json
{
"type": "trigger",
"op1type": "nul",
"op2": "timeout",
"op2type": "str",
"duration": "5",
"extend": true,
"units": "min"
}
```
**Do NOT create separate reset/start timer nodes.** The `extend` property handles this.
## Flow JSON Guidelines
1. **Never include server config node** - User configures separately
2. **Leave `server` field empty** - User selects their server
3. **Use placeholder entity IDs** - Document what to change
4. **Add comment node** - Explain required configuration
## Function Node: External Libraries
**WRONG:** Using `global.get('axios')` or similar for HTTP requests.
This requires manual configuration in `settings.js`:
```javascript
// settings.js - requires Node-RED restart
functionGlobalContext: {
axios: require('axios')
}
```
**CORRECT:** Use the built-in `http request` node instead:
```json
{
"type": "http request",
"method": "GET",
"url": "https://api.example.com/data",
"ret": "obj"
}
```
**When you MUST use function node for HTTP:**
- Complex request logic that can't be handled by http request node
- Requires settings.js configuration (warn user!)
- Use `node.send()` and `node.done()` for async:
```javascript
// Async pattern in function node
const axios = global.get('axios'); // Requires settings.js config!
async function fetchData() {
try {
const response = await axioDel mismo repositorio
API CatalogSkill
>
auroraSlash Command
Aurora - independent community smart home orchestrator. Routes any smart home request to the right specialist skill and recommends the correct Claude model. Use this as your starting point for Home Assistant, ESPHome, Node-RED, or any IoT automation task.
ESPHomeSkill
>
HA Dashboard DesignSkill
>
HA Integration DevSkill
>
Home Assistant YAMLSkill
>