homebridge-homeassistant-things 2.1.0 → 2.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/README.md +186 -99
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -10,6 +10,22 @@ Todos los cambios relevantes de este proyecto se documentan aquí.
|
|
|
10
10
|
|
|
11
11
|
---
|
|
12
12
|
|
|
13
|
+
## [2.1.2] - 2026-04-02
|
|
14
|
+
|
|
15
|
+
### Changed / Cambios
|
|
16
|
+
- **EN** README: added troubleshooting section for users upgrading from v1.x — explains how to uninstall, clear cache, restart and reinstall to fix schema caching issues.
|
|
17
|
+
- **ES** README: añadida sección de solución de problemas para usuarios que actualizan desde v1.x — explica cómo desinstalar, limpiar caché, reiniciar y reinstalar para resolver problemas de caché del schema.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## [2.1.1] - 2026-04-02
|
|
22
|
+
|
|
23
|
+
### Changed / Cambios
|
|
24
|
+
- **EN** README updated: Homebridge verification submitted notice and badge added.
|
|
25
|
+
- **ES** README actualizado: añadido aviso e insignia de verificación oficial de Homebridge solicitada.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
13
29
|
## [2.1.0] - 2026-04-02
|
|
14
30
|
|
|
15
31
|
### Added / Añadido
|
package/README.md
CHANGED
|
@@ -4,6 +4,11 @@ Homebridge plugin to control Home Assistant devices as native HomeKit accessorie
|
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/homebridge-homeassistant-things)
|
|
6
6
|
[](LICENSE)
|
|
7
|
+
[](https://github.com/homebridge/homebridge/wiki/Verified-Plugins)
|
|
8
|
+
|
|
9
|
+
> **EN** This plugin has been submitted for **official Homebridge verification**. Once approved, it will appear as a verified plugin in the Homebridge plugin catalogue.
|
|
10
|
+
>
|
|
11
|
+
> **ES** Este plugin ha sido enviado para **verificación oficial de Homebridge**. Una vez aprobado, aparecerá como plugin verificado en el catálogo de plugins de Homebridge.
|
|
7
12
|
|
|
8
13
|
---
|
|
9
14
|
|
|
@@ -71,12 +76,13 @@ Desde v2.0.0 el plugin es una **dynamic platform**. Mueve la config del bloque `
|
|
|
71
76
|
|
|
72
77
|
### Supported device types
|
|
73
78
|
|
|
74
|
-
| `deviceType` | HomeKit service
|
|
75
|
-
|
|
76
|
-
| `switch` | Switch
|
|
77
|
-
| `thermostat` | Thermostat
|
|
78
|
-
| `blind` | Window Covering
|
|
79
|
+
| `deviceType` | HomeKit service | HA entity domain | Sync |
|
|
80
|
+
|---------------|--------------------|------------------|------|
|
|
81
|
+
| `switch` | Switch | `switch`, `light`, `input_boolean` | Bidirectional |
|
|
82
|
+
| `thermostat` | Thermostat | `climate` | Bidirectional |
|
|
83
|
+
| `blind` | Window Covering | `cover` | Bidirectional |
|
|
79
84
|
| `garageDoor` | Garage Door Opener | `switch` (pulse relay) | One-way |
|
|
85
|
+
| `sensor` | Light Sensor | `sensor` (any numeric) | Read-only |
|
|
80
86
|
|
|
81
87
|
### Features
|
|
82
88
|
|
|
@@ -85,6 +91,7 @@ Desde v2.0.0 el plugin es una **dynamic platform**. Mueve la config del bloque `
|
|
|
85
91
|
- Thermostat: current temperature, target temperature, heating/cooling mode
|
|
86
92
|
- Blind: open/close/stop, position 0–100%, moving state
|
|
87
93
|
- Garage door: pulse relay logic (turn_on → 2s → turn_off)
|
|
94
|
+
- Sensor: read-only numeric values (power, energy, temperature, etc.) — usable in HomeKit automations
|
|
88
95
|
- Config UI X form — no manual JSON editing required
|
|
89
96
|
|
|
90
97
|
### Installation
|
|
@@ -105,59 +112,82 @@ npm install -g homebridge-homeassistant-things
|
|
|
105
112
|
- **Poll Interval**: seconds between sync (default `30`)
|
|
106
113
|
3. Click **Save** and restart Homebridge
|
|
107
114
|
|
|
108
|
-
### Manual config.json
|
|
115
|
+
### Manual config.json example
|
|
109
116
|
|
|
110
|
-
|
|
111
|
-
```json
|
|
112
|
-
{
|
|
113
|
-
"accessory": "HomeAssistantThing",
|
|
114
|
-
"name": "Living Room Light",
|
|
115
|
-
"deviceType": "switch",
|
|
116
|
-
"haUrl": "http://homeassistant.local:8123",
|
|
117
|
-
"haToken": "eyJhbGciOiJIUzI1NiIs...",
|
|
118
|
-
"entityId": "light.living_room",
|
|
119
|
-
"pollInterval": 30
|
|
120
|
-
}
|
|
121
|
-
```
|
|
117
|
+
Full example with all device types:
|
|
122
118
|
|
|
123
|
-
**Thermostat**
|
|
124
119
|
```json
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
120
|
+
"platforms": [
|
|
121
|
+
{
|
|
122
|
+
"platform": "HomeAssistantThing",
|
|
123
|
+
"name": "HA Things",
|
|
124
|
+
"devices": [
|
|
125
|
+
{
|
|
126
|
+
"name": "Living Room Light",
|
|
127
|
+
"deviceType": "switch",
|
|
128
|
+
"haUrl": "http://homeassistant.local:8123",
|
|
129
|
+
"haToken": "eyJhbGciOiJIUzI1NiIs...",
|
|
130
|
+
"entityId": "light.living_room",
|
|
131
|
+
"pollInterval": 30
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"name": "Living Room Heater",
|
|
135
|
+
"deviceType": "thermostat",
|
|
136
|
+
"haUrl": "http://homeassistant.local:8123",
|
|
137
|
+
"haToken": "eyJhbGciOiJIUzI1NiIs...",
|
|
138
|
+
"entityId": "climate.living_room",
|
|
139
|
+
"pollInterval": 30
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
"name": "Living Room Blind",
|
|
143
|
+
"deviceType": "blind",
|
|
144
|
+
"haUrl": "http://homeassistant.local:8123",
|
|
145
|
+
"haToken": "eyJhbGciOiJIUzI1NiIs...",
|
|
146
|
+
"entityId": "cover.living_room_blind",
|
|
147
|
+
"pollInterval": 15
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
"name": "Garage",
|
|
151
|
+
"deviceType": "garageDoor",
|
|
152
|
+
"haUrl": "http://homeassistant.local:8123",
|
|
153
|
+
"haToken": "eyJhbGciOiJIUzI1NiIs...",
|
|
154
|
+
"entityId": "switch.garage_relay",
|
|
155
|
+
"openingTime": 15,
|
|
156
|
+
"closingTime": 15,
|
|
157
|
+
"pulseTime": 2000
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
"name": "Power Consumption",
|
|
161
|
+
"deviceType": "sensor",
|
|
162
|
+
"haUrl": "http://homeassistant.local:8123",
|
|
163
|
+
"haToken": "eyJhbGciOiJIUzI1NiIs...",
|
|
164
|
+
"entityId": "sensor.power_consumption_w",
|
|
165
|
+
"pollInterval": 30
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
"name": "Solar Production",
|
|
169
|
+
"deviceType": "sensor",
|
|
170
|
+
"haUrl": "http://homeassistant.local:8123",
|
|
171
|
+
"haToken": "eyJhbGciOiJIUzI1NiIs...",
|
|
172
|
+
"entityId": "sensor.solar_production_w",
|
|
173
|
+
"pollInterval": 30
|
|
174
|
+
}
|
|
175
|
+
]
|
|
176
|
+
}
|
|
177
|
+
]
|
|
134
178
|
```
|
|
135
179
|
|
|
136
|
-
|
|
137
|
-
```json
|
|
138
|
-
{
|
|
139
|
-
"accessory": "HomeAssistantThing",
|
|
140
|
-
"name": "Living Room Blind",
|
|
141
|
-
"deviceType": "blind",
|
|
142
|
-
"haUrl": "http://homeassistant.local:8123",
|
|
143
|
-
"haToken": "eyJhbGciOiJIUzI1NiIs...",
|
|
144
|
-
"entityId": "cover.living_room_blind",
|
|
145
|
-
"pollInterval": 15
|
|
146
|
-
}
|
|
147
|
-
```
|
|
180
|
+
### Sensor type — power & energy monitoring
|
|
148
181
|
|
|
149
|
-
**
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
"pollInterval": 30
|
|
159
|
-
}
|
|
160
|
-
```
|
|
182
|
+
The `sensor` device type reads any numeric Home Assistant entity and exposes it as a HomeKit **Light Sensor** (`CurrentAmbientLightLevel`). This is the standard workaround since HomeKit has no native power/energy service.
|
|
183
|
+
|
|
184
|
+
- The numeric value from HA is passed directly (e.g. `1234` W → shows as `1234` in HomeKit)
|
|
185
|
+
- Works with any `sensor.*` entity: power (W), energy (kWh), temperature, humidity, etc.
|
|
186
|
+
- **Home.app** displays the value with a "lux" unit label — visually incorrect but fully functional for automations
|
|
187
|
+
- **Eve app** displays the same value and supports history graphs
|
|
188
|
+
- Use it in **HomeKit Automations** with numeric thresholds (e.g. "if Solar Production > 2000, turn on dishwasher")
|
|
189
|
+
|
|
190
|
+
> **Note:** HomeKit's maximum for this characteristic is 100,000. Values above that will be clamped. For most home energy use cases (< 20 kW) this is not an issue.
|
|
161
191
|
|
|
162
192
|
### Getting a Home Assistant Long-Lived Access Token
|
|
163
193
|
|
|
@@ -182,6 +212,7 @@ Scheduling is not a HomeKit accessory feature — it must be configured through
|
|
|
182
212
|
| `thermostat` | Termostato | `climate` | Bidireccional |
|
|
183
213
|
| `blind` | Persiana | `cover` | Bidireccional |
|
|
184
214
|
| `garageDoor` | Puerta de Garaje | `switch` (relé pulso) | Unidireccional |
|
|
215
|
+
| `sensor` | Sensor de Luz | `sensor` (cualquier numérico) | Solo lectura |
|
|
185
216
|
|
|
186
217
|
### Características
|
|
187
218
|
|
|
@@ -190,6 +221,7 @@ Scheduling is not a HomeKit accessory feature — it must be configured through
|
|
|
190
221
|
- Termostato: temperatura actual, temperatura objetivo, modo calefacción/refrigeración
|
|
191
222
|
- Persiana: abrir/cerrar/parar, posición 0–100%, estado de movimiento
|
|
192
223
|
- Puerta de garaje: lógica de relé de pulso (turn_on → 2s → turn_off)
|
|
224
|
+
- Sensor: valores numéricos de solo lectura (potencia, energía, temperatura, etc.) — utilizables en automatizaciones HomeKit
|
|
193
225
|
- Formulario automático en Config UI X
|
|
194
226
|
|
|
195
227
|
### Instalación
|
|
@@ -210,59 +242,82 @@ npm install -g homebridge-homeassistant-things
|
|
|
210
242
|
- **Intervalo Poll**: segundos entre sincronizaciones (por defecto `30`)
|
|
211
243
|
3. Haz clic en **Guardar** y reinicia Homebridge
|
|
212
244
|
|
|
213
|
-
###
|
|
245
|
+
### Ejemplo de config.json manual
|
|
214
246
|
|
|
215
|
-
|
|
216
|
-
```json
|
|
217
|
-
{
|
|
218
|
-
"accessory": "HomeAssistantThing",
|
|
219
|
-
"name": "Luz Salón",
|
|
220
|
-
"deviceType": "switch",
|
|
221
|
-
"haUrl": "http://homeassistant.local:8123",
|
|
222
|
-
"haToken": "eyJhbGciOiJIUzI1NiIs...",
|
|
223
|
-
"entityId": "light.salon",
|
|
224
|
-
"pollInterval": 30
|
|
225
|
-
}
|
|
226
|
-
```
|
|
247
|
+
Ejemplo completo con todos los tipos de dispositivo:
|
|
227
248
|
|
|
228
|
-
**Termostato / Calefacción**
|
|
229
249
|
```json
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
250
|
+
"platforms": [
|
|
251
|
+
{
|
|
252
|
+
"platform": "HomeAssistantThing",
|
|
253
|
+
"name": "HA Things",
|
|
254
|
+
"devices": [
|
|
255
|
+
{
|
|
256
|
+
"name": "Luz Salón",
|
|
257
|
+
"deviceType": "switch",
|
|
258
|
+
"haUrl": "http://homeassistant.local:8123",
|
|
259
|
+
"haToken": "eyJhbGciOiJIUzI1NiIs...",
|
|
260
|
+
"entityId": "light.salon",
|
|
261
|
+
"pollInterval": 30
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
"name": "Calefacción Salón",
|
|
265
|
+
"deviceType": "thermostat",
|
|
266
|
+
"haUrl": "http://homeassistant.local:8123",
|
|
267
|
+
"haToken": "eyJhbGciOiJIUzI1NiIs...",
|
|
268
|
+
"entityId": "climate.salon",
|
|
269
|
+
"pollInterval": 30
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
"name": "Persiana Salón",
|
|
273
|
+
"deviceType": "blind",
|
|
274
|
+
"haUrl": "http://homeassistant.local:8123",
|
|
275
|
+
"haToken": "eyJhbGciOiJIUzI1NiIs...",
|
|
276
|
+
"entityId": "cover.persiana_salon",
|
|
277
|
+
"pollInterval": 15
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
"name": "Garaje",
|
|
281
|
+
"deviceType": "garageDoor",
|
|
282
|
+
"haUrl": "http://homeassistant.local:8123",
|
|
283
|
+
"haToken": "eyJhbGciOiJIUzI1NiIs...",
|
|
284
|
+
"entityId": "switch.rele_garaje",
|
|
285
|
+
"openingTime": 15,
|
|
286
|
+
"closingTime": 15,
|
|
287
|
+
"pulseTime": 2000
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
"name": "Consumo eléctrico",
|
|
291
|
+
"deviceType": "sensor",
|
|
292
|
+
"haUrl": "http://homeassistant.local:8123",
|
|
293
|
+
"haToken": "eyJhbGciOiJIUzI1NiIs...",
|
|
294
|
+
"entityId": "sensor.consumo_watts",
|
|
295
|
+
"pollInterval": 30
|
|
296
|
+
},
|
|
297
|
+
{
|
|
298
|
+
"name": "Producción solar",
|
|
299
|
+
"deviceType": "sensor",
|
|
300
|
+
"haUrl": "http://homeassistant.local:8123",
|
|
301
|
+
"haToken": "eyJhbGciOiJIUzI1NiIs...",
|
|
302
|
+
"entityId": "sensor.produccion_solar_watts",
|
|
303
|
+
"pollInterval": 30
|
|
304
|
+
}
|
|
305
|
+
]
|
|
306
|
+
}
|
|
307
|
+
]
|
|
239
308
|
```
|
|
240
309
|
|
|
241
|
-
|
|
242
|
-
```json
|
|
243
|
-
{
|
|
244
|
-
"accessory": "HomeAssistantThing",
|
|
245
|
-
"name": "Persiana Salón",
|
|
246
|
-
"deviceType": "blind",
|
|
247
|
-
"haUrl": "http://homeassistant.local:8123",
|
|
248
|
-
"haToken": "eyJhbGciOiJIUzI1NiIs...",
|
|
249
|
-
"entityId": "cover.persiana_salon",
|
|
250
|
-
"pollInterval": 15
|
|
251
|
-
}
|
|
252
|
-
```
|
|
310
|
+
### Tipo sensor — monitorización de potencia y energía
|
|
253
311
|
|
|
254
|
-
**
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
"pollInterval": 30
|
|
264
|
-
}
|
|
265
|
-
```
|
|
312
|
+
El tipo `sensor` lee cualquier entidad numérica de Home Assistant y la expone en HomeKit como **Sensor de Luz** (`CurrentAmbientLightLevel`). Es la solución estándar ya que HomeKit no tiene un servicio nativo de potencia o energía.
|
|
313
|
+
|
|
314
|
+
- El valor numérico de HA se pasa directamente (p.ej. `1234` W → aparece como `1234` en HomeKit)
|
|
315
|
+
- Compatible con cualquier entidad `sensor.*`: potencia (W), energía (kWh), temperatura, humedad, etc.
|
|
316
|
+
- **App Home** muestra el valor con la etiqueta de unidad "lux" — visualmente incorrecto pero funcional para automatizaciones
|
|
317
|
+
- **App Eve** muestra el mismo valor y soporta gráficos de historial
|
|
318
|
+
- Úsalo en **Automatizaciones HomeKit** con umbrales numéricos (p.ej. "si Producción solar > 2000, encender el lavavajillas")
|
|
319
|
+
|
|
320
|
+
> **Nota:** El máximo de HomeKit para esta característica es 100.000. Valores superiores se recortarán. Para la mayoría de instalaciones domésticas (< 20 kW) no supone ningún problema.
|
|
266
321
|
|
|
267
322
|
### Nota sobre la programación horaria del termostato
|
|
268
323
|
|
|
@@ -270,6 +325,38 @@ La programación horaria no es una función del accesorio HomeKit — debe confi
|
|
|
270
325
|
|
|
271
326
|
---
|
|
272
327
|
|
|
328
|
+
## Troubleshooting — after upgrading to v2.0.0 or later
|
|
329
|
+
|
|
330
|
+
From v2.0.0 this plugin changed from `accessory` to `platform`. If Config UI X still generates `"accessory"` instead of `"platform"` after updating, follow these steps:
|
|
331
|
+
|
|
332
|
+
1. **Uninstall the plugin** from Config UI X → Plugins → `homebridge-homeassistant-things` → Uninstall
|
|
333
|
+
2. **Clear the Homebridge accessory cache**: Config UI X → Settings → scroll down → **Remove All Cached Accessories**
|
|
334
|
+
3. **Restart the Homebridge container/service** completely:
|
|
335
|
+
- Docker: `docker restart homebridge`
|
|
336
|
+
- systemd: `sudo systemctl restart homebridge`
|
|
337
|
+
4. **Reinstall the plugin** from Config UI X → search `homebridge-homeassistant-things` → Install
|
|
338
|
+
5. **Add the plugin again** from the Config UI X assistant — it will now generate the correct `"platform"` config
|
|
339
|
+
|
|
340
|
+
> This is necessary because Config UI X caches the plugin schema. A full restart forces it to reload the schema from the newly installed version.
|
|
341
|
+
|
|
342
|
+
---
|
|
343
|
+
|
|
344
|
+
## Solución de problemas — tras actualizar a v2.0.0 o superior
|
|
345
|
+
|
|
346
|
+
Desde v2.0.0 este plugin cambió de `accessory` a `platform`. Si Config UI X sigue generando `"accessory"` en lugar de `"platform"` tras actualizar, sigue estos pasos:
|
|
347
|
+
|
|
348
|
+
1. **Desinstala el plugin** desde Config UI X → Plugins → `homebridge-homeassistant-things` → Desinstalar
|
|
349
|
+
2. **Limpia la caché de accesorios**: Config UI X → Ajustes → baja hasta **Eliminar todos los accesorios en caché**
|
|
350
|
+
3. **Reinicia completamente el contenedor/servicio de Homebridge**:
|
|
351
|
+
- Docker: `docker restart homebridge`
|
|
352
|
+
- systemd: `sudo systemctl restart homebridge`
|
|
353
|
+
4. **Vuelve a instalar el plugin** desde Config UI X → busca `homebridge-homeassistant-things` → Instalar
|
|
354
|
+
5. **Añade el plugin de nuevo** desde el asistente de Config UI X — ahora generará la config correcta con `"platform"`
|
|
355
|
+
|
|
356
|
+
> Esto es necesario porque Config UI X cachea el schema del plugin. Un reinicio completo fuerza la recarga del schema desde la versión recién instalada.
|
|
357
|
+
|
|
358
|
+
---
|
|
359
|
+
|
|
273
360
|
## Changelog
|
|
274
361
|
|
|
275
362
|
See [CHANGELOG.md](CHANGELOG.md) for version history.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "homebridge-homeassistant-things",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.2",
|
|
4
4
|
"description": "Homebridge plugin to control Home Assistant devices (switches, thermostats, blinds, garage doors) as native HomeKit accessories",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"keywords": [
|