iobroker.lorawan 0.1.5 → 0.1.6

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
@@ -14,11 +14,17 @@ The adapter communicates bidirectionally with LoraWan devices via LoRaWAN Networ
14
14
  “The Thinks Network” and “Chirpstack” are supported now, more could follow later.
15
15
  Adapter was created in collaboration with Joerg Froehner LoraWan@hafenmeister.com
16
16
 
17
+ For Documentation use the doc folder.
18
+ For now there is documentation in English here: http://www.hafenmeister.com/LoraWan/Iobroker-Adapter.pdf
19
+
17
20
  ## Changelog
18
21
  <!--
19
22
  Placeholder for the next version (at the beginning of the line):
20
23
  ### **WORK IN PROGRESS**
21
24
  -->
25
+ ### 0.1.6 (2024-02-05)
26
+ * (BenAhrdt) implments byte swap
27
+
22
28
  ### 0.1.5 (2024-02-02)
23
29
  * (BenAhrdt) remove units and insert roles
24
30
 
@@ -55,5 +55,7 @@
55
55
  "decimalPlaces": "Nachkommastellen",
56
56
  "decimalPlacesTooltip": "Wählen Sie die gewünschte Anzahl an Nachkommastellen aus, die als Downlink gesendet werden",
57
57
  "downlinkConfigMainHeader": "Haupt Downlink Konfiguration",
58
- "downlinkConfigSubHeader": "Individuelle Downlink Konfiguration"
58
+ "downlinkConfigSubHeader": "Individuelle Downlink Konfiguration",
59
+ "swap": "Little Endian (Bytereihenfolge tauschen)",
60
+ "swapTooltip": "Tauschen Sie den Bytereihenfolged der Eingabe"
59
61
  }
@@ -55,5 +55,7 @@
55
55
  "decimalPlaces": "decimal places",
56
56
  "decimalPlacesTooltip": "select the desired numberof decimal places",
57
57
  "downlinkConfigMainHeader": "main downlink config",
58
- "downlinkConfigSubHeader": "individual downlink config"
58
+ "downlinkConfigSubHeader": "individual downlink config",
59
+ "swap": "little endian (sawp byteorder)",
60
+ "swapTooltip": "swap the byteoder of the input"
59
61
  }
@@ -55,5 +55,7 @@
55
55
  "decimalPlaces": "lugares decimales",
56
56
  "decimalPlacesTooltip": "seleccione el número deseado de decimales",
57
57
  "downlinkConfigMainHeader": "configuración principal del enlace descendente",
58
- "downlinkConfigSubHeader": "configuración de enlace descendente individual"
58
+ "downlinkConfigSubHeader": "configuración de enlace descendente individual",
59
+ "swap": "little endian (orden de bytes visto)",
60
+ "swapTooltip": "intercambiar el byteoder de la entrada"
59
61
  }
@@ -55,5 +55,7 @@
55
55
  "decimalPlaces": "décimales",
56
56
  "decimalPlacesTooltip": "sélectionnez le nombre de décimales souhaité",
57
57
  "downlinkConfigMainHeader": "configuration principale de la liaison descendante",
58
- "downlinkConfigSubHeader": "configuration de liaison descendante individuelle"
58
+ "downlinkConfigSubHeader": "configuration de liaison descendante individuelle",
59
+ "swap": "Little Endian (ordre des octets Sawp)",
60
+ "swapTooltip": "échanger le byteoder de l'entrée"
59
61
  }
@@ -55,5 +55,7 @@
55
55
  "decimalPlaces": "decimali",
56
56
  "decimalPlacesTooltip": "selezionare il numero desiderato di cifre decimali",
57
57
  "downlinkConfigMainHeader": "configurazione downlink principale",
58
- "downlinkConfigSubHeader": "configurazione downlink individuale"
58
+ "downlinkConfigSubHeader": "configurazione downlink individuale",
59
+ "swap": "little endian (ordine byte sawp)",
60
+ "swapTooltip": "scambia il byteoder dell'input"
59
61
  }
@@ -55,5 +55,7 @@
55
55
  "decimalPlaces": "decimalen",
56
56
  "decimalPlacesTooltip": "selecteer het gewenste aantal decimalen",
57
57
  "downlinkConfigMainHeader": "belangrijkste downlink-configuratie",
