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 +14 -0
- package/config.schema.json +8 -3
- package/homebridge-ui/public/i18n/ar.json +2 -1
- package/homebridge-ui/public/i18n/de.json +2 -1
- package/homebridge-ui/public/i18n/en.json +2 -1
- package/homebridge-ui/public/i18n/es.json +2 -1
- package/homebridge-ui/public/i18n/fr.json +2 -1
- package/homebridge-ui/public/i18n/it.json +2 -1
- package/homebridge-ui/public/i18n/ja.json +2 -1
- package/homebridge-ui/public/i18n/ko.json +2 -1
- package/homebridge-ui/public/i18n/nl.json +2 -1
- package/homebridge-ui/public/i18n/pl.json +2 -1
- package/homebridge-ui/public/i18n/pt.json +2 -1
- package/homebridge-ui/public/i18n/ru.json +2 -1
- package/homebridge-ui/public/i18n/tr.json +2 -1
- package/homebridge-ui/public/i18n/zh-CN.json +2 -1
- package/homebridge-ui/public/index.html +10 -7
- package/index.js +10 -2
- package/package.json +1 -1
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
|
package/config.schema.json
CHANGED
|
@@ -64,9 +64,14 @@
|
|
|
64
64
|
},
|
|
65
65
|
"defaultState": {
|
|
66
66
|
"title": "Default State",
|
|
67
|
-
"description": "
|
|
68
|
-
"type": "
|
|
69
|
-
"default":
|
|
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": "حالة
|
|
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": "
|
|
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": "
|
|
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
|
|
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
|
|
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
|
|
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": "
|
|
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": "
|
|
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
|
|
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": "
|
|
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
|
|
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:
|
|
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:
|
|
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.
|
|
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
|
-
<
|
|
467
|
-
<
|
|
468
|
-
<
|
|
469
|
-
|
|
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
|
-
|
|
149
|
-
|
|
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