homebridge-tasmota-control 1.7.10-beta.0 → 1.7.10-beta.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/index.js CHANGED
@@ -48,7 +48,9 @@ class tasmotaPlatform {
48
48
  const user = device.user || '';
49
49
  const passwd = device.passwd || '';
50
50
  const loadNameFromDevice = device.loadNameFromDevice || false;
51
- const refreshInterval = (device.refreshInterval ?? 5000) * 1000;
51
+ const remoteTemperatureSensorEnable = device.miElHvac?.remoteTemperatureSensor?.enable;
52
+ const remoteTemperatureSensorRefreshInterval = (device.miElHvac?.remoteTemperatureSensor?.refreshInterval ?? 5) * 1000;
53
+ const refreshInterval = (device.refreshInterval ?? 5) * 1000;
52
54
 
53
55
  //log
54
56
  const logLevel = {
@@ -115,19 +117,19 @@ class tasmotaPlatform {
115
117
  let deviceType;
116
118
  switch (type) {
117
119
  case 0: //mielhvac
118
- deviceType = new MiElHvac(api, device, info, serialNumber, refreshInterval);
120
+ deviceType = new MiElHvac(api, device, info, serialNumber);
119
121
  break;
120
122
  case 1: //switches
121
- deviceType = new Switches(api, device, info, serialNumber, refreshInterval);
123
+ deviceType = new Switches(api, device, info, serialNumber);
122
124
  break;
123
125
  case 2: //lights
124
- deviceType = new Lights(api, device, info, serialNumber, refreshInterval);
126
+ deviceType = new Lights(api, device, info, serialNumber);
125
127
  break;
126
128
  case 3: //fans
127
- deviceType = new Fans(api, device, info, serialNumber, refreshInterval);
129
+ deviceType = new Fans(api, device, info, serialNumber);
128
130
  break;
129
131
  case 4: //sensors
130
- deviceType = new Sensors(api, device, info, serialNumber, refreshInterval);
132
+ deviceType = new Sensors(api, device, info, serialNumber);
131
133
  break;
132
134
  default:
133
135
  if (logLevel.warn) log.warn(`Device: ${host} ${deviceName}, unknown device: ${info.deviceTypes}.`);
@@ -146,8 +148,13 @@ class tasmotaPlatform {
146
148
  api.publishExternalAccessories(PluginName, [accessory]);
147
149
  if (logLevel.success) log.success(`Device: ${host} ${deviceName}, Published as external accessory.`);
148
150
 
149
- await impulseGenerator.stop();
150
- await deviceType.startImpulseGenerator();
151
+ //start impulse generator
152
+ const timers = [{ name: 'checkState', sampling: refreshInterval }];
153
+ if (remoteTemperatureSensorEnable) timers.push({ name: 'updateRemoteTemp', sampling: remoteTemperatureSensorRefreshInterval });
154
+ await deviceType.impulseGenerator(true, timers);
155
+
156
+ //stop impulse generator
157
+ await impulseGenerator.state(false);
151
158
  }
152
159
 
153
160
  i++;
@@ -160,7 +167,7 @@ class tasmotaPlatform {
160
167
  });
161
168
 
162
169
  //start impulse generator
163
- await impulseGenerator.start([{ name: 'start', sampling: 60000 }]);
170
+ await impulseGenerator.state(true, [{ name: 'start', sampling: 120000 }]);
164
171
  } catch (error) {
165
172
  if (logLevel.error) log.error(`Device: ${host} ${deviceName}, Did finish launching error: ${error.message ?? error}.`);
166
173
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "displayName": "Tasmota Control",
3
3
  "name": "homebridge-tasmota-control",
4
- "version": "1.7.10-beta.0",
4
+ "version": "1.7.10-beta.2",
5
5
  "description": "Homebridge plugin to control Tasmota flashed devices.",
6
6
  "license": "MIT",
7
7
  "author": "grzegorz914",
@@ -34,7 +34,7 @@
34
34
  "node": "^20 || ^22 || ^24 || ^25"
35
35
  },
36
36
  "dependencies": {
37
- "axios": "^1.13.1"
37
+ "axios": "^1.13.2"
38
38
  },
39
39
  "keywords": [
40
40
  "homebridge",
package/src/fans.js CHANGED
@@ -6,7 +6,7 @@ import { ApiCommands } from './constants.js';
6
6
  let Accessory, Characteristic, Service, Categories, AccessoryUUID;
7
7
 
8
8
  class Fans extends EventEmitter {
9
- constructor(api, config, info, serialNumber, refreshInterval) {
9
+ constructor(api, config, info, serialNumber) {
10
10
  super();
11
11
 
12
12
  Accessory = api.platformAccessory;
@@ -26,7 +26,6 @@ class Fans extends EventEmitter {
26
26
  this.enableDebugMode = config.enableDebugMode || false;
27
27
  this.disableLogInfo = config.disableLogInfo || false;
28
28
  this.disableLogDeviceInfo = config.disableLogDeviceInfo || false;
29
- this.refreshInterval = refreshInterval;
30
29
  this.functions = new Functions();
31
30
 
32
31
  //axios instance
@@ -50,7 +49,7 @@ class Fans extends EventEmitter {
50
49
  await this.checkState();
51
50
  }))
52
51
  .on('state', (state) => {
53
- this.emit('success', `Impulse generator ${state ? 'started' : 'stopped'}.`);
52
+ this.emit(state ? 'success' : 'warn', `Impulse generator ${state ? 'started' : 'stopped'}`);
54
53
  });
55
54
  }
56
55
 
@@ -156,17 +155,6 @@ class Fans extends EventEmitter {
156
155
  }
157
156
  }
158
157
 
159
- async startImpulseGenerator() {
160
- try {
161
- //start impulse generator
162
- const timers = [{ name: 'checkState', sampling: this.refreshInterval }];
163
- await this.impulseGenerator.start(timers);
164
- return true;
165
- } catch (error) {
166
- throw new Error(`Impulse generator start error: ${error}`);
167
- }
168
- }
169
-
170
158
  async deviceInfo() {
171
159
  this.emit('devInfo', `----- ${this.info.deviceName} -----`);
172
160
  this.emit('devInfo', `Manufacturer: Tasmota`);
@@ -7,46 +7,34 @@ class ImpulseGenerator extends EventEmitter {
7
7
  this.timers = [];
8
8
  }
9
9
 
10
- async start(timers) {
11
- if (this.timersState) {
12
- this.state(true);
13
- return true;
10
+ async state(state, timers = []) {
11
+ // Stop current timers before new start
12
+ if (this.timersState && state) {
13
+ await this.state(false);
14
14
  }
15
15
 
16
- this.timers = [];
17
-
18
- for (const timer of timers) {
19
- this.emit(timer.name);
20
-
21
- const interval = setInterval(() => {
22
- this.emit(timer.name);
23
- }, timer.sampling);
16
+ if (state) {
17
+ if (!Array.isArray(timers)) throw new Error('Timers must be an array');
24
18
 
25
- this.timers.push(interval);
26
- }
19
+ for (const { name, sampling } of timers) {
20
+ if (!name || !sampling) continue;
27
21
 
28
- this.state(true);
29
- return true;
30
- }
22
+ this.emit(name);
31
23
 
32
- async stop() {
33
- if (!this.timersState) {
34
- this.state(false);
35
- return true;
36
- }
24
+ const interval = setInterval(() => {
25
+ this.emit(name);
26
+ }, sampling);
37
27
 
38
- for (const timer of this.timers) {
39
- clearInterval(timer);
28
+ this.timers.push(interval);
29
+ }
30
+ } else {
31
+ this.timers.forEach(clearInterval);
32
+ this.timers = [];
40
33
  }
41
34
 
42
- this.timers = [];
43
- this.state(false);
44
- return true;
45
- }
46
-
47
- state(state) {
48
35
  this.timersState = state;
49
36
  this.emit('state', state);
37
+ return true;
50
38
  }
51
39
  }
52
40
 
package/src/lights.js CHANGED
@@ -6,7 +6,7 @@ import { ApiCommands } from './constants.js';
6
6
  let Accessory, Characteristic, Service, Categories, AccessoryUUID;
7
7
 
8
8
  class Lights extends EventEmitter {
9
- constructor(api, config, info, serialNumber, refreshInterval) {
9
+ constructor(api, config, info, serialNumber) {
10
10
  super();
11
11
 
12
12
  Accessory = api.platformAccessory;
@@ -25,7 +25,6 @@ class Lights extends EventEmitter {
25
25
  this.enableDebugMode = config.enableDebugMode || false;
26
26
  this.disableLogInfo = config.disableLogInfo || false;
27
27
  this.disableLogDeviceInfo = config.disableLogDeviceInfo || false;
28
- this.refreshInterval = refreshInterval;
29
28
  this.functions = new Functions();
30
29
 
31
30
  //axios instance
@@ -47,7 +46,7 @@ class Lights extends EventEmitter {
47
46
  await this.checkState();
48
47
  }))
49
48
  .on('state', (state) => {
50
- this.emit('success', `Impulse generator ${state ? 'started' : 'stopped'}.`);
49
+ this.emit(state ? 'success' : 'warn', `Impulse generator ${state ? 'started' : 'stopped'}`);
51
50
  });
52
51
  }
53
52
 
@@ -153,11 +152,10 @@ class Lights extends EventEmitter {
153
152
  }
154
153
  }
155
154
 
156
- async startImpulseGenerator() {
155
+ async startStopImpulseGenerator(state, timers = []) {
157
156
  try {
158
157
  //start impulse generator
159
- const timers = [{ name: 'checkState', sampling: this.refreshInterval }];
160
- await this.impulseGenerator.start(timers);
158
+ await this.melCloudAta.impulseGenerator.state(state, timers)
161
159
  return true;
162
160
  } catch (error) {
163
161
  throw new Error(`Impulse generator start error: ${error}`);
package/src/mielhvac.js CHANGED
@@ -6,7 +6,7 @@ import { ApiCommands, MiElHVAC, TemperatureDisplayUnits } from './constants.js';
6
6
  let Accessory, Characteristic, Service, Categories, AccessoryUUID;
7
7
 
8
8
  class MiElHvac extends EventEmitter {
9
- constructor(api, config, info, serialNumber, refreshInterval) {
9
+ constructor(api, config, info, serialNumber) {
10
10
  super();
11
11
 
12
12
  Accessory = api.platformAccessory;
@@ -29,72 +29,40 @@ class MiElHvac extends EventEmitter {
29
29
  const remoteTemperatureSensor = miElHvac.remoteTemperatureSensor ?? {};
30
30
  const remoteTemperatureSensorEnable = remoteTemperatureSensor.enable || false;
31
31
  const remoteTemperatureSensorPath = remoteTemperatureSensor.path;
32
- const remoteTemperatureSensorRefreshInterval = remoteTemperatureSensor.refreshInterval * 1000 || 5000;
33
32
  const remoteTemperatureSensorAuth = remoteTemperatureSensor.auth || false;
34
33
  const remoteTemperatureSensorUser = remoteTemperatureSensor.user;
35
34
  const remoteTemperatureSensorPasswd = remoteTemperatureSensor.passwd;
36
35
  this.remoteTemperatureSensorEnable = remoteTemperatureSensorEnable;
37
- this.remoteTemperatureSensorRefreshInterval = remoteTemperatureSensorRefreshInterval;
38
36
 
39
37
  //presets
40
- const presets = miElHvac.presets || [];
41
- this.presetsConfigured = [];
42
- for (const preset of presets) {
43
- const displayType = preset.displayType;
44
- if (!displayType) {
45
- continue;
46
- }
47
-
48
- const presetyServiceType = ['', Service.Outlet, Service.Switch, Service.MotionSensor, Service.OccupancySensor, Service.ContactSensor][displayType];
49
- const presetCharacteristicType = ['', Characteristic.On, Characteristic.On, Characteristic.MotionDetected, Characteristic.OccupancyDetected, Characteristic.ContactSensorState][displayType];
50
- preset.serviceType = presetyServiceType;
51
- preset.characteristicType = presetCharacteristicType;
38
+ this.presets = (miElHvac.presets || []).filter(preset => (preset.displayType ?? 0) > 0);
39
+ for (const preset of this.presets) {
40
+ preset.serviceType = [null, Service.Outlet, Service.Switch, Service.MotionSensor, Service.OccupancySensor, Service.ContactSensor][preset.displayType];
41
+ preset.characteristicType = [null, Characteristic.On, Characteristic.On, Characteristic.MotionDetected, Characteristic.OccupancyDetected, Characteristic.ContactSensorState][preset.displayType];
52
42
  preset.name = preset.name || 'Preset';
53
43
  preset.state = false;
54
44
  preset.previousSettings = {};
55
- this.presetsConfigured.push(preset);
56
45
  }
57
- this.presetsConfiguredCount = this.presetsConfigured.length || 0;
58
46
 
59
47
  //buttons
60
- const buttons = miElHvac.buttons || [];
61
- this.buttonsConfigured = [];
62
- for (const button of buttons) {
63
- const displayType = button.displayType;
64
- if (!displayType) {
65
- continue;
66
- }
67
-
68
- const buttonServiceType = ['', Service.Outlet, Service.Switch][displayType];
69
- const buttonCharacteristicType = ['', Characteristic.On, Characteristic.On][displayType];
70
- button.serviceType = buttonServiceType;
71
- button.characteristicType = buttonCharacteristicType;
48
+ this.buttons = (miElHvac.buttons || []).filter(button => (button.displayType ?? 0) > 0);
49
+ for (const button of this.buttons) {
50
+ button.serviceType = [null, Service.Outlet, Service.Switch][button.displayType];
51
+ button.characteristicType = [null, Characteristic.On, Characteristic.On][button.displayType];
72
52
  button.name = button.name || 'Button';
73
53
  button.state = false;
74
54
  button.previousValue = null;
75
- this.buttonsConfigured.push(button);
76
55
  }
77
- this.buttonsConfiguredCount = this.buttonsConfigured.length || 0;
78
56
 
79
57
  //sensors
80
- const sensors = miElHvac.sensors || [];
81
- this.sensorsConfigured = [];
82
- for (const sensor of sensors) {
83
- const displayType = sensor.displayType;
84
- if (!displayType) {
85
- continue;
86
- }
87
-
88
- const sensorServiceType = ['', Service.MotionSensor, Service.OccupancySensor, Service.ContactSensor][displayType];
89
- const sensorCharacteristicType = ['', Characteristic.MotionDetected, Characteristic.OccupancyDetected, Characteristic.ContactSensorState][displayType];
90
- sensor.serviceType = sensorServiceType;
91
- sensor.characteristicType = sensorCharacteristicType;
58
+ this.sensors = (miElHvac.sensors || []).filter(sensor => (sensor.displayType ?? 0) > 0);
59
+ for (const sensor of this.sensors) {
60
+ sensor.serviceType = [null, Service.MotionSensor, Service.OccupancySensor, Service.ContactSensor][sensor.displayType];
61
+ sensor.characteristicType = [null, Characteristic.MotionDetected, Characteristic.OccupancyDetected, Characteristic.ContactSensorState][sensor.displayType];
92
62
  sensor.name = sensor.name || 'Sensor';
93
63
  sensor.state = false;
94
64
  sensor.previousValue = null;
95
- this.sensorsConfigured.push(sensor);
96
65
  }
97
- this.sensorsConfiguredCount = this.sensorsConfigured.length || 0;
98
66
 
99
67
  //frost protect
100
68
  const frostProtect = miElHvac.frostProtect ?? {};
@@ -112,7 +80,6 @@ class MiElHvac extends EventEmitter {
112
80
  this.enableDebugMode = config.enableDebugMode || false;
113
81
  this.disableLogInfo = config.disableLogInfo || false;
114
82
  this.disableLogDeviceInfo = config.disableLogDeviceInfo || false;
115
- this.refreshInterval = refreshInterval;
116
83
 
117
84
  //mielhvac
118
85
  this.mielHvac = {};
@@ -158,7 +125,7 @@ class MiElHvac extends EventEmitter {
158
125
  await this.checkState();
159
126
  }))
160
127
  .on('state', (state) => {
161
- this.emit('success', `Impulse generator ${state ? 'started' : 'stopped'}.`);
128
+ this.emit(state ? 'success' : 'warn', `Impulse generator ${state ? 'started' : 'stopped'}`);
162
129
  });
163
130
  }
164
131
 
@@ -434,8 +401,8 @@ class MiElHvac extends EventEmitter {
434
401
  }
435
402
 
436
403
  // Update presets state
437
- if (this.presetsConfiguredCount > 0) {
438
- this.presetsConfigured.forEach((preset, index) => {
404
+ if (this.presets.length > 0) {
405
+ this.presets.forEach((preset, index) => {
439
406
  let iseeMode = operationMode;
440
407
  if (iseeMode === 'heat_isee') iseeMode = 'heat';
441
408
  else if (iseeMode === 'dry_isee') iseeMode = 'dry';
@@ -452,7 +419,7 @@ class MiElHvac extends EventEmitter {
452
419
  });
453
420
  }
454
421
 
455
- if (this.buttonsConfiguredCount > 0) {
422
+ if (this.buttons.length > 0) {
456
423
  const modeMap = {
457
424
  0: () => power === 1,
458
425
  1: () => power && ['heat', 'heat_isee'].includes(operationMode),
@@ -521,7 +488,7 @@ class MiElHvac extends EventEmitter {
521
488
  63: 'on', //nightmode
522
489
  };
523
490
 
524
- this.buttonsConfigured.forEach((button, index) => {
491
+ this.buttons.forEach((button, index) => {
525
492
  const mode = button.mode;
526
493
  let state = false;
527
494
 
@@ -550,14 +517,14 @@ class MiElHvac extends EventEmitter {
550
517
  });
551
518
  }
552
519
 
553
- if (this.sensorsConfiguredCount > 0) {
520
+ if (this.sensors.length > 0) {
554
521
  const powerOn = power === 1;
555
522
 
556
523
  // Helper: match by value with power check
557
524
  const is = (val, match) => powerOn && val === match;
558
525
  const isOneOf = (val, matches) => powerOn && matches.includes(val);
559
526
 
560
- this.sensorsConfigured.forEach((sensor, index) => {
527
+ this.sensors.forEach((sensor, index) => {
561
528
  const mode = sensor.mode;
562
529
 
563
530
  const sensorStates = {
@@ -691,18 +658,6 @@ class MiElHvac extends EventEmitter {
691
658
  }
692
659
  }
693
660
 
694
- async startImpulseGenerator() {
695
- try {
696
- //start impulse generator
697
- const timers = [{ name: 'checkState', sampling: this.refreshInterval }];
698
- if (this.remoteTemperatureSensorEnable) timers.push({ name: 'updateRemoteTemp', sampling: this.remoteTemperatureSensorRefreshInterval });
699
- await this.impulseGenerator.start(timers);
700
- return true;
701
- } catch (error) {
702
- throw new Error(`Impulse generator start error: ${error}`);
703
- }
704
- }
705
-
706
661
  async deviceInfo() {
707
662
  this.emit('devInfo', `----- ${this.info.deviceName} -----`);
708
663
  this.emit('devInfo', `Manufacturer: Tasmota`);
@@ -952,11 +907,11 @@ class MiElHvac extends EventEmitter {
952
907
  accessory.addService(this.miElHvacService);
953
908
 
954
909
  //presets services
955
- if (this.presetsConfiguredCount > 0) {
910
+ if (this.presets.length > 0) {
956
911
  if (this.enableDebugMode) this.emit('debug', 'Prepare presets services');
957
912
  this.presetsServices = [];
958
913
 
959
- this.presetsConfigured.forEach((preset, index) => {
914
+ this.presets.forEach((preset, index) => {
960
915
  const { name: presetName, namePrefix, serviceType, characteristicType, mode, setTemp, fanSpeed, swingV, swingH } = preset;
961
916
  const serviceName = namePrefix ? `${accessoryName} ${presetName}` : presetName;
962
917
 
@@ -1004,11 +959,11 @@ class MiElHvac extends EventEmitter {
1004
959
  }
1005
960
 
1006
961
 
1007
- if (this.buttonsConfiguredCount > 0) {
962
+ if (this.buttons.length > 0) {
1008
963
  if (this.enableDebugMode) this.emit('debug', 'Prepare buttons services');
1009
964
  this.buttonsServices = [];
1010
965
 
1011
- this.buttonsConfigured.forEach((button, index) => {
966
+ this.buttons.forEach((button, index) => {
1012
967
  const { mode, name: buttonName, namePrefix, serviceType, characteristicType } = button;
1013
968
  const serviceName = namePrefix ? `${accessoryName} ${buttonName}` : buttonName;
1014
969
 
@@ -1127,13 +1082,12 @@ class MiElHvac extends EventEmitter {
1127
1082
  });
1128
1083
  }
1129
1084
 
1130
-
1131
1085
  //sensors services
1132
- if (this.sensorsConfiguredCount > 0) {
1086
+ if (this.sensors.length > 0) {
1133
1087
  if (this.enableDebugMode) this.emit('debug', `Prepare sensors services`);
1134
1088
  this.sensorsServices = [];
1135
1089
 
1136
- this.sensorsConfigured.forEach((sensor, index) => {
1090
+ this.sensors.forEach((sensor, index) => {
1137
1091
  //get sensor name
1138
1092
  const sensorName = sensor.name;
1139
1093
 
package/src/sensors.js CHANGED
@@ -6,7 +6,7 @@ import { ApiCommands, SensorKeys } from './constants.js';
6
6
  let Accessory, Characteristic, Service, Categories, AccessoryUUID;
7
7
 
8
8
  class Sensors extends EventEmitter {
9
- constructor(api, config, info, serialNumber, refreshInterval) {
9
+ constructor(api, config, info, serialNumber) {
10
10
  super();
11
11
 
12
12
  Accessory = api.platformAccessory;
@@ -24,7 +24,6 @@ class Sensors extends EventEmitter {
24
24
  this.enableDebugMode = config.enableDebugMode || false;
25
25
  this.disableLogInfo = config.disableLogInfo || false;
26
26
  this.disableLogDeviceInfo = config.disableLogDeviceInfo || false;
27
- this.refreshInterval = refreshInterval;
28
27
  this.functions = new Functions();
29
28
 
30
29
  //sensors
@@ -49,7 +48,7 @@ class Sensors extends EventEmitter {
49
48
  await this.checkState();
50
49
  }))
51
50
  .on('state', (state) => {
52
- this.emit('success', `Impulse generator ${state ? 'started' : 'stopped'}.`);
51
+ this.emit(state ? 'success' : 'warn', `Impulse generator ${state ? 'started' : 'stopped'}`);
53
52
  });
54
53
  }
55
54
 
@@ -192,17 +191,6 @@ class Sensors extends EventEmitter {
192
191
  }
193
192
  }
194
193
 
195
- async startImpulseGenerator() {
196
- try {
197
- //start impulse generator
198
- const timers = [{ name: 'checkState', sampling: this.refreshInterval }];
199
- await this.impulseGenerator.start(timers);
200
- return true;
201
- } catch (error) {
202
- throw new Error(`Impulse generator start error: ${error}`);
203
- }
204
- }
205
-
206
194
  async deviceInfo() {
207
195
  this.emit('devInfo', `----- ${this.info.deviceName} -----`);
208
196
  this.emit('devInfo', `Manufacturer: Tasmota`);
package/src/switches.js CHANGED
@@ -6,7 +6,7 @@ import { ApiCommands } from './constants.js';
6
6
  let Accessory, Characteristic, Service, Categories, AccessoryUUID;
7
7
 
8
8
  class Switches extends EventEmitter {
9
- constructor(api, config, info, serialNumber, refreshInterval) {
9
+ constructor(api, config, info, serialNumber) {
10
10
  super();
11
11
 
12
12
  Accessory = api.platformAccessory;
@@ -26,7 +26,6 @@ class Switches extends EventEmitter {
26
26
  this.enableDebugMode = config.enableDebugMode || false;
27
27
  this.disableLogInfo = config.disableLogInfo || false;
28
28
  this.disableLogDeviceInfo = config.disableLogDeviceInfo || false;
29
- this.refreshInterval = refreshInterval;
30
29
  this.functions = new Functions();
31
30
 
32
31
  //axios instance
@@ -48,7 +47,7 @@ class Switches extends EventEmitter {
48
47
  await this.checkState();
49
48
  }))
50
49
  .on('state', (state) => {
51
- this.emit('success', `Impulse generator ${state ? 'started' : 'stopped'}.`);
50
+ this.emit(state ? 'success' : 'warn', `Impulse generator ${state ? 'started' : 'stopped'}`);
52
51
  });
53
52
  }
54
53
 
@@ -108,17 +107,6 @@ class Switches extends EventEmitter {
108
107
  }
109
108
  }
110
109
 
111
- async startImpulseGenerator() {
112
- try {
113
- //start impulse generator
114
- const timers = [{ name: 'checkState', sampling: this.refreshInterval }];
115
- await this.impulseGenerator.start(timers);
116
- return true;
117
- } catch (error) {
118
- throw new Error(`Impulse generator start error: ${error}`);
119
- }
120
- }
121
-
122
110
  async deviceInfo() {
123
111
  this.emit('devInfo', `----- ${this.info.deviceName} -----`);
124
112
  this.emit('devInfo', `Manufacturer: Tasmota`);