58
- "downlinkConfigSubHeader": "individuele downlinkconfiguratie"
58
+ "downlinkConfigSubHeader": "individuele downlinkconfiguratie",
59
+ "swap": "kleine endian (sawp-bytevolgorde)",
60
+ "swapTooltip": "verwissel de byteoder van de invoer"
59
61
  }
@@ -55,5 +55,7 @@
55
55
  "decimalPlaces": "miejsca dziesiętne",
56
56
  "decimalPlacesTooltip": "wybierz żądaną liczbę miejsc po przecinku",
57
57
  "downlinkConfigMainHeader": "główna konfiguracja łącza w dół",
58
- "downlinkConfigSubHeader": "indywidualna konfiguracja łącza w dół"
58
+ "downlinkConfigSubHeader": "indywidualna konfiguracja łącza w dół",
59
+ "swap": "Little Endian (kolejność bajtów sawp)",
60
+ "swapTooltip": "zamień bajt wejścia"
59
61
  }
@@ -55,5 +55,7 @@
55
55
  "decimalPlaces": "casas decimais",
56
56
  "decimalPlacesTooltip": "selecione o número desejado de casas decimais",
57
57
  "downlinkConfigMainHeader": "configuração de downlink principal",
58
- "downlinkConfigSubHeader": "configuração de downlink individual"
58
+ "downlinkConfigSubHeader": "configuração de downlink individual",
59
+ "swap": "little endian (ordem de bytes serrada)",
60
+ "swapTooltip": "trocar o byteoder da entrada"
59
61
  }
@@ -55,5 +55,7 @@
55
55
  "decimalPlaces": "десятичные знаки",
56
56
  "decimalPlacesTooltip": "выберите желаемое количество десятичных знаков",
57
57
  "downlinkConfigMainHeader": "основная конфигурация нисходящей линии связи",
58
- "downlinkConfigSubHeader": "индивидуальная конфигурация нисходящей линии связи"
58
+ "downlinkConfigSubHeader": "индивидуальная конфигурация нисходящей линии связи",
59
+ "swap": "с прямым порядком байтов (порядок байтов Sawp)",
60
+ "swapTooltip": "поменять местами байтодер ввода"
59
61
  }
@@ -55,5 +55,7 @@
55
55
  "decimalPlaces": "знаки після коми",
56
56
  "decimalPlacesTooltip": "виберіть потрібну кількість знаків після коми",
57
57
  "downlinkConfigMainHeader": "основна конфігурація низхідного каналу",
58
- "downlinkConfigSubHeader": "індивідуальна конфігурація низхідного каналу"
58
+ "downlinkConfigSubHeader": "індивідуальна конфігурація низхідного каналу",
59
+ "swap": "маленький порядок байтів (sawp byteorder)",
60
+ "swapTooltip": "поміняти байтовий порядок введення"
59
61
  }
@@ -55,5 +55,7 @@
55
55
  "decimalPlaces": "小数位",
56
56
  "decimalPlacesTooltip": "选择所需的小数位数",
57
57
  "downlinkConfigMainHeader": "主要下行配置",
58
- "downlinkConfigSubHeader": "单独的下行链路配置"
58
+ "downlinkConfigSubHeader": "单独的下行链路配置",
59
+ "swap": "小尾数(sawp 字节顺序)",
60
+ "swapTooltip": "交换输入的字节码"
59
61
  }
@@ -61,9 +61,8 @@
61
61
  "type": "password",
62
62
  "label": "password",
63
63
  "tooltip": "passwordTooltip",
64
- "repeat": true,
65
64
  "default": "",
66
- "sm": 6
65
+ "sm": 3
67
66
  },
68
67
  "OriginHeader": {
69
68
  "newLine": true,
@@ -214,6 +213,21 @@
214
213
  "default": "boolean",
215
214
  "sm":2
216
215
  },
