iobroker.lorawan 1.20.15 → 1.20.17

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 CHANGED
@@ -23,6 +23,12 @@ For now there is documentation in English here: https://wiki.hafenmeister.de
23
23
  Placeholder for the next version (at the beginning of the line):
24
24
  ### **WORK IN PROGRESS**
25
25
  -->
26
+ ### 1.20.17 (2026-01-27)
27
+ * (BenAhrdt) implement Device details
28
+
29
+ ### 1.20.16 (2026-01-27)
30
+ * (BenAhrdt) add informations to device Manager
31
+
26
32
  ### 1.20.15 (2026-01-26)
27
33
  * (BenAhrdt) sort output for informations
28
34
 
@@ -97,6 +97,7 @@
97
97
  "HumidifierTargetText": "Zielfeuchtigkeit",
98
98
  "HumidifierTooltip": "Luftbefeuchter / Luftentfeuchter",
99
99
  "Info of this device": "Geräteinformationen",
100
+ "LastUplink": "Letzter Uplink:",
100
101
  "LightBrightness": "Helligkeit",
101
102
  "LightBrightnessText": "Helligkeits-ID",
102
103
  "LightBrightnessTooltip": "Aktivieren, um die Helligkeits-ID festzulegen",
@@ -117,6 +118,7 @@
117
118
  "LoRaWAN Network Service is disconnected": "Der Lorawan Netzwerkdienst ist getrennt",
118
119
  "LoRaWAN device is back online": "Folgendes Lorawan Gerät ist wieder online",
119
120
  "LoRaWAN device is offline": "Folgendes Lorawan Gerät ist offline",
121
+ "LoRaWAN devices": "LoRaWAN-Geräte",
120
122
  "LockHeader": "Definieren Sie Zustände für eine Lock-Entität",
121
123
  "LockInformation": "Hier können Sie ein Array von Lockdefinitionen definieren",
122
124
  "LockLockText": "Verriegeln Id",
@@ -195,6 +197,7 @@
195
197
  "customJsonTooltip": "Fügen Sie ein Objekt hinzu, welches in common.custom geschrieben wird.",
196
198
  "decimalPlaces": "Nachkommastellen",
197
199
  "decimalPlacesTooltip": "Wählen Sie die gewünschte Anzahl an Nachkommastellen aus, die als Downlink gesendet werden",
200
+ "detectedRoles": "Erkannte Rollen",
198
201
  "device online offline": "Gerätezustandsmeldungen",
199
202
  "deviceEUI": "Geräte EUI",
200
203
  "deviceId": "Geräte Id",
@@ -211,10 +214,12 @@
211
214
  "expertSettings": "Experten-Einstellungen",
212
215
  "front": "Führend",
213
216
  "frontTooltip": "Geben Sie den führenden Wert ein, der mit dem downlink gesendet werden soll. (Die Eingabe erfolgt in hex - außer beim Typ Zeichenkette)",
217
+ "generalInformations": "allgemeine Informationen",
214
218
  "ipUrl": "URL oder IP des Servers",
215
219
  "ipUrlTooltip": "Geben Sie die IP-Adresse oder die URL ein, zu der Sie eine Verbindung herstellen möchten",
216
220
  "keepalive": "keepalive",
217
221
  "keepaliveTooltip": "Geben Sie die Zeit in Sekunden für die Keepalive-Funktion ein",
222
+ "lastJoined": "Letzter Join:",
218
223
  "lengthInByte": "Statelänge (Byte)",
219
224
  "lengthInByteTooltip": "Geben Sie die Länge des States in Bytes an",
220
225
  "limitMax": "Maximum begrenzen",
@@ -278,5 +278,10 @@
278
278
  "Config this device": "Config this device",
279
279
  "Info of this device": "Info of this device",
280
280
  "Enter new name": "Enter new name",
281
- "Enter new devicetype": "Enter new devicetype"
281
+ "Enter new devicetype": "Enter new devicetype",
282
+ "detectedRoles": "detected roles",
283
+ "LoRaWAN devices": "LoRaWAN devices",
284
+ "LastUplink": "Last Uplink:",
285
+ "generalInformations": "general informations",
286
+ "lastJoined": "last join:"
282
287
  }
@@ -97,6 +97,7 @@
97
97
  "HumidifierTargetText": "Humedad objetivo",
98
98
  "HumidifierTooltip": "humidificador / deshumidificador",
99
99
  "Info of this device": "Información de este dispositivo",
100
+ "LastUplink": "Último enlace ascendente:",
100
101
  "LightBrightness": "Brillo",
101
102
  "LightBrightnessText": "Identificación de brillo",
102
103
  "LightBrightnessTooltip": "habilitar para configurar la identificación del brillo",
@@ -117,6 +118,7 @@
117
118
  "LoRaWAN Network Service is disconnected": "El servicio de red LoRaWAN está desconectado",
118
119
  "LoRaWAN device is back online": "El siguiente dispositivo LoRaWAN vuelve a estar en línea",
119
120
  "LoRaWAN device is offline": "El siguiente dispositivo LoRaWAN está fuera de línea",
121
+ "LoRaWAN devices": "Dispositivos LoRaWAN",
120
122
  "LockHeader": "Definir estados para una entidad de bloqueo",
121
123
  "LockInformation": "Aquí puede definir una serie de definiciones de bloqueo.",
122
124
  "LockLockText": "ID de bloqueo",
@@ -195,6 +197,7 @@
195
197
  "customJsonTooltip": "Fügen Sie ein Objekt hinzu, welches in common.custom geschrieben wird.",
196
198
  "decimalPlaces": "decimales",
197
199
  "decimalPlacesTooltip": "seleccione el número deseado de decimales",
200
+ "detectedRoles": "roles detectados",
198
201
  "device online offline": "notificaciones de estado del dispositivo",
199
202
  "deviceEUI": "IUE del dispositivo",
200
203
  "deviceId": "Identificación del dispositivo",
@@ -211,10 +214,12 @@
211
214
  "expertSettings": "Configuración de expertos",
212
215
  "front": "valor frontal",
213
216
  "frontTooltip": "inserte el valor frontal, que se establecerá en el enlace descendente (el valor debe estar en hexadecimal, excepto el tipo de cadena)",
217
+ "generalInformations": "información general",
214
218
  "ipUrl": "url o ip del servidor",
215
219
  "ipUrlTooltip": "ingrese la dirección IP o la URL a la que desea conectarse",
216
220
  "keepalive": "mantener vivo",
217
221
  "keepaliveTooltip": "ingrese el tiempo en segundos para la función keepalive",
222
+ "lastJoined": "último unido",
218
223
  "lengthInByte": "longitud del estado (byte)",
