@homebridge-plugins/homebridge-tado 8.1.0 → 8.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 CHANGED
@@ -1,8 +1,15 @@
1
1
  # Changelog
2
2
 
3
+ ## v8.1.2 - 2025-10-20
4
+ - Fix: Skip auth also for config endpoints if enabled (#176)
5
+
6
+ ## v8.1.1 - 2025-10-20
7
+ - Fix config UI not working on HOOBS 5 (#177)
8
+
3
9
  ## v8.1.0 - 2025-10-19
4
- - Add option to use a custom tado api url
5
- - Add option to skip authentication for tado api
10
+ - Add option to use a custom tado api url (#176)
11
+ - Add option to skip authentication for tado api (#176)
12
+ - Update dependencies
6
13
 
7
14
  ## v8.0.2 - 2025-07-22
8
15
  - Update dependencies
@@ -1407,7 +1407,7 @@ async function fetchDevices(credentials, refresh, resync) {
1407
1407
  try {
1408
1408
 
1409
1409
  //check version before load ui
1410
- if (window.compareVersions(window.homebridge.serverEnv.env.packageVersion, '4.34.0') < 0) {
1410
+ if (window.homebridge.serverEnv.env && window.compareVersions(window.homebridge.serverEnv.env.packageVersion, '4.34.0') < 0) {
1411
1411
  await showOldSchema(true);
1412
1412
  return;
1413
1413
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@homebridge-plugins/homebridge-tado",
3
- "version": "8.1.0",
3
+ "version": "8.1.2",
4
4
  "description": "Homebridge plugin for controlling tado° devices.",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -57,7 +57,7 @@ export default (api, accessories, config, tado, telegram) => {
57
57
 
58
58
  // Use AC-specific overlay for AIR_CONDITIONING zones
59
59
  if (accessory.context.config.type === 'AIR_CONDITIONING') {
60
-
60
+
61
61
  await tado.setACZoneOverlay(
62
62
  config.homeId,
63
63
  accessory.context.config.zoneId,
@@ -123,7 +123,7 @@ export default (api, accessories, config, tado, telegram) => {
123
123
  // Use AC-specific overlay for AIR_CONDITIONING zones
124
124
  if (accessory.context.config.type === 'AIR_CONDITIONING') {
125
125
  let acMode = value === 1 ? 'HEAT' : value === 2 ? 'COOL' : 'COOL';
126
-
126
+
127
127
  await tado.setACZoneOverlay(
128
128
  config.homeId,
129
129
  accessory.context.config.zoneId,
@@ -187,15 +187,15 @@ export default (api, accessories, config, tado, telegram) => {
187
187
 
188
188
  // Use AC-specific overlay for AIR_CONDITIONING zones
189
189
  if (accessory.context.config.type === 'AIR_CONDITIONING') {
190
-
190
+
191
191
  // Map HomeKit target state to Tado AC mode
192
192
  let acMode = 'COOL'; // Default to COOL
193
-
193
+
194
194
  // Get current target state from HeaterCooler service for proper mode detection
195
195
  let heaterCoolerService = accessory.getService(api.hap.Service.HeaterCooler);
196
196
  if (heaterCoolerService) {
197
197
  let targetState = heaterCoolerService.getCharacteristic(api.hap.Characteristic.TargetHeaterCoolerState).value;
198
-
198
+
199
199
  // Map HomeKit target states to Tado AC modes
200
200
  // 1 = Heat, 2 = Cool, 3 = Auto
201
201
  switch (targetState) {
@@ -210,7 +210,7 @@ export default (api, accessories, config, tado, telegram) => {
210
210
  acMode = 'AUTO';
211
211
  break;
212
212
  }
213
-
213
+
214
214
  // For temperature changes, use the appropriate threshold characteristic
215
215
  if (![0, 1, 3].includes(value)) {
216
216
  // This is a temperature change, use the appropriate temperature based on mode
@@ -230,7 +230,7 @@ export default (api, accessories, config, tado, telegram) => {
230
230
  // This is a state change - use the mapped AC mode
231
231
  }
232
232
  }
233
-
233
+
234
234
  await tado.setACZoneOverlay(
235
235
  config.homeId,
236
236
  accessory.context.config.zoneId,
@@ -273,7 +273,7 @@ export default (api, accessories, config, tado, telegram) => {
273
273
 
274
274
  // Use AC-specific overlay for AIR_CONDITIONING zones
275
275
  if (accessory.context.config.type === 'AIR_CONDITIONING') {
276
-
276
+
277
277
  await tado.setACZoneOverlay(
278
278
  config.homeId,
279
279
  accessory.context.config.zoneId,
@@ -725,7 +725,7 @@ export default (api, accessories, config, tado, telegram) => {
725
725
  } finally {
726
726
  setTimeout(() => {
727
727
  getStates();
728
- }, config.polling * 1000);
728
+ }, Math.max(config.polling, 300) * 1000);
729
729
  }
730
730
  }
731
731
 
@@ -867,9 +867,9 @@ export default (api, accessories, config, tado, telegram) => {
867
867
  const thermoAccessory = accessories.filter(
868
868
  (acc) =>
869
869
  acc &&
870
- (acc.context.config.subtype === 'zone-thermostat' ||
871
- acc.context.config.subtype === 'zone-heatercooler' ||
872
- acc.context.config.subtype === 'zone-heatercooler-ac')
870
+ (acc.context.config.subtype === 'zone-thermostat' ||
871
+ acc.context.config.subtype === 'zone-heatercooler' ||
872
+ acc.context.config.subtype === 'zone-heatercooler-ac')
873
873
  );
874
874
 
875
875
  if (thermoAccessory.length) {
@@ -974,7 +974,7 @@ export default (api, accessories, config, tado, telegram) => {
974
974
 
975
975
  if (zoneState.setting.power === 'ON') {
976
976
  active = 1;
977
-
977
+
978
978
  // Get target temperature from setting
979
979
  targetTemp =
980
980
  zoneState.setting.temperature !== null && zoneState.setting.temperature
@@ -987,7 +987,7 @@ export default (api, accessories, config, tado, telegram) => {
987
987
  if (zone.type === 'AIR_CONDITIONING') {
988
988
  const acMode = zoneState.setting.mode || 'COOL';
989
989
  tempEqual = currentTemp && targetTemp ? Math.abs(currentTemp - targetTemp) < 0.5 : false;
990
-
990
+
991
991
  // Map AC modes to HomeKit states
992
992
  switch (acMode.toUpperCase()) {
993
993
  case 'HEAT':
@@ -1015,8 +1015,8 @@ export default (api, accessories, config, tado, telegram) => {
1015
1015
 
1016
1016
  //Thermostat/HeaterCooler
1017
1017
  const heaterAccessory = accessories.filter(
1018
- (acc) => acc && (acc.context.config.subtype === 'zone-heatercooler-boiler' ||
1019
- acc.context.config.subtype === 'zone-heatercooler-ac')
1018
+ (acc) => acc && (acc.context.config.subtype === 'zone-heatercooler-boiler' ||
1019
+ acc.context.config.subtype === 'zone-heatercooler-ac')
1020
1020
  );
1021
1021
  const switchAccessory = accessories.filter((acc) => acc && acc.context.config.subtype === 'zone-switch');
1022
1022
  const faucetAccessory = accessories.filter((acc) => acc && acc.context.config.subtype === 'zone-faucet');
@@ -224,6 +224,7 @@ export default class Tado {
224
224
  }
225
225
 
226
226
  async fullAuthentication() {
227
+ if (this.skipAuth) return "";
227
228
  let instructions = "";
228
229
  let resolve;
229
230
  const oPromise = new Promise((res, _) => {
@@ -245,7 +246,7 @@ export default class Tado {
245
246
  }
246
247
 
247
248
  async waitForAuthentication() {
248
- await this.getToken();
249
+ if (!this.skipAuth) await this.getToken();
249
250
  return "Authentication successful!";
250
251
  }
251
252
 
@@ -519,7 +519,7 @@ export default {
519
519
  home.extras && home.extras.childLockSwitches
520
520
  ? home.extras.childLockSwitches.filter((childLockSwitch) => childLockSwitch && childLockSwitch.active)
521
521
  : [],
522
- polling: Number.isInteger(home.polling) ? (home.polling < 30 ? 30 : home.polling) : 300,
522
+ polling: Number.isInteger(home.polling) ? (home.polling < 300 ? 300 : home.polling) : 300,
523
523
  };
524
524
 
525
525
  if (home.zones && home.zones.length) {