216
+ {
217
+ "type": "checkbox",
218
+ "attr": "swap",
219
+ "label": "swap",
220
+ "tooltip": "swapTooltip",
221
+ "hidden": "data.type !== 'number'",
222
+ "default": false,
223
+ "sm":2
224
+ },
225
+ {
226
+ "type": "staticText",
227
+ "label": "",
228
+ "hidden": "data.type === 'number'",
229
+ "sm":2
230
+ },
217
231
  {
218
232
  "type": "checkbox",
219
233
  "attr": "confirmed",
package/io-package.json CHANGED
@@ -1,8 +1,21 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "lorawan",
4
- "version": "0.1.5",
4
+ "version": "0.1.6",
5
5
  "news": {
6
+ "0.1.6": {
7
+ "en": "implments byte swap",
8
+ "de": "implikationen byte swap",
9
+ "ru": "свопа",
10
+ "pt": "impelimentos por swap",
11
+ "nl": "implments byte swap",
12
+ "fr": "swap par octets",
13
+ "it": "importazioni di swap",
14
+ "es": "swap byte",
15
+ "pl": "implikacje swap bajtów",
16
+ "uk": "напляскване",
17
+ "zh-cn": "杂质字节互换"
18
+ },
6
19
  "0.1.5": {
7
20
  "en": "remove units and insert roles",
8
21
  "de": "einheiten entfernen und rollen einfügen",
@@ -80,19 +93,6 @@
80
93
  "pl": "usuwanie ścieżki downlink / configuration oraz pierwsze testy wysyłania łącza downlink za pomocą programu uplink",
81
94
  "uk": "видалити шлях посилання / налаштування та перші тести відправки з посиланням",
82
95
  "zh-cn": "删除下行链路/ 配置路径, 并首次测试下行链路的发送"
83
- },
84
- "0.0.18": {
85
- "en": "remove wrong warn logging",
86
- "de": "falsche warnen protokollierung entfernen",
87
- "ru": "удалить неправильные предупреждения",
88
- "pt": "remover registro de aviso errado",
89
- "nl": "foutmelding verwijderen",
90
- "fr": "supprimer les avertissements erronés",
91
- "it": "rimuovere l'avvertenza sbagliata",
92
- "es": "eliminar el registro incorrecto",
93
- "pl": "usunąć nieprawidłowe logowanie ostrzeżeń",
94
- "uk": "видалити неправильний попереджати залоги",
95
- "zh-cn": "删除错误的警告记录"
96
96
  }
97
97
  },
98
98
  "title": "LoRaWAN",
@@ -152,7 +152,7 @@
152
152
  ],
153
153
  "globalDependencies": [
154
154
  {
155
- "admin": ">=5.1.13"
155
+ "admin": ">=6.13.15"
156
156
  }
157
157
  ]
158
158
  },
