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.
Files changed (3) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +186 -99
  3. 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
  [![npm version](https://img.shields.io/npm/v/homebridge-homeassistant-things)](https://www.npmjs.com/package/homebridge-homeassistant-things)
6
6
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
7
+ [![Homebridge Verified](https://img.shields.io/badge/homebridge-verification%20pending-yellow)](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 | HA entity domain | Sync |
75
- |---------------|-------------------|------------------|------|
76
- | `switch` | Switch | `switch`, `light`, `input_boolean` | Bidirectional |
77
- | `thermostat` | Thermostat | `climate` | Bidirectional |
78
- | `blind` | Window Covering | `cover` | Bidirectional |
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 examples
115
+ ### Manual config.json example
109
116
 
110
- **Switch / Light**
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
- "accessory": "HomeAssistantThing",
127
- "name": "Living Room Heater",
128
- "deviceType": "thermostat",
129
- "haUrl": "http://homeassistant.local:8123",
130
- "haToken": "eyJhbGciOiJIUzI1NiIs...",
131
- "entityId": "climate.living_room",
132
- "pollInterval": 30
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
- **Blind / Shutter**
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
- **Garage Door (pulse relay)**
150
- ```json
151
- {
152
- "accessory": "HomeAssistantThing",
153
- "name": "Garage",
154
- "deviceType": "garageDoor",
155
- "haUrl": "http://homeassistant.local:8123",
156
- "haToken": "eyJhbGciOiJIUzI1NiIs...",
157
- "entityId": "switch.garage_relay",
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
- ### Ejemplos de config.json manual
245
+ ### Ejemplo de config.json manual
214
246
 
215
- **Interruptor / Luz**
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
- "accessory": "HomeAssistantThing",
232
- "name": "Calefacción Salón",
233
- "deviceType": "thermostat",
234
- "haUrl": "http://homeassistant.local:8123",
235
- "haToken": "eyJhbGciOiJIUzI1NiIs...",
236
- "entityId": "climate.salon",
237
- "pollInterval": 30
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
- **Persiana**
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
- **Puerta de garaje (relé pulso)**
255
- ```json
256
- {
257
- "accessory": "HomeAssistantThing",
258
- "name": "Garaje",
259
- "deviceType": "garageDoor",
260
- "haUrl": "http://homeassistant.local:8123",
261
- "haToken": "eyJhbGciOiJIUzI1NiIs...",
262
- "entityId": "switch.rele_garaje",
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.0",
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": [