iobroker.lorawan 1.22.23 → 1.22.25

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
@@ -24,6 +24,13 @@ For now there is documentation in English here: https://wiki.hafenmeister.de
24
24
  Placeholder for the next version (at the beginning of the line):
25
25
  ### **WORK IN PROGRESS**
26
26
  -->
27
+ ### 1.22.25 (2026-06-25)
28
+ - (BenAhrdt) Change Assignhandler for case intensive Check
29
+ - (BenAhrdt) Add subAssign for a part of name
30
+
31
+ ### 1.22.24 (2026-06-24)
32
+ - (BenAhrdt) Add Absolute Humidity to device_class
33
+
27
34
  ### 1.22.23 (2026-06-17)
28
35
  - (BenAhrdt) setTimeout changed into this.adapter.SetTimeout
29
36
 
@@ -33,12 +40,6 @@ For now there is documentation in English here: https://wiki.hafenmeister.de
33
40
  ### 1.22.21 (2026-06-16)
34
41
  - (BenAhrdt) Changed setTimeout to this.adapter.setTimeout
35
42
 
36
- ### 1.22.20 (2026-06-16)
37
- - (BenAhrdt) Write publishIds and subscribedTopics delayed
38
-
39
- ### 1.22.19 (2026-06-16)
40
- - (BenAhrdt) Test durch fehlerhaften git commit
41
-
42
43
  [Older changes can be found there](CHANGELOG_OLD.md)
43
44
 
44
45
  ## License
package/io-package.json CHANGED
@@ -1,8 +1,34 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "lorawan",
4
- "version": "1.22.23",
4
+ "version": "1.22.25",
5
5
  "news": {
6
+ "1.22.25": {
7
+ "en": "Change Assignhandler for case intensive Check\nAdd subAssign for a part of name",
8
+ "de": "Ändern Sie den Zuweisungshandler für die fallintensive Prüfung.\nFüge Unterzuweisung für einen Teil des Namens hinzu",
9
+ "ru": "Изменить обработчик назначений для проверки с интенсивным использованием регистров.\nДобавить подназначение для части имени",
10
+ "pt": "Alterar o Assignhandler para verificação que exige alta sensibilidade a maiúsculas e minúsculas.\nAdicionar subatribuição para uma parte do nome",
11
+ "nl": "Wijzig de Assignhandler voor case-intensieve controles.\nVoeg een subtoewijzing toe voor een deel van de naam.",
12
+ "fr": "Modifier le gestionnaire d'affectation pour la vérification intensive des cas\nAjouter une sous-affectation pour une partie du nom",
13
+ "it": "Cambia Assegnatore gestore per controllo intensivo dei casi\nAggiungi subAssegna per una parte del nome",
14
+ "es": "Modificar Assignhandler para comprobación intensiva de casos\nAgregar subAsignación para una parte del nombre",
15
+ "pl": "Zmień Assignhandler na kontrolę intensywnie wykorzystującą przypadek\nDodaj podprzypisanie dla części nazwy",
16
+ "uk": "Змінити обробник присвоєння для перевірки з інтенсивним виконанням регістрів\nДодати subAssign для частини імені",
17
+ "zh-cn": "更改案例密集型检查的分配处理程序\n为名称的一部分添加子分配"
18
+ },
19
+ "1.22.24": {
20
+ "en": "Add Absolute Humidity to device_class",
21
+ "de": "Füge der Geräteklasse die absolute Luftfeuchtigkeit hinzu.",
22
+ "ru": "Добавить абсолютную влажность в device_class",
23
+ "pt": "Adicionar umidade absoluta à classe do dispositivo",
24
+ "nl": "Voeg absolute luchtvochtigheid toe aan de device_class.",
25
+ "fr": "Ajouter l'humidité absolue à la classe de périphérique",
26
+ "it": "Aggiungi l'umidità assoluta alla classe di dispositivi",
27
+ "es": "Agregar humedad absoluta a device_class",
28
+ "pl": "Dodaj wilgotność bezwzględną do device_class",
29
+ "uk": "Додати абсолютну вологість до класу пристроїв",
30
+ "zh-cn": "将绝对湿度添加到设备类"
31
+ },
6
32
  "1.22.23": {
7
33
  "en": "setTimeout changed into this.adapter.SetTimeout",
8
34
  "de": "setTimeout wurde in this.adapter geändert. SetTimeout",
@@ -67,32 +93,6 @@
67
93
  "pl": "Test durch fehlerhaften git commit",
68
94
  "uk": "Тест дюх fehlerhaften git commit",
69
95
  "zh-cn": "测试 fehlerhaften git 执行"
70
- },
71
- "1.22.18": {
72
- "en": "Testversion, ohne info. schreiben",
73
- "de": "Testversion, ohne Info. schreiben",
74
- "ru": "Тестирование, ohne info. schreiben",
75
- "pt": "Testversion, ohne info. schreiben",
76
- "nl": "Testversie, ohne info. schreiben",
77
- "fr": "Testversion, ohne info. schreiben",
78
- "it": "Testversion, ohne info. schreiben",
79
- "es": "Testversion, ohne info. schreiben",
80
- "pl": "Testversion, ohne info. schreiben",
81
- "uk": "Тестування, ohne info. schreiben",
82
- "zh-cn": "Testversion, ohne info. schreiben (英语)"
83
- },
84
- "1.22.17": {
85
- "en": "Fixed writing valid zero values from bridged Home Assistant entities to ioBroker states.",
86
- "de": "Behobenes Schreiben gültige Nullwerte von überbrückten Home Assistant-Einheiten zu ioBroker-Staaten.",
87
- "ru": "Фиксированная запись действительных нулевых значений от подключенных объектов Home Assistant до штатов ioBroker.",
88
- "pt": "Corrigido escrevendo valores zero válidos de entidades bridged Home Assistant para estados ioBroker.",
89
- "nl": "Vaste schrijven geldig nul waarden van brugd Home Assistent entiteiten naar ioBroker staten.",
90
- "fr": "Correction de l'écriture de valeurs nulles valides des entités d'aide à la maison pontées aux états ioBroker.",
91
- "it": "Scrittura fissa valori zero validi da entità di Home Assistant colate a stati ioBroker.",
92
- "es": "Escribir valores nulos válidos de las entidades auxiliares de casa puenteadas a los estados de yoBroker.",
93
- "pl": "Naprawiono pisanie poprawnych wartości zerowych z zaokrąglonych jednostek Home Assistant do stanów jOBroker.",
94
- "uk": "Фіксоване написання дійсних нульових значень з містованих домашніх помічників для ioBroker штатів.",
95
- "zh-cn": "固定写入有效的零值,从桥接的家用助理实体到ioBroker状态."
96
96
  }
97
97
  },