219
224
  "lengthInByteTooltip": "insertar la longitud del estado en bytes",
220
225
  "limitMax": "límite máx.",
@@ -97,6 +97,7 @@
97
97
  "HumidifierTargetText": "Humidité cible",
98
98
  "HumidifierTooltip": "humidificateur / déshumidificateur",
99
99
  "Info of this device": "Informations sur cet appareil",
100
+ "LastUplink": "Dernière liaison montante :",
100
101
  "LightBrightness": "Luminosité",
101
102
  "LightBrightnessText": "Identifiant de luminosité",
102
103
  "LightBrightnessTooltip": "activer pour définir l'identifiant de luminosité",
@@ -117,6 +118,7 @@
117
118
  "LoRaWAN Network Service is disconnected": "Le service réseau LoRaWAN est déconnecté",
118
119
  "LoRaWAN device is back online": "L'appareil LoRaWAN suivant est de nouveau en ligne",
119
120
  "LoRaWAN device is offline": "L'appareil LoRaWAN suivant est hors ligne",
121
+ "LoRaWAN devices": "Appareils LoRaWAN",
120
122
  "LockHeader": "Définir les états d'une entité de verrouillage",
121
123
  "LockInformation": "Ici, vous pouvez définir un tableau de définitions de verrouillage",
122
124
  "LockLockText": "ID de verrouillage",
@@ -195,6 +197,7 @@
195
197
  "customJsonTooltip": "Fügen Sie un Objekt hinzu, welches in common.custom geschrieben wird.",
196
198
  "decimalPlaces": "décimales",
197
199
  "decimalPlacesTooltip": "sélectionnez le nombre de décimales souhaité",
200
+ "detectedRoles": "rôles détectés",
198
201
  "device online offline": "notifications d'état de l'appareil",
199
202
  "deviceEUI": "Interface utilisateur de l'appareil",
200
203
  "deviceId": "Identifiant de l'appareil",
@@ -211,10 +214,12 @@
211
214
  "expertSettings": "Paramètres experts",
212
215
  "front": "valeur avant",
213
216
  "frontTooltip": "insérez la valeur frontale, qui sera définie sur la liaison descendante (la valeur doit être en hexadécimal - sauf la chaîne de type)",
217
+ "generalInformations": "informations générales",
214
218
  "ipUrl": "URL ou IP du serveur",
215
219
  "ipUrlTooltip": "saisissez l'adresse IP ou l'URL à laquelle vous souhaitez vous connecter",
216
220
  "keepalive": "rester en vie",
217
221
  "keepaliveTooltip": "entrez le temps en secondes pour la fonction keepalive",
222
+ "lastJoined": "dernier rejoint",
218
223
  "lengthInByte": "longueur de l'état (octet)",
219
224
  "lengthInByteTooltip": "insérer la longueur de l'état en octets",
220
225
  "limitMax": "limite max.",
@@ -97,6 +97,7 @@
97
97
  "HumidifierTargetText": "Umidità target",
98
98
  "HumidifierTooltip": "umidificatore/deumidificatore",
99
99
  "Info of this device": "Informazioni su questo dispositivo",
100
+ "LastUplink": "Ultimo collegamento:",
100
101
  "LightBrightness": "Luminosità",
101
102
  "LightBrightnessText": "ID luminosità",
102
103
  "LightBrightnessTooltip": "abilitare per impostare l'ID luminosità",
@@ -117,6 +118,7 @@
117
118
  "LoRaWAN Network Service is disconnected": "Il servizio di rete LoRaWAN è disconnesso",
118
119
  "LoRaWAN device is back online": "Il seguente dispositivo LoRaWAN è di nuovo online",
119
120
  "LoRaWAN device is offline": "Il seguente dispositivo LoRaWAN è offline",
121
+ "LoRaWAN devices": "Dispositivi LoRaWAN",
120
122
  "LockHeader": "Definire gli stati per un'entità di blocco",
121
123
  "LockInformation": "Qui puoi definire un array di definizioni di Lock",
122
124
  "LockLockText": "Blocca l'ID",
@@ -195,6 +197,7 @@
195
197
  "customJsonTooltip": "Fügen Sie ein Objekt hinzu, welches in common.custom geschrieben wird.",
196
198
  "decimalPlaces": "cifre decimali",
197
199
  "decimalPlacesTooltip": "selezionare il numero desiderato di cifre decimali",
200
+ "detectedRoles": "ruoli rilevati",
198
201
  "device online offline": "notifiche sullo stato del dispositivo",
199
202
  "deviceEUI": "IUE del dispositivo",
200
203
  "deviceId": "ID dispositivo",
@@ -211,10 +214,12 @@
211
214
  "expertSettings": "Impostazioni avanzate",
212
215
  "front": "valore frontale",
213
216
  "frontTooltip": "inserisci il valore iniziale, che verrà impostato sul downlink (il valore deve essere in formato esadecimale - eccetto la stringa di tipo)",
217
+ "generalInformations": "informazioni generali",
214
218
  "ipUrl": "url o ip del server",
215
219
  "ipUrlTooltip": "inserisci l'indirizzo IP o l'URL a cui desideri connetterti",
216
220
  "keepalive": "keepalive",
217
221
  "keepaliveTooltip": "inserire il tempo in secondi per la funzione keepalive",
222
+ "lastJoined": "ultimo unito",
218
223
  "lengthInByte": "lunghezza dello stato (byte)",
219
224
  "lengthInByteTooltip": "inserire la lunghezza dello stato in byte",
220
225
  "limitMax": "limite massimo",
@@ -97,6 +97,7 @@
97
97
  "HumidifierTargetText": "Doelvochtigheid",
98
98
  "HumidifierTooltip": "luchtbevochtiger/ontvochtiger",
99
99
  "Info of this device": "Informatie over dit apparaat",
100
+ "LastUplink": "Laatste uplink:",
100
101
  "LightBrightness": "Helderheid",
101
102
  "LightBrightnessText": "Helderheid ID",
102
103
  "LightBrightnessTooltip": "inschakelen om helderheids-id in te stellen",
@@ -117,6 +118,7 @@
117
118
  "LoRaWAN Network Service is disconnected": "LoRaWAN-netwerkservice is verbroken",
118
119
  "LoRaWAN device is back online": "Het volgende LoRaWAN-apparaat is weer online",
119
120
  "LoRaWAN device is offline": "Het volgende LoRaWAN-apparaat is offline",
121
+ "LoRaWAN devices": "LoRaWAN-apparaten",
120
122
  "LockHeader": "Definieer statussen voor een vergrendelingsentiteit",
