homebridge-multiple-switch 1.6.0-beta.3 → 1.6.0-beta.4

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,15 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.6.0-beta.4] - 2026-03-21
4
+
5
+ ### Added
6
+ - Master switch type selection (Switch or Outlet) — appears when master switch is enabled
7
+ - `masterSwitchType` config option
8
+
9
+ ### Changed
10
+ - All devices and switches now start collapsed when config UI is opened
11
+ - New devices/switches still open expanded when freshly added
12
+
3
13
  ## [1.6.0-beta.3] - 2026-03-21
4
14
 
5
15
  ### Fixed
@@ -33,5 +33,6 @@
33
33
  "behaviorSingleDesc": "يمكن تشغيل مفتاح واحد فقط في نفس الوقت. تشغيل واحد يقوم بإيقاف جميع الآخرين تلقائياً.",
34
34
  "masterSwitch": "المفتاح الرئيسي",
35
35
  "masterSwitchDesc": "يضيف مفتاحاً رئيسياً يقوم بتشغيل أو إيقاف جميع المفاتيح دفعة واحدة.",
36
- "switchSingular": "مفتاح"
36
+ "switchSingular": "مفتاح",
37
+ "masterSwitchType": "نوع المفتاح الرئيسي"
37
38
  }
@@ -33,5 +33,6 @@
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"
36
+ "switchSingular": "Schalter",
37
+ "masterSwitchType": "Hauptschaltertyp"
37
38
  }
@@ -33,5 +33,6 @@
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"
36
+ "switchSingular": "switch",
37
+ "masterSwitchType": "Master Switch Type"
37
38
  }
@@ -33,5 +33,6 @@
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"
36
+ "switchSingular": "interruptor",
37
+ "masterSwitchType": "Tipo de interruptor maestro"
37
38
  }
@@ -33,5 +33,6 @@
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"
36
+ "switchSingular": "interrupteur",
37
+ "masterSwitchType": "Type d'interrupteur principal"
37
38
  }
@@ -33,5 +33,6 @@
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"
36
+ "switchSingular": "interruttore",
37
+ "masterSwitchType": "Tipo di interruttore principale"
37
38
  }
@@ -33,5 +33,6 @@
33
33
  "behaviorSingleDesc": "同時に1つのスイッチのみオンにできます。1つをオンにすると他はすべて自動的にオフになります。",
34
34
  "masterSwitch": "マスタースイッチ",
35
35
  "masterSwitchDesc": "すべてのスイッチを一度にオン/オフするマスタースイッチを追加します。",
36
- "switchSingular": "スイッチ"
36
+ "switchSingular": "スイッチ",
37
+ "masterSwitchType": "マスタースイッチタイプ"
37
38
  }
@@ -33,5 +33,6 @@
33
33
  "behaviorSingleDesc": "한 번에 하나의 스위치만 켤 수 있습니다. 하나를 켜면 다른 모든 것이 자동으로 꺼집니다.",
34
34
  "masterSwitch": "마스터 스위치",
35
35
  "masterSwitchDesc": "모든 스위치를 한 번에 켜거나 끄는 마스터 스위치를 추가합니다.",
36
- "switchSingular": "스위치"
36
+ "switchSingular": "스위치",
37
+ "masterSwitchType": "마스터 스위치 유형"
37
38
  }
@@ -33,5 +33,6 @@
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"
36
+ "switchSingular": "schakelaar",
37
+ "masterSwitchType": "Type hoofdschakelaar"
37
38
  }
@@ -33,5 +33,6 @@
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"
36
+ "switchSingular": "przełącznik",
37
+ "masterSwitchType": "Typ przełącznika głównego"
37
38
  }
@@ -33,5 +33,6 @@
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"
36
+ "switchSingular": "interruptor",
37
+ "masterSwitchType": "Tipo de interruptor principal"
37
38
  }
@@ -33,5 +33,6 @@
33
33
  "behaviorSingleDesc": "Одновременно может быть включён только один переключатель. Включение одного автоматически выключает все остальные.",
34
34
  "masterSwitch": "Главный переключатель",
35
35
  "masterSwitchDesc": "Добавляет главный переключатель, который включает или выключает все переключатели одновременно.",
36
- "switchSingular": "переключатель"
36
+ "switchSingular": "переключатель",
37
+ "masterSwitchType": "Тип главного переключателя"
37
38
  }
@@ -33,5 +33,6 @@
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"
36
+ "switchSingular": "anahtar",
37
+ "masterSwitchType": "Ana Anahtar Tipi"
37
38
  }
@@ -33,5 +33,6 @@
33
33
  "behaviorSingleDesc": "同一时间只能有一个开关处于打开状态。打开一个会自动关闭所有其他开关。",
34
34
  "masterSwitch": "主开关",
