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

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,19 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.7.0-beta.9] - 2026-05-17
4
+
5
+ ### Changed
6
+ - Default State is now a 3-option dropdown: **Remember Last State** / **On** / **Off**
7
+ - Remember: keeps the last known state across restarts (new default)
8
+ - On: always starts ON on every Homebridge restart
9
+ - Off: always starts OFF on every Homebridge restart
10
+ - Backward compatible: old boolean `true`/`false` configs still work correctly
11
+
12
+ ## [1.7.0-beta.8] - 2026-05-17
13
+
14
+ ### Changed
15
+ - Default State now applies on every Homebridge restart, not just on first creation — switches always start in their configured default state
16
+
3
17
  ## [1.7.0-beta.7] - 2026-05-17
4
18
 
5
19
  ### Fixed
@@ -64,9 +64,14 @@
64
64
  },
65
65
  "defaultState": {
66
66
  "title": "Default State",
67
- "description": "Initial power state when Homebridge starts.",
68
- "type": "boolean",
69
- "default": false
67
+ "description": "Switch state on every Homebridge restart.",
68
+ "type": "string",
69
+ "default": "remember",
70
+ "oneOf": [
71
+ { "title": "Remember Last State", "enum": ["remember"] },
72
+ { "title": "On", "enum": ["on"] },
73
+ { "title": "Off", "enum": ["off"] }
74
+ ]
70
75
  },
