homebridge-plugin-klares4 1.1.1-beta.5 → 1.1.1-beta.6

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 (43) hide show
  1. package/CHANGELOG.md +30 -6
  2. package/README.md +34 -34
  3. package/dist/accessories/cover-accessory.d.ts +8 -4
  4. package/dist/accessories/cover-accessory.d.ts.map +1 -1
  5. package/dist/accessories/cover-accessory.js +36 -37
  6. package/dist/accessories/cover-accessory.js.map +1 -1
  7. package/dist/accessories/light-accessory.d.ts +7 -3
  8. package/dist/accessories/light-accessory.d.ts.map +1 -1
  9. package/dist/accessories/light-accessory.js +27 -24
  10. package/dist/accessories/light-accessory.js.map +1 -1
  11. package/dist/accessories/scenario-accessory.d.ts +8 -4
  12. package/dist/accessories/scenario-accessory.d.ts.map +1 -1
  13. package/dist/accessories/scenario-accessory.js +23 -19
  14. package/dist/accessories/scenario-accessory.js.map +1 -1
  15. package/dist/accessories/sensor-accessory.d.ts +5 -1
  16. package/dist/accessories/sensor-accessory.d.ts.map +1 -1
  17. package/dist/accessories/sensor-accessory.js +49 -36
  18. package/dist/accessories/sensor-accessory.js.map +1 -1
  19. package/dist/accessories/thermostat-accessory.d.ts +5 -1
  20. package/dist/accessories/thermostat-accessory.d.ts.map +1 -1
  21. package/dist/accessories/thermostat-accessory.js +68 -55
  22. package/dist/accessories/thermostat-accessory.js.map +1 -1
  23. package/dist/accessories/zone-accessory.d.ts +5 -1
  24. package/dist/accessories/zone-accessory.d.ts.map +1 -1
  25. package/dist/accessories/zone-accessory.js +32 -32
  26. package/dist/accessories/zone-accessory.js.map +1 -1
  27. package/dist/mqtt-bridge.d.ts +6 -12
  28. package/dist/mqtt-bridge.d.ts.map +1 -1
  29. package/dist/mqtt-bridge.js +148 -104
  30. package/dist/mqtt-bridge.js.map +1 -1
  31. package/dist/platform.d.ts +26 -37
  32. package/dist/platform.d.ts.map +1 -1
  33. package/dist/platform.js +177 -132
  34. package/dist/platform.js.map +1 -1
  35. package/dist/types.d.ts +203 -21
  36. package/dist/types.d.ts.map +1 -1
  37. package/dist/types.js +78 -0
  38. package/dist/types.js.map +1 -1
  39. package/dist/websocket-client.d.ts +6 -5
  40. package/dist/websocket-client.d.ts.map +1 -1
  41. package/dist/websocket-client.js +257 -313
  42. package/dist/websocket-client.js.map +1 -1
  43. package/package.json +4 -4
package/dist/platform.js CHANGED
@@ -45,6 +45,9 @@ const sensor_accessory_1 = require("./accessories/sensor-accessory");
45
45
  const zone_accessory_1 = require("./accessories/zone-accessory");
46
46
  const thermostat_accessory_1 = require("./accessories/thermostat-accessory");
47
47
  const scenario_accessory_1 = require("./accessories/scenario-accessory");