@@ -185,7 +185,7 @@ class directorieshandlerClass {
185
185
  type: stateCommonType !== undefined? stateCommonType!== "object"? stateCommonType: "mixed": "mixed",
186
186
  name: stateCommonName,
187
187
  role: stateCommonRole,
188
- read: true,
188
+ read: stateCommonRole !== "button",
189
189
  unit: obj[elementName]? obj[elementName].CommonStateUnit? obj[elementName].CommonStateUnit : "" : "",
190
190
  def: obj[elementName]? obj[elementName].stateCommonDef? obj[elementName].stateCommonDef: stateCommonType === "boolean"? false : stateCommonType === "number"? 0: "": stateCommonType === "number"? 0: "",
191
191
  write: stateCommonWrite
@@ -81,7 +81,7 @@ class downlinkConfighandlerClass {
81
81
  config[downlinkConfig.deviceType] = downlinkConfig;
82
82
  config[downlinkConfig.deviceType].downlinkState = {};
83
83
  for(const downlinkParameter of Object.values(downlinkConfig.downlinkParameter)){
84
- config[downlinkConfig.deviceType].downlinkState[downlinkParameter.name] = downlinkParameter;
84
+ config[downlinkConfig.deviceType].downlinkState[downlinkParameter.name.replace(this.adapter.FORBIDDEN_CHARS,"_")] = downlinkParameter;
85
85
  }
86
86
  }
87
87
  catch(error){
@@ -115,7 +115,9 @@ class downlinkConfighandlerClass {
115
115
  let foundLength = 0;
116
116
  for(const deviceType in this.activeDownlinkConfigs){
117
117
  if((deviceType === "all" || deviceType === this.internalDevices.baseDevice || changeInfo.deviceType.indexOf(deviceType) === 0) && deviceType.length > foundLength){
118
- foundMatch = deviceType;
118
+ if(foundLength === 0){
119
+ foundMatch = deviceType;
120
+ }
119
121
  if(deviceType !== "all" && deviceType !== this.internalDevices.baseDevice){
120
122
  foundLength = deviceType.length;
121
123
  }
@@ -269,6 +271,9 @@ class downlinkConfighandlerClass {
269
271
  zeroDiggits += "0";
270
272
  }
271
273
  payloadInHex = (zeroDiggits + payloadInHex).slice(-numberOfDiggits);
274
+ if(downlinkParameter.swap){
275
+ payloadInHex = Buffer.from(payloadInHex,"hex").reverse().toString("hex");
276
+ }
272
277
  payloadInHex = downlinkParameter.front + payloadInHex + downlinkParameter.end;
273
278
  break;
274
279
 
@@ -98,13 +98,13 @@ class messagehandlerClass {
98
98
  else if(stateCommonType === "ascii"){
99
99
  stateCommonType = "string";
100
100
  }
101
- await this.adapter.setObjectAsync(`${deviceStartdirectory}.downlink.control.${downlinkConfig.name}`,{
101
+ await this.adapter.extendObject(`${deviceStartdirectory}.downlink.control.${downlinkConfig.name}`,{
102
102
  type: "state",
103
103
  common: {
104
104
  name: "",
105
105
  type: stateCommonType,
106
106
  role: stateCommonRole,
107
- read: true,
107
+ read: stateCommonRole !== "button",
108
108
  write: true,
109
109
  unit: downlinkConfig.unit? downlinkConfig.unit:"",
110
110
  def: stateCommonType === "boolean"? false : stateCommonType === "number"? 0: "",
package/main.js CHANGED
@@ -56,11 +56,9 @@ class Lorawan extends utils.Adapter {
56
56
  await this.messagehandler.generateDownlinksAndRemoveStatesAtStatup();
57
57
 
58
58
  //Subscribe all configuration and control states
59
- this.subscribeStatesAsync("*.configuration.*");
60
- this.subscribeStatesAsync("*downlink.control.*");
61
- this.subscribeStatesAsync("*.logAvailableConfignames");
62
- this.log.debug(`the adapter start with the config: ${JSON.stringify(this.config)}.`);
63
- this.log.silly(`the whole reacable downlinkconfigs are: ${JSON.stringify(this.downlinkConfighandler.activeDownlinkConfigs)}`);
59
+ this.subscribeStatesAsync("*");
60
+ this.log.debug(`the adapter starts with downlinkconfigs: ${JSON.stringify(this.config.downlinkConfig)}.`);
61
+ this.log.silly(`the active downlinkconfigs are: ${JSON.stringify(this.downlinkConfighandler.activeDownlinkConfigs)}`);
64
62
 
65
63
  /*setTimeout(async () => {
66
64
  await this.startSimulation();
@@ -139,7 +137,7 @@ class Lorawan extends utils.Adapter {
139
137
  // The state was changed => only states with ack = false will be processed, others will be ignored
140
138
  if(!state.ack){
141
139
  // Check for downlink in id
142
- if(id.indexOf("downlink") !== -1){
140
+ if(id.indexOf(".downlink.contro.") !== -1){
143
141
  this.log.silly(`the state ${id} has changed to ${state.val}.`);
144
142
  // get information of the changing state
145
143
  const changeInfo = await this.getChangeInfo(id,{withBestMatch:true});
@@ -166,7 +164,7 @@ class Lorawan extends utils.Adapter {
166
164
  }
167
165
  }
168
166
  // State is from configuration path
169
- else if(id.indexOf("configuration") !== -1){
167
+ else if(id.indexOf(".configuration.") !== -1){
170
168
  const changeInfo = await this.getChangeInfo(id,{withBestMatch:true});
171
169
  this.messagehandler?.fillWithDownlinkConfig(changeInfo?.objectStartDirectory);
172
170
 
@@ -184,7 +182,7 @@ class Lorawan extends utils.Adapter {
184
182
  this.setStateAsync(id,state.val,true);
185
183
  }
186
184
  // logging of the actual available configs
187
- else if(id.indexOf("logAvailableConfignames") !== -1){
185
+ else if(id.indexOf(".logAvailableConfignames") !== -1){
188
186
  this.log.info(`The following devicenames has an existing downlink-config`);
189
187
  let index = 0;
190
188
  for(const devicename in this.downlinkConfighandler?.activeDownlinkConfigs){
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.lorawan",
3
- "version": "0.1.5",
3
+ "version": "0.1.6",
4
4
  "description": "converts the desired lora gateway data to a ioBroker structure",
5
5
  "author": {
6
6
  "name": "BenAhrdt",