homebridge-multiple-switch 1.7.0-beta.5 → 1.7.0-beta.7

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,5 +1,20 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.7.0-beta.7] - 2026-05-17
4
+
5
+ ### Fixed
6
+ - `"type"` removed from switch schema `required` array (field no longer exists at switch level)
7
+ - New devices and switches no longer include stale `type` field on creation
8
+ - Removed unused `masterSwitchType` key from all 14 i18n locale files
9
+
10
+ ## [1.7.0-beta.6] - 2026-05-17
11
+
12
+ ### Changed
13
+ - Master Switch now uses the device-level switch type automatically — separate type selector removed
14
+
15
+ ### Removed
16
+ - Master Switch Type selector from UI and schema (`masterSwitchType` config field is no longer used)
17
+
3
18
  ## [1.7.0-beta.5] - 2026-05-17
4
19
 
5
20
  ### Changed
@@ -46,7 +46,7 @@
46
46
  },
47
47
  "masterSwitch": {
48
48
  "title": "Master Switch",
49
- "description": "Add a master switch that turns all switches on or off at once. Only available in Single mode.",
49
+ "description": "Add a master switch that turns all switches on or off at once. Uses the same type as the device.",
50
50
  "type": "boolean",
51
51
  "default": false
52
52
  },
@@ -76,7 +76,7 @@
76
76
  "minimum": 0
77
77
  }
78
78
  },
79
- "required": ["name", "type"]
79
+ "required": ["name"]
80
80
  }
81
81
  }
82
82
  },
@@ -33,6 +33,5 @@
33
33
  "behaviorSingleDesc": "يمكن تشغيل مفتاح واحد فقط في نفس الوقت. تشغيل واحد يقوم بإيقاف جميع الآخرين تلقائياً.",
34
34
  "masterSwitch": "المفتاح الرئيسي",
35
35
  "masterSwitchDesc": "يضيف مفتاحاً رئيسياً يقوم بتشغيل أو إيقاف جميع المفاتيح دفعة واحدة.",
36
- "switchSingular": "مفتاح",
37
- "masterSwitchType": "نوع المفتاح الرئيسي"
36
+ "switchSingular": "مفتاح"
38
37
  }
@@ -33,6 +33,5 @@
33
33
  "behaviorSingleDesc": "Es kann nur ein Schalter gleichzeitig eingeschaltet sein. Das Einschalten eines Schalters schaltet alle anderen automatisch aus.",
34
34
  "masterSwitch": "Hauptschalter",
35
35
  "masterSwitchDesc": "Fügt einen Hauptschalter hinzu, der alle Schalter auf einmal ein- oder ausschaltet.",
36
- "switchSingular": "Schalter",
37
- "masterSwitchType": "Hauptschaltertyp"
36
+ "switchSingular": "Schalter"
38
37
  }
@@ -33,6 +33,5 @@
33
33
  "behaviorSingleDesc": "Only one switch can be on at a time. Turning one on automatically turns off all others.",
34
34
  "masterSwitch": "Master Switch",
35
35
  "masterSwitchDesc": "Adds a master switch that turns all switches on or off at once.",
36
- "switchSingular": "switch",
37
- "masterSwitchType": "Master Switch Type"
36
+ "switchSingular": "switch"
38
37
  }
@@ -33,6 +33,5 @@
33
33
  "behaviorSingleDesc": "Solo un interruptor puede estar encendido a la vez. Encender uno apaga automáticamente todos los demás.",
34
34
  "masterSwitch": "Interruptor maestro",
35
35
  "masterSwitchDesc": "Agrega un interruptor maestro que enciende o apaga todos los interruptores a la vez.",
36
- "switchSingular": "interruptor",
37
- "masterSwitchType": "Tipo de interruptor maestro"
36
+ "switchSingular": "interruptor"
38
37
  }
@@ -33,6 +33,5 @@
33
33
  "behaviorSingleDesc": "Un seul interrupteur peut être activé à la fois. En activer un désactive automatiquement tous les autres.",
34
34
  "masterSwitch": "Interrupteur principal",
35
35
  "masterSwitchDesc": "Ajoute un interrupteur principal qui active ou désactive tous les interrupteurs en une seule fois.",
36
- "switchSingular": "interrupteur",
37
- "masterSwitchType": "Type d'interrupteur principal"
36
+ "switchSingular": "interrupteur"
38
37
  }
@@ -33,6 +33,5 @@
33
33
  "behaviorSingleDesc": "Solo un interruttore può essere acceso alla volta. Accenderne uno spegne automaticamente tutti gli altri.",
34
34
  "masterSwitch": "Interruttore principale",