48
+ /**
49
+ * Main platform class implementing DynamicPlatformPlugin
50
+ */
48
51
  class Lares4Platform {
49
52
  constructor(log, config, api) {
50
53
  this.log = log;
@@ -52,74 +55,72 @@ class Lares4Platform {
52
55
  this.api = api;
53
56
  this.accessories = new Map();
54
57
  this.discoveredCacheUUIDs = [];
55
- // Map per tenere traccia degli handlers degli accessori
56
58
  this.accessoryHandlers = new Map();
57
- // Cache dei dispositivi per la configurazione UI
58
59
  this.discoveredDevices = new Map();
59
60
  this.Service = api.hap.Service;
60
61
  this.Characteristic = api.hap.Characteristic;
61
- // Percorso per salvare la lista dei dispositivi
62
62
  this.devicesFilePath = path.join(this.api.user.storagePath(), 'klares4-devices.json');
63
63
  if (!config) {
64
- this.log.error(' Nessuna configurazione trovata');
64
+ this.log.error('No configuration found');
65
65
  return;
66
66
  }
67
67
  if (!config.ip) {
68
- this.log.error(' Indirizzo IP mancante nella configurazione');
68
+ this.log.error('IP address missing in configuration');
69
69
  return;
70
70
  }
71
71
  if (!config.pin) {
72
- this.log.error('PIN mancante nella configurazione');
72
+ this.log.error('PIN missing in configuration');
73
73
  return;
74
74
  }
75
- this.log.debug('🔧 Inizializzazione platform completata:', this.config.name);
76
- this.api.on('didFinishLaunching', async () => {
77
- this.log.debug('🚀 Callback didFinishLaunching eseguito');
78
- await this.initializeLares4();
75
+ this.log.debug('Platform initialization completed:', this.config.name);
76
+ this.api.on('didFinishLaunching', () => {
77
+ this.log.debug('didFinishLaunching callback executed');
78
+ this.initializeLares4().catch((error) => {
79
+ this.log.error('Failed to initialize Lares4:', error instanceof Error ? error.message : String(error));
80
+ });
79
81
  });
80
82
  }
81
83
  async initializeLares4() {
82
84
  try {
83
- this.log.info('🔌 Inizializzazione connessione Ksenia Lares4...');
84
- const useHttps = this.config.https !== false; // Default true
85
- const port = this.config.port || (useHttps ? 443 : 80);
86
- this.wsClient = new websocket_client_1.KseniaWebSocketClient(this.config.ip, port, useHttps, this.config.sender || 'homebridge', this.config.pin, this.log, {
87
- debug: this.config.debug || false,
88
- reconnectInterval: this.config.reconnectInterval || 5000,
89
- heartbeatInterval: this.config.heartbeatInterval || 30000
85
+ this.log.info('Initializing Ksenia Lares4 connection...');
86
+ const useHttps = this.config.https !== false;
87
+ const port = this.config.port ?? (useHttps ? 443 : 80);
88
+ this.wsClient = new websocket_client_1.KseniaWebSocketClient(this.config.ip, port, useHttps, this.config.sender ?? 'homebridge', this.config.pin, this.log, {
89
+ debug: this.config.debug ?? false,
90
+ reconnectInterval: this.config.reconnectInterval ?? 5000,
91
+ heartbeatInterval: this.config.heartbeatInterval ?? 30000,
90
92
  });
91
- // Setup event handlers
92
- this.wsClient.onDeviceDiscovered = (device) => this.handleDeviceDiscovered(device);
93
- this.wsClient.onDeviceStatusUpdate = (device) => this.handleDeviceStatusUpdate(device);
93
+ this.wsClient.onDeviceDiscovered = (device) => {
94
+ this.handleDeviceDiscovered(device);
95
+ };
96
+ this.wsClient.onDeviceStatusUpdate = (device) => {
97
+ this.handleDeviceStatusUpdate(device);
98
+ };
94
99
  await this.wsClient.connect();
95
- // Inizializza MQTT se configurato
96
100
  if (this.config.mqtt?.enabled) {
97
101
  this.mqttBridge = new mqtt_bridge_1.MqttBridge(this.config.mqtt, this.log, this);
98
- this.log.info('🚀 MQTT Bridge inizializzato');
102
+ this.log.info('MQTT Bridge initialized');
99
103
  }
100
- this.log.info('Ksenia Lares4 inizializzato con successo');
104
+ this.log.info('Ksenia Lares4 initialized successfully');
101
105
  }
102
106
  catch (error) {
103
- this.log.error(' Errore inizializzazione Lares4:', error);
107
+ this.log.error('Lares4 initialization error:', error instanceof Error ? error.message : String(error));
104
108
  }
105
109
  }
106
110
  handleDeviceDiscovered(device) {
107
- // Aggiungi il dispositivo alla cache per la UI di configurazione
108
111
  this.discoveredDevices.set(device.id, device);
109
- // Salva la lista aggiornata dei dispositivi
110
112
  this.saveDevicesList();
111
- // Controlla se il dispositivo deve essere escluso
112
113
  if (this.shouldExcludeDevice(device)) {
113
- this.log.info(`⏭️ Dispositivo escluso: ${device.type} - ${device.name}`);
114
+ this.log.info(`Device excluded: ${device.type} - ${device.name}`);
114
115
  return;
115
116
  }
116
- // Applica nome personalizzato se presente
117
117
  const customName = this.getCustomName(device);
118
118
  if (customName) {
119
- device.name = customName;
120
- device.description = customName;
119
+ const mutableDevice = device;
120
+ mutableDevice.name = customName;
121
+ mutableDevice.description = customName;
121
122
  }
122
- this.log.info(`🔍 Dispositivo scoperto: ${device.type} - ${device.name}`);
123
+ this.log.info(`Device discovered: ${device.type} - ${device.name}`);
123
124
  this.addAccessory(device);
124
125
  }
125
126
  saveDevicesList() {
@@ -129,7 +130,7 @@ class Lares4Platform {
129
130
  outputs: [],
130
131
  sensors: [],
131
132
  scenarios: [],
132
- lastUpdated: new Date().toISOString()
133
+ lastUpdated: new Date().toISOString(),
133
134
  };
134
135
  for (const device of this.discoveredDevices.values()) {
135
136
  const id = device.id.replace(/^(light_|cover_|sensor_temp_|sensor_hum_|sensor_light_|zone_|thermostat_|scenario_)/, '');
@@ -138,12 +139,14 @@ class Lares4Platform {
138
139
  name: device.name,
139
140
  type: device.type,
140
141
  description: device.description || device.name,
141
- fullId: device.id
142
+ fullId: device.id,
142
143
  };
143
144
  if (device.type === 'zone') {
144
145
  devicesList.zones.push(deviceInfo);
145
146
  }
146
- else if (device.type === 'light' || device.type === 'cover' || device.type === 'thermostat') {
147
+ else if (device.type === 'light' ||
148
+ device.type === 'cover' ||
149
+ device.type === 'thermostat') {
147
150
  devicesList.outputs.push(deviceInfo);
148
151
  }
149
152
  else if (device.type === 'sensor') {
@@ -153,216 +156,242 @@ class Lares4Platform {
153
156
  devicesList.scenarios.push(deviceInfo);
154
157
  }
155
158
  }
156
- // Ordina per nome
157
159
  devicesList.zones.sort((a, b) => a.name.localeCompare(b.name));
158
160
  devicesList.outputs.sort((a, b) => a.name.localeCompare(b.name));
159
161
  devicesList.sensors.sort((a, b) => a.name.localeCompare(b.name));
160
162
  devicesList.scenarios.sort((a, b) => a.name.localeCompare(b.name));
161
163
  fs.writeFileSync(this.devicesFilePath, JSON.stringify(devicesList, null, 2));
162
- this.log.debug(`📝 Lista dispositivi salvata: ${this.discoveredDevices.size} dispositivi`);
163
- // Ritarda la stampa del riassunto per evitare duplicati durante la scoperta
164
+ this.log.debug(`Devices list saved: ${this.discoveredDevices.size} devices`);
164
165
  if (this.summaryTimeout) {
165
166
  clearTimeout(this.summaryTimeout);
166
167
  }
167
- const summaryDelay = this.config.devicesSummaryDelay || 2000;
168
+ const summaryDelay = this.config.devicesSummaryDelay ?? 2000;
168
169
  this.summaryTimeout = setTimeout(() => {
169
170
  this.printDevicesSummary(devicesList);
170
171
  this.summaryTimeout = undefined;
171
- }, summaryDelay); // Aspetta tempo configurabile dopo l'ultimo dispositivo scoperto
172
+ }, summaryDelay);
172
173
  }
173
174
  catch (error) {
174
- this.log.error(' Errore nel salvare la lista dispositivi:', error);
175
+ this.log.error('Error saving devices list:', error instanceof Error ? error.message : String(error));
175
176
  }
176
177
  }
177
178
  printDevicesSummary(devicesList) {
178
179
  this.log.info('');
179
- this.log.info('📋 ========== DISPOSITIVI DISPONIBILI ==========');
180
- this.log.info('💡 Per escludere dispositivi o configurare stanze MQTT, usa i seguenti ID:');
180
+ this.log.info('========== AVAILABLE DEVICES ==========');
181
+ this.log.info('Use the following IDs to exclude devices or configure MQTT rooms:');
181
182
  this.log.info('');
182
183
  if (devicesList.outputs.length > 0) {
183
- this.log.info('🔌 OUTPUT (Luci, Tapparelle, Termostati):');
184
+ this.log.info('OUTPUTS (Lights, Covers, Thermostats):');
184
185
  devicesList.outputs.forEach((device) => {
185
- const icon = device.type === 'thermostat' ? '🌡️' : device.type === 'light' ? '💡' : '🪟';
186
- this.log.info(` ID: ${device.fullId.padEnd(20)} - ${icon} ${device.name}`);
186
+ const typeLabel = device.type === 'thermostat'
187
+ ? 'THERM'
188
+ : device.type === 'light'
189
+ ? 'LIGHT'
190
+ : 'COVER';
191
+ this.log.info(` ID: ${device.fullId.padEnd(20)} - [${typeLabel}] ${device.name}`);
187
192
  });
188
193
  this.log.info('');
189
194
  }
190
195
  if (devicesList.zones.length > 0) {
191
- this.log.info('🚪 ZONE (Sensori di Sicurezza):');
196
+ this.log.info('ZONES (Security Sensors):');
192
197
  devicesList.zones.forEach((device) => {
193
- this.log.info(` ID: ${device.fullId.padEnd(20)} - 🚪 ${device.name}`);
198
+ this.log.info(` ID: ${device.fullId.padEnd(20)} - [ZONE] ${device.name}`);
194
199
  });
195
200
  this.log.info('');
196
201
  }
197
202
  if (devicesList.sensors.length > 0) {
198
- this.log.info('🌡️ SENSORI (Temperatura, Umidità, Luminosità):');
203
+ this.log.info('SENSORS (Temperature, Humidity, Light):');
199
204
  devicesList.sensors.forEach((device) => {
200
- const icon = device.name.includes('Temperatura') ? '🌡️' :
201
- device.name.includes('Umidità') ? '💧' : '☀️';
202
- this.log.info(` ID: ${device.fullId.padEnd(20)} - ${icon} ${device.name}`);
205
+ let typeLabel = 'SENSOR';
206
+ if (device.name.includes('Temperatura')) {
207
+ typeLabel = 'TEMP';
208
+ }
209
+ else if (device.name.includes('Umidita')) {
210
+ typeLabel = 'HUM';
211
+ }
212
+ else if (device.name.includes('Luminosita')) {
213
+ typeLabel = 'LUX';
214
+ }
215
+ this.log.info(` ID: ${device.fullId.padEnd(20)} - [${typeLabel}] ${device.name}`);
203
216
  });
204
217
  this.log.info('');
205
218
  }
206
219
  if (devicesList.scenarios.length > 0) {
207
- this.log.info('🎬 SCENARI (Automazioni):');
220
+ this.log.info('SCENARIOS (Automations):');
208
221
  devicesList.scenarios.forEach((device) => {
209
- this.log.info(` ID: ${device.fullId.padEnd(20)} - 🎬 ${device.name}`);
222
+ this.log.info(` ID: ${device.fullId.padEnd(20)} - [SCENE] ${device.name}`);
210
223
  });
211
224
  this.log.info('');
212
225
  }
213
- this.log.info('📁 Lista completa salvata in: ' + this.devicesFilePath);
214
- this.log.info('🔧 Usa questi ID nella configurazione per escludere dispositivi');
215
- this.log.info('🏠 Oppure per configurare le stanze MQTT in Homebridge UI');
216
- this.log.info('===============================================');
226
+ this.log.info('Full list saved to: ' + this.devicesFilePath);
227
+ this.log.info('Use these IDs in configuration to exclude devices');
228
+ this.log.info('Or to configure MQTT rooms in Homebridge UI');
229
+ this.log.info('================================================');
217
230
  this.log.info('');
218
- // Genera anche un file di configurazione di esempio per le stanze
219
231
  this.generateRoomMappingExample(devicesList);
220
232
  }
221
233
  generateRoomMappingExample(devicesList) {
222
234
  try {
223
235
  const examplePath = path.join(this.api.user.storagePath(), 'klares4-room-mapping-example.json');
224
- // Crea un esempio di configurazione stanze con alcuni dispositivi
225
236
  const exampleConfig = {
226
- "roomMapping": {
227
- "enabled": false,
228
- "rooms": [
237
+ roomMapping: {
238
+ enabled: false,
239
+ rooms: [
229
240
  {
230
- "roomName": "sala",
231
- "devices": this.getExampleDevicesForRoom(devicesList, 'sala')
241
+ roomName: 'sala',
242
+ devices: this.getExampleDevicesForRoom(devicesList, 'sala'),
232
243
  },
233
244
  {
234
- "roomName": "cucina",
235
- "devices": this.getExampleDevicesForRoom(devicesList, 'cucina')
245
+ roomName: 'cucina',
246
+ devices: this.getExampleDevicesForRoom(devicesList, 'cucina'),
236
247
  },
237
248
  {
238
- "roomName": "camera",
239
- "devices": this.getExampleDevicesForRoom(devicesList, 'camera')
240
- }
241
- ]
249
+ roomName: 'camera',
250
+ devices: this.getExampleDevicesForRoom(devicesList, 'camera'),
251
+ },
252
+ ],
253
+ },
254
+ _note: 'This is an example file. Modify roomName and devices as needed.',
255
+ _availableDevices: {
256
+ outputs: devicesList.outputs.map((d) => ({
257
+ id: d.fullId,
258
+ name: d.name,
259
+ type: d.type,
260
+ })),
261
+ zones: devicesList.zones.map((d) => ({
262
+ id: d.fullId,
263
+ name: d.name,
264
+ type: d.type,
265
+ })),
266
+ sensors: devicesList.sensors.map((d) => ({
267
+ id: d.fullId,
268
+ name: d.name,
269
+ type: d.type,
270
+ })),
271
+ scenarios: devicesList.scenarios.map((d) => ({
272
+ id: d.fullId,
273
+ name: d.name,
274
+ type: d.type,
275
+ })),
242
276
  },
243
- "_note": "Questo è un file di esempio. Modifica roomName e devices secondo le tue necessità.",
244
- "_availableDevices": {
245
- "outputs": devicesList.outputs.map((d) => ({ id: d.fullId, name: d.name, type: d.type })),
246
- "zones": devicesList.zones.map((d) => ({ id: d.fullId, name: d.name, type: d.type })),
247
- "sensors": devicesList.sensors.map((d) => ({ id: d.fullId, name: d.name, type: d.type })),
248
- "scenarios": devicesList.scenarios.map((d) => ({ id: d.fullId, name: d.name, type: d.type }))
249
- }
250
277
  };
251
278
  fs.writeFileSync(examplePath, JSON.stringify(exampleConfig, null, 2));
252
- this.log.info(`📝 Esempio configurazione stanze creato: ${examplePath}`);
279
+ this.log.info(`Room mapping example created: ${examplePath}`);
253
280
  }
254
281
  catch (error) {
255
- this.log.error(' Errore nella creazione del file di esempio:', error);
282
+ this.log.error('Error creating example file:', error instanceof Error ? error.message : String(error));
256
283
  }
257
284
  }
258
285
  getExampleDevicesForRoom(devicesList, roomName) {
259
286
  const devices = [];
260
- // Prendi alcuni dispositivi di esempio per ogni stanza
261
287
  switch (roomName) {
262
- case 'sala':
263
- // Cerca sensori temperatura/umidità
264
- const salaDevices = [...devicesList.sensors.slice(0, 2), ...devicesList.outputs.slice(0, 1)];
288
+ case 'sala': {
289
+ const salaDevices = [
290
+ ...devicesList.sensors.slice(0, 2),
291
+ ...devicesList.outputs.slice(0, 1),
292
+ ];
265
293
  salaDevices.forEach((device) => {
266
294
  devices.push({
267
295
  deviceId: device.fullId,
268
- deviceName: device.name
296
+ deviceName: device.name,
269
297
  });
270
298
  });
271
299
  break;
272
- case 'cucina':
273
- // Cerca luci e tapparelle
300
+ }
301
+ case 'cucina': {
274
302
  const cucinaDevices = [...devicesList.outputs.slice(1, 3)];
275
303
  cucinaDevices.forEach((device) => {
276
304
  devices.push({
277
305
  deviceId: device.fullId,
278
- deviceName: device.name
306
+ deviceName: device.name,
279
307
  });
280
308
  });
281
309
  break;
282
- case 'camera':
283
- // Cerca zone e altri dispositivi
284
- const cameraDevices = [...devicesList.zones.slice(0, 1), ...devicesList.outputs.slice(3, 4)];
310
+ }
311
+ case 'camera': {
312
+ const cameraDevices = [
313
+ ...devicesList.zones.slice(0, 1),
314
+ ...devicesList.outputs.slice(3, 4),
315
+ ];
285
316
  cameraDevices.forEach((device) => {
286
317
  devices.push({
287
318
  deviceId: device.fullId,
288
- deviceName: device.name
319
+ deviceName: device.name,
289
320
  });
290
321
  });
291
322
  break;
323
+ }
292
324
  }
293
- return devices.slice(0, 3); // Massimo 3 dispositivi per esempio
325
+ return devices.slice(0, 3);
294
326
  }
295
327
  shouldExcludeDevice(device) {
296
- const config = this.config;
297
328
  const id = device.id.replace(/^(light_|cover_|sensor_temp_|sensor_hum_|sensor_light_|zone_|thermostat_|scenario_)/, '');
298
- if (device.type === 'zone' && config.excludeZones?.includes(id)) {
299
- this.log.info(`⏭️ Zona esclusa: ${device.name} (ID: ${id})`);
329
+ if (device.type === 'zone' && this.config.excludeZones?.includes(id)) {
330
+ this.log.info(`Zone excluded: ${device.name} (ID: ${id})`);
300
331
  return true;
301
332
  }
302
- if ((device.type === 'light' || device.type === 'cover' || device.type === 'thermostat') && config.excludeOutputs?.includes(id)) {
303
- this.log.info(`⏭️ Output escluso: ${device.name} (ID: ${id})`);
333
+ if ((device.type === 'light' ||
334
+ device.type === 'cover' ||
335
+ device.type === 'thermostat') &&
336
+ this.config.excludeOutputs?.includes(id)) {
337
+ this.log.info(`Output excluded: ${device.name} (ID: ${id})`);
304
338
  return true;
305
339
  }
306
- if (device.type === 'sensor' && config.excludeSensors?.includes(id)) {
307
- this.log.info(`⏭️ Sensore escluso: ${device.name} (ID: ${id})`);
340
+ if (device.type === 'sensor' && this.config.excludeSensors?.includes(id)) {
341
+ this.log.info(`Sensor excluded: ${device.name} (ID: ${id})`);
308
342
  return true;
309
343
  }
310
- if (device.type === 'scenario' && config.excludeScenarios?.includes(id)) {
311
- this.log.info(`⏭️ Scenario escluso: ${device.name} (ID: ${id})`);
344
+ if (device.type === 'scenario' && this.config.excludeScenarios?.includes(id)) {
345
+ this.log.info(`Scenario excluded: ${device.name} (ID: ${id})`);
312
346
  return true;
313
347
  }
314
348
  return false;
315
349
  }
316
350
  getCustomName(device) {
317
- const config = this.config;
318
351
  const id = device.id.replace(/^(light_|cover_|sensor_temp_|sensor_hum_|sensor_light_|zone_|thermostat_|scenario_)/, '');
319
352
  if (device.type === 'zone') {
320
- return config.customNames?.zones?.[id];
353
+ return this.config.customNames?.zones?.[id];
321
354
  }
322
355
  if (device.type === 'light' || device.type === 'cover' || device.type === 'thermostat') {
323
- return config.customNames?.outputs?.[id];
356
+ return this.config.customNames?.outputs?.[id];
324
357
  }
325
358
  if (device.type === 'sensor') {
326
- const sensorName = config.customNames?.sensors?.[id];
359
+ const sensorName = this.config.customNames?.sensors?.[id];
327
360
  if (sensorName) {
328
- // Mantieni il suffixo per i sensori multipli
329
361
  if (device.id.includes('_temp_'))
330
362
  return `${sensorName} - Temperatura`;
331
363
  if (device.id.includes('_hum_'))
332
- return `${sensorName} - Umidità`;
364
+ return `${sensorName} - Umidita`;
333
365
  if (device.id.includes('_light_'))
334
- return `${sensorName} - Luminosità`;
366
+ return `${sensorName} - Luminosita`;
335
367
  }
336
368
  }
337
369
  if (device.type === 'scenario') {
338
- return config.customNames?.scenarios?.[id];
370
+ return this.config.customNames?.scenarios?.[id];
339
371
  }
340
372
  return undefined;
341
373
  }
342
374
  handleDeviceStatusUpdate(device) {
343
- this.log.debug(`🔄 Aggiornamento stato dispositivo: ${device.name}`);
344
- // Aggiorna l'accessorio Homebridge
375
+ this.log.debug(`Device status update: ${device.name}`);
345
376
  this.updateAccessory(device);
346
- // Pubblica lo stato su MQTT se abilitato
347
377
  if (this.mqttBridge) {
348
378
  this.mqttBridge.publishDeviceState(device);
349
379
  }
350
380
  }
351
381
  configureAccessory(accessory) {
352
- this.log.info('🔧 Caricamento accessorio dalla cache:', accessory.displayName);
382
+ this.log.info('Loading accessory from cache:', accessory.displayName);
353
383
  this.accessories.set(accessory.UUID, accessory);
354
384
  }
355
- // Metodi per la gestione degli accessori
356
385
  addAccessory(device) {
357
386
  const uuid = this.api.hap.uuid.generate(device.id);
358
387
  const existingAccessory = this.accessories.get(uuid);
359
388
  if (existingAccessory) {
360
- this.log.info('🔄 Ripristino accessorio esistente dalla cache:', device.name);
389
+ this.log.info('Restoring existing accessory from cache:', device.name);
361
390
  existingAccessory.context.device = device;
362
391
  this.createAccessoryHandler(existingAccessory, device);
363
392
  }
364
393
  else {
365
- this.log.info('🆕 Aggiunta nuovo accessorio:', device.name);
394
+ this.log.info('Adding new accessory:', device.name);
366
395
  const accessory = new this.api.platformAccessory(device.name, uuid);
367
396
  accessory.context.device = device;
368
397
  this.createAccessoryHandler(accessory, device);
@@ -376,54 +405,70 @@ class Lares4Platform {
376
405
  const handler = this.accessoryHandlers.get(uuid);
377
406
  if (accessory && handler) {
378
407
  accessory.context.device = device;
379
- // Chiama il metodo updateStatus dell'handler specifico
380
- if (handler.updateStatus && typeof handler.updateStatus === 'function') {
381
- handler.updateStatus(device);
408
+ if ('updateStatus' in handler && typeof handler.updateStatus === 'function') {
409
+ switch (device.type) {
410
+ case 'light':
411
+ handler.updateStatus(device);
412
+ break;
413
+ case 'cover':
414
+ handler.updateStatus(device);
415
+ break;
416
+ case 'thermostat':
417
+ handler.updateStatus(device);
418
+ break;
419
+ case 'sensor':
420
+ handler.updateStatus(device);
421
+ break;
422
+ case 'zone':
423
+ handler.updateStatus(device);
424
+ break;
425
+ case 'scenario':
426
+ break;
427
+ }
382
428
  }
383
429
  }
384
430
  }
385
431
  createAccessoryHandler(accessory, device) {
386
432
  const uuid = accessory.UUID;
387
- // Rimuovi handler esistente se presente
388
433
  if (this.accessoryHandlers.has(uuid)) {
389
434
  this.accessoryHandlers.delete(uuid);
390
435
  }
391
- // Crea il nuovo handler in base al tipo di dispositivo
392
436
  let handler;
393
437
  switch (device.type) {
394
438
  case 'light':
395
439
  handler = new light_accessory_1.LightAccessory(this, accessory);
396
- this.log.debug(`💡 Creato handler per luce: ${device.name}`);
440
+ this.log.debug(`Created handler for light: ${device.name}`);
397
441
  break;
398
442
  case 'cover':
399
443
  handler = new cover_accessory_1.CoverAccessory(this, accessory);
400
- this.log.debug(`🪟 Creato handler per tapparella: ${device.name}`);
444
+ this.log.debug(`Created handler for cover: ${device.name}`);
401
445
  break;
402
446
  case 'sensor':
403
447
  handler = new sensor_accessory_1.SensorAccessory(this, accessory);
404
- this.log.debug(`🌡️ Creato handler per sensore: ${device.name}`);
448
+ this.log.debug(`Created handler for sensor: ${device.name}`);
405
449
  break;
406
450
  case 'zone':
407
451
  handler = new zone_accessory_1.ZoneAccessory(this, accessory);
408
- this.log.debug(`🚪 Creato handler per zona: ${device.name}`);
452
+ this.log.debug(`Created handler for zone: ${device.name}`);
409
453
  break;
410
454
  case 'thermostat':
411
455
  handler = new thermostat_accessory_1.ThermostatAccessory(this, accessory);
412
- this.log.debug(`🌡️ Creato handler per termostato: ${device.name}`);
456
+ this.log.debug(`Created handler for thermostat: ${device.name}`);
413
457
  break;
414
458
  case 'scenario':
415
459
  handler = new scenario_accessory_1.ScenarioAccessory(this, accessory, device);
416
- this.log.debug(`🎬 Creato handler per scenario: ${device.name}`);
460
+ this.log.debug(`Created handler for scenario: ${device.name}`);
417
461
  break;
418
462
  default:
419
- this.log.warn(`⚠️ Tipo dispositivo non supportato: ${device.type}`);
463
+ this.log.warn(`Unsupported device type: ${device.type}`);
420
464
  return;
421
465
  }
422
- // Salva l'handler per aggiornamenti futuri
423
- this.accessoryHandlers.set(uuid, handler);
466
+ if (handler) {
467
+ this.accessoryHandlers.set(uuid, handler);
468
+ }
424
469
  }
425
470
  removeAccessory(accessory) {
426
- this.log.info('🗑️ Rimozione accessorio:', accessory.displayName);
471
+ this.log.info('Removing accessory:', accessory.displayName);
427
472
  this.api.unregisterPlatformAccessories(settings_1.PLUGIN_NAME, settings_1.PLATFORM_NAME, [accessory]);
428
473
  this.accessories.delete(accessory.UUID);
429
474
  }
@@ -1 +1 @@
1
- {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}