iobroker.lorawan 1.22.9 → 1.22.11
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/README.md +6 -0
- package/admin/i18n/de/translations.json +3 -0
- package/admin/i18n/en/translations.json +3 -2
- package/admin/i18n/es/translations.json +3 -0
- package/admin/i18n/fr/translations.json +3 -0
- package/admin/i18n/it/translations.json +3 -0
- package/admin/i18n/nl/translations.json +3 -0
- package/admin/i18n/pl/translations.json +3 -0
- package/admin/i18n/pt/translations.json +3 -0
- package/admin/i18n/ru/translations.json +3 -0
- package/admin/i18n/uk/translations.json +3 -0
- package/admin/i18n/zh-cn/translations.json +3 -0
- package/admin/jsonConfig.json +6 -6
- package/io-package.json +27 -27
- package/lib/modules/bridge.js +9 -9
- package/lib/modules/deviceManager/bridgeDevices.js +323 -14
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -24,6 +24,12 @@ For now there is documentation in English here: https://wiki.hafenmeister.de
|
|
|
24
24
|
Placeholder for the next version (at the beginning of the line):
|
|
25
25
|
### **WORK IN PROGRESS**
|
|
26
26
|
-->
|
|
27
|
+
### 1.22.11 (2026-04-20)
|
|
28
|
+
* (BenAhrdt) correct default value for pause (worx)
|
|
29
|
+
|
|
30
|
+
### 1.22.10 (2026-04-20)
|
|
31
|
+
* (BenAhrdt) implements button in card
|
|
32
|
+
|
|
27
33
|
### 1.22.9 (2026-04-20)
|
|
28
34
|
* (BenAhrdt) error resolve git push
|
|
29
35
|
|
|
@@ -162,11 +162,14 @@
|
|
|
162
162
|
"NumberStateText": "Statusnummern-ID",
|
|
163
163
|
"NumberText": "Nummern-ID",
|
|
164
164
|
"OneNumber": "eine Nummer für den Befehl",
|
|
165
|
+
"OneNumberState": "eine Nummer für den Status",
|
|
165
166
|
"OneString": "ein String für die Befehle",
|
|
166
167
|
"OpenSignalId": "ID für offenen Endschalter",
|
|
167
168
|
"OpenSignalText": "ID für offenen Endschalter",
|
|
168
169
|
"OriginHeader": "Ursprungseinstellungen",
|
|
169
170
|
"OriginInformation": "Legen Sie den Ursprung der erwarteten Daten fest",
|
|
171
|
+
"PauseStateId": "Pause Id",
|
|
172
|
+
"PauseStateNumber": "Pausiert Nummer",
|
|
170
173
|
"RefreshDiscoveryCronJob": "Discovery Zyklus",
|
|
171
174
|
"RefreshDiscoveryCronJobTooltip": "Stellen Sie den Cronjob für das Discovery ein",
|
|
172
175
|
"Rename this device": "Gerät umbenennen",
|
|
@@ -237,6 +237,7 @@
|
|
|
237
237
|
"SeparateIds": "separated ids for command",
|
|
238
238
|
"OneString": "one string for command",
|
|
239
239
|
"OneNumber": "one number for command",
|
|
240
|
+
"OneNumberState": "one number for state",
|
|
240
241
|
"no command": "no command id",
|
|
241
242
|
"CoverPosition": "position",
|
|
242
243
|
"CoverPositionTooltip": "selected: separate id for position",
|
|
@@ -321,10 +322,10 @@
|
|
|
321
322
|
"HomeId": "HomeId",
|
|
322
323
|
"NumberStateId": "Id of State-Number",
|
|
323
324
|
"MowingStateNumber": "Mowing-Number",
|
|
324
|
-
"
|
|
325
|
+
"PauseStateNumber": "Pause-Number",
|
|
325
326
|
"HomeStateNumber": "Home-Number",
|
|
326
327
|
"MowingStateId": "MowingStateId",
|
|
327
|
-
"
|
|
328
|
+
"PauseStateId": "PauseStateId",
|
|
328
329
|
"HomeStateId": "HomeStateId",
|
|
329
330
|
"NumberStateText": "State-Number Id",
|
|
330
331
|
"StatciTextMowerSeparate": "The default values are selected for the worx adapter"
|
|
@@ -162,11 +162,14 @@
|
|
|
162
162
|
"NumberStateText": "Identificación del número de estado",
|
|
163
163
|
"NumberText": "Número de identificación",
|
|
164
164
|
"OneNumber": "un número para comando",
|
|
165
|
+
"OneNumberState": "un número para el estado",
|
|
165
166
|
"OneString": "una cadena para el comando",
|
|
166
167
|
"OpenSignalId": "ID para interruptor de límite abierto",
|
|
167
168
|
"OpenSignalText": "ID para interruptor de límite abierto",
|
|
168
169
|
"OriginHeader": "Configuración de origen",
|
|
169
170
|
"OriginInformation": "Establecer el origen de los datos esperados.",
|
|
171
|
+
"PauseStateId": "PausaEstadoId",
|
|
172
|
+
"PauseStateNumber": "Número de pausa",
|
|
170
173
|
"RefreshDiscoveryCronJob": "Descubre el ciclo",
|
|
171
174
|
"RefreshDiscoveryCronJobTooltip": "inserte el cronjob para actualizar el descubrimiento",
|
|
172
175
|
"Rename this device": "Cambiar el nombre de este dispositivo",
|
|
@@ -162,11 +162,14 @@
|
|
|
162
162
|
"NumberStateText": "Identifiant du numéro d'état",
|
|
163
163
|
"NumberText": "Numéro d'identification",
|
|
164
164
|
"OneNumber": "un numéro pour la commande",
|
|
165
|
+
"OneNumberState": "un numéro pour l'état",
|
|
165
166
|
"OneString": "une chaîne pour la commande",
|
|
166
167
|
"OpenSignalId": "identifiant pour fin de course ouvert",
|
|
167
168
|
"OpenSignalText": "identifiant pour fin de course ouvert",
|
|
168
169
|
"OriginHeader": "Paramètres d'origine",
|
|
169
170
|
"OriginInformation": "Définir l'origine des données attendues",
|
|
171
|
+
"PauseStateId": "PauseStateId",
|
|
172
|
+
"PauseStateNumber": "Numéro de pause",
|
|
170
173
|
"RefreshDiscoveryCronJob": "Découvrir le cycle",
|
|
171
174
|
"RefreshDiscoveryCronJobTooltip": "insérez le cronjob pour rafraîchir la découverte",
|
|
172
175
|
"Rename this device": "Renommer cet appareil",
|
|
@@ -162,11 +162,14 @@
|
|
|
162
162
|
"NumberStateText": "ID numero stato",
|
|
163
163
|
"NumberText": "Numero identificativo",
|
|
164
164
|
"OneNumber": "un numero per comando",
|
|
165
|
+
"OneNumberState": "un numero per stato",
|
|
165
166
|
"OneString": "una stringa per il comando",
|
|
166
167
|
"OpenSignalId": "id per finecorsa aperto",
|
|
167
168
|
"OpenSignalText": "id per finecorsa aperto",
|
|
168
169
|
"OriginHeader": "Impostazioni dell'origine",
|
|
169
170
|
"OriginInformation": "Imposta l'origine dei dati attesi",
|
|
171
|
+
"PauseStateId": "PauseStateId",
|
|
172
|
+
"PauseStateNumber": "Numero di pausa",
|
|
170
173
|
"RefreshDiscoveryCronJob": "Scopri Ciclo",
|
|
171
174
|
"RefreshDiscoveryCronJobTooltip": "inserire il cronjob per aggiornare la scoperta",
|
|
172
175
|
"Rename this device": "Rinomina questo dispositivo",
|
|
@@ -162,11 +162,14 @@
|
|
|
162
162
|
"NumberStateText": "Staatsnummer-ID",
|
|
163
163
|
"NumberText": "Nummer-ID",
|
|
164
164
|
"OneNumber": "één nummer voor commando",
|
|
165
|
+
"OneNumberState": "één nummer voor staat",
|
|
165
166
|
"OneString": "één string voor commando",
|
|
166
167
|
"OpenSignalId": "ID voor open eindschakelaar",
|
|
167
168
|
"OpenSignalText": "ID voor open eindschakelaar",
|
|
168
169
|
"OriginHeader": "Oorspronkelijke instellingen",
|
|
169
170
|
"OriginInformation": "Stel de oorsprong van de verwachte gegevens in",
|
|
171
|
+
"PauseStateId": "PauseStateId",
|
|
172
|
+
"PauseStateNumber": "Pauze-nummer",
|
|
170
173
|
"RefreshDiscoveryCronJob": "Ontdek Cyclus",
|
|
171
174
|
"RefreshDiscoveryCronJobTooltip": "plaats de cronjob om de ontdekking te vernieuwen",
|
|
172
175
|
"Rename this device": "Hernoem dit apparaat",
|
|
@@ -162,11 +162,14 @@
|
|
|
162
162
|
"NumberStateText": "Identyfikator numeru stanu",
|
|
163
163
|
"NumberText": "Numer identyfikacyjny",
|
|
164
164
|
"OneNumber": "jeden numer do polecenia",
|
|
165
|
+
"OneNumberState": "jedna liczba dla stanu",
|
|
165
166
|
"OneString": "jeden ciąg dla polecenia",
|
|
166
167
|
"OpenSignalId": "identyfikator otwartego wyłącznika krańcowego",
|
|
167
168
|
"OpenSignalText": "identyfikator otwartego wyłącznika krańcowego",
|
|
168
169
|
"OriginHeader": "Ustawienia oryginalności",
|
|
169
170
|
"OriginInformation": "Ustaw pochodzenie oczekiwanych danych",
|
|
171
|
+
"PauseStateId": "Identyfikator stanu wstrzymania",
|
|
172
|
+
"PauseStateNumber": "Numer pauzy",
|
|
170
173
|
"RefreshDiscoveryCronJob": "Odkryj cykl",
|
|
171
174
|
"RefreshDiscoveryCronJobTooltip": "wstaw cronjob, aby odświeżyć odkrycie",
|
|
172
175
|
"Rename this device": "Zmień nazwę tego urządzenia",
|
|
@@ -162,11 +162,14 @@
|
|
|
162
162
|
"NumberStateText": "ID do número do estado",
|
|
163
163
|
"NumberText": "ID do número",
|
|
164
164
|
"OneNumber": "um número para comando",
|
|
165
|
+
"OneNumberState": "um número para estado",
|
|
165
166
|
"OneString": "uma string para comando",
|
|
166
167
|
"OpenSignalId": "id para interruptor de limite aberto",
|
|
167
168
|
"OpenSignalText": "id para interruptor de limite aberto",
|
|
168
169
|
"OriginHeader": "Configurações de origem",
|
|
169
170
|
"OriginInformation": "Defina a origem dos dados esperados",
|
|
171
|
+
"PauseStateId": "PauseStateId",
|
|
172
|
+
"PauseStateNumber": "Pausa-Número",
|
|
170
173
|
"RefreshDiscoveryCronJob": "Descubra o Ciclo",
|
|
171
174
|
"RefreshDiscoveryCronJobTooltip": "insira o cronjob para atualizar a descoberta",
|
|
172
175
|
"Rename this device": "Renomear este dispositivo",
|
|
@@ -162,11 +162,14 @@
|
|
|
162
162
|
"NumberStateText": "Идентификатор номера штата",
|
|
163
163
|
"NumberText": "Идентификатор номера",
|
|
164
164
|
"OneNumber": "один номер для команды",
|
|
165
|
+
"OneNumberState": "один номер для штата",
|
|
165
166
|
"OneString": "одна строка для команды",
|
|
166
167
|
"OpenSignalId": "идентификатор концевого выключателя открытия",
|
|
167
168
|
"OpenSignalText": "идентификатор концевого выключателя открытия",
|
|
168
169
|
"OriginHeader": "Оригинальные настройки",
|
|
169
170
|
"OriginInformation": "Установите источник ожидаемых данных",
|
|
171
|
+
"PauseStateId": "Паузастатеид",
|
|
172
|
+
"PauseStateNumber": "Пауза-номер",
|
|
170
173
|
"RefreshDiscoveryCronJob": "Откройте для себя цикл",
|
|
171
174
|
"RefreshDiscoveryCronJobTooltip": "вставьте cronjob для обновления открытия",
|
|
172
175
|
"Rename this device": "Переименуйте это устройство",
|
|
@@ -162,11 +162,14 @@
|
|
|
162
162
|
"NumberStateText": "Ідентифікатор державного номера",
|
|
163
163
|
"NumberText": "ID номера",
|
|
164
164
|
"OneNumber": "одна цифра для команди",
|
|
165
|
+
"OneNumberState": "один номер для держ",
|
|
165
166
|
"OneString": "один рядок для команди",
|
|
166
167
|
"OpenSignalId": "ідентифікатор для відкритого кінцевого вимикача",
|
|
167
168
|
"OpenSignalText": "ідентифікатор для відкритого кінцевого вимикача",
|
|
168
169
|
"OriginHeader": "Налаштування походження",
|
|
169
170
|
"OriginInformation": "Встановіть джерело очікуваних даних",
|
|
171
|
+
"PauseStateId": "PauseStateId",
|
|
172
|
+
"PauseStateNumber": "Пауза-номер",
|
|
170
173
|
"RefreshDiscoveryCronJob": "Цикл відкриття",
|
|
171
174
|
"RefreshDiscoveryCronJobTooltip": "вставте cronjob для оновлення відкриття",
|
|
172
175
|
"Rename this device": "Перейменуйте цей пристрій",
|
|
@@ -162,11 +162,14 @@
|
|
|
162
162
|
"NumberStateText": "州号 ID",
|
|
163
163
|
"NumberText": "号码 ID",
|
|
164
164
|
"OneNumber": "一个数字用于命令",
|
|
165
|
+
"OneNumberState": "一个数字代表州",
|
|
165
166
|
"OneString": "一个命令字符串",
|
|
166
167
|
"OpenSignalId": "打开限位开关的 id",
|
|
167
168
|
"OpenSignalText": "打开限位开关的 id",
|
|
168
169
|
"OriginHeader": "原始设置",
|
|
169
170
|
"OriginInformation": "设置预期数据的来源",
|
|
171
|
+
"PauseStateId": "暂停状态ID",
|
|
172
|
+
"PauseStateNumber": "暂停号码",
|
|
170
173
|
"RefreshDiscoveryCronJob": "发现周期",
|
|
171
174
|
"RefreshDiscoveryCronJobTooltip": "插入 cronjob 以刷新发现",
|
|
172
175
|
"Rename this device": "重命名该设备",
|
package/admin/jsonConfig.json
CHANGED
|
@@ -2694,10 +2694,10 @@
|
|
|
2694
2694
|
},
|
|
2695
2695
|
{
|
|
2696
2696
|
"type": "number",
|
|
2697
|
-
"label": "
|
|
2698
|
-
"attr": "
|
|
2699
|
-
"tooltip": "
|
|
2700
|
-
"default":
|
|
2697
|
+
"label": "PauseStateNumber",
|
|
2698
|
+
"attr": "PauseStateNumber",
|
|
2699
|
+
"tooltip": "PauseStateNumberTooltip",
|
|
2700
|
+
"default": 34,
|
|
2701
2701
|
"hidden": "data.MowerStateSeparate !== 'number'",
|
|
2702
2702
|
"xs": 12,
|
|
2703
2703
|
"sm": 1,
|
|
@@ -2733,8 +2733,8 @@
|
|
|
2733
2733
|
},
|
|
2734
2734
|
{
|
|
2735
2735
|
"type": "objectId",
|
|
2736
|
-
"attr": "
|
|
2737
|
-
"label": "
|
|
2736
|
+
"attr": "PauseStateId",
|
|
2737
|
+
"label": "PauseStateText",
|
|
2738
2738
|
"customFilter": {"common": { "type": [ "boolean", "mixed" ] } },
|
|
2739
2739
|
"hidden": "data.MowerStateSeparate !== 'separate'",
|
|
2740
2740
|
"xs": 12,
|
package/io-package.json
CHANGED
|
@@ -1,8 +1,34 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "lorawan",
|
|
4
|
-
"version": "1.22.
|
|
4
|
+
"version": "1.22.11",
|
|
5
5
|
"news": {
|
|
6
|
+
"1.22.11": {
|
|
7
|
+
"en": "correct default value for pause (worx)",
|
|
8
|
+
"de": "korrekter standardwert für pause (worx)",
|
|
9
|
+
"ru": "правильное значение по умолчанию для паузы (worx)",
|
|
10
|
+
"pt": "valor padrão correto para pausa (worx)",
|
|
11
|
+
"nl": "correcte standaard waarde voor pauze (worx)",
|
|
12
|
+
"fr": "corriger la valeur par défaut pour la pause (worx)",
|
|
13
|
+
"it": "corretto valore predefinito per pausa (worx)",
|
|
14
|
+
"es": "valor predeterminado correcto para la pausa (worx)",
|
|
15
|
+
"pl": "poprawna wartość domyślna dla pauzy (worx)",
|
|
16
|
+
"uk": "виправлено значення за замовчуванням для паузи (worx)",
|
|
17
|
+
"zh-cn": "校正暂停( worx) 的默认值"
|
|
18
|
+
},
|
|
19
|
+
"1.22.10": {
|
|
20
|
+
"en": "implements button in card",
|
|
21
|
+
"de": "implementiert knopf in der karte",
|
|
22
|
+
"ru": "реализует кнопку в карточке",
|
|
23
|
+
"pt": "implementa o botão no cartão",
|
|
24
|
+
"nl": "implementeert knop in kaart",
|
|
25
|
+
"fr": "implémente bouton dans la carte",
|
|
26
|
+
"it": "implementa il pulsante nella scheda",
|
|
27
|
+
"es": "implementa el botón en la tarjeta",
|
|
28
|
+
"pl": "implementuje przycisk w karcie",
|
|
29
|
+
"uk": "реалізується кнопка в картці",
|
|
30
|
+
"zh-cn": "执行卡中的按钮"
|
|
31
|
+
},
|
|
6
32
|
"1.22.9": {
|
|
7
33
|
"en": "error resolve git push",
|
|
8
34
|
"de": "fehler beheben git push",
|
|
@@ -67,32 +93,6 @@
|
|
|
67
93
|
"pl": "element blokujący bugfix w karcie dM",
|
|
68
94
|
"uk": "суб'єкт блокування помилок в картці dM",
|
|
69
95
|
"zh-cn": "dM 卡中的bugfix锁实体"
|
|
70
|
-
},
|
|
71
|
-
"1.22.3": {
|
|
72
|
-
"en": "add first Test for states of configed devices shown in device Manager cards",
|
|
73
|
-
"de": "fügen Sie ersten Test für Zustände von konfiktiven Geräten in Device Manager-Karten",
|
|
74
|
-
"ru": "добавить первый Тест для состояний конфигурированных устройств, показанных в картах диспетчера устройств",
|
|
75
|
-
"pt": "adicionar primeiro Teste para estados de dispositivos configurados mostrados nas placas do Gerenciador de dispositivos",
|
|
76
|
-
"nl": "toe te voegen eerste Test voor toestanden van geconfigureerde apparaten weergegeven in apparaat Manager kaarten",
|
|
77
|
-
"fr": "ajouter le premier test pour les états des périphériques configurés affichés dans les cartes de gestionnaire de périphériques",
|
|
78
|
-
"it": "aggiungere il primo test per gli stati di dispositivi confidificati mostrati nelle schede Gestione dispositivi",
|
|
79
|
-
"es": "añadir el primer Test para estados de dispositivos conectados mostrados en tarjetas de administrador de dispositivos",
|
|
80
|
-
"pl": "dodaj pierwszy test dla stanu podłączonych urządzeń pokazany w kartach menedżera urządzeń",
|
|
81
|
-
"uk": "додати перший тест для станів настрочених пристроїв, відображених в картах диспетчера пристроїв",
|
|
82
|
-
"zh-cn": "添加第一个设备管理卡中显示的配置设备状态测试"
|
|
83
|
-
},
|
|
84
|
-
"1.22.2": {
|
|
85
|
-
"en": "remove readOnly flag from jsonEditor",
|
|
86
|
-
"de": "readOnly flag von jsonEditor entfernen",
|
|
87
|
-
"ru": "удалить только флаг jsonEditor",
|
|
88
|
-
"pt": "remove readOnly flag do jsonEditor",
|
|
89
|
-
"nl": "readOnly-vlag verwijderen uit jsonEditor",
|
|
90
|
-
"fr": "supprimer readOnly drapeau de jsonEditor",
|
|
91
|
-
"it": "rimuovere readOnly flag da jsonEditor",
|
|
92
|
-
"es": "eliminar readOnly flag de jsonEditor",
|
|
93
|
-
"pl": "usuń flagę readOnly z jsonEditor",
|
|
94
|
-
"uk": "remove readOnly прапорець з jsonEditor",
|
|
95
|
-
"zh-cn": "从json编辑器中删除只读的旗"
|
|
96
96
|
}
|
|
97
97
|
},
|
|
98
98
|
"titleLang": {
|
package/lib/modules/bridge.js
CHANGED
|
@@ -3887,7 +3887,7 @@ class bridgeClass extends EventEmiter {
|
|
|
3887
3887
|
// State (number)
|
|
3888
3888
|
if (config.MowerIds.StateId) {
|
|
3889
3889
|
const MowingStateNumber = config.MowingStateNumber;
|
|
3890
|
-
const
|
|
3890
|
+
const PauseStateNumber = config.PauseStateNumber;
|
|
3891
3891
|
const HomeStateNumber = config.HomeStateNumber;
|
|
3892
3892
|
this.assignIdStructure(
|
|
3893
3893
|
this.PublishedIds,
|
|
@@ -3902,7 +3902,7 @@ class bridgeClass extends EventEmiter {
|
|
|
3902
3902
|
mower: true,
|
|
3903
3903
|
messageAssign: {
|
|
3904
3904
|
[MowingStateNumber]: 'mowing',
|
|
3905
|
-
[
|
|
3905
|
+
[PauseStateNumber]: 'paused',
|
|
3906
3906
|
[HomeStateNumber]: 'docked',
|
|
3907
3907
|
},
|
|
3908
3908
|
},
|
|
@@ -3927,11 +3927,11 @@ class bridgeClass extends EventEmiter {
|
|
|
3927
3927
|
);
|
|
3928
3928
|
}
|
|
3929
3929
|
|
|
3930
|
-
//
|
|
3931
|
-
if (config.MowerIds.
|
|
3930
|
+
// Pause State
|
|
3931
|
+
if (config.MowerIds.PauseStateId) {
|
|
3932
3932
|
this.assignIdStructure(
|
|
3933
3933
|
this.PublishedIds,
|
|
3934
|
-
config.MowerIds.
|
|
3934
|
+
config.MowerIds.PauseStateId,
|
|
3935
3935
|
{
|
|
3936
3936
|
usedDeviceId: deviceIdentifier,
|
|
3937
3937
|
},
|
|
@@ -3988,9 +3988,9 @@ class bridgeClass extends EventEmiter {
|
|
|
3988
3988
|
await this.publishId(config.MowerIds.MowingStateId, undefined, {});
|
|
3989
3989
|
await this.adapter.subscribeForeignStatesAsync(config.MowerIds.MowingStateId);
|
|
3990
3990
|
}
|
|
3991
|
-
if (config.MowerIds.
|
|
3992
|
-
await this.publishId(config.MowerIds.
|
|
3993
|
-
await this.adapter.subscribeForeignStatesAsync(config.MowerIds.
|
|
3991
|
+
if (config.MowerIds.PauseStateId) {
|
|
3992
|
+
await this.publishId(config.MowerIds.PauseStateId, undefined, {});
|
|
3993
|
+
await this.adapter.subscribeForeignStatesAsync(config.MowerIds.PauseStateId);
|
|
3994
3994
|
}
|
|
3995
3995
|
if (config.MowerIds.HomeStateId) {
|
|
3996
3996
|
await this.publishId(config.MowerIds.HomeStateId, undefined, {});
|
|
@@ -4027,7 +4027,7 @@ class bridgeClass extends EventEmiter {
|
|
|
4027
4027
|
}
|
|
4028
4028
|
if (config.MowerStateSeparate === 'seperate') {
|
|
4029
4029
|
MowerIds.MowingStateId = config.MowingStateId;
|
|
4030
|
-
MowerIds.
|
|
4030
|
+
MowerIds.PauseStateId = config.PauseStateId;
|
|
4031
4031
|
MowerIds.HomeStateId = config.HomeStateId;
|
|
4032
4032
|
}
|
|
4033
4033
|
for (const id of Object.values(MowerIds)) {
|
|
@@ -71,7 +71,7 @@ class bridgeDevicesClass {
|
|
|
71
71
|
let card = {};
|
|
72
72
|
if (discovery.ids.target) {
|
|
73
73
|
this.adapter.log[this.adapter.logtypes.listDevices]?.(
|
|
74
|
-
`Start building
|
|
74
|
+
`Start building target for Id: ${discovery.ids.target}`,
|
|
75
75
|
);
|
|
76
76
|
usedId[discovery.ids.target] = true;
|
|
77
77
|
card = { preLabel: '🌡 ', label: 'Solltemperatur' };
|
|
@@ -100,7 +100,7 @@ class bridgeDevicesClass {
|
|
|
100
100
|
}
|
|
101
101
|
if (discovery.ids.act) {
|
|
102
102
|
this.adapter.log[this.adapter.logtypes.listDevices]?.(
|
|
103
|
-
`Start building
|
|
103
|
+
`Start building act for Id: ${discovery.ids.act}`,
|
|
104
104
|
);
|
|
105
105
|
usedId[discovery.ids.act] = true;
|
|
106
106
|
card = { preLabel: '🌡 ', label: 'Isttemperatur' };
|
|
@@ -140,7 +140,7 @@ class bridgeDevicesClass {
|
|
|
140
140
|
let card = {};
|
|
141
141
|
if (discovery.ids.onOff) {
|
|
142
142
|
this.adapter.log[this.adapter.logtypes.listDevices]?.(
|
|
143
|
-
`Start building
|
|
143
|
+
`Start building On for Id: ${discovery.ids.onOff}`,
|
|
144
144
|
);
|
|
145
145
|
usedId[discovery.ids.onOff] = true;
|
|
146
146
|
card = { preLabel: '⏻ ', label: 'Aus / An' };
|
|
@@ -173,7 +173,7 @@ class bridgeDevicesClass {
|
|
|
173
173
|
}
|
|
174
174
|
if (discovery.ids.target) {
|
|
175
175
|
this.adapter.log[this.adapter.logtypes.listDevices]?.(
|
|
176
|
-
`Start building
|
|
176
|
+
`Start building target for Id: ${discovery.ids.target}`,
|
|
177
177
|
);
|
|
178
178
|
usedId[discovery.ids.target] = true;
|
|
179
179
|
card = { preLabel: '💧 ', label: 'Sollfeuchtigkeit' };
|
|
@@ -202,7 +202,7 @@ class bridgeDevicesClass {
|
|
|
202
202
|
}
|
|
203
203
|
if (discovery.ids.act) {
|
|
204
204
|
this.adapter.log[this.adapter.logtypes.listDevices]?.(
|
|
205
|
-
`Start building
|
|
205
|
+
`Start building act for Id: ${discovery.ids.act}`,
|
|
206
206
|
);
|
|
207
207
|
usedId[discovery.ids.act] = true;
|
|
208
208
|
card = { preLabel: '💧 ', label: 'Istfeuchtigkeit' };
|
|
@@ -242,7 +242,7 @@ class bridgeDevicesClass {
|
|
|
242
242
|
let card = {};
|
|
243
243
|
if (discovery.ids.open) {
|
|
244
244
|
this.adapter.log[this.adapter.logtypes.listDevices]?.(
|
|
245
|
-
`Start building
|
|
245
|
+
`Start building open for Id: ${discovery.ids.open}`,
|
|
246
246
|
);
|
|
247
247
|
usedId[discovery.ids.open] = true;
|
|
248
248
|
card = { preLabel: '', label: 'Öffnen' };
|
|
@@ -271,7 +271,7 @@ class bridgeDevicesClass {
|
|
|
271
271
|
}
|
|
272
272
|
if (discovery.ids.close) {
|
|
273
273
|
this.adapter.log[this.adapter.logtypes.listDevices]?.(
|
|
274
|
-
`Start building
|
|
274
|
+
`Start building close for Id: ${discovery.ids.close}`,
|
|
275
275
|
);
|
|
276
276
|
usedId[discovery.ids.close] = true;
|
|
277
277
|
card = { preLabel: '', label: 'Schließen' };
|
|
@@ -300,7 +300,7 @@ class bridgeDevicesClass {
|
|
|
300
300
|
}
|
|
301
301
|
if (discovery.ids.stop) {
|
|
302
302
|
this.adapter.log[this.adapter.logtypes.listDevices]?.(
|
|
303
|
-
`Start building
|
|
303
|
+
`Start building stop for Id: ${discovery.ids.stop}`,
|
|
304
304
|
);
|
|
305
305
|
usedId[discovery.ids.stop] = true;
|
|
306
306
|
card = { preLabel: '', label: 'Stop' };
|
|
@@ -329,7 +329,7 @@ class bridgeDevicesClass {
|
|
|
329
329
|
}
|
|
330
330
|
if (discovery.ids.openSignal) {
|
|
331
331
|
this.adapter.log[this.adapter.logtypes.listDevices]?.(
|
|
332
|
-
`Start building
|
|
332
|
+
`Start building open Signal for Id: ${discovery.ids.openSignal}`,
|
|
333
333
|
);
|
|
334
334
|
usedId[discovery.ids.openSignal] = true;
|
|
335
335
|
card = { preLabel: '', label: 'Oben (offen)' };
|
|
@@ -360,7 +360,7 @@ class bridgeDevicesClass {
|
|
|
360
360
|
}
|
|
361
361
|
if (discovery.ids.closedSignal) {
|
|
362
362
|
this.adapter.log[this.adapter.logtypes.listDevices]?.(
|
|
363
|
-
`Start building
|
|
363
|
+
`Start building closed Signal for Id: ${discovery.ids.closedSignal}`,
|
|
364
364
|
);
|
|
365
365
|
usedId[discovery.ids.closedSignal] = true;
|
|
366
366
|
card = { preLabel: '', label: 'Unten (zu)' };
|
|
@@ -402,7 +402,7 @@ class bridgeDevicesClass {
|
|
|
402
402
|
let card = {};
|
|
403
403
|
if (discovery.ids.lock) {
|
|
404
404
|
this.adapter.log[this.adapter.logtypes.listDevices]?.(
|
|
405
|
-
`Start building
|
|
405
|
+
`Start building lock for Id: ${discovery.ids.lock}`,
|
|
406
406
|
);
|
|
407
407
|
usedId[discovery.ids.lock] = true;
|
|
408
408
|
card = { preLabel: '🔒 ', label: 'Abschließen' };
|
|
@@ -431,7 +431,7 @@ class bridgeDevicesClass {
|
|
|
431
431
|
}
|
|
432
432
|
if (discovery.ids.unlock) {
|
|
433
433
|
this.adapter.log[this.adapter.logtypes.listDevices]?.(
|
|
434
|
-
`Start building
|
|
434
|
+
`Start building unlock for Id: ${discovery.ids.unlock}`,
|
|
435
435
|
);
|
|
436
436
|
usedId[discovery.ids.unlock] = true;
|
|
437
437
|
card = { preLabel: '🔓 ', label: 'Aufschließen' };
|
|
@@ -460,7 +460,7 @@ class bridgeDevicesClass {
|
|
|
460
460
|
}
|
|
461
461
|
if (discovery.ids.open) {
|
|
462
462
|
this.adapter.log[this.adapter.logtypes.listDevices]?.(
|
|
463
|
-
`Start building
|
|
463
|
+
`Start building open for Id: ${discovery.ids.open}`,
|
|
464
464
|
);
|
|
465
465
|
usedId[discovery.ids.open] = true;
|
|
466
466
|
card = { preLabel: '', label: 'Öffnen' };
|
|
@@ -489,7 +489,7 @@ class bridgeDevicesClass {
|
|
|
489
489
|
}
|
|
490
490
|
if (discovery.ids.state) {
|
|
491
491
|
this.adapter.log[this.adapter.logtypes.listDevices]?.(
|
|
492
|
-
`Start building
|
|
492
|
+
`Start building state for Id: ${discovery.ids.state}`,
|
|
493
493
|
);
|
|
494
494
|
usedId[discovery.ids.state] = true;
|
|
495
495
|
card = { preLabel: '', label: 'Status' };
|
|
@@ -523,6 +523,315 @@ class bridgeDevicesClass {
|
|
|
523
523
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
524
524
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
525
525
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
526
|
+
if (deviceValue.entityType.lawn_mower) {
|
|
527
|
+
for (const discovery of deviceValue.discovery) {
|
|
528
|
+
if (discovery.topic.startsWith('homeassistant/lawn_mower/')) {
|
|
529
|
+
let card = {};
|
|
530
|
+
if (discovery.ids.CommandId) {
|
|
531
|
+
this.adapter.log[this.adapter.logtypes.listDevices]?.(
|
|
532
|
+
`Start building LawnMower command for Id: ${discovery.ids.CommandId}`,
|
|
533
|
+
);
|
|
534
|
+
usedId[discovery.ids.CommandId] = true;
|
|
535
|
+
// Start
|
|
536
|
+
card = { label: 'Start' };
|
|
537
|
+
card = lodash.merge(card, deviceValue.ids[discovery.ids.CommandId].object.native?.card);
|
|
538
|
+
let preLabel = card.preLabel ?? '';
|
|
539
|
+
let label = '';
|
|
540
|
+
if (card.name) {
|
|
541
|
+
label = card.name;
|
|
542
|
+
} else if (card.label) {
|
|
543
|
+
label = card.label;
|
|
544
|
+
} else {
|
|
545
|
+
label = deviceValue.ids[discovery.ids.CommandId].object._id.substring(
|
|
546
|
+
deviceValue.ids[discovery.ids.CommandId].object._id.lastIndexOf('.') + 1,
|
|
547
|
+
);
|
|
548
|
+
}
|
|
549
|
+
let desiredTopic = discovery.payload.start_mowing_command_topic;
|
|
550
|
+
let buttonValue = deviceValue.SubscribedTopics[desiredTopic].messageAssign.start_mowing.val;
|
|
551
|
+
res.customInfo.schema.items[`${discovery.ids.CommandId}_CommandId_Start`] = {
|
|
552
|
+
type: 'state',
|
|
553
|
+
// The full state ID including namespace (foreign = true means it's an absolute ID).
|
|
554
|
+
oid: discovery.ids.CommandId,
|
|
555
|
+
foreign: true,
|
|
556
|
+
// Render as an interactive switch control.
|
|
557
|
+
control: 'button',
|
|
558
|
+
// Style the text based on the boolean value.
|
|
559
|
+
label: preLabel + label,
|
|
560
|
+
buttonValue: buttonValue,
|
|
561
|
+
};
|
|
562
|
+
|
|
563
|
+
// Stop
|
|
564
|
+
card = { label: 'Stop' };
|
|
565
|
+
card = lodash.merge(card, deviceValue.ids[discovery.ids.CommandId].object.native?.card);
|
|
566
|
+
preLabel = card.preLabel ?? '';
|
|
567
|
+
label = '';
|
|
568
|
+
if (card.name) {
|
|
569
|
+
label = card.name;
|
|
570
|
+
} else if (card.label) {
|
|
571
|
+
label = card.label;
|
|
572
|
+
} else {
|
|
573
|
+
label = deviceValue.ids[discovery.ids.CommandId].object._id.substring(
|
|
574
|
+
deviceValue.ids[discovery.ids.CommandId].object._id.lastIndexOf('.') + 1,
|
|
575
|
+
);
|
|
576
|
+
}
|
|
577
|
+
desiredTopic = discovery.payload.pause_command_topic;
|
|
578
|
+
buttonValue = deviceValue.SubscribedTopics[desiredTopic].messageAssign.pause.val;
|
|
579
|
+
res.customInfo.schema.items[`${discovery.ids.CommandId}_CommandId_Stop`] = {
|
|
580
|
+
type: 'state',
|
|
581
|
+
// The full state ID including namespace (foreign = true means it's an absolute ID).
|
|
582
|
+
oid: discovery.ids.CommandId,
|
|
583
|
+
foreign: true,
|
|
584
|
+
// Render as an interactive switch control.
|
|
585
|
+
control: 'button',
|
|
586
|
+
// Style the text based on the boolean value.
|
|
587
|
+
label: preLabel + label,
|
|
588
|
+
buttonValue: buttonValue,
|
|
589
|
+
};
|
|
590
|
+
|
|
591
|
+
// Home
|
|
592
|
+
card = { label: 'Home' };
|
|
593
|
+
card = lodash.merge(card, deviceValue.ids[discovery.ids.CommandId].object.native?.card);
|
|
594
|
+
preLabel = card.preLabel ?? '';
|
|
595
|
+
label = '';
|
|
596
|
+
if (card.name) {
|
|
597
|
+
label = card.name;
|
|
598
|
+
} else if (card.label) {
|
|
599
|
+
label = card.label;
|
|
600
|
+
} else {
|
|
601
|
+
label = deviceValue.ids[discovery.ids.CommandId].object._id.substring(
|
|
602
|
+
deviceValue.ids[discovery.ids.CommandId].object._id.lastIndexOf('.') + 1,
|
|
603
|
+
);
|
|
604
|
+
}
|
|
605
|
+
desiredTopic = discovery.payload.dock_command_topic;
|
|
606
|
+
buttonValue = deviceValue.SubscribedTopics[desiredTopic].messageAssign.dock.val;
|
|
607
|
+
res.customInfo.schema.items[`${discovery.ids.CommandId}_CommandId_Home`] = {
|
|
608
|
+
type: 'state',
|
|
609
|
+
// The full state ID including namespace (foreign = true means it's an absolute ID).
|
|
610
|
+
oid: discovery.ids.CommandId,
|
|
611
|
+
foreign: true,
|
|
612
|
+
// Render as an interactive switch control.
|
|
613
|
+
control: 'button',
|
|
614
|
+
// Style the text based on the boolean value.
|
|
615
|
+
label: preLabel + label,
|
|
616
|
+
buttonValue: buttonValue,
|
|
617
|
+
};
|
|
618
|
+
}
|
|
619
|
+
if (discovery.ids.StartId) {
|
|
620
|
+
this.adapter.log[this.adapter.logtypes.listDevices]?.(
|
|
621
|
+
`Start building LawnMower start for Id: ${discovery.ids.StartId}`,
|
|
622
|
+
);
|
|
623
|
+
usedId[discovery.ids.StartId] = true;
|
|
624
|
+
// Start
|
|
625
|
+
card = { label: 'Start' };
|
|
626
|
+
card = lodash.merge(card, deviceValue.ids[discovery.ids.StartId].object.native?.card);
|
|
627
|
+
let preLabel = card.preLabel ?? '';
|
|
628
|
+
let label = '';
|
|
629
|
+
if (card.name) {
|
|
630
|
+
label = card.name;
|
|
631
|
+
} else if (card.label) {
|
|
632
|
+
label = card.label;
|
|
633
|
+
} else {
|
|
634
|
+
label = deviceValue.ids[discovery.ids.StartId].object._id.substring(
|
|
635
|
+
deviceValue.ids[discovery.ids.StartId].object._id.lastIndexOf('.') + 1,
|
|
636
|
+
);
|
|
637
|
+
}
|
|
638
|
+
res.customInfo.schema.items[`${discovery.ids.StartId}_StartId`] = {
|
|
639
|
+
type: 'state',
|
|
640
|
+
// The full state ID including namespace (foreign = true means it's an absolute ID).
|
|
641
|
+
oid: discovery.ids.StartId,
|
|
642
|
+
foreign: true,
|
|
643
|
+
// Render as an interactive switch control.
|
|
644
|
+
control: 'button',
|
|
645
|
+
// Style the text based on the boolean value.
|
|
646
|
+
label: preLabel + label,
|
|
647
|
+
};
|
|
648
|
+
}
|
|
649
|
+
if (discovery.ids.StopId) {
|
|
650
|
+
this.adapter.log[this.adapter.logtypes.listDevices]?.(
|
|
651
|
+
`Start building LawnMower stop for Id: ${discovery.ids.StopId}`,
|
|
652
|
+
);
|
|
653
|
+
usedId[discovery.ids.StopId] = true;
|
|
654
|
+
// Start
|
|
655
|
+
card = { label: 'Stop' };
|
|
656
|
+
card = lodash.merge(card, deviceValue.ids[discovery.ids.StopId].object.native?.card);
|
|
657
|
+
let preLabel = card.preLabel ?? '';
|
|
658
|
+
let label = '';
|
|
659
|
+
if (card.name) {
|
|
660
|
+
label = card.name;
|
|
661
|
+
} else if (card.label) {
|
|
662
|
+
label = card.label;
|
|
663
|
+
} else {
|
|
664
|
+
label = deviceValue.ids[discovery.ids.StopId].object._id.substring(
|
|
665
|
+
deviceValue.ids[discovery.ids.StopId].object._id.lastIndexOf('.') + 1,
|
|
666
|
+
);
|
|
667
|
+
}
|
|
668
|
+
res.customInfo.schema.items[`${discovery.ids.StopId}_StopId`] = {
|
|
669
|
+
type: 'state',
|
|
670
|
+
// The full state ID including namespace (foreign = true means it's an absolute ID).
|
|
671
|
+
oid: discovery.ids.StopId,
|
|
672
|
+
foreign: true,
|
|
673
|
+
// Render as an interactive switch control.
|
|
674
|
+
control: 'button',
|
|
675
|
+
// Style the text based on the boolean value.
|
|
676
|
+
label: preLabel + label,
|
|
677
|
+
};
|
|
678
|
+
}
|
|
679
|
+
if (discovery.ids.HomeId) {
|
|
680
|
+
this.adapter.log[this.adapter.logtypes.listDevices]?.(
|
|
681
|
+
`Start building LawnMower Home for Id: ${discovery.ids.HomeId}`,
|
|
682
|
+
);
|
|
683
|
+
usedId[discovery.ids.HomeId] = true;
|
|
684
|
+
// Start
|
|
685
|
+
card = { label: 'Home' };
|
|
686
|
+
card = lodash.merge(card, deviceValue.ids[discovery.ids.HomeId].object.native?.card);
|
|
687
|
+
let preLabel = card.preLabel ?? '';
|
|
688
|
+
let label = '';
|
|
689
|
+
if (card.name) {
|
|
690
|
+
label = card.name;
|
|
691
|
+
} else if (card.label) {
|
|
692
|
+
label = card.label;
|
|
693
|
+
} else {
|
|
694
|
+
label = deviceValue.ids[discovery.ids.HomeId].object._id.substring(
|
|
695
|
+
deviceValue.ids[discovery.ids.HomeId].object._id.lastIndexOf('.') + 1,
|
|
696
|
+
);
|
|
697
|
+
}
|
|
698
|
+
res.customInfo.schema.items[`${discovery.ids.HomeId}_HomeId`] = {
|
|
699
|
+
type: 'state',
|
|
700
|
+
// The full state ID including namespace (foreign = true means it's an absolute ID).
|
|
701
|
+
oid: discovery.ids.HomeId,
|
|
702
|
+
foreign: true,
|
|
703
|
+
// Render as an interactive switch control.
|
|
704
|
+
control: 'button',
|
|
705
|
+
// Style the text based on the boolean value.
|
|
706
|
+
label: preLabel + label,
|
|
707
|
+
};
|
|
708
|
+
}
|
|
709
|
+
if (discovery.ids.StateId) {
|
|
710
|
+
this.adapter.log[this.adapter.logtypes.listDevices]?.(
|
|
711
|
+
`Start building LawnMower state for Id: ${discovery.ids.CommandId}`,
|
|
712
|
+
);
|
|
713
|
+
usedId[discovery.ids.StateId] = true;
|
|
714
|
+
card = { label: 'State' };
|
|
715
|
+
card = lodash.merge(card, deviceValue.ids[discovery.ids.StateId].object.native?.card);
|
|
716
|
+
let preLabel = card.preLabel ?? '';
|
|
717
|
+
let label = '';
|
|
718
|
+
if (card.name) {
|
|
719
|
+
label = card.name;
|
|
720
|
+
} else if (card.label) {
|
|
721
|
+
label = card.label;
|
|
722
|
+
} else {
|
|
723
|
+
label = deviceValue.ids[discovery.ids.StateId].object._id.substring(
|
|
724
|
+
deviceValue.ids[discovery.ids.StateId].object._id.lastIndexOf('.') + 1,
|
|
725
|
+
);
|
|
726
|
+
}
|
|
727
|
+
res.customInfo.schema.items[`${discovery.ids.StateId}_StateId`] = {
|
|
728
|
+
type: 'state',
|
|
729
|
+
// The full state ID including namespace (foreign = true means it's an absolute ID).
|
|
730
|
+
oid: discovery.ids.StateId,
|
|
731
|
+
foreign: true,
|
|
732
|
+
// Render as an interactive switch control.
|
|
733
|
+
control: 'text',
|
|
734
|
+
// Style the text based on the boolean value.
|
|
735
|
+
label: preLabel + label,
|
|
736
|
+
};
|
|
737
|
+
}
|
|
738
|
+
if (discovery.ids.MowingStateId) {
|
|
739
|
+
this.adapter.log[this.adapter.logtypes.listDevices]?.(
|
|
740
|
+
`Start building LawnMower start for Id: ${discovery.ids.MowingStateId}`,
|
|
741
|
+
);
|
|
742
|
+
usedId[discovery.ids.MowingStateId] = true;
|
|
743
|
+
// Start
|
|
744
|
+
card = { label: 'Start' };
|
|
745
|
+
card = lodash.merge(card, deviceValue.ids[discovery.ids.MowingStateId].object.native?.card);
|
|
746
|
+
let preLabel = card.preLabel ?? '';
|
|
747
|
+
let label = '';
|
|
748
|
+
if (card.name) {
|
|
749
|
+
label = card.name;
|
|
750
|
+
} else if (card.label) {
|
|
751
|
+
label = card.label;
|
|
752
|
+
} else {
|
|
753
|
+
label = deviceValue.ids[discovery.ids.MowingStateId].object._id.substring(
|
|
754
|
+
deviceValue.ids[discovery.ids.MowingStateId].object._id.lastIndexOf('.') + 1,
|
|
755
|
+
);
|
|
756
|
+
}
|
|
757
|
+
res.customInfo.schema.items[`${discovery.ids.MowingStateId}_MowingStateId`] = {
|
|
758
|
+
type: 'state',
|
|
759
|
+
// The full state ID including namespace (foreign = true means it's an absolute ID).
|
|
760
|
+
oid: discovery.ids.MowingStateId,
|
|
761
|
+
foreign: true,
|
|
762
|
+
// Render as an interactive switch control.
|
|
763
|
+
control: 'button',
|
|
764
|
+
// Style the text based on the boolean value.
|
|
765
|
+
label: preLabel + label,
|
|
766
|
+
};
|
|
767
|
+
}
|
|
768
|
+
if (discovery.ids.PauseStateId) {
|
|
769
|
+
this.adapter.log[this.adapter.logtypes.listDevices]?.(
|
|
770
|
+
`Start building LawnMower stop for Id: ${discovery.ids.PauseStateId}`,
|
|
771
|
+
);
|
|
772
|
+
usedId[discovery.ids.PauseStateId] = true;
|
|
773
|
+
// Start
|
|
774
|
+
card = { label: 'Stop' };
|
|
775
|
+
card = lodash.merge(card, deviceValue.ids[discovery.ids.PauseStateId].object.native?.card);
|
|
776
|
+
let preLabel = card.preLabel ?? '';
|
|
777
|
+
let label = '';
|
|
778
|
+
if (card.name) {
|
|
779
|
+
label = card.name;
|
|
780
|
+
} else if (card.label) {
|
|
781
|
+
label = card.label;
|
|
782
|
+
} else {
|
|
783
|
+
label = deviceValue.ids[discovery.ids.PauseStateId].object._id.substring(
|
|
784
|
+
deviceValue.ids[discovery.ids.PauseStateId].object._id.lastIndexOf('.') + 1,
|
|
785
|
+
);
|
|
786
|
+
}
|
|
787
|
+
res.customInfo.schema.items[`${discovery.ids.PauseStateId}_PauseStateId`] = {
|
|
788
|
+
type: 'state',
|
|
789
|
+
// The full state ID including namespace (foreign = true means it's an absolute ID).
|
|
790
|
+
oid: discovery.ids.PauseStateId,
|
|
791
|
+
foreign: true,
|
|
792
|
+
// Render as an interactive switch control.
|
|
793
|
+
control: 'button',
|
|
794
|
+
// Style the text based on the boolean value.
|
|
795
|
+
label: preLabel + label,
|
|
796
|
+
};
|
|
797
|
+
}
|
|
798
|
+
if (discovery.ids.HomeStateId) {
|
|
799
|
+
this.adapter.log[this.adapter.logtypes.listDevices]?.(
|
|
800
|
+
`Start building LawnMower Home for Id: ${discovery.ids.HomeStateId}`,
|
|
801
|
+
);
|
|
802
|
+
usedId[discovery.ids.HomeStateId] = true;
|
|
803
|
+
// Start
|
|
804
|
+
card = { label: 'Home' };
|
|
805
|
+
card = lodash.merge(card, deviceValue.ids[discovery.ids.HomeStateId].object.native?.card);
|
|
806
|
+
let preLabel = card.preLabel ?? '';
|
|
807
|
+
let label = '';
|
|
808
|
+
if (card.name) {
|
|
809
|
+
label = card.name;
|
|
810
|
+
} else if (card.label) {
|
|
811
|
+
label = card.label;
|
|
812
|
+
} else {
|
|
813
|
+
label = deviceValue.ids[discovery.ids.HomeStateId].object._id.substring(
|
|
814
|
+
deviceValue.ids[discovery.ids.HomeStateId].object._id.lastIndexOf('.') + 1,
|
|
815
|
+
);
|
|
816
|
+
}
|
|
817
|
+
res.customInfo.schema.items[`${discovery.ids.HomeStateId}_HomeStateId`] = {
|
|
818
|
+
type: 'state',
|
|
819
|
+
// The full state ID including namespace (foreign = true means it's an absolute ID).
|
|
820
|
+
oid: discovery.ids.HomeStateId,
|
|
821
|
+
foreign: true,
|
|
822
|
+
// Render as an interactive switch control.
|
|
823
|
+
control: 'button',
|
|
824
|
+
// Style the text based on the boolean value.
|
|
825
|
+
label: preLabel + label,
|
|
826
|
+
};
|
|
827
|
+
}
|
|
828
|
+
break;
|
|
829
|
+
}
|
|
830
|
+
}
|
|
831
|
+
}
|
|
832
|
+
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
833
|
+
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
834
|
+
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
526
835
|
if (deviceValue.entityType.light) {
|
|
527
836
|
for (const discovery of deviceValue.discovery) {
|
|
528
837
|
if (discovery.topic.startsWith('homeassistant/light/')) {
|