35
35
  "masterSwitchDesc": "Aggiunge un interruttore principale che accende o spegne tutti gli interruttori contemporaneamente.",
36
- "switchSingular": "interruttore",
37
- "masterSwitchType": "Tipo di interruttore principale"
36
+ "switchSingular": "interruttore"
38
37
  }
@@ -33,6 +33,5 @@
33
33
  "behaviorSingleDesc": "同時に1つのスイッチのみオンにできます。1つをオンにすると他はすべて自動的にオフになります。",
34
34
  "masterSwitch": "マスタースイッチ",
35
35
  "masterSwitchDesc": "すべてのスイッチを一度にオン/オフするマスタースイッチを追加します。",
36
- "switchSingular": "スイッチ",
37
- "masterSwitchType": "マスタースイッチタイプ"
36
+ "switchSingular": "スイッチ"
38
37
  }
@@ -33,6 +33,5 @@
33
33
  "behaviorSingleDesc": "한 번에 하나의 스위치만 켤 수 있습니다. 하나를 켜면 다른 모든 것이 자동으로 꺼집니다.",
34
34
  "masterSwitch": "마스터 스위치",
35
35
  "masterSwitchDesc": "모든 스위치를 한 번에 켜거나 끄는 마스터 스위치를 추가합니다.",
36
- "switchSingular": "스위치",
37
- "masterSwitchType": "마스터 스위치 유형"
36
+ "switchSingular": "스위치"
38
37
  }
@@ -33,6 +33,5 @@
33
33
  "behaviorSingleDesc": "Er kan slechts één schakelaar tegelijk aan staan. Het inschakelen van één schakelaar schakelt alle andere automatisch uit.",
34
34
  "masterSwitch": "Hoofdschakelaar",
35
35
  "masterSwitchDesc": "Voegt een hoofdschakelaar toe die alle schakelaars in één keer in- of uitschakelt.",
36
- "switchSingular": "schakelaar",
37
- "masterSwitchType": "Type hoofdschakelaar"
36
+ "switchSingular": "schakelaar"
38
37
  }
@@ -33,6 +33,5 @@
33
33
  "behaviorSingleDesc": "Tylko jeden przełącznik może być włączony jednocześnie. Włączenie jednego automatycznie wyłącza wszystkie pozostałe.",
34
34
  "masterSwitch": "Przełącznik główny",
35
35
  "masterSwitchDesc": "Dodaje przełącznik główny, który włącza lub wyłącza wszystkie przełączniki jednocześnie.",
36
- "switchSingular": "przełącznik",
37
- "masterSwitchType": "Typ przełącznika głównego"
36
+ "switchSingular": "przełącznik"
38
37
  }
@@ -33,6 +33,5 @@
33
33
  "behaviorSingleDesc": "Apenas um interruptor pode estar ligado por vez. Ligar um desliga automaticamente todos os outros.",
34
34
  "masterSwitch": "Interruptor principal",
35
35
  "masterSwitchDesc": "Adiciona um interruptor principal que liga ou desliga todos os interruptores de uma só vez.",
36
- "switchSingular": "interruptor",
37
- "masterSwitchType": "Tipo de interruptor principal"
36
+ "switchSingular": "interruptor"
38
37
  }
@@ -33,6 +33,5 @@
33
33
  "behaviorSingleDesc": "Одновременно может быть включён только один переключатель. Включение одного автоматически выключает все остальные.",
34
34
  "masterSwitch": "Главный переключатель",
35
35
  "masterSwitchDesc": "Добавляет главный переключатель, который включает или выключает все переключатели одновременно.",
36
- "switchSingular": "переключатель",
37
- "masterSwitchType": "Тип главного переключателя"
36
+ "switchSingular": "переключатель"
38
37
  }
@@ -33,6 +33,5 @@
33
33
  "behaviorSingleDesc": "Aynı anda yalnızca bir anahtar açık olabilir. Birini açmak diğerlerini otomatik kapatır.",
34
34
  "masterSwitch": "Ana Anahtar",
35
35
  "masterSwitchDesc": "Tüm anahtarları tek seferde açan veya kapatan bir ana anahtar ekler.",
36
- "switchSingular": "anahtar",
37
- "masterSwitchType": "Ana Anahtar Tipi"
36
+ "switchSingular": "anahtar"
38
37
  }
@@ -33,6 +33,5 @@
33
33
  "behaviorSingleDesc": "同一时间只能有一个开关处于打开状态。打开一个会自动关闭所有其他开关。",
34
34
  "masterSwitch": "主开关",