121
123
  "LockInformation": "Hier kunt u een reeks slotdefinities definiëren",
122
124
  "LockLockText": "Vergrendel-ID",
@@ -195,6 +197,7 @@
195
197
  "customJsonTooltip": "Als u een voorwerp zoekt, hebben we gemeenschappelijke kenmerken.",
196
198
  "decimalPlaces": "decimalen",
197
199
  "decimalPlacesTooltip": "selecteer het gewenste aantal decimalen",
200
+ "detectedRoles": "gedetecteerde rollen",
198
201
  "device online offline": "meldingen over de apparaatstatus",
199
202
  "deviceEUI": "Apparaat-EUI",
200
203
  "deviceId": "Apparaat-ID",
@@ -211,10 +214,12 @@
211
214
  "expertSettings": "Expert-instellingen",
212
215
  "front": "frontwaarde",
213
216
  "frontTooltip": "voer de front-waarde in, die wordt ingesteld op de downlink (waarde moet in hex zijn - behalve type string)",
217
+ "generalInformations": "algemene informatie",
214
218
  "ipUrl": "url of ip van de server",
215
219
  "ipUrlTooltip": "voer het ip-adres in, of de url waarmee u verbinding wilt maken",
216
220
  "keepalive": "in leven houden",
217
221
  "keepaliveTooltip": "voer de tijd in seconden in voor de keepalive-functie",
222
+ "lastJoined": "laatst lid geworden",
218
223
  "lengthInByte": "lengte van staat (byte)",
219
224
  "lengthInByteTooltip": "voer de lengte van de status in bytes in",
220
225
  "limitMax": "limiet max.",
@@ -97,6 +97,7 @@
97
97
  "HumidifierTargetText": "Docelowa wilgotność",
98
98
  "HumidifierTooltip": "nawilżacz / osuszacz",
99
99
  "Info of this device": "Informacje o tym urządzeniu",
100
+ "LastUplink": "Ostatnie łącze:",
100
101
  "LightBrightness": "Jasność",
101
102
  "LightBrightnessText": "Identyfikator jasności",
102
103
  "LightBrightnessTooltip": "włącz ustawienie identyfikatora jasności",
@@ -117,6 +118,7 @@
117
118
  "LoRaWAN Network Service is disconnected": "Usługa sieciowa LoRaWAN jest rozłączona",
118
119
  "LoRaWAN device is back online": "Następujące urządzenie LoRaWAN jest ponownie online",
119
120
  "LoRaWAN device is offline": "Następujące urządzenie LoRaWAN jest w trybie offline",
121
+ "LoRaWAN devices": "Urządzenia LoRaWAN",
120
122
  "LockHeader": "Zdefiniuj stany dla elementu blokady",
121
123
  "LockInformation": "Tutaj możesz zdefiniować tablicę definicji blokad",
122
124
  "LockLockText": "Zablokuj identyfikator",
@@ -195,6 +197,7 @@
195
197
  "customJsonTooltip": "Fügen Sie ein Objekt hinzu, welches in common.custom geschrieben wird.",
196
198
  "decimalPlaces": "miejsca dziesiętne",
197
199
  "decimalPlacesTooltip": "wybierz żądaną liczbę miejsc po przecinku",
200
+ "detectedRoles": "wykryte role",
198
201
  "device online offline": "powiadomienia o stanie urządzenia",
199
202
  "deviceEUI": "EUI urządzenia",
200
203
  "deviceId": "Identyfikator urządzenia",
@@ -211,10 +214,12 @@
211
214
  "expertSettings": "Ustawienia eksperckie",
212
215
  "front": "wartość przednia",
213
216
  "frontTooltip": "wstaw wartość przednią, która zostanie ustawiona na łącze w dół (wartość musi być w formacie szesnastkowym – z wyjątkiem typu string)",
217
+ "generalInformations": "informacje ogólne",
214
218
  "ipUrl": "url lub ip serwera",
215
219
  "ipUrlTooltip": "wprowadź adres IP lub adres URL, z którym chcesz się połączyć",
216
220
  "keepalive": "podtrzymać",
217
221
  "keepaliveTooltip": "wprowadź czas w sekundach dla funkcji utrzymywania aktywności",
222
+ "lastJoined": "dołączył jako ostatni",
218
223
  "lengthInByte": "długość stanu (bajt)",
219
224
  "lengthInByteTooltip": "wstaw długość stanu w bajtach",
220
225
  "limitMax": "ograniczenie maks.",
@@ -97,6 +97,7 @@
97
97
  "HumidifierTargetText": "Umidade alvo",
98
98
  "HumidifierTooltip": "umidificador / desumidificador",
99
99
  "Info of this device": "Informações deste dispositivo",
100
+ "LastUplink": "Último Uplink:",
100
101
  "LightBrightness": "Brilho",
101
102
  "LightBrightnessText": "ID de brilho",
102
103
  "LightBrightnessTooltip": "ativar para definir o ID de brilho",
@@ -117,6 +118,7 @@
117
118
  "LoRaWAN Network Service is disconnected": "O serviço de rede LoRaWAN está desconectado",
118
119
  "LoRaWAN device is back online": "O seguinte dispositivo LoRaWAN está online novamente",
119
120
  "LoRaWAN device is offline": "O seguinte dispositivo LoRaWAN está offline",
121
+ "LoRaWAN devices": "Dispositivos LoRaWAN",
120
122
  "LockHeader": "Definir estados para uma entidade de bloqueio",
121
123
  "LockInformation": "Aqui você pode definir uma série de definições de bloqueio",
122
124
  "LockLockText": "ID de bloqueio",
@@ -195,6 +197,7 @@
195
197
  "customJsonTooltip": "Certifique-se de ter um objeto importante, que será escrito em comum.custom.",
196
198
  "decimalPlaces": "casas decimais",
197
199
  "decimalPlacesTooltip": "selecione o número desejado de casas decimais",
200
+ "detectedRoles": "funções detectadas",
198
201
  "device online offline": "notificações de estado do dispositivo",
199
202
  "deviceEUI": "EUI do dispositivo",
200
203
  "deviceId": "ID do dispositivo",
@@ -211,10 +214,12 @@
211
214
  "expertSettings": "Configurações de especialistas",
212
215
  "front": "valor frontal",
213
216
  "frontTooltip": "insira o valor frontal, que será definido para o downlink (o valor deve estar em hexadecimal - exceto tipo string)",
217
+ "generalInformations": "informações gerais",
214
218
  "ipUrl": "url ou ip do servidor",
215
219
  "ipUrlTooltip": "insira o endereço IP ou o URL ao qual deseja se conectar",
216
220
  "keepalive": "manutenção de atividade",