98
98
  "titleLang": {
@@ -9,6 +9,17 @@ class assignhandlerClass {
9
9
  this.adapter = adapter;
10
10
 
11
11
  this.assign = {
12
+ AbsoluteHumidity: {
13
+ approvedFolders: {
14
+ 'uplink.decoded': {
15
+ assignfunction: this.commonAssign,
16
+ common: {
17
+ role: 'value.humidity.absolute',
18
+ unit: 'g/m³',
19
+ },
20
+ },
21
+ },
22
+ },
12
23
  Alarm: {
13
24
  approvedFolders: {
14
25
  'uplink.decoded': {
@@ -746,12 +757,62 @@ class assignhandlerClass {
746
757
  },
747
758
  },
748
759
  };
760
+
761
+ this.subAssign = {
762
+ Weight: {
763
+ approvedFolders: {
764
+ 'uplink.decoded': {
765
+ assignfunction: this.commonAssign,
766
+ common: {
767
+ role: 'value.weight',
768
+ unit: 'kg',
769
+ },
770
+ },
771
+ },
772
+ },
773
+ WeightGramm: {
774
+ approvedFolders: {
775
+ 'uplink.decoded': {
776
+ assignfunction: this.commonAssign,
777
+ common: {
778
+ role: 'value.weight',
779
+ unit: 'g',
780
+ },
781
+ },
782
+ },
783
+ },
784
+ };
749
785
  }
750
786
 
751
787
  /*********************************************************************
752
788
  * ********************* Execution of Assigns ***********************
753
789
  * ******************************************************************/
754
790
 
791
+ /**
792
+ * @param statename name of the state to find an assign for
793
+ */
794
+ getAssign(statename) {
795
+ if (Object.hasOwn(this.assign, statename)) {
796
+ return this.assign[statename];
797
+ }
798
+
799
+ const lowerStatename = statename.toLowerCase();
800
+ const assignKey = Object.keys(this.assign).find(key => key.toLowerCase() === lowerStatename);
801
+ return assignKey ? this.assign[assignKey] : this.getSubAssign(statename);
802
+ }
803
+
804
+ /**
805
+ * @param statename name of the state to find a sub assign for
806
+ */
807
+ getSubAssign(statename) {
808
+ const lowerStatename = statename.toLowerCase();
809
+ const subAssignKey = Object.keys(this.subAssign)
810
+ .filter(key => lowerStatename.includes(key.toLowerCase()))
811
+ .sort((a, b) => b.length - a.length)[0];
812
+
813
+ return subAssignKey ? this.subAssign[subAssignKey] : undefined;
814
+ }
815
+
755
816
  /**
756
817
  * @param id id wich is assignable
757
818
  * @param value value of the assignable id
@@ -179,6 +179,9 @@ class bridgeClass extends EventEmiter {
179
179
  s: { device_class: 'duration' },
180
180
  min: { device_class: 'duration' },
181
181
  h: { device_class: 'duration' },
182
+
183
+ 'g/m³': { device_class: 'absolute_humidity' },
184
+ 'mg/m³': { device_class: 'absolute_humidity' },
182
185
  };
183
186
 
184
187
  // Bridge internal loggin
@@ -1626,8 +1629,13 @@ class bridgeClass extends EventEmiter {
1626
1629
  attributes.device_class = 'temperature';
1627
1630
  attributes.unit_of_measurement = normalizedUnit || '°C';
1628
1631
  } else if (role.includes('humidity')) {
1629
- attributes.device_class = 'humidity';
1630
- attributes.unit_of_measurement = normalizedUnit || '%';
1632
+ if (role.includes('humidity.absolute')) {
1633
+ attributes.device_class = 'absolute_humidity';
1634
+ attributes.unit_of_measurement = normalizedUnit || 'g/m³';
1635
+ } else {
1636
+ attributes.device_class = 'humidity';
1637
+ attributes.unit_of_measurement = normalizedUnit || '%';
1638
+ }
1631
1639
  } else if (role.includes('illuminance') || role.includes('brightness')) {
1632
1640
  attributes.device_class = 'illuminance';
1633
1641
  attributes.unit_of_measurement = 'lx'; //normalizedUnit || 'lx';
@@ -465,17 +465,15 @@ class directorieshandlerClass {
465
465
  }
466
466
 
467
467
  // Check for assign (new implemented function)
468
- if (this.assignhandler.assign[elementName] && !options?.dontAssign) {
468
+ const assignData = this.assignhandler.getAssign(elementName);
469
+ if (assignData && !options?.dontAssign) {
469
470
  // Check for logging
470
471
  this.adapter.log[this.adapter.logtypes.assignHandler]?.(
471
472
  `the state with the id ${objectId} will be assigned by internal assign function assignHandler`,
472
473
  );
473
- stateVal = this.assignhandler.executeAssign(
474
- objectId,
475
- stateVal,
476
- this.assignhandler.assign[elementName],
477
- { common: common },
478
- );
474
+ stateVal = this.assignhandler.executeAssign(objectId, stateVal, assignData, {
475
+ common: common,
476
+ });
479
477
  }
480
478
  common.read = common.role !== 'button';
481
479
  common.def =
@@ -518,17 +518,13 @@ class messagehandlerClass {
518
518
  }
519
519
  */
520
520
  // Check for assign (new implemented function)
521
- if (this.assignhandler.assign[downlinkParameter.name] && !options?.dontAssign) {
521
+ const assignData = this.assignhandler.getAssign(downlinkParameter.name);
522
+ if (assignData && !options?.dontAssign) {
522
523
  // Check for logging
523
524
  this.adapter.log[this.adapter.logtypes.fillWithDownlink]?.(
524
525
  `the state with the id ${stateId} will be assigned by internal assign function`,
525
526
  );
526
- this.assignhandler.executeAssign(
527
- stateId,
528
- false,
529
- this.assignhandler.assign[downlinkParameter.name],
530
- { common: common },
531
- );
527
+ this.assignhandler.executeAssign(stateId, false, assignData, { common: common });
532
528
  }
533
529
  // Query for base device and parameter push or replace
534
530
  if (downlinkDevice === this.adapter.downlinkConfighandler.internalDevices.baseDevice) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.lorawan",
3
- "version": "1.22.23",
3
+ "version": "1.22.25",
4
4
  "description": "converts the desired lora gateway data to a ioBroker structure",
5
5
  "author": {
6
6
  "name": "BenAhrdt",