35
35
  "masterSwitchDesc": "添加一个主开关,可以一次性打开或关闭所有开关。",
36
- "switchSingular": "开关",
37
- "masterSwitchType": "主开关类型"
36
+ "switchSingular": "开关"
38
37
  }
@@ -233,7 +233,8 @@
233
233
  config.devices.push({
234
234
  name: '',
235
235
  switchBehavior: 'independent',
236
- switches: [{ name: '', type: 'outlet', defaultState: false, delayOff: 0 }],
236
+ switchType: 'outlet',
237
+ switches: [{ name: '', defaultState: false, delayOff: 0 }],
237
238
  });
238
239
  expandedDevices.add(di);
239
240
  expandedSwitches.add(`${di}_0`);
@@ -289,22 +290,11 @@
289
290
  input.addEventListener('change', () => {
290
291
  const di = parseInt(input.dataset.dev);
291
292
  config.devices[di].masterSwitch = input.checked;
292
- if (!input.checked) {
293
- delete config.devices[di].masterSwitchType;
294
- }
295
293
  render();
296
294
  save();
297
295
  });
298
296
  });
299
297
 
300
- // Master switch type
301
- document.querySelectorAll('.master-type-field').forEach(input => {
302
- input.addEventListener('change', () => {
303
- const di = parseInt(input.dataset.dev);
304
- config.devices[di].masterSwitchType = input.value;
305
- save();
306
- });
307
- });
308
298
 
309
299
  document.querySelectorAll('.btn-remove-device').forEach(btn => {
310
300
  btn.addEventListener('click', (e) => {
@@ -322,7 +312,7 @@
322
312
  btn.addEventListener('click', () => {
323
313
  const di = parseInt(btn.dataset.dev);
324
314
  const si = config.devices[di].switches.length;
325
- config.devices[di].switches.push({ name: '', type: 'outlet', defaultState: false, delayOff: 0 });
315
+ config.devices[di].switches.push({ name: '', defaultState: false, delayOff: 0 });
326
316
  expandedSwitches.add(`${di}_${si}`);
327
317
  render();
328
318
  save();
@@ -424,20 +414,12 @@
424
414
 
425
415
  ${isIndependent ? `
426
416
  <div class="master-option">
427
- <div style="display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap">
428
- <div class="toggle-wrap" style="flex:1;min-width:0">
429
- <input type="checkbox" class="master-toggle" data-dev="${di}" ${dev.masterSwitch ? 'checked' : ''}>
430
- <div>
431
- <label style="margin-bottom:0">${t.masterSwitch || 'Master Switch'}</label>
432
- <div class="desc" style="margin-bottom:0">${t.masterSwitchDesc || ''}</div>
433
- </div>
417
+ <div class="toggle-wrap">
418
+ <input type="checkbox" class="master-toggle" data-dev="${di}" ${dev.masterSwitch ? 'checked' : ''}>
419
+ <div>
420
+ <label style="margin-bottom:0">${t.masterSwitch || 'Master Switch'}</label>
421
+ <div class="desc" style="margin-bottom:0">${t.masterSwitchDesc || ''}</div>
434
422
  </div>
435
- ${dev.masterSwitch ? `
436
- <select class="master-type-field" data-dev="${di}" style="width:auto;min-width:120px;flex-shrink:0">
437
- <option value="switch" ${dev.masterSwitchType === 'switch' || !dev.masterSwitchType ? 'selected' : ''}>${t.typeSwitch || 'Switch'}</option>
438
- <option value="outlet" ${dev.masterSwitchType === 'outlet' ? 'selected' : ''}>${t.typeOutlet || 'Outlet'}</option>
439
- </select>
440
- ` : ''}
441
423
  </div>
442
424
  </div>
443
425
  ` : ''}
package/index.js CHANGED
@@ -119,7 +119,7 @@ class MultipleSwitchPlatform {
119
119
 
120
120
  // Create master switch if enabled
121
121
  if (hasMaster) {
122
- const MasterServiceClass = this.getServiceClass(device.masterSwitchType || 'switch');
122
+ const MasterServiceClass = this.getServiceClass(device.switchType || 'outlet');
123
123
  const masterService = accessory.addService(MasterServiceClass, 'Master', MASTER_SUBTYPE);
124
124
 
125
125
  this.setServiceName(masterService, 'Master');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "homebridge-multiple-switch",
3
- "version": "1.7.0-beta.5",
3
+ "version": "1.7.0-beta.7",
4
4
  "description": "Multiple switch platform for Homebridge",
5
5
  "homepage": "https://github.com/azadaydinli/homebridge-multiple-switch",
6
6
  "main": "index.js",