217
221
  "keepaliveTooltip": "insira o tempo em segundos para a função keepalive",
222
+ "lastJoined": "última adesão",
218
223
  "lengthInByte": "comprimento do estado (byte)",
219
224
  "lengthInByteTooltip": "insira o comprimento do estado em bytes",
220
225
  "limitMax": "limite máx.",
@@ -97,6 +97,7 @@
97
97
  "HumidifierTargetText": "Целевая влажность",
98
98
  "HumidifierTooltip": "увлажнитель / осушитель",
99
99
  "Info of this device": "Информация об этом устройстве",
100
+ "LastUplink": "Последний восходящий канал:",
100
101
  "LightBrightness": "Яркость",
101
102
  "LightBrightnessText": "Идентификатор яркости",
102
103
  "LightBrightnessTooltip": "включить установку идентификатора яркости",
@@ -117,6 +118,7 @@
117
118
  "LoRaWAN Network Service is disconnected": "Сетевая служба LoRaWAN отключена",
118
119
  "LoRaWAN device is back online": "Следующее устройство LoRaWAN снова подключено к сети",
119
120
  "LoRaWAN device is offline": "Следующее устройство LoRaWAN не в сети",
121
+ "LoRaWAN devices": "устройства LoRaWAN",
120
122
  "LockHeader": "Определите состояния для объекта блокировки",
121
123
  "LockInformation": "Здесь вы можете определить массив определений блокировки.",
122
124
  "LockLockText": "Идентификатор блокировки",
@@ -195,6 +197,7 @@
195
197
  "customJsonTooltip": "Fügen Sie ein Objekthinzu, welches in common.custom Geschrieben Wird.",
196
198
  "decimalPlaces": "десятичные знаки",
197
199
  "decimalPlacesTooltip": "выберите желаемое количество десятичных знаков",
200
+ "detectedRoles": "обнаруженные роли",
198
201
  "device online offline": "уведомления о состоянии устройства",
199
202
  "deviceEUI": "Интерфейс пользовательского интерфейса устройства",
200
203
  "deviceId": "Идентификатор устройства",
@@ -211,10 +214,12 @@
211
214
  "expertSettings": "Эксперт-Настройки",
212
215
  "front": "первоначальная стоимость",
213
216
  "frontTooltip": "вставьте переднее значение, которое будет установлено для нисходящей линии связи (значение должно быть в шестнадцатеричном формате, кроме строки типа)",
217
+ "generalInformations": "общая информация",
214
218
  "ipUrl": "URL или IP сервера",
215
219
  "ipUrlTooltip": "введите IP-адрес или URL-адрес, к которому вы хотите подключиться",
216
220
  "keepalive": "поддерживать активность",
217
221
  "keepaliveTooltip": "введите время в секундах для функции поддержки активности",
222
+ "lastJoined": "последний раз присоединился",
218
223
  "lengthInByte": "длина состояния (байт)",
219
224
  "lengthInByteTooltip": "вставьте длину состояния в байтах",
220
225
  "limitMax": "предел макс.",
@@ -97,6 +97,7 @@
97
97
  "HumidifierTargetText": "Цільова вологість",
98
98
  "HumidifierTooltip": "зволожувач / осушувач повітря",
99
99
  "Info of this device": "Інформація про цей пристрій",
100
+ "LastUplink": "Остання вихідна лінія:",
100
101
  "LightBrightness": "Яскравість",
101
102
  "LightBrightnessText": "Ідентифікатор яскравості",
102
103
  "LightBrightnessTooltip": "дозволити встановити ідентифікатор яскравості",
@@ -117,6 +118,7 @@
117
118
  "LoRaWAN Network Service is disconnected": "Службу мережі LoRaWAN відключено",
118
119
  "LoRaWAN device is back online": "Наступний пристрій LoRaWAN знову в мережі",
119
120
  "LoRaWAN device is offline": "Наступний пристрій LoRaWAN офлайн",
121
+ "LoRaWAN devices": "Пристрої LoRaWAN",
120
122
  "LockHeader": "Визначення станів для сутності блокування",
121
123
  "LockInformation": "Тут ви можете визначити масив визначень замків",
122
124
  "LockLockText": "ID блокування",
@@ -195,6 +197,7 @@
195
197
  "customJsonTooltip": "Fügen Sie ein Objekt hinzu, welches in common.custom geschrieben wird.",
196
198
  "decimalPlaces": "знаки після коми",
197
199
  "decimalPlacesTooltip": "виберіть потрібну кількість знаків після коми",
200
+ "detectedRoles": "виявлені ролі",
198
201
  "device online offline": "сповіщення про стан пристрою",
199
202
  "deviceEUI": "Пристрій EUI",
200
203
  "deviceId": "Ідентифікатор пристрою",
@@ -211,10 +214,12 @@
211
214
  "expertSettings": "Експерт-Налаштування",
212
215
  "front": "переднє значення",
213
216
  "frontTooltip": "вставте переднє значення, яке буде встановлено для низхідного каналу (значення має бути в шістнадцятковому форматі, крім рядка типу)",
217
+ "generalInformations": "загальні відомості",
214
218
  "ipUrl": "url або ip сервера",
215
219
  "ipUrlTooltip": "введіть ip-адресу або URL-адресу, до якої ви хочете підключитися",
216
220
  "keepalive": "keepalive",
217
221
  "keepaliveTooltip": "введіть час у секундах для функції підтримки активності",
222
+ "lastJoined": "останній приєднався",
218
223
  "lengthInByte": "довжина стану (байт)",
219
224
  "lengthInByteTooltip": "вставити довжину стану в байтах",
220
225
  "limitMax": "обмеження макс.",
@@ -97,6 +97,7 @@
97
97
  "HumidifierTargetText": "目标湿度",
98
98
  "HumidifierTooltip": "加湿器/除湿器",
99
99
  "Info of this device": "该设备的信息",
100
+ "LastUplink": "最后上行链路:",
100
101
  "LightBrightness": "亮度",
101
102
  "LightBrightnessText": "亮度 ID",
102
103
  "LightBrightnessTooltip": "启用设置亮度ID",
@@ -117,6 +118,7 @@
117
118
  "LoRaWAN Network Service is disconnected": "LoRaWAN网络服务已断开",
118
119
  "LoRaWAN device is back online": "以下 LoRaWAN 设备已重新上线",
119
120
  "LoRaWAN device is offline": "以下 LoRaWAN 设备离线",
121
+ "LoRaWAN devices": "LoRaWAN设备",
120
122
  "LockHeader": "定义锁实体的状态",
121
123
  "LockInformation": "在这里你可以定义一个Lock定义的数组",
122
124
  "LockLockText": "锁ID",