35
35
  "masterSwitchDesc": "添加一个主开关,可以一次性打开或关闭所有开关。",
36
- "switchSingular": "开关"
36
+ "switchSingular": "开关",
37
+ "masterSwitchType": "主开关类型"
37
38
  }
@@ -185,14 +185,9 @@
185
185
  config.devices = [];
186
186
  }
187
187
 
188
- // Track expand/collapse state
189
- const expandedDevices = new Set(config.devices.map((_, i) => i));
188
+ // Track expand/collapse state — all collapsed by default
189
+ const expandedDevices = new Set();
190
190
  const expandedSwitches = new Set();
191
- config.devices.forEach((dev, di) => {
192
- (dev.switches || []).forEach((_, si) => {
193
- expandedSwitches.add(`${di}_${si}`);
194
- });
195
- });
196
191
 
197
192
  const app = document.getElementById('app');
198
193
 
@@ -282,6 +277,19 @@
282
277
  input.addEventListener('change', () => {
283
278
  const di = parseInt(input.dataset.dev);
284
279
  config.devices[di].masterSwitch = input.checked;
280
+ if (!input.checked) {
281
+ delete config.devices[di].masterSwitchType;
282
+ }
283
+ render();
284
+ save();
285
+ });
286
+ });
287
+
288
+ // Master switch type
289
+ document.querySelectorAll('.master-type-field').forEach(input => {
290
+ input.addEventListener('change', () => {
291
+ const di = parseInt(input.dataset.dev);
292
+ config.devices[di].masterSwitchType = input.value;
285
293
  save();
286
294
  });
287
295
  });
@@ -403,6 +411,15 @@
403
411
  <div class="desc" style="margin-bottom:0">${t.masterSwitchDesc || ''}</div>
404
412
  </div>
405
413
  </div>
414
+ ${dev.masterSwitch ? `
415
+ <div style="margin-top:12px">
416
+ <label>${t.masterSwitchType || 'Master Switch Type'}</label>
417
+ <select class="master-type-field" data-dev="${di}">
418
+ <option value="switch" ${dev.masterSwitchType === 'switch' ? 'selected' : ''}>${t.typeSwitch || 'Switch'}</option>
419
+ <option value="outlet" ${dev.masterSwitchType === 'outlet' || !dev.masterSwitchType ? 'selected' : ''}>${t.typeOutlet || 'Outlet'}</option>
420
+ </select>
421
+ </div>
422
+ ` : ''}
406
423
  </div>
407
424
  ` : ''}
408
425
 
package/index.js CHANGED
@@ -92,7 +92,7 @@ class MultipleSwitchPlatform {
92
92
  const services = new Map();
93
93
  this.deviceServices.set(uuid, services);
94
94
 
95
- this.reconcileServices(accessory, switches, services, hasMaster);
95
+ this.reconcileServices(accessory, device, switches, services, hasMaster);
96
96
 
97
97
  if (isNew) {
98
98
  this.api.registerPlatformAccessories(PLUGIN_NAME, PLATFORM_NAME, [accessory]);
@@ -112,16 +112,23 @@ class MultipleSwitchPlatform {
112
112
  }
113
113
  }
114
114
 
115
- reconcileServices(accessory, switches, services, hasMaster) {
115
+ reconcileServices(accessory, device, switches, services, hasMaster) {
116
116
  const activeSubtypes = new Set();
117
117
 
118
118
  // Create master switch FIRST if enabled (so it appears at top in HomeKit)
119
119
  if (hasMaster) {
120
120
  activeSubtypes.add(MASTER_SUBTYPE);
121
121
 
122
- let masterService = accessory.getServiceById(this.Service.Switch, MASTER_SUBTYPE);
122
+ const MasterServiceClass = this.getServiceClass(device.masterSwitchType);
123
+ let masterService = accessory.getServiceById(MasterServiceClass, MASTER_SUBTYPE);
124
+
125
+ // If type changed, remove old service and create new one
123
126
  if (!masterService) {
124
- masterService = accessory.addService(this.Service.Switch, 'Master', MASTER_SUBTYPE);
127
+ const oldMaster = accessory.services.find((s) => s.subtype === MASTER_SUBTYPE);
128
+ if (oldMaster) {
129
+ accessory.removeService(oldMaster);
130
+ }
131
+ masterService = accessory.addService(MasterServiceClass, 'Master', MASTER_SUBTYPE);
125
132
  }
126
133
 
127
134
  this.setServiceName(masterService, 'Master');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "homebridge-multiple-switch",
3
- "version": "1.6.0-beta.3",
3
+ "version": "1.6.0-beta.4",
4
4
  "description": "Multiple switch platform for Homebridge",
5
5
  "homepage": "https://github.com/azadaydinli/homebridge-multiple-switch",
6
6
  "main": "index.js",