iobroker.lorawan 1.20.13 → 1.20.16

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,15 @@ 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.16 (2026-01-27)
27
+ * (BenAhrdt) add informations to device Manager
28
+
29
+ ### 1.20.15 (2026-01-26)
30
+ * (BenAhrdt) sort output for informations
31
+
32
+ ### 1.20.14 (2026-01-26)
33
+ * (BenAhrdt) insert node
34
+
26
35
  ### 1.20.13 (2026-01-26)
27
36
  * (BenAhrdt) remove nod from crypto
28
37
 
@@ -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,6 +214,7 @@
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",
@@ -278,5 +278,9 @@
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"
282
286
  }
@@ -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,6 +214,7 @@
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",
@@ -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,6 +214,7 @@
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",
@@ -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,6 +214,7 @@
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",
@@ -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,6 +214,7 @@
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",
@@ -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,6 +214,7 @@
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ć",
@@ -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,6 +214,7 @@
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",
@@ -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,6 +214,7 @@
211
214
  "expertSettings": "Эксперт-Настройки",
212
215
  "front": "первоначальная стоимость",
213
216
  "frontTooltip": "вставьте переднее значение, которое будет установлено для нисходящей линии связи (значение должно быть в шестнадцатеричном формате, кроме строки типа)",
217
+ "generalInformations": "общая информация",
214
218
  "ipUrl": "URL или IP сервера",
215
219
  "ipUrlTooltip": "введите IP-адрес или URL-адрес, к которому вы хотите подключиться",
216
220
  "keepalive": "поддерживать активность",
@@ -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,6 +214,7 @@
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",
@@ -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,6 +214,7 @@
211
214
  "expertSettings": "专家设置",
212
215
  "front": "前值",
213
216
  "frontTooltip": "插入前值,该值将设置为下行链路(值必须为十六进制 - 字符串类型除外)",
217
+ "generalInformations": "一般信息",
214
218
  "ipUrl": "服务器的 url 或 ip",
215
219
  "ipUrlTooltip": "输入ip地址,或者你想要连接的url",
216
220
  "keepalive": "保活",
@@ -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.13",
4
+ "version": "1.20.16",
5
5
  "news": {
6
+ "1.20.16": {
7
+ "en": "add informations to device Manager",
8
+ "de": "informationen zum Gerätemanager hinzufügen",
9
+ "ru": "добавление информации в диспетчер устройств",
10
+ "pt": "adicionar informações ao gerenciador de dispositivos",
11
+ "nl": "informatie toevoegen aan apparaatbeheer",
12
+ "fr": "ajouter des informations au gestionnaire de périphériques",
13
+ "it": "aggiungere informazioni al gestore del dispositivo",
14
+ "es": "añadir información al administrador del dispositivo",
15
+ "pl": "dodać informacje do urządzenia Manager",
16
+ "uk": "додати інформацію в диспетчер пристроїв",
17
+ "zh-cn": "向设备管理器添加信息"
18
+ },
19
+ "1.20.15": {
20
+ "en": "sort output for informations",
21
+ "de": "sortierausgabe für informationen",
22
+ "ru": "сортировать выход для информации",
23
+ "pt": "sort output para informações",
24
+ "nl": "uitvoer voor informatie sorteren",
25
+ "fr": "trier la sortie pour les informations",
26
+ "it": "sort output per informazioni",
27
+ "es": "salida de tipo para información",
28
+ "pl": "sortowanie wyników dla informacji",
29
+ "uk": "сортування інформації",
30
+ "zh-cn": "信息排序输出"
31
+ },
6
32
  "1.20.13": {
7
33
  "en": "remove nod from crypto",
8
34
  "de": "nod from crypto entfernen",
@@ -16,19 +42,6 @@
16
42
  "uk": "видалити nod з крипто",
17
43
  "zh-cn": "从加密中删除点头"
18
44
  },
19
- "1.20.12": {
20
- "en": "check for update",
21
- "de": "überprüfung der aktualisierung",
22
- "ru": "проверьте обновление",
23
- "pt": "verificar a actualização",
24
- "nl": "controleren op update",
25
- "fr": "vérifier la mise à jour",
26
- "it": "controllare per l'aggiornamento",
27
- "es": "check for update",
28
- "pl": "sprawdzanie aktualizacji",
29
- "uk": "реєстрація на оновлення",
30
- "zh-cn": "检查更新"
31
- },
32
45
  "1.20.11": {
33
46
  "en": "improve device Manager icons and Buttons",
34
47
  "de": "verbesserung der Vorrichtung Icons und Buttons verwalten",
@@ -67,32 +80,6 @@
67
80
  "pl": "eksperymentalne dla formy",
68
81
  "uk": "експериментальна форма",
69
82
  "zh-cn": "实验形式"
70
- },
71
- "1.20.8": {
72
- "en": "changes in objectStore",
73
- "de": "änderungen des Objekts Store",
74
- "ru": "изменения в объекте Магазин",
75
- "pt": "alterações no objeto Armazenar",
76
- "nl": "wijzigingen in object Opslaan",
77
- "fr": "changements d'objet A conserver",
78
- "it": "cambiamenti nell'oggetto Negozio",
79
- "es": "cambios en el objeto Store",
80
- "pl": "zmiany w obiekcie Przechowywać",
81
- "uk": "зміни об'єкта Магазини",
82
- "zh-cn": "对象变化 存储"
83
- },
84
- "1.20.7": {
85
- "en": "bugfix correct writing of indicators",
86
- "de": "bugfix korrektes schreiben von indikatoren",
87
- "ru": "bugfix правильное написание индикаторов",
88
- "pt": "errofix escrita correta de indicadores",
89
- "nl": "foutfix correct schrijven van indicatoren",
90
- "fr": "bugfix écriture correcte des indicateurs",
91
- "it": "bugfix corretto scrittura di indicatori",
92
- "es": "bugfix correcta escritura de indicadores",
93
- "pl": "bugfix prawidłowe pisanie wskaźników",
94
- "uk": "виправлення правильних показників",
95
- "zh-cn": "错误修正正确的指标写法"
96
83
  }
97
84
  },