@@ -195,6 +197,7 @@
195
197
  "customJsonTooltip": "Fügen Sie ein Objekt hinzu, welches in common.custom geschrieben wrd.",
196
198
  "decimalPlaces": "小数位",
197
199
  "decimalPlacesTooltip": "选择所需的小数位数",
200
+ "detectedRoles": "检测到的角色",
198
201
  "device online offline": "设备状态通知",
199
202
  "deviceEUI": "设备用户界面",
200
203
  "deviceId": "设备 ID",
@@ -211,10 +214,12 @@
211
214
  "expertSettings": "专家设置",
212
215
  "front": "前值",
213
216
  "frontTooltip": "插入前值,该值将设置为下行链路(值必须为十六进制 - 字符串类型除外)",
217
+ "generalInformations": "一般信息",
214
218
  "ipUrl": "服务器的 url 或 ip",
215
219
  "ipUrlTooltip": "输入ip地址,或者你想要连接的url",
216
220
  "keepalive": "保活",
217
221
  "keepaliveTooltip": "输入保活功能的时间(以秒为单位)",
222
+ "lastJoined": "最后加入",
218
223
  "lengthInByte": "状态长度(字节)",
219
224
  "lengthInByteTooltip": "插入状态的长度(以字节为单位)",
220
225
  "limitMax": "限制最大值",
