iobroker.zigbee2mqtt 3.0.15 → 3.0.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
@@ -22,6 +22,15 @@ This adapter allows to control the data points of the devices of a Zigbee2MQTT i
22
22
  [Adapter Documentation](https://github.com/arteck/ioBroker.zigbee2mqtt/blob/main/docs/wiki.md)
23
23
 
24
24
  ## Changelog
25
+ ### **WORK IN PROGRESS**
26
+ * (arteck) typo
27
+
28
+ ### 3.0.17 (2026-01-28)
29
+ * (arteck) typo
30
+
31
+ ### 3.0.16 (2026-01-28)
32
+ * (arteck) fix action dp
33
+
25
34
  ### 3.0.15 (2026-01-27)
26
35
  * (arteck) update
27
36
 
package/io-package.json CHANGED
@@ -1,8 +1,34 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "zigbee2mqtt",
4
- "version": "3.0.15",
4
+ "version": "3.0.17",
5
5
  "news": {
6
+ "3.0.17": {
7
+ "en": "typo",
8
+ "de": "typo",
9
+ "ru": "опечатка",
10
+ "pt": "erro de digitação",
11
+ "nl": "type",
12
+ "fr": "typo",
13
+ "it": "tipo",
14
+ "es": "typo",
15
+ "pl": "typo",
16
+ "uk": "типи",
17
+ "zh-cn": "类型"
18
+ },
19
+ "3.0.16": {
20
+ "en": "fix action dp",
21
+ "de": "funktion dp",
22
+ "ru": "исправить действие dp",
23
+ "pt": "corrigir ação dp",
24
+ "nl": "fix actie dp",
25
+ "fr": "corriger l'action dp",
26
+ "it": "fix azione dp",
27
+ "es": "arreglar acción dp",
28
+ "pl": "fix action dp",
29
+ "uk": "фіксувати дію dp",
30
+ "zh-cn": "固定动作 dp"
31
+ },
6
32
  "3.0.15": {
7
33
  "en": "update",
8
34
  "de": "aktualisierung",
@@ -67,32 +93,6 @@
67
93
  "pl": "fix info.connection",
68
94
  "uk": "фіксувати інформацію.connection",
69
95
  "zh-cn": "修复信息.连接"
70
- },
71
- "3.0.10": {
72
- "en": "Dependencies have been updated\nChanged role of `color_temp_startup` state to `level` to avoid double `level.temperature` in one device\nfix ZBMINIR2 inching DP\ndelete DP colortempstartup",
73
- "de": "Abhängigkeiten wurden aktualisiert\nÄnderung der Rolle von `color_temp_startup` Zustand auf `level`, um Doppel `level.temperature` in einem Gerät zu vermeiden\nzBMINIR2 Inch DP reparieren\nlöschen DP colortempstartup",
74
- "ru": "Зависимости были обновлены\nИзменилась роль состояния «color_temp_startup» до «level», чтобы избежать двойной «level.temperature» в одном устройстве\nzBMINIR2 Inching DP\nудалить DP colortempstartup",
75
- "pt": "As dependências foram atualizadas\nPapel alterado do estado de `color_temp_startup` para `level` para evitar o duplo `level.temperature` em um dispositivo\ncorrigir ZBMINIR2 nching DP\napagar DP colortempstartup",
76
- "nl": "Afhankelijkheden zijn bijgewerkt\nVeranderde rol van Color_temp_startup\nfix ZBMINIR2 inching DP\nverwijderen DP colortempstartup",
77
- "fr": "Les dépendances ont été actualisées\nChangement du rôle de l'état `color_temp_startup` à `level` pour éviter le double `level.temperature` dans un seul appareil\ncorrection de l'encoche ZBMINIR2 DP\nsupprimer DP colortempstartup",
78
- "it": "Le dipendenze sono state aggiornate\nCambiato ruolo di `color_temp_startup` stato a `level` per evitare doppio `level.temperature` in un dispositivo\ncorrezione ZBMINIR2 inching DP\neliminare DP colortempstartup",
79
- "es": "Se han actualizado las dependencias\nCambiar el papel de `color_temp_startup` estado a `nivel` para evitar el doble `nivel.temperatura` en un dispositivo\nfijar ZBMINIR2 inching DP\neliminar DP colortempstartup",
80
- "pl": "Zaktualizowano zależności\nZmieniona rola 'color _ temp _ startup' stanu na 'poziom', aby uniknąć podwójnego 'level.temperature' w jednym urządzeniu\nfix ZBMINIR2 inching DP\nusuń odtwarzacz kolorów DP",
81
- "uk": "Залежність було оновлено\nЗмінена роль `color_temp_startup` для `level`, щоб уникнути подвійного рівня `level. Температура` в одному пристрої\nзафіксувати ZBMINIR2 інвертор ДП\nвидалити DP Colortempstartup",
82
- "zh-cn": "依赖关系已更新\n将“color_temp_startup”状态的作用改为“level”,以避免一个设备中的双“level.teperature”\n修补 ZBMINIR2 插入 DP\n删除 DP 调色符启动"
83
- },
84
- "3.0.9": {
85
- "en": "queue up message parsing\nSupport for non-default MQTT base topics",
86
- "de": "nachrichtenparsing löschen\nUnterstützung für nicht-Standard-MQTT-Basisthemen",
87
- "ru": "очередь сообщения парсинг\nПоддержка базовых тем MQTT без по умолчанию",
88
- "pt": "processamento de mensagens em fila\nSuporte para tópicos de base MQTT não padrão",
89
- "nl": "wachtrij bericht ontleden\nOndersteuning voor niet-standaard MQTT-basisonderwerpen",
90
- "fr": "analyse des messages en attente\nPrise en charge des sujets de base MQTT non par défaut",
91
- "it": "code up messaggio parsing\nSupporto per argomenti di base MQTT non di default",
92
- "es": "mensaje de búsqueda\nApoyo a los temas básicos de MQTT no predeterminados",
93
- "pl": "kolejka w górę wiadomości parsing\nWsparcie dla niedomyślnych tematów bazowych MQTT",
94
- "uk": "чергування повідомлень\nПідтримка нерозголошення MQTT базових тем",
95
- "zh-cn": "排队分析信件\n支持非默认 MQTT 基础主题"
96
96
  }
97
97
  },
98
98
  "messages": [
package/lib/exposes.js CHANGED
@@ -1,3 +1,4 @@
1
+
1
2
  'use strict';
2
3
 
3
4
  const statesDefs = require('./states').states;
@@ -192,9 +193,7 @@ async function createDeviceFromExposes(devicesMessag, adapter) {
192
193
  if (state === undefined) {
193
194
  return 0;
194
195
  }
195
- if (access === undefined) {
196
- access = z2mAccess.ALL;
197
- }
196
+ if (access === undefined) {access = z2mAccess.ALL;}
198
197
  state.readable = (access & z2mAccess.STATE) > 0;
199
198
  state.writable = (access & z2mAccess.SET) > 0;
200
199
  const stateExists = states.findIndex((x, _index, _array) => x.id === state.id);
@@ -754,14 +753,18 @@ access = z2mAccess.ALL;
754
753
  break;
755
754
  }
756
755
  }
757
- if (state) {
758
- pushToStates(state, expose.access);
759
- }
756
+ if (state) {pushToStates(state, expose.access);}
760
757
  break;
761
758
 
762
759
  case 'enum':
763
- switch (expose.name) {
760
+ switch (expose.name) {
764
761
  case 'action': {
762
+ // generate an 'action' state
763
+ state = genState(expose);
764
+ state.isEvent = true;
765
+ pushToStates(state, expose.access);
766
+ state = null;
767
+
765
768
  if (!Array.isArray(expose.values)) {
766
769
  break;
767
770
  }
@@ -1076,32 +1079,7 @@ pushToStates(state, expose.access);
1076
1079
  expose.access
1077
1080
  );
1078
1081
  }
1079
- // else if (actionName == 'hue_move') {
1080
- // pushToStates({
1081
- // id: 'hue_move',
1082
- // name: 'Hue move rate',
1083
- // icon: undefined,
1084
- // role: 'level.color.hue',
1085
- // write: false,
1086
- // read: true,
1087
- // type: 'number',
1088
- // min: 0,
1089
- // max: 360,
1090
- // def: 0,
1091
- // isEvent: true,
1092
- // getter: (payload) => {
1093
- // if (payload.action != 'hue_move') {
1094
- // return undefined;
1095
- // }
1096
-
1097
- // if (payload.action_level) {
1098
- // return payload.action_level;
1099
- // } else {
1100
- // return undefined;
1101
- // }
1102
- // }
1103
- // }, expose.access);
1104
- // }
1082
+
1105
1083
  else {
1106
1084
  pushToStates(
1107
1085
  {
@@ -1135,9 +1113,7 @@ pushToStates(state, expose.access);
1135
1113
  state = genState(expose);
1136
1114
  break;
1137
1115
  }
1138
- if (state) {
1139
- pushToStates(state, expose.access);
1140
- }
1116
+ if (state) {pushToStates(state, expose.access);}
1141
1117
  break;
1142
1118
 
1143
1119
  case 'binary':
@@ -1175,9 +1151,7 @@ pushToStates(state, expose.access);
1175
1151
  break;
1176
1152
  }
1177
1153
  }
1178
- if (state) {
1179
- pushToStates(state, expose.access);
1180
- }
1154
+ if (state) {pushToStates(state, expose.access);}
1181
1155
  break;
1182
1156
 
1183
1157
  case 'text':
@@ -127,11 +127,7 @@ class StatesController {
127
127
  // Is not an action
128
128
  // check if its a motion sensor (occupancy state) and if configuration is set to update state every time
129
129
  // if yes, use setStateSafelyAsync instead of setStateChangedSafelyAsync
130
- else if (
131
- this.adapter.config.allwaysUpdateOccupancyState === true &&
132
- state.id === 'occupancy' &&
133
- value === true
134
- ) {
130
+ else if (this.adapter.config.allwaysUpdateOccupancyState === true && state.id === 'occupancy' && value === true) {
135
131
  await this.setStateSafelyAsync(stateName, value);
136
132
  }
137
133
  // end section for motion sensor update
@@ -159,14 +155,13 @@ class StatesController {
159
155
  } else {
160
156
  await this.setStateSafelyAsync(stateName, state.getter(messageObj.payload));
161
157
  }
158
+ // publish the action into action dp
159
+ if (state.prop && state.prop == 'action') {
160
+ await this.setStateSafelyAsync(`${device.ieee_address}.action`, messageObj.payload.action);
161
+ }
162
162
  } else {
163
163
  await this.setStateChangedSafelyAsync(stateName, state.getter(messageObj.payload));
164
- }
165
-
166
- // publish the action into action dp
167
- if (state.prop && state.prop == 'action') {
168
- await this.setStateSafelyAsync(`${device.ieee_address}.action`, messageObj.payload.action);
169
- }
164
+ }
170
165
  } catch (err) {
171
166
  incStatsQueue[incStatsQueue.length] = messageObj;
172
167
  this.adapter.log.debug(`Can not set ${stateName}, queue state in incStatsQueue!`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.zigbee2mqtt",
3
- "version": "3.0.15",
3
+ "version": "3.0.17",
4
4
  "description": "Zigbee2MQTT adapter for ioBroker",
5
5
  "author": {
6
6
  "name": "Dennis Rathjen and Arthur Rupp",