98
85
  "titleLang": {
@@ -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: undefined,
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}`,
@@ -216,13 +258,123 @@ class LoRaWANDeviceManagement extends DeviceManagement {
216
258
  },
217
259
  {
218
260
  data: {
219
- deviceinfos: JSON.stringify(deviceInfo[id].uplink.decoded, null, 2),
261
+ deviceinfos: JSON.stringify(
262
+ deviceInfo[id].uplink.decoded,
263
+ Object.keys(deviceInfo[id].uplink.decoded).sort(),
264
+ 2,
265
+ ),
220
266
  },
221
267
  title: this.adapter.i18nTranslation['Info of this device'],
222
268
  },
223
269
  );
224
270
  return { refresh: true };
225
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 Timestamp = new Date(
280
+ this.adapter.objectStore.devices[id].informations.lastUplink.state.ts,
281
+ ).toLocaleString('de-DE', {
282
+ weekday: 'short', // 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_text'] = {
291
+ newLine: true,
292
+ type: 'header',
293
+ text: 'LastUplink',
294
+ size: 3,
295
+ xs: 12,
296
+ sm: 12,
297
+ md: 12,
298
+ lg: 12,
299
+ xl: 12,
300
+ };
301
+ generalItems['Timestamp_value'] = {
302
+ newLine: true,
303
+ type: 'staticText',
304
+ text: Timestamp,
305
+ xs: 9,
306
+ };
307
+
308
+ let subfolders = {};
309
+ for (const [key, value] of Object.entries(this.adapter.objectStore.devices[id].detectedRoles)) {
310
+ if (key === 'state') {
311
+ continue;
312
+ }
313
+ for (const subfolder in value) {
314
+ if (!subfolders[subfolder]) {
315
+ subfolders[subfolder] = {};
316
+ }
317
+ subfolders[subfolder][key] = true;
318
+ }
319
+ }
320
+ subfolders = Object.fromEntries(Object.entries(subfolders).sort(([a], [b]) => a.localeCompare(b)));
321
+ const roleItems = {};
322
+ for (const subfolder in subfolders) {
323
+ roleItems[subfolder] = {
324
+ newLine: true,
325
+ type: 'header',
326
+ text: subfolder,
327
+ size: 3,
328
+ xs: 12,
329
+ sm: 12,
330
+ md: 12,
331
+ lg: 12,
332
+ xl: 12,
333
+ };
334
+ let detectedRoles = '    ';
335
+ detectedRoles += Object.keys(subfolders[subfolder])
336
+ .sort((a, b) => a.localeCompare(b))
337
+ .join(' - ');
338
+
339
+ roleItems[`${subfolder}_Roles`] = {
340
+ newLine: true,
341
+ type: 'staticText',
342
+ text: detectedRoles,
343
+ };
344
+ }
345
+ return {
346
+ id,
347
+ schema: {
348
+ type: 'tabs',
349
+ items: {
350
+ generalTab: {
351
+ type: 'panel',
352
+ label: 'generalInformations',
353
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
354
+ // @ts-expect-error
355
+ items: generalItems,
356
+ xs: 12,
357
+ sm: 12,
358
+ md: 12,
359
+ lg: 12,
360
+ xl: 12,
361
+ },
362
+ roleTab: {
363
+ type: 'panel',
364
+ label: 'detectedRoles',
365
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
366
+ // @ts-expect-error
367
+ items: roleItems,
368
+ xs: 12,
369
+ sm: 12,
370
+ md: 12,
371
+ lg: 12,
372
+ xl: 12,
373
+ },
374
+ },
375
+ },
376
+ };
377
+ }
226
378
  }
227
379
 
228
380
  module.exports = LoRaWANDeviceManagement;
@@ -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/main.js CHANGED
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  const mqtt = require('mqtt');
4
- const crypto = require('crypto');
4
+ const crypto = require('node:crypto');
5
5
 
6
6
  /*
7
7
  * Created with @iobroker/create-adapter v2.6.0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.lorawan",
3
- "version": "1.20.13",
3
+ "version": "1.20.16",
4
4
  "description": "converts the desired lora gateway data to a ioBroker structure",
5
5
  "author": {
6
6
  "name": "BenAhrdt",