homebridge-tasmota-control 1.6.1-beta.2 → 1.6.1-beta.3

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 (2) hide show
  1. package/package.json +1 -1
  2. package/src/sensors.js +232 -121
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "displayName": "Tasmota Control",
3
3
  "name": "homebridge-tasmota-control",
4
- "version": "1.6.1-beta.2",
4
+ "version": "1.6.1-beta.3",
5
5
  "description": "Homebridge plugin to control Tasmota flashed devices.",
6
6
  "license": "MIT",
7
7
  "author": "grzegorz914",
package/src/sensors.js CHANGED
@@ -273,155 +273,266 @@ class Sensors extends EventEmitter {
273
273
  const debug = this.enableDebugMode ? this.emit('debug', `Prepare Sensor Services`) : false;
274
274
  this.sensorServices = [];
275
275
 
276
+ //temperature
276
277
  let i = 0;
277
278
  for (const sensor of this.sensors) {
278
279
  const sensorName = sensor.name;
279
280
  const service = {};
281
+ if (sensor.temperature) {
282
+ const debug = this.enableDebugMode ? this.emit('debug', `Prepare Temperature Sensor Services`) : false;
283
+ const serviceName = this.sensorsNamePrefix ? `${accessoryName} ${sensorName} Temperature` : `${sensorName} Temperature`;
284
+ const sensorTemperatureService = accessory.addService(Service.TemperatureSensor, serviceName, `sensorTemperatureService${i}`);
285
+ sensorTemperatureService.addOptionalCharacteristic(Characteristic.ConfiguredName);
286
+ sensorTemperatureService.setCharacteristic(Characteristic.ConfiguredName, serviceName);
287
+ sensorTemperatureService.getCharacteristic(Characteristic.CurrentTemperature)
288
+ .onGet(async () => {
289
+ const value = sensor.temperature;
290
+ const logInfo = this.disableLogInfo ? false : this.emit('info', `sensor: ${sensorName} temperature: ${value} °${sensor.tempUnit}`);
291
+ return value;
292
+ });
293
+ service.sensorTemperatureService = sensorTemperatureService;
294
+ }
280
295
 
281
- const fullName = (suffix) =>
282
- this.sensorsNamePrefix ? `${accessoryName} ${sensorName} ${suffix}` : `${sensorName} ${suffix}`;
296
+ //reference temperature
297
+ if (sensor.referenceTemperature) {
298
+ const debug = this.enableDebugMode ? this.emit('debug', `Prepare Reference Temperature Sensor Services`) : false;
299
+ const serviceName = this.sensorsNamePrefix ? `${accessoryName} ${sensorName} Reference Temperature` : `${sensorName} Reference Temperature`;
300
+ const sensorReferenceTemperatureService = accessory.addService(Service.TemperatureSensor, serviceName, `sensorReferenceTemperatureService${i}`);
301
+ sensorReferenceTemperatureService.addOptionalCharacteristic(Characteristic.ConfiguredName);
302
+ sensorReferenceTemperatureService.setCharacteristic(Characteristic.ConfiguredName, serviceName);
303
+ sensorReferenceTemperatureService.getCharacteristic(Characteristic.CurrentTemperature)
304
+ .onGet(async () => {
305
+ const value = sensor.referenceTemperature;
306
+ const logInfo = this.disableLogInfo ? false : this.emit('info', `sensor: ${sensorName} reference temperature: ${value} °${sensor.tempUnit}`);
307
+ return value;
308
+ });
309
+ service.sensorReferenceTemperatureService = sensorReferenceTemperatureService;
310
+ }
283
311
 
284
- // Temperature Variants
285
- const tempTypes = [
286
- { key: 'temperature', label: 'Temperature' },
287
- { key: 'referenceTemperature', label: 'Reference Temperature' },
288
- { key: 'objTemperature', label: 'Obj Temperature' },
289
- { key: 'ambTemperature', label: 'Amb Temperature' },
290
- { key: 'dewPointTemperature', label: 'Dew Point' }
291
- ];
292
- for (const { key, label } of tempTypes) {
293
- if (sensor[key] !== undefined) {
294
- if (this.enableDebugMode) this.emit('debug', `Prepare ${label} Sensor Services`);
295
- const value = sensor[key];
296
- const name = fullName(label);
297
- const temperatureService = this.createSensorService({
298
- accessory,
299
- serviceType: Service.TemperatureSensor,
300
- serviceName: name,
301
- characteristicType: Characteristic.CurrentTemperature,
302
- getValue: async () => {
303
- if (!this.disableLogInfo) this.emit('info', `sensor: ${sensorName} ${label.toLowerCase()}: ${value} °${sensor.tempUnit}`);
304
- return value;
305
- }
312
+ //object temperature
313
+ if (sensor.objTemperature) {
314
+ const debug = this.enableDebugMode ? this.emit('debug', `Prepare Obj Temperature Sensor Services`) : false;
315
+ const serviceName = this.sensorsNamePrefix ? `${accessoryName} ${sensorName} Obj Temperature` : `${sensorName} Obj Temperature`;
316
+ const sensorObjTemperatureService = accessory.addService(Service.TemperatureSensor, serviceName, `sensorObjTemperatureService${i}`);
317
+ sensorObjTemperatureService.addOptionalCharacteristic(Characteristic.ConfiguredName);
318
+ sensorObjTemperatureService.setCharacteristic(Characteristic.ConfiguredName, serviceName);
319
+ sensorObjTemperatureService.getCharacteristic(Characteristic.CurrentTemperature)
320
+ .onGet(async () => {
321
+ const value = sensor.objTemperature;
322
+ const logInfo = this.disableLogInfo ? false : this.emit('info', `sensor: ${sensorName} obj temperature: ${value} °${sensor.tempUnit}`);
323
+ return value;
306
324
  });
307
- service[`sensor${label.replace(/\s/g, '')}Service`] = temperatureService;
308
- }
325
+ service.sensorObjTemperatureService = sensorObjTemperatureService;
326
+ }
327
+
328
+ //ambient temperature
329
+ if (sensor.ambTemperature) {
330
+ const debug = this.enableDebugMode ? this.emit('debug', `Prepare Amb Temperature Sensor Services`) : false;
331
+ const serviceName = this.sensorsNamePrefix ? `${accessoryName} ${sensorName} Amb Temperature` : `${sensorName} Amb Temperature`;
332
+ const sensorAmbTemperatureService = accessory.addService(Service.TemperatureSensor, serviceName, `sensorAmbTemperatureService${i}`);
333
+ sensorAmbTemperatureService.addOptionalCharacteristic(Characteristic.ConfiguredName);
334
+ sensorAmbTemperatureService.setCharacteristic(Characteristic.ConfiguredName, serviceName);
335
+ sensorAmbTemperatureService.getCharacteristic(Characteristic.CurrentTemperature)
336
+ .onGet(async () => {
337
+ const value = sensor.ambTemperature;
338
+ const logInfo = this.disableLogInfo ? false : this.emit('info', `sensor: ${sensorName} amb temperature: ${value} °${sensor.tempUnit}`);
339
+ return value;
340
+ });
341
+ service.sensorAmbTemperatureService = sensorAmbTemperatureService;
342
+ }
343
+
344
+ //dew point temperature
345
+ if (sensor.dewPointTemperature) {
346
+ const debug = this.enableDebugMode ? this.emit('debug', `Prepare Dew Point Temperature Sensor Services`) : false;
347
+ const serviceName = this.sensorsNamePrefix ? `${accessoryName} ${sensorName} Dew Point` : `${sensorName} Dew Point`;
348
+ const sensorDewPointTemperatureService = accessory.addService(Service.TemperatureSensor, serviceName, `sensorDewPointTemperatureService${i}`);
349
+ sensorDewPointTemperatureService.addOptionalCharacteristic(Characteristic.ConfiguredName);
350
+ sensorDewPointTemperatureService.setCharacteristic(Characteristic.ConfiguredName, serviceName);
351
+ sensorDewPointTemperatureService.getCharacteristic(Characteristic.CurrentTemperature)
352
+ .onGet(async () => {
353
+ const value = sensor.dewPointTemperature;
354
+ const logInfo = this.disableLogInfo ? false : this.emit('info', `sensor: ${sensorName} dew point: ${value} °${sensor.tempUnit}`);
355
+ return value;
356
+ });
357
+ service.sensorDewPointTemperatureService = sensorDewPointTemperatureService;
309
358
  }
310
359
 
311
- // Humidity
312
- if (sensor.humidity !== undefined) {
313
- if (this.enableDebugMode) this.emit('debug', `Prepare Humidity Sensor Services`);
314
- const name = fullName('Humidity');
315
- const humidityService = this.createSensorService({
316
- accessory,
317
- serviceType: Service.HumiditySensor,
318
- serviceName: name,
319
- characteristicType: Characteristic.CurrentRelativeHumidity,
320
- getValue: async () => {
360
+ //humidity
361
+ if (sensor.humidity) {
362
+ const debug = this.enableDebugMode ? this.emit('debug', `Prepare Humidity Sensor Services`) : false;
363
+ const serviceName = this.sensorsNamePrefix ? `${accessoryName} ${sensorName} Humidity` : `${sensorName} Humidity`;
364
+ const sensorHumidityService = accessory.addService(Service.HumiditySensor, serviceName, `sensorHumidityService${i}`);
365
+ sensorHumidityService.addOptionalCharacteristic(Characteristic.ConfiguredName);
366
+ sensorHumidityService.setCharacteristic(Characteristic.ConfiguredName, serviceName);
367
+ sensorHumidityService.getCharacteristic(Characteristic.CurrentRelativeHumidity)
368
+ .onGet(async () => {
321
369
  const value = sensor.humidity;
322
- if (!this.disableLogInfo) this.emit('info', `sensor: ${sensorName} humidity: ${value} %`);
370
+ const logInfo = this.disableLogInfo ? false : this.emit('info', `sensor: ${sensorName} humidity: ${value} %`);
323
371
  return value;
324
- }
325
- });
326
- service.sensorHumidityService = humidityService;
372
+ });
373
+ service.sensorHumidityService = sensorHumidityService;
327
374
  }
328
375
 
329
- // Carbon Dioxide
330
- if (sensor.carbonDioxyde !== undefined) {
331
- if (this.enableDebugMode) this.emit('debug', `Prepare Carbon Dioxyde Sensor Services`);
332
- const name = fullName('Carbon Dioxyde');
333
- const co2Service = accessory.addService(Service.CarbonDioxideSensor, name, `sensorCarbonDioxydeService${i}`);
334
- co2Service.addOptionalCharacteristic(Characteristic.ConfiguredName);
335
- co2Service.setCharacteristic(Characteristic.ConfiguredName, name);
336
-
337
- co2Service.getCharacteristic(Characteristic.CarbonDioxideDetected).onGet(async () => {
338
- const detected = sensor.carbonDioxyde > 1000;
339
- if (!this.disableLogInfo) this.emit('info', `sensor: ${sensorName} carbon dioxyde detected: ${detected ? 'Yes' : 'No'}`);
340
- return detected;
341
- });
342
- co2Service.getCharacteristic(Characteristic.CarbonDioxideLevel).onGet(async () => {
343
- const value = sensor.carbonDioxyde;
344
- if (!this.disableLogInfo) this.emit('info', `sensor: ${sensorName} carbon dioxyde level: ${value} ppm`);
345
- return value;
346
- });
347
- co2Service.getCharacteristic(Characteristic.CarbonDioxidePeakLevel).onGet(async () => {
348
- const value = sensor.carbonDioxyde;
349
- if (!this.disableLogInfo) this.emit('info', `sensor: ${sensorName} carbon dioxyde peak level: ${value} ppm`);
350
- return value;
351
- });
352
- service.sensorCarbonDioxydeService = co2Service;
376
+ //pressure
377
+
378
+ //gas
379
+
380
+ //carbon dioxyde
381
+ if (sensor.carbonDioxyde) {
382
+ const debug = this.enableDebugMode ? this.emit('debug', `Prepare Carbon Dioxyde Sensor Services`) : false;
383
+ const serviceName = this.sensorsNamePrefix ? `${accessoryName} ${sensorName} Carbon Dioxyde` : `${sensorName} Carbon Dioxyde`;
384
+ const sensorCarbonDioxydeService = accessory.addService(Service.CarbonDioxideSensor, serviceName, `sensorCarbonDioxydeService${i}`);
385
+ sensorCarbonDioxydeService.addOptionalCharacteristic(Characteristic.ConfiguredName);
386
+ sensorCarbonDioxydeService.setCharacteristic(Characteristic.ConfiguredName, serviceName);
387
+ sensorCarbonDioxydeService.getCharacteristic(Characteristic.CarbonDioxideDetected)
388
+ .onGet(async () => {
389
+ const state = sensor.carbonDioxyde > 1000;
390
+ const logInfo = this.disableLogInfo ? false : this.emit('info', `sensor: ${sensorName} carbon dioxyde detected: ${state ? 'Yes' : 'No'}`);
391
+ return state;
392
+ });
393
+ sensorCarbonDioxydeService.getCharacteristic(Characteristic.CarbonDioxideLevel)
394
+ .onGet(async () => {
395
+ const value = sensor.carbonDioxyde;
396
+ const logInfo = this.disableLogInfo ? false : this.emit('info', `sensor: ${sensorName} carbon dioxyde level: ${value} ppm`);
397
+ return value;
398
+ });
399
+ sensorCarbonDioxydeService.getCharacteristic(Characteristic.CarbonDioxidePeakLevel)
400
+ .onGet(async () => {
401
+ const value = sensor.carbonDioxyde;
402
+ const logInfo = this.disableLogInfo ? false : this.emit('info', `sensor: ${sensorName} carbon dioxyde peak level: ${value} ppm`);
403
+ return value;
404
+ });
405
+ service.sensorCarbonDioxydeService = sensorCarbonDioxydeService;
353
406
  }
354
407
 
355
- // Ambient Light
356
- if (sensor.ambientLight !== undefined) {
357
- if (this.enableDebugMode) this.emit('debug', `Prepare Ambient Light Sensor Services`);
358
- const name = fullName('Ambient Light');
359
- const lightService = this.createSensorService({
360
- accessory,
361
- serviceType: Service.LightSensor,
362
- serviceName: name,
363
- characteristicType: Characteristic.CurrentAmbientLightLevel,
364
- getValue: async () => {
408
+ //ambient light
409
+ if (sensor.ambientLight) {
410
+ const debug = this.enableDebugMode ? this.emit('debug', `Prepare Ambient Light Sensor Services`) : false;
411
+ const serviceName = this.sensorsNamePrefix ? `${accessoryName} ${sensorName} Ambient Light` : `${sensorName} Ambient Light`;
412
+ const sensorAmbientLightService = accessory.addService(Service.LightSensor, serviceName, `sensorAmbientLightService${i}`);
413
+ sensorAmbientLightService.addOptionalCharacteristic(Characteristic.ConfiguredName);
414
+ sensorAmbientLightService.setCharacteristic(Characteristic.ConfiguredName, serviceName);
415
+ sensorAmbientLightService.getCharacteristic(Characteristic.CurrentAmbientLightLevel)
416
+ .onGet(async () => {
365
417
  const value = sensor.ambientLight;
366
- if (!this.disableLogInfo) this.emit('info', `sensor: ${sensorName} ambient light: ${value} lx`);
418
+ const logInfo = this.disableLogInfo ? false : this.emit('info', `sensor: ${sensorName} ambient light: ${value} lx`);
367
419
  return value;
368
- }
369
- });
370
- service.sensorAmbientLightService = lightService;
420
+ });
421
+ service.sensorAmbientLightService = sensorAmbientLightService;
371
422
  }
372
423
 
373
- // Motion
374
- if (sensor.motion !== undefined) {
375
- if (this.enableDebugMode) this.emit('debug', `Prepare Motion Sensor Services`);
376
- const name = fullName('Motion');
377
- const motionService = this.createSensorService({
378
- accessory,
379
- serviceType: Service.MotionSensor,
380
- serviceName: name,
381
- characteristicType: Characteristic.MotionDetected,
382
- getValue: async () => {
424
+ //motion
425
+ if (sensor.motion) {
426
+ const debug = this.enableDebugMode ? this.emit('debug', `Prepare Motion Sensor Services`) : false;
427
+ const serviceName = this.sensorsNamePrefix ? `${accessoryName} ${sensorName} Motion` : `${sensorName} Motion`;
428
+ const sensorMotionService = accessory.addService(Service.MotionSensor, serviceName, `sensorMotionService${i}`);
429
+ sensorMotionService.addOptionalCharacteristic(Characteristic.ConfiguredName);
430
+ sensorMotionService.setCharacteristic(Characteristic.ConfiguredName, serviceName);
431
+ sensorMotionService.getCharacteristic(Characteristic.MotionDetected)
432
+ .onGet(async () => {
383
433
  const state = sensor.motion;
384
- if (!this.disableLogInfo) this.emit('info', `sensor: ${sensorName} motion: ${state ? 'ON' : 'OFF'}`);
434
+ const logInfo = this.disableLogInfo ? false : this.emit('info', `sensor: ${sensorName} motion: ${state ? 'ON' : 'OFF'}`);
385
435
  return state;
386
- }
387
- });
388
- service.sensorMotionService = motionService;
436
+ });
437
+ service.sensorMotionService = sensorMotionService;
389
438
  }
390
439
 
391
- // Energy Sensor
440
+ //energy
392
441
  if (sensor.name === 'ENERGY') {
393
- if (this.enableDebugMode) this.emit('debug', `Prepare Power And Energy Service`);
394
- const name = this.sensorsNamePrefix ? `${accessoryName} ${sensorName}` : sensorName;
395
- const energyService = accessory.addService(Service.PowerAndEnergyService, name, `sensorEnergyService${i}`);
396
- energyService.setCharacteristic(Characteristic.ConfiguredName, name);
397
-
398
- const energyFields = [
399
- { key: 'power', type: Characteristic.Power, label: 'power', unit: 'W' },
400
- { key: 'apparentPower', type: Characteristic.ApparentPower, label: 'apparent power', unit: 'VA' },
401
- { key: 'reactivePower', type: Characteristic.ReactivePower, label: 'reactive power', unit: 'VAr' },
402
- { key: 'energyToday', type: Characteristic.EnergyToday, label: 'energy today', unit: 'kWh' },
403
- { key: 'energyLastDay', type: Characteristic.EnergyLastDay, label: 'energy last day', unit: 'kWh' },
404
- { key: 'energyLifetime', type: Characteristic.EnergyLifetime, label: 'energy lifetime', unit: 'kWh' },
405
- { key: 'current', type: Characteristic.Current, label: 'current', unit: 'A' },
406
- { key: 'voltage', type: Characteristic.Voltage, label: 'voltage', unit: 'V' },
407
- { key: 'factor', type: Characteristic.Factor, label: 'power factor', unit: 'cos φ' },
408
- { key: 'frequency', type: Characteristic.Freqency, label: 'frequency', unit: 'Hz' },
409
- { key: 'time', type: Characteristic.ReadingTime, label: 'last report', unit: '' }
410
- ];
411
-
412
- for (const { key, type, label, unit } of energyFields) {
413
- if (sensor[key] !== undefined) {
414
- energyService.getCharacteristic(type).onGet(async () => {
415
- const value = sensor[key];
416
- if (!this.disableLogInfo) this.emit('info', `sensor: ${sensorName} ${label}: ${value} ${unit}`);
442
+ const debug4 = this.enableDebugMode ? this.emit('debug', `Prepare Power And Energy Service`) : false;
443
+ const serviceName = this.sensorsNamePrefix ? `${accessoryName} ${sensorName}` : `${sensorName}`;
444
+ const sensorEnergyService = accessory.addService(Service.PowerAndEnergyService, serviceName, `sensorEnergyService${i}`);
445
+ sensorEnergyService.setCharacteristic(Characteristic.ConfiguredName, serviceName);
446
+ if (sensor.power) {
447
+ sensorEnergyService.getCharacteristic(Characteristic.Power)
448
+ .onGet(async () => {
449
+ const value = sensor.power;
450
+ const info = this.disableLogInfo ? false : this.emit('info', `sensor: ${sensorName} power: ${value} W`);
417
451
  return value;
418
452
  });
419
- }
420
453
  }
421
-
422
- service.sensorEnergyService = energyService;
454
+ if (sensor.apparentPower) {
455
+ sensorEnergyService.getCharacteristic(Characteristic.ApparentPower)
456
+ .onGet(async () => {
457
+ const value = sensor.apparentPower;
458
+ const info = this.disableLogInfo ? false : this.emit('info', `sensor: ${sensorName} apparent power: ${value} VA`);
459
+ return value;
460
+ });
461
+ }
462
+ if (sensor.reactivePower) {
463
+ sensorEnergyService.getCharacteristic(Characteristic.ReactivePower)
464
+ .onGet(async () => {
465
+ const value = sensor.reactivePower;
466
+ const info = this.disableLogInfo ? false : this.emit('info', `sensor: ${sensorName} reactive power: ${value} VAr`);
467
+ return value;
468
+ });
469
+ }
470
+ if (sensor.energyToday) {
471
+ sensorEnergyService.getCharacteristic(Characteristic.EnergyToday)
472
+ .onGet(async () => {
473
+ const value = sensor.energyToday;
474
+ const info = this.disableLogInfo ? false : this.emit('info', `sensor: ${sensorName} energy today: ${value} kWh`);
475
+ return value;
476
+ });
477
+ }
478
+ if (sensor.energyLastDay) {
479
+ sensorEnergyService.getCharacteristic(Characteristic.EnergyLastDay)
480
+ .onGet(async () => {
481
+ const value = sensor.energyLastDay;
482
+ const info = this.disableLogInfo ? false : this.emit('info', `sensor: ${sensorName} energy last day: ${value} kWh`);
483
+ return value;
484
+ });
485
+ }
486
+ if (sensor.energyLifetime) {
487
+ sensorEnergyService.getCharacteristic(Characteristic.EnergyLifetime)
488
+ .onGet(async () => {
489
+ const value = sensor.energyLifetime;
490
+ const info = this.disableLogInfo ? false : this.emit('info', `sensor: ${sensorName} energy lifetime: ${value} kWh`);
491
+ return value;
492
+ });
493
+ }
494
+ if (sensor.current) {
495
+ sensorEnergyService.getCharacteristic(Characteristic.Current)
496
+ .onGet(async () => {
497
+ const value = sensor.current;
498
+ const info = this.disableLogInfo ? false : this.emit('info', `sensor: ${sensorName} current: ${value} A`);
499
+ return value;
500
+ });
501
+ }
502
+ if (sensor.voltage) {
503
+ sensorEnergyService.getCharacteristic(Characteristic.Voltage)
504
+ .onGet(async () => {
505
+ const value = sensor.voltage;
506
+ const info = this.disableLogInfo ? false : this.emit('info', `sensor: ${sensorName} voltage: ${value} V`);
507
+ return value;
508
+ });
509
+ }
510
+ if (sensor.factor) {
511
+ sensorEnergyService.getCharacteristic(Characteristic.Factor)
512
+ .onGet(async () => {
513
+ const value = sensor.factor;
514
+ const info = this.disableLogInfo ? false : this.emit('info', `sensor: ${sensorName} power factor: ${value} cos φ`);
515
+ return value;
516
+ });
517
+ }
518
+ if (sensor.frequency) {
519
+ sensorEnergyService.getCharacteristic(Characteristic.Freqency)
520
+ .onGet(async () => {
521
+ const value = sensor.frequency;
522
+ const info = this.disableLogInfo ? false : this.emit('info', `sensor: ${sensorName} frequency: ${value} Hz`);
523
+ return value;
524
+ });
525
+ }
526
+ if (sensor.time) {
527
+ sensorEnergyService.getCharacteristic(Characteristic.ReadingTime)
528
+ .onGet(async () => {
529
+ const value = sensor.time;
530
+ const info = this.disableLogInfo ? false : this.emit('info', `sensor: ${sensorName} last report: ${value}`);
531
+ return value;
532
+ });
533
+ }
534
+ service.sensorEnergyService = sensorEnergyService;
423
535
  }
424
-
425
536
  this.sensorServices.push(service);
426
537
  i++;
427
538
  }