71
76
  "delayOff": {
72
77
  "title": "Auto Turn Off (ms)",
@@ -15,7 +15,8 @@
15
15
  "typeSwitch": "مفتاح",
16
16
  "typeOutlet": "مقبس",
17
17
  "defaultState": "الحالة الافتراضية",
18
- "defaultStateDesc": "حالة الطاقة الأولية عند بدء تشغيل Homebridge.",
18
+ "defaultStateDesc": "حالة المفتاح عند كل إعادة تشغيل لـ Homebridge.",
19
+ "remember": "تذكر آخر حالة",
19
20
  "delayOff": "إيقاف تلقائي (مللي ثانية)",
20
21
  "delayOffDesc": "يتم الإيقاف تلقائيًا بعد هذا العدد من المللي ثانية. اضبط على 0 للتعطيل.",
21
22
  "addSwitch": "إضافة مفتاح",
@@ -15,7 +15,8 @@
15
15
  "typeSwitch": "Schalter",
16
16
  "typeOutlet": "Steckdose",
17
17
  "defaultState": "Standardzustand",
18
- "defaultStateDesc": "Anfänglicher Energiezustand beim Start von Homebridge.",
18
+ "defaultStateDesc": "Schaltzustand bei jedem Neustart von Homebridge.",
19
+ "remember": "Letzten Zustand merken",
19
20
  "delayOff": "Automatisch ausschalten (ms)",
20
21
  "delayOffDesc": "Schaltet nach dieser Anzahl von Millisekunden automatisch aus. Zum Deaktivieren auf 0 setzen.",
21
22
  "addSwitch": "Schalter hinzufügen",
@@ -15,7 +15,8 @@
15
15
  "typeSwitch": "Switch",
16
16
  "typeOutlet": "Outlet",
17
17
  "defaultState": "Default State",
18
- "defaultStateDesc": "Initial power state when Homebridge starts.",
18
+ "defaultStateDesc": "Switch state on every Homebridge restart.",
19
+ "remember": "Remember Last State",
19
20
  "delayOff": "Auto Turn Off (ms)",
20
21
  "delayOffDesc": "Automatically turn off after this many milliseconds. Set to 0 to disable.",
21
22
  "addSwitch": "Add Switch",
@@ -15,7 +15,8 @@
15
15
  "typeSwitch": "Interruptor",
16
16
  "typeOutlet": "Enchufe",
17
17
  "defaultState": "Estado predeterminado",
18
- "defaultStateDesc": "Estado de energía inicial cuando Homebridge se inicia.",
18
+ "defaultStateDesc": "Estado del interruptor en cada reinicio de Homebridge.",
19
+ "remember": "Recordar último estado",
19
20
  "delayOff": "Apagado automático (ms)",
20
21
  "delayOffDesc": "Se apaga automáticamente después de estos milisegundos. Establecer en 0 para desactivar.",
21
22
  "addSwitch": "Agregar interruptor",
@@ -15,7 +15,8 @@
15
15
  "typeSwitch": "Interrupteur",
16
16
  "typeOutlet": "Prise",
17
17
  "defaultState": "État par défaut",
18
- "defaultStateDesc": "État d'alimentation initial au démarrage de Homebridge.",
18
+ "defaultStateDesc": "État de l'interrupteur à chaque redémarrage de Homebridge.",
19
+ "remember": "Mémoriser le dernier état",
19
20
  "delayOff": "Arrêt automatique (ms)",
20
21
  "delayOffDesc": "S'éteint automatiquement après ce nombre de millisecondes. Mettre à 0 pour désactiver.",
21
22
  "addSwitch": "Ajouter un interrupteur",
@@ -15,7 +15,8 @@
15
15
  "typeSwitch": "Interruttore",
16
16
  "typeOutlet": "Presa",
17
17
  "defaultState": "Stato predefinito",
18
- "defaultStateDesc": "Stato di alimentazione iniziale all'avvio di Homebridge.",
18
+ "defaultStateDesc": "Stato dell'interruttore ad ogni riavvio di Homebridge.",
19
+ "remember": "Ricorda ultimo stato",
19
20
  "delayOff": "Spegnimento automatico (ms)",
20
21
  "delayOffDesc": "Si spegne automaticamente dopo questi millisecondi. Impostare a 0 per disattivare.",
21
22
  "addSwitch": "Aggiungi interruttore",
@@ -15,7 +15,8 @@
15
15
  "typeSwitch": "スイッチ",
16
16
  "typeOutlet": "コンセント",
17
17
  "defaultState": "デフォルト状態",
18
- "defaultStateDesc": "Homebridge 起動時の初期電源状態。",
18
+ "defaultStateDesc": "Homebridge を再起動するたびのスイッチ状態。",
19
+ "remember": "最後の状態を記憶",
19
20
  "delayOff": "自動オフ(ミリ秒)",
20
21
  "delayOffDesc": "指定したミリ秒後に自動的にオフになります。無効にするには 0 に設定してください。",
21
22
  "addSwitch": "スイッチを追加",
@@ -15,7 +15,8 @@
15
15
  "typeSwitch": "스위치",
16
16
  "typeOutlet": "콘센트",
17
17
  "defaultState": "기본 상태",
18
- "defaultStateDesc": "Homebridge 시작 초기 전원 상태.",
18
+ "defaultStateDesc": "Homebridge 재시작할 때마다의 스위치 상태.",
19
+ "remember": "마지막 상태 기억",
19
20
  "delayOff": "자동 꺼짐 (ms)",
20
21
  "delayOffDesc": "지정된 밀리초 후 자동으로 꺼집니다. 비활성화하려면 0으로 설정하세요.",
21
22
  "addSwitch": "스위치 추가",
@@ -15,7 +15,8 @@
15
15
  "typeSwitch": "Schakelaar",
16
16
  "typeOutlet": "Stopcontact",
17
17
  "defaultState": "Standaardstatus",
18
- "defaultStateDesc": "Initiële voedingsstatus wanneer Homebridge opstart.",
18
+ "defaultStateDesc": "Schakelaarstatus bij elke herstart van Homebridge.",
19
+ "remember": "Laatste status onthouden",
19
20
  "delayOff": "Automatisch uitschakelen (ms)",
20
21
  "delayOffDesc": "Schakelt automatisch uit na dit aantal milliseconden. Stel in op 0 om uit te schakelen.",
21
22
  "addSwitch": "Schakelaar toevoegen",
@@ -15,7 +15,8 @@
15
15
  "typeSwitch": "Przełącznik",
16
16
  "typeOutlet": "Gniazdko",
17
17
  "defaultState": "Stan domyślny",
18
- "defaultStateDesc": "Początkowy stan zasilania przy uruchomieniu Homebridge.",
18
+ "defaultStateDesc": "Stan przełącznika przy każdym ponownym uruchomieniu Homebridge.",
19
+ "remember": "Zapamiętaj ostatni stan",
19
20
  "delayOff": "Automatyczne wyłączenie (ms)",
20
21
  "delayOffDesc": "Automatycznie wyłącza się po podanej liczbie milisekund. Ustaw 0, aby wyłączyć.",
21
22
  "addSwitch": "Dodaj przełącznik",
@@ -15,7 +15,8 @@
15
15
  "typeSwitch": "Interruptor",
16
16
  "typeOutlet": "Tomada",
17
17
  "defaultState": "Estado padrão",
18
- "defaultStateDesc": "Estado de energia inicial quando o Homebridge inicia.",
18
+ "defaultStateDesc": "Estado do interruptor em cada reinício do Homebridge.",
19
+ "remember": "Lembrar último estado",
19
20
  "delayOff": "Desligamento automático (ms)",
20
21
  "delayOffDesc": "Desliga automaticamente após estes milissegundos. Defina como 0 para desativar.",
21
22
  "addSwitch": "Adicionar interruptor",
@@ -15,7 +15,8 @@
15
15
  "typeSwitch": "Выключатель",
16
16
  "typeOutlet": "Розетка",
17
17
  "defaultState": "Состояние по умолчанию",
18
- "defaultStateDesc": "Начальное состояние питания при запуске Homebridge.",
18
+ "defaultStateDesc": "Состояние переключателя при каждом перезапуске Homebridge.",
19
+ "remember": "Запомнить последнее состояние",
19
20
  "delayOff": "Автоматическое выключение (мс)",
20
21
  "delayOffDesc": "Автоматически выключается через указанное количество миллисекунд. Установите 0 для отключения.",
21
22
  "addSwitch": "Добавить переключатель",
@@ -15,7 +15,8 @@
15
15
  "typeSwitch": "Anahtar",
16
16
  "typeOutlet": "Priz",
17
17
  "defaultState": "Varsayılan Durum",
18
- "defaultStateDesc": "Homebridge başladığında başlangıç güç durumu.",
18
+ "defaultStateDesc": "Her Homebridge yeniden başlatmasında anahtarın durumu.",
19
+ "remember": "Son Durumu Hatırla",
19
20
  "delayOff": "Otomatik Kapanma (ms)",
20
21
  "delayOffDesc": "Belirtilen milisaniye sonra otomatik kapanır. Devre dışı bırakmak için 0 yazın.",
21
22
  "addSwitch": "Anahtar Ekle",
@@ -15,7 +15,8 @@
15
15
  "typeSwitch": "开关",
16
16
  "typeOutlet": "插座",
17
17
  "defaultState": "默认状态",
18
- "defaultStateDesc": "Homebridge 启动时的初始电源状态。",
18
+ "defaultStateDesc": "每次 Homebridge 重启时的开关状态。",
19
+ "remember": "记住上次状态",
19
20
  "delayOff": "自动关闭(毫秒)",
20
21
  "delayOffDesc": "在指定的毫秒数后自动关闭。设置为 0 以禁用。",
21
22
  "addSwitch": "添加开关",
@@ -234,7 +234,7 @@
234
234
  name: '',
235
235
  switchBehavior: 'independent',
236
236
  switchType: 'outlet',
237
- switches: [{ name: '', defaultState: false, delayOff: 0 }],
237
+ switches: [{ name: '', defaultState: 'remember', delayOff: 0 }],
238
238
  });