@@ -7,7 +7,7 @@
7
7
  "items":{
8
8
  "_deviceManager": {
9
9
  "type": "panel",
10
- "label": "Device manager",
10
+ "label": "LoRaWAN devices",
11
11
  "items": {
12
12
  "_dm": {
13
13
  "type": "deviceManager",
package/io-package.json CHANGED
@@ -1,8 +1,34 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "lorawan",
4
- "version": "1.20.15",
4
+ "version": "1.20.17",
5
5
  "news": {
6
+ "1.20.17": {
7
+ "en": "implement Device details",
8
+ "de": "durchführung Gerätedetails",
9
+ "ru": "осуществлять Детали устройства",
10
+ "pt": "implementar Detalhes do dispositivo",
11
+ "nl": "implementeren Apparaatdetails",
12
+ "fr": "mise en œuvre Détails du périphérique",
13
+ "it": "attuazione Dettagli del dispositivo",
14
+ "es": "aplicación Detalles del dispositivo",
15
+ "pl": "wdrożenie Szczegóły dotyczące urządzenia",
16
+ "uk": "реалізація Деталі пристрою",
17
+ "zh-cn": "执行 设备细节"
18
+ },
19
+ "1.20.16": {
20
+ "en": "add informations to device Manager",
21
+ "de": "informationen zum Gerätemanager hinzufügen",
22
+ "ru": "добавление информации в диспетчер устройств",
23
+ "pt": "adicionar informações ao gerenciador de dispositivos",
24
+ "nl": "informatie toevoegen aan apparaatbeheer",
25
+ "fr": "ajouter des informations au gestionnaire de périphériques",
26
+ "it": "aggiungere informazioni al gestore del dispositivo",
27
+ "es": "añadir información al administrador del dispositivo",
28
+ "pl": "dodać informacje do urządzenia Manager",
29
+ "uk": "додати інформацію в диспетчер пристроїв",
30
+ "zh-cn": "向设备管理器添加信息"
31
+ },
6
32
  "1.20.15": {
7
33
  "en": "sort output for informations",
8
34
  "de": "sortierausgabe für informationen",
@@ -16,19 +42,6 @@
16
42
  "uk": "сортування інформації",
17
43
  "zh-cn": "信息排序输出"
18
44
  },
19
- "1.20.14": {
20
- "en": "insert node",
21
- "de": "einsatzknoten",
22
- "ru": "вставной узел",
23
- "pt": "inserir o nó",
24
- "nl": "knooppunt invoegen",
25
- "fr": "insérer le noeud",
26
- "it": "inserto nodo",
27
- "es": "insertar nodos",
28
- "pl": "wstaw węzeł",
29
- "uk": "вставка вершини",
30
- "zh-cn": "插入节点"
31
- },
32
45
  "1.20.13": {
33
46
  "en": "remove nod from crypto",
34
47
  "de": "nod from crypto entfernen",
@@ -42,19 +55,6 @@
42
55
  "uk": "видалити nod з крипто",
43
56
  "zh-cn": "从加密中删除点头"
44
57
  },
45
- "1.20.12": {
46
- "en": "check for update",
47
- "de": "überprüfung der aktualisierung",
48
- "ru": "проверьте обновление",
49
- "pt": "verificar a actualização",
50
- "nl": "controleren op update",
51
- "fr": "vérifier la mise à jour",
52
- "it": "controllare per l'aggiornamento",
53
- "es": "check for update",
54
- "pl": "sprawdzanie aktualizacji",
55
- "uk": "реєстрація на оновлення",
56
- "zh-cn": "检查更新"
57
- },
58
58
  "1.20.11": {
59
59
  "en": "improve device Manager icons and Buttons",
60
60
  "de": "verbesserung der Vorrichtung Icons und Buttons verwalten",
@@ -589,7 +589,7 @@
589
589
  "name": "internal logging types",
590
590
  "read": true,
591
591
  "write": true,
592
- "def": "{\"discovery\":false, \"assign\": false, \"messageTo\": false, \"listDevices\": false, \"getStatus\": false, \"deviceinformation\": false, \"downlinkconfig\": false, \"getChangeInfo\": false}"
592
+ "def": "{\"discovery\":false, \"assign\": false, \"messageTo\": false, \"listDevices\": false, \"getStatus\": false, \"deviceinformation\": false, \"downlinkconfig\": false, \"getChangeInfo\": false, \"assign\": false, \"assignHandler\": false, \"bridgeMqtt\": false, \"mqtt\": false}"
593
593
  },
594
594
  "native": {}
595
595
  },
@@ -282,7 +282,7 @@ class bridgeClass {
282
282
  message = this.SubscribedTopics[topic].messageAssign[message];
283
283
  } else {
284
284
  this.adapter.log.warn(
285
- `Incomming Message: ${message} at topic: ${topic} can not be found in possible values.`,
285
+ `Incoming Message: ${message} at topic: ${topic} can not be found in possible values.`,
286
286
  );
287
287
  return;
288
288
  }
@@ -296,7 +296,7 @@ class bridgeClass {
296
296
  message = this.SubscribedTopics[topic].messageAssign[message];
297
297
  } else {
298
298
  this.adapter.log.warn(
299
- `Incomming Message: ${message} at topic: ${topic} can not be found in possible values.`,
299
+ `Incoming Message: ${message} at topic: ${topic} can not be found in possible values.`,
300
300
  );
301
301
  return;
302
302
  }
@@ -3119,7 +3119,7 @@ class bridgeClass {
3119
3119
  }
3120
3120
 
3121
3121
  // Assign Subscribed Topics
3122
- // Incomming set
3122
+ // Incoming set
3123
3123
  this.assignTopicStructure(
3124
3124
  this.SubscribedTopics,
3125
3125
  `${coverTopic}${this.EndingSet}`,
@@ -3545,7 +3545,7 @@ class bridgeClass {
3545
3545
  }
3546
3546
 
3547
3547
  // Assign Subscribed Topics
3548
- // Incomming set
3548
+ // Incoming set
3549
3549
  this.assignTopicStructure(
3550
3550
  this.SubscribedTopics,
3551
3551
  `${lockTopic}${this.EndingSet}`,
@@ -105,8 +105,9 @@ class bridgeMqttClientClass {
105
105
  });
106
106
 
107
107
  this.client.on('message', async (topic, message) => {
108
- this.adapter.log.debug(`incoming bridge topic: ${topic}`);
109
- this.adapter.log.debug(`incoming bridge message: ${message}`);
108
+ // Check for logging
109
+ this.adapter.log[this.adapter.logtypes.bridgeMqtt]?.(`incoming bridge topic: ${topic}`);
110
+ this.adapter.log[this.adapter.logtypes.bridgeMqtt]?.(`incoming bridge message: ${message}`);
110
111
 
111
112
  // String zuweisen, wenn JSON.parse ein Fehler auswirft.
112
113
  let payload = message.toString('utf8');
@@ -136,7 +137,10 @@ class bridgeMqttClientClass {
136
137
  * @param opt optional data
137
138
  */
138
139
  async publish(topic, message, opt) {
139
- this.adapter.log.debug(`Publishing bridge topic: ${topic} with message: ${message}.`);
140
+ // Check for logging
141
+ this.adapter.log[this.adapter.logtypes.bridgeMqtt]?.(
142
+ `Publishing bridge topic: ${topic} with message: ${message}.`,
143
+ );
140
144
 
141
145
  // Write into debug
142
146
  if (await this.adapter.objectExists('bridge.debug.outgoingTopic')) {
@@ -14,6 +14,7 @@ class LoRaWANDeviceManagement extends DeviceManagement {
14
14
  constructor(adapter) {
15
15
  super(adapter);
16
16
  this.adapter = adapter;
17
+ this.x = adapter;
17
18
  }
18
19
  /**
19
20
  * List all LoRaWAN devices
@@ -29,22 +30,10 @@ class LoRaWANDeviceManagement extends DeviceManagement {
29
30
  id: key,
30
31
  name: value.object.common.name,
31
32
  icon: await this.getIcon(value),
32
- manufacturer: value.informations
33
- ? value.informations.lastUplink
34
- ? new Date(value.informations.lastUplink.state.ts).toLocaleString('de-DE', {
35
- weekday: 'short', // Mo
36
- year: 'numeric', // 2026
37
- month: '2-digit', // 01
38
- day: '2-digit', // 24
39
- hour: '2-digit', // 14
40
- minute: '2-digit', // 32
41
- second: '2-digit', // 10
42
- })
43
- : undefined
44
- : undefined,
33
+ manufacturer: 'LoRaWAN',
45
34
  model: value.informations ? value.informations.devicetype.state.val : undefined, // - ${value.uplink.remaining.rxInfo[0].rssi.ts}`,
46
35
  status: await this.getStatus(value),
47
- hasDetails: false,
36
+ hasDetails: value.detectedRoles ? true : false,
48
37
  actions: [
49
38
  {
50
39
  id: 'rename',
@@ -100,13 +89,66 @@ class LoRaWANDeviceManagement extends DeviceManagement {
100
89
  * @param deviceValue values of device
101
90
  */
102
91
  async getIcon(deviceValue) {
92
+ const possibleIcons = {
93
+ airCondition: 'airCondition',
94
+ blind: 'blind',
95
+ blindButtons: 'blindButtons',
96
+ button: 'button',
97
+ buttonSensor: 'buttonSensor',
98
+ camera: 'camera',
99
+ chart: 'chart',
100
+ image: 'image',
101
+ dimmer: 'dimmer',
102
+ door: 'door',
103
+ fireAlarm: 'fireAlarm',
104
+ floodAlarm: 'floodAlarm',
105
+ gate: 'gate',
106
+ humidity: 'humidity',
107
+ illuminance: 'illuminance',
108
+ info: 'info',
109
+ light: 'light',
110
+ lock: 'lock',
111
+ location: 'location',
112
+ locationOne: 'locationOne',
113
+ media: 'media',
114
+ motion: 'motion',
115
+ ct: 'ct',
116
+ percentage: 'percentage',
117
+ rgb: 'rgb',
118
+ rgbSingle: 'rgbSingle',
119
+ rgbwSingle: 'rgbwSingle',
120
+ hue: 'hue',
121
+ cie: 'cie',
122
+ slider: 'slider',
123
+ socket: 'socket',
124
+ temperature: 'temperature',
125
+ thermostat: 'thermostat',
126
+ vacuumCleaner: 'vacuumCleaner',
127
+ volume: 'volume',
128
+ volumeGroup: 'volumeGroup',
129
+ window: 'window',
130
+ windowTilt: 'windowTilt',
131
+ weatherCurrent: 'weatherCurrent',
132
+ weatherForecast: 'weatherForecast',
133
+ warning: 'warning',
134
+
135
+ unknown: 'unknown',
136
+ instance: 'instance',
137
+
138
+ // Special matter types
139
+ invalid: 'invalid',
140
+ hub3: 'hub3',
141
+ node: 'node',
142
+ hub5: 'hub5',
143
+ controller: 'controller',
144
+ };
103
145
  if (deviceValue.indicators) {
104
- if (deviceValue.indicators.isThermostat) {
105
- return 'thermostat';
106
- } else if (deviceValue.indicators.isDoor) {
107
- return 'door';
108
- } else if (deviceValue.indicators.isWindow) {
109
- return 'window';
146
+ if (deviceValue.detectedRoles['level.temperature']) {
147
+ return possibleIcons.thermostat;
148
+ } else if (deviceValue.detectedRoles['sensor.door']) {
149
+ return possibleIcons.volume;
150
+ } else if (deviceValue.detectedRoles['sensor.window']) {
151
+ return possibleIcons.vacuumCleaner;
110
152
  }
111
153
  }
112
154
  return 'node'; //`/adapter/${this.adapter.name}/icons/Node.png`; //${value.object.common.icon}`,
@@ -227,6 +269,114 @@ class LoRaWANDeviceManagement extends DeviceManagement {
227
269
  );
228
270
  return { refresh: true };
229
271
  }
272
+
273
+ /**
274
+ * @param {string} id ID from device
275
+ * @returns {Promise<import('@iobroker/dm-utils').DeviceDetails>} return the right value
276
+ */
277
+ async getDeviceDetails(id) {
278
+ const generalItems = {};
279
+ const lastUplinkTs = new Date(
280
+ this.adapter.objectStore.devices[id].informations.lastUplink.state.ts,
281
+ ).toLocaleString('de-DE', {
282
+ weekday: 'long', // Mo
283
+ year: 'numeric', // 2026
284
+ month: '2-digit', // 01
285
+ day: '2-digit', // 24
286
+ hour: '2-digit', // 14
287
+ minute: '2-digit', // 32
288
+ second: '2-digit', // 10
289
+ });
290
+ generalItems['Timestamp_value'] = {
291
+ type: 'staticInfo',
292
+ label: 'LastUplink',
293
+ size: 16,
294
+ data: lastUplinkTs,
295
+ };
296
+ if (this.adapter.objectStore.devices[id].join?.raw?.json?.state?.lc) {
297
+ const lastJoinedLc = new Date(this.adapter.objectStore.devices[id].join.raw.json.state.lc).toLocaleString(
298
+ 'de-DE',
299
+ {
300
+ weekday: 'long', // Mo
301
+ year: 'numeric', // 2026
302
+ month: '2-digit', // 01
303
+ day: '2-digit', // 24
304
+ hour: '2-digit', // 14
305
+ minute: '2-digit', // 32
306
+ second: '2-digit', // 10
307
+ },
308
+ );
309
+ generalItems['Join_value'] = {
310
+ type: 'staticInfo',
311
+ label: 'lastJoined',
312
+ size: 16,
313
+ data: lastJoinedLc,
314
+ };
315
+ } else {
316
+ this.adapter.log.warn(JSON.stringify(this.adapter.objectStore.devices[id].join));
317
+ }
318
+
319
+ let subfolders = {};
320
+ for (const [key, value] of Object.entries(this.adapter.objectStore.devices[id].detectedRoles)) {
321
+ if (key === 'state') {
322
+ continue;
323
+ }
324
+ for (const subfolder in value) {
325
+ if (!subfolders[subfolder]) {
326
+ subfolders[subfolder] = {};
327
+ }
328
+ subfolders[subfolder][key] = true;
329
+ }
330
+ }
331
+ subfolders = Object.fromEntries(Object.entries(subfolders).sort(([a], [b]) => a.localeCompare(b)));
332
+ const roleItems = {};
333
+ for (const subfolder in subfolders) {
334
+ roleItems[subfolder] = {
335
+ newLine: true,
336
+ type: 'header',
337
+ text: subfolder,
338
+ size: 3,
339
+ xs: 12,
340
+ sm: 12,
341
+ md: 12,
342
+ lg: 12,
343
+ xl: 12,
344
+ };
345
+ let detectedRoles = '    ';
346
+ detectedRoles += Object.keys(subfolders[subfolder])
347
+ .sort((a, b) => a.localeCompare(b))
348
+ .join(' -- ');
349
+
350
+ roleItems[`${subfolder}_Roles`] = {
351
+ newLine: true,
352
+ type: 'staticText',
353
+ text: detectedRoles,
354
+ size: 10,
355
+ };
356
+ }
357
+ return {
358
+ id,
359
+ schema: {
360
+ type: 'tabs',
361
+ items: {
362
+ generalTab: {
363
+ type: 'panel',
364
+ label: 'generalInformations',
365
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
366
+ // @ts-expect-error
367
+ items: generalItems,
368
+ },
369
+ roleTab: {
370
+ type: 'panel',
371
+ label: 'detectedRoles',
372
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
373
+ // @ts-expect-error
374
+ items: roleItems,
375
+ },
376
+ },
377
+ },
378
+ };
379
+ }
230
380
  }
231
381
 
232
382
  module.exports = LoRaWANDeviceManagement;
@@ -456,16 +456,18 @@ class directorieshandlerClass {
456
456
  }
457
457
  // Check for an assign definition (calculation and / or role assignment)
458
458
  if (this.assigns[elementName] && !options?.dontAssign) {
459
- this.adapter.log.debug(
460
- `the state with the id ${objectId} will be assigned by internal function`,
459
+ // Check for logging
460
+ this.adapter.log[this.adapter.logtypes.assign]?.(
461
+ `the state with the id ${objectId} will be assigned by internal assign function`,
461
462
  );
462
463
  stateVal = this.assigns[elementName](stateVal, common);
463
464
  }
464
465
 
465
466
  // Check for assign (new implemented function)
466
467
  if (this.assignhandler.assign[elementName] && !options?.dontAssign) {
467
- this.adapter.log.debug(
468
- `the state with the id ${objectId} will be assigned by internal assign function`,
468
+ // Check for logging
469
+ this.adapter.log[this.adapter.logtypes.assignHandler]?.(
470
+ `the state with the id ${objectId} will be assigned by internal assign function assignHandler`,
469
471
  );
470
472
  stateVal = this.assignhandler.executeAssign(
471
473
  objectId,
@@ -77,8 +77,9 @@ class mqttClientClass {
77
77
  });
78
78
 
79
79
  this.client.on('message', async (topic, message) => {
80
- this.adapter.log.debug(`incoming topic: ${topic}`);
81
- this.adapter.log.debug(`incoming message: ${message}`);
80
+ // Check for logging
81
+ this.adapter.log[this.adapter.logtypes.mqtt]?.(`incoming topic: ${topic}`);
82
+ this.adapter.log[this.adapter.logtypes.mqtt]?.(`incoming message: ${message}`);
82
83
  // @ts-expect-error assignmessage in JSON.parse
83
84
  message = JSON.parse(message);
84
85
 
@@ -17,25 +17,14 @@ class objectStoreClass {
17
17
  this.applications = {};
18
18
  this.currentIds = {};
19
19
 
20
- this.rolesToCheck = {
21
- 'value.battery': {
22
- indicator: { name: 'isBatteryDevice', subfolder: '.uplink.decoded' },
23
- assignToDeviceInformations: { name: 'batteryPercent', subfolder: '.uplink.decoded' },
24
- },
25
- 'level.temperature': {
26
- indicator: { name: 'isThermostat', subfolder: '.downlink.control' },
27
- },
28
- 'sensor.door': {
29
- indicator: { name: 'isDoor', subfolder: '.uplink.decoded' },
30
- },
31
- 'sensor.window': {
32
- indicator: { name: 'isWindow', subfolder: '.uplink.decoded' },
33
- },
20
+ this.roleAssignToDeviceInformations = {
21
+ 'value.battery': { name: 'batteryPercent', subfolder: 'uplink.decoded' },
34
22
  };
23
+
35
24
  this.assignToDeviceInformations = {
36
25
  rssi: true,
37
- devicetype: { name: 'devicetype', subfolder: '.configuration' },
38
- json: { name: 'lastUplink', subfolder: '.uplink.raw' },
26
+ devicetype: { name: 'devicetype', subfolder: 'configuration' },
27
+ json: { name: 'lastUplink', subfolder: 'uplink.raw' },
39
28
  };
40
29
  }
41
30
 
@@ -80,7 +69,14 @@ class objectStoreClass {
80
69
  const parts = id.split('.').slice(strip);
81
70
  let node = applicationObject;
82
71
  const deviceId = parts[2];
83
- const idWithoutLast = id.substring(0, id.length - parts[parts.length - 1].length - 1);
72
+ const indexOfDeviceId = id.indexOf(deviceId);
73
+ let idSubfolder = '';
74
+ if (parts.length > 3) {
75
+ idSubfolder = id.substring(
76
+ indexOfDeviceId + deviceId.length + 1,
77
+ id.length - parts[parts.length - 1].length - 1,
78
+ );
79
+ }
84
80
  for (let i = 0; i < parts.length; i++) {
85
81
  const key = parts[i];
86
82
  const isLast = i === parts.length - 1;
@@ -102,45 +98,29 @@ class objectStoreClass {
102
98
  deviceObject[deviceId] = node[key];
103
99
  }
104
100
  }
105
- let assign = undefined;
101
+ let roleAssign = undefined;
106
102
  if (payload.object) {
107
- if (Object.hasOwn(this.rolesToCheck, payload.object.common.role)) {
108
- if (this.rolesToCheck[payload.object.common.role].indicator) {
109
- if (typeof this.rolesToCheck[payload.object.common.role].indicator === 'string') {
110
- if (!deviceObject[deviceId].indicators) {
111
- deviceObject[deviceId].indicators = {};
112
- }
113
- deviceObject[deviceId].indicators[
114
- this.rolesToCheck[payload.object.common.role].indicator
115
- ] = true;
116
- } else if (
117
- typeof this.rolesToCheck[payload.object.common.role].indicator === 'object'
118
- ) {
119
- let name = key;
120
- if (
121
- this.rolesToCheck[payload.object.common.role].indicator.subfolder &&
122
- !idWithoutLast.endsWith(
123
- this.rolesToCheck[payload.object.common.role].indicator.subfolder,
124
- )
125
- ) {
126
- continue;
127
- }
128
- if (this.rolesToCheck[payload.object.common.role].indicator.name) {
129
- name = this.rolesToCheck[payload.object.common.role].indicator.name;
130
- }
131
- if (!deviceObject[deviceId].indicators) {
132
- deviceObject[deviceId].indicators = {};
133
- }
134
- deviceObject[deviceId].indicators[name] = true;
135
- }
103
+ // Just Quere if role is not undefined
104
+ if (payload.object.common.role !== undefined) {
105
+ if (!deviceObject[deviceId].detectedRoles) {
106
+ deviceObject[deviceId].detectedRoles = {};
107
+ }
108
+ if (!deviceObject[deviceId].detectedRoles[payload.object.common.role]) {
109
+ deviceObject[deviceId].detectedRoles[payload.object.common.role] = {};
110
+ }
111
+ if (!deviceObject[deviceId].detectedRoles[payload.object.common.role][idSubfolder]) {
112
+ deviceObject[deviceId].detectedRoles[payload.object.common.role][idSubfolder] = 1;
113
+ } else {
114
+ deviceObject[deviceId].detectedRoles[payload.object.common.role][idSubfolder] += 1;
136
115
  }
137
- if (this.rolesToCheck[payload.object.common.role].assignToDeviceInformations) {
138
- assign = this.rolesToCheck[payload.object.common.role].assignToDeviceInformations;
116
+ if (Object.hasOwn(this.roleAssignToDeviceInformations, payload.object.common.role)) {
117
+ roleAssign = this.roleAssignToDeviceInformations[payload.object.common.role];
139
118
  }
140
119
  }
141
120
  }
121
+
142
122
  // Following only type state
143
- if (node[key].object && node[key].object.type === 'state') {
123
+ if (node[key].object?.type === 'state') {
144
124
  // Get state, if not present
145
125
  if (!node[key].state) {
146
126
  if (node[key].object._id) {
@@ -149,29 +129,24 @@ class objectStoreClass {
149
129
  }
150
130
  }
151
131
  // Assign to device
152
- if (Object.hasOwn(this.assignToDeviceInformations, key) || assign) {
132
+ if (Object.hasOwn(this.assignToDeviceInformations, key) || roleAssign) {
153
133
  let name = key;
154
- if (assign) {
155
- if (typeof assign === 'string') {
156
- name = assign;
157
- } else if (typeof assign === 'object') {
158
- if (assign.subfolder && !idWithoutLast.endsWith(assign.subfolder)) {
134
+ if (roleAssign) {
135
+ if (typeof roleAssign === 'string') {
136
+ name = roleAssign;
137
+ } else if (typeof roleAssign === 'object') {
138
+ if (!idSubfolder.endsWith(roleAssign.subfolder)) {
159
139
  continue;
160
- }
161
- if (assign.name) {
162
- name = assign.name;
140
+ } else if (roleAssign.name) {
141
+ name = roleAssign.name;
163
142
  }
164
143
  }
165
144
  } else if (typeof this.assignToDeviceInformations[key] === 'string') {
166
145
  name = this.assignToDeviceInformations[key];
167
146
  } else if (typeof this.assignToDeviceInformations[key] === 'object') {
168
- if (
169
- this.assignToDeviceInformations[key].subfolder &&
170
- !idWithoutLast.endsWith(this.assignToDeviceInformations[key].subfolder)
171
- ) {
147
+ if (!idSubfolder.endsWith(this.assignToDeviceInformations[key].subfolder)) {
172
148
  continue;
173
- }
174
- if (this.assignToDeviceInformations[key].name) {
149
+ } else if (this.assignToDeviceInformations[key].name) {
175
150
  name = this.assignToDeviceInformations[key].name;
176
151
  }
177
152
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.lorawan",
3
- "version": "1.20.15",
3
+ "version": "1.20.17",
4
4
  "description": "converts the desired lora gateway data to a ioBroker structure",
5
5
  "author": {
6
6
  "name": "BenAhrdt",