239
239
  expandedDevices.add(di);
240
240
  expandedSwitches.add(`${di}_0`);
@@ -312,7 +312,7 @@
312
312
  btn.addEventListener('click', () => {
313
313
  const di = parseInt(btn.dataset.dev);
314
314
  const si = config.devices[di].switches.length;
315
- config.devices[di].switches.push({ name: '', defaultState: false, delayOff: 0 });
315
+ config.devices[di].switches.push({ name: '', defaultState: 'remember', delayOff: 0 });
316
316
  expandedSwitches.add(`${di}_${si}`);
317
317
  render();
318
318
  save();
@@ -337,7 +337,7 @@
337
337
  const si = parseInt(input.dataset.sw);
338
338
  const field = input.dataset.field;
339
339
  if (field === 'defaultState') {
340
- config.devices[di].switches[si][field] = input.checked;
340
+ config.devices[di].switches[si][field] = input.value;
341
341
  } else if (field === 'delayOff') {
342
342
  config.devices[di].switches[si][field] = parseInt(input.value) || 0;
343
343
  } else {
@@ -438,6 +438,8 @@
438
438
  const isOpen = expandedSwitches.has(`${di}_${si}`);
439
439
  const swLabel = sw.name || `#${si + 1}`;
440
440
  const typeLabel = deviceSwitchType === 'switch' ? (t.typeSwitch || 'Switch') : (t.typeOutlet || 'Outlet');
441
+ const ds = sw.defaultState;
442
+ const dsValue = (ds === true || ds === 'on') ? 'on' : (ds === false || ds === 'off') ? 'off' : 'remember';
441
443
 
442
444
  return `
443
445
  <div class="switch-card">
@@ -463,10 +465,11 @@
463
465
  </div>
464
466
  <div class="form-group" style="margin-bottom:0">
465
467
  <label>${t.defaultState || 'Default State'}</label>
466
- <div class="toggle-wrap" style="margin-top:6px; padding-bottom:9px">
467
- <input type="checkbox" class="sw-field" data-dev="${di}" data-sw="${si}" data-field="defaultState" ${sw.defaultState ? 'checked' : ''}>
468
- <span>${sw.defaultState ? (t.on || 'On') : (t.off || 'Off')}</span>
469
- </div>
468
+ <select class="sw-field" data-dev="${di}" data-sw="${si}" data-field="defaultState">
469
+ <option value="remember" ${dsValue === 'remember' ? 'selected' : ''}>${t.remember || 'Remember'}</option>
470
+ <option value="on" ${dsValue === 'on' ? 'selected' : ''}>${t.on || 'On'}</option>
471
+ <option value="off" ${dsValue === 'off' ? 'selected' : ''}>${t.off || 'Off'}</option>
472
+ </select>
470
473
  </div>
471
474
  </div>
472
475
  </div>
package/index.js CHANGED
@@ -145,8 +145,16 @@ class MultipleSwitchPlatform {
145
145
 
146
146
  services.set(subtype, service);
147
147
 
148
- if (accessory.context.switchStates[subtype] === undefined) {
149
- accessory.context.switchStates[subtype] = sw.defaultState || false;
148
+ const ds = sw.defaultState;
149
+ if (ds === false || ds === 'off') {
150
+ accessory.context.switchStates[subtype] = false;
151
+ } else if (ds === true || ds === 'on') {
152
+ accessory.context.switchStates[subtype] = true;
153
+ } else {
154
+ // 'remember' or undefined — keep existing state; initialise to false on first run
155
+ if (accessory.context.switchStates[subtype] === undefined) {
156
+ accessory.context.switchStates[subtype] = false;
157
+ }
150
158
  }
151
159
  });
152
160
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "homebridge-multiple-switch",
3
- "version": "1.7.0-beta.7",
3
+ "version": "1.7.0-beta.9",
4
4
  "description": "Multiple switch platform for Homebridge",
5
5
  "homepage": "https://github.com/azadaydinli/homebridge-multiple-switch",
6
6
  "main": "index.js",