zigbee-herdsman-converters 25.15.0 → 25.17.0

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.
Files changed (183) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/dist/converters/fromZigbee.d.ts +308 -293
  3. package/dist/converters/fromZigbee.d.ts.map +1 -1
  4. package/dist/converters/fromZigbee.js +122 -95
  5. package/dist/converters/fromZigbee.js.map +1 -1
  6. package/dist/devices/adeo.js.map +1 -1
  7. package/dist/devices/amina.js.map +1 -1
  8. package/dist/devices/aurora_lighting.d.ts.map +1 -1
  9. package/dist/devices/aurora_lighting.js.map +1 -1
  10. package/dist/devices/awox.d.ts.map +1 -1
  11. package/dist/devices/awox.js +37 -28
  12. package/dist/devices/awox.js.map +1 -1
  13. package/dist/devices/bacchus.js +2 -2
  14. package/dist/devices/bacchus.js.map +1 -1
  15. package/dist/devices/bitron.js.map +1 -1
  16. package/dist/devices/bituo_technik.js.map +1 -1
  17. package/dist/devices/bosch.d.ts.map +1 -1
  18. package/dist/devices/bosch.js +12 -9
  19. package/dist/devices/bosch.js.map +1 -1
  20. package/dist/devices/candeo.d.ts.map +1 -1
  21. package/dist/devices/candeo.js +19 -8
  22. package/dist/devices/candeo.js.map +1 -1
  23. package/dist/devices/centralite.js.map +1 -1
  24. package/dist/devices/ctm.js +1 -1
  25. package/dist/devices/ctm.js.map +1 -1
  26. package/dist/devices/custom_devices_diy.js +2 -2
  27. package/dist/devices/custom_devices_diy.js.map +1 -1
  28. package/dist/devices/danfoss.d.ts.map +1 -1
  29. package/dist/devices/danfoss.js +3 -0
  30. package/dist/devices/danfoss.js.map +1 -1
  31. package/dist/devices/databyte.js.map +1 -1
  32. package/dist/devices/dawon_dns.js.map +1 -1
  33. package/dist/devices/develco.js +1 -1
  34. package/dist/devices/develco.js.map +1 -1
  35. package/dist/devices/dlink.js.map +1 -1
  36. package/dist/devices/easyiot.js.map +1 -1
  37. package/dist/devices/eurotronic.js +1 -1
  38. package/dist/devices/eurotronic.js.map +1 -1
  39. package/dist/devices/ewelink.js.map +1 -1
  40. package/dist/devices/gmmts.d.ts.map +1 -1
  41. package/dist/devices/gmmts.js +5 -5
  42. package/dist/devices/gmmts.js.map +1 -1
  43. package/dist/devices/heiman.d.ts.map +1 -1
  44. package/dist/devices/heiman.js +22 -23
  45. package/dist/devices/heiman.js.map +1 -1
  46. package/dist/devices/hive.js +1 -1
  47. package/dist/devices/hive.js.map +1 -1
  48. package/dist/devices/ikea.d.ts.map +1 -1
  49. package/dist/devices/ikea.js +3 -1
  50. package/dist/devices/ikea.js.map +1 -1
  51. package/dist/devices/immax.js.map +1 -1
  52. package/dist/devices/inovelli.d.ts.map +1 -1
  53. package/dist/devices/inovelli.js +9 -5
  54. package/dist/devices/inovelli.js.map +1 -1
  55. package/dist/devices/jethome.js.map +1 -1
  56. package/dist/devices/kmpcil.d.ts.map +1 -1
  57. package/dist/devices/kmpcil.js.map +1 -1
  58. package/dist/devices/konke.js.map +1 -1
  59. package/dist/devices/led_trading.js.map +1 -1
  60. package/dist/devices/leviton.js.map +1 -1
  61. package/dist/devices/lidl.js.map +1 -1
  62. package/dist/devices/lifecontrol.js +4 -4
  63. package/dist/devices/lifecontrol.js.map +1 -1
  64. package/dist/devices/linptech.js.map +1 -1
  65. package/dist/devices/livolo.js.map +1 -1
  66. package/dist/devices/lixee.d.ts.map +1 -1
  67. package/dist/devices/lixee.js +5 -4
  68. package/dist/devices/lixee.js.map +1 -1
  69. package/dist/devices/lumi.d.ts.map +1 -1
  70. package/dist/devices/lumi.js +7 -0
  71. package/dist/devices/lumi.js.map +1 -1
  72. package/dist/devices/lutron.d.ts.map +1 -1
  73. package/dist/devices/lutron.js +15 -2
  74. package/dist/devices/lutron.js.map +1 -1
  75. package/dist/devices/lytko.js.map +1 -1
  76. package/dist/devices/mindy.js.map +1 -1
  77. package/dist/devices/moes.js.map +1 -1
  78. package/dist/devices/multiterm.js.map +1 -1
  79. package/dist/devices/namron.js.map +1 -1
  80. package/dist/devices/niko.js.map +1 -1
  81. package/dist/devices/nous.d.ts.map +1 -1
  82. package/dist/devices/nous.js +4 -3
  83. package/dist/devices/nous.js.map +1 -1
  84. package/dist/devices/nue_3a.js.map +1 -1
  85. package/dist/devices/onesti.js.map +1 -1
  86. package/dist/devices/orvibo.js.map +1 -1
  87. package/dist/devices/owon.js.map +1 -1
  88. package/dist/devices/paulmann.js.map +1 -1
  89. package/dist/devices/perenio.d.ts.map +1 -1
  90. package/dist/devices/perenio.js +0 -1
  91. package/dist/devices/perenio.js.map +1 -1
  92. package/dist/devices/plugwise.js.map +1 -1
  93. package/dist/devices/pushok.js.map +1 -1
  94. package/dist/devices/qa.js.map +1 -1
  95. package/dist/devices/rgb_genie.js.map +1 -1
  96. package/dist/devices/sber.js.map +1 -1
  97. package/dist/devices/schneider_electric.d.ts.map +1 -1
  98. package/dist/devices/schneider_electric.js.map +1 -1
  99. package/dist/devices/sengled.js.map +1 -1
  100. package/dist/devices/shelly.d.ts.map +1 -1
  101. package/dist/devices/shelly.js +1 -3
  102. package/dist/devices/shelly.js.map +1 -1
  103. package/dist/devices/shinasystem.js.map +1 -1
  104. package/dist/devices/siglis.js.map +1 -1
  105. package/dist/devices/sinope.js +1 -1
  106. package/dist/devices/sinope.js.map +1 -1
  107. package/dist/devices/slacky_diy.d.ts.map +1 -1
  108. package/dist/devices/slacky_diy.js +13 -15
  109. package/dist/devices/slacky_diy.js.map +1 -1
  110. package/dist/devices/sonoff.js +2 -2
  111. package/dist/devices/sonoff.js.map +1 -1
  112. package/dist/devices/stello.js.map +1 -1
  113. package/dist/devices/stelpro.js.map +1 -1
  114. package/dist/devices/sunricher.d.ts +12 -0
  115. package/dist/devices/sunricher.d.ts.map +1 -1
  116. package/dist/devices/sunricher.js.map +1 -1
  117. package/dist/devices/third_reality.d.ts.map +1 -1
  118. package/dist/devices/third_reality.js +2 -0
  119. package/dist/devices/third_reality.js.map +1 -1
  120. package/dist/devices/tuya.d.ts.map +1 -1
  121. package/dist/devices/tuya.js +58 -8
  122. package/dist/devices/tuya.js.map +1 -1
  123. package/dist/devices/ubisys.js.map +1 -1
  124. package/dist/devices/waxman.d.ts.map +1 -1
  125. package/dist/devices/waxman.js +17 -15
  126. package/dist/devices/waxman.js.map +1 -1
  127. package/dist/devices/wirenboard.js +1 -1
  128. package/dist/devices/wirenboard.js.map +1 -1
  129. package/dist/devices/woolley.js.map +1 -1
  130. package/dist/devices/xyzroe.js +2 -2
  131. package/dist/devices/xyzroe.js.map +1 -1
  132. package/dist/devices/yale.js.map +1 -1
  133. package/dist/devices/zigbeetlc.d.ts.map +1 -1
  134. package/dist/devices/zigbeetlc.js +8 -0
  135. package/dist/devices/zigbeetlc.js.map +1 -1
  136. package/dist/lib/adurosmart.js.map +1 -1
  137. package/dist/lib/develco.js +2 -2
  138. package/dist/lib/develco.js.map +1 -1
  139. package/dist/lib/ewelink.d.ts +3 -3
  140. package/dist/lib/ewelink.js.map +1 -1
  141. package/dist/lib/ikea.d.ts.map +1 -1
  142. package/dist/lib/ikea.js +4 -4
  143. package/dist/lib/ikea.js.map +1 -1
  144. package/dist/lib/ledvance.d.ts +3 -3
  145. package/dist/lib/ledvance.d.ts.map +1 -1
  146. package/dist/lib/ledvance.js.map +1 -1
  147. package/dist/lib/legacy.d.ts +182 -182
  148. package/dist/lib/legacy.d.ts.map +1 -1
  149. package/dist/lib/legacy.js +6 -6
  150. package/dist/lib/legacy.js.map +1 -1
  151. package/dist/lib/legrand.d.ts +15 -15
  152. package/dist/lib/legrand.js.map +1 -1
  153. package/dist/lib/lumi.d.ts +129 -129
  154. package/dist/lib/lumi.d.ts.map +1 -1
  155. package/dist/lib/lumi.js +18 -14
  156. package/dist/lib/lumi.js.map +1 -1
  157. package/dist/lib/modernExtend.d.ts +10 -11
  158. package/dist/lib/modernExtend.d.ts.map +1 -1
  159. package/dist/lib/modernExtend.js +14 -8
  160. package/dist/lib/modernExtend.js.map +1 -1
  161. package/dist/lib/namron.d.ts +6 -6
  162. package/dist/lib/namron.js.map +1 -1
  163. package/dist/lib/philips.d.ts +6 -6
  164. package/dist/lib/philips.js.map +1 -1
  165. package/dist/lib/sunricher.d.ts.map +1 -1
  166. package/dist/lib/sunricher.js +1 -0
  167. package/dist/lib/sunricher.js.map +1 -1
  168. package/dist/lib/tuya.d.ts +73 -53
  169. package/dist/lib/tuya.d.ts.map +1 -1
  170. package/dist/lib/tuya.js +6 -3
  171. package/dist/lib/tuya.js.map +1 -1
  172. package/dist/lib/types.d.ts +33 -10
  173. package/dist/lib/types.d.ts.map +1 -1
  174. package/dist/lib/ubisys.js.map +1 -1
  175. package/dist/lib/utils.d.ts +4 -4
  176. package/dist/lib/utils.d.ts.map +1 -1
  177. package/dist/lib/utils.js +4 -0
  178. package/dist/lib/utils.js.map +1 -1
  179. package/dist/lib/zosung.d.ts +18 -18
  180. package/dist/lib/zosung.js +1 -1
  181. package/dist/lib/zosung.js.map +1 -1
  182. package/dist/models-index.json +1 -1
  183. package/package.json +1 -1
@@ -32,13 +32,17 @@ var __importStar = (this && this.__importStar) || (function () {
32
32
  return result;
33
33
  };
34
34
  })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
35
38
  Object.defineProperty(exports, "__esModule", { value: true });
36
39
  exports.ias_sos_alarm_2 = exports.ias_carbon_monoxide_alarm_1_gas_alarm_2 = exports.ias_carbon_monoxide_alarm_1 = exports.ias_contact_alarm_1_report = exports.ias_contact_alarm_1 = exports.ias_smoke_alarm_1 = exports.ias_gas_alarm_2 = exports.ias_gas_alarm_1 = exports.ias_vibration_alarm_1_with_timeout = exports.ias_vibration_alarm_1 = exports.ias_water_leak_alarm_1_report = exports.ias_water_leak_alarm_1 = exports.ias_siren = exports.ias_no_alarm = exports.power_on_behavior = exports.on_off_skip_duplicate_transaction = exports.on_off_force_multiendpoint = exports.on_off = exports.gas_metering = exports.electrical_measurement = exports.metering = exports.meter_identification = exports.color_colortemp = exports.level_config = exports.brightness = exports.occupancy_timeout = exports.occupancy_with_timeout = exports.occupancy = exports.co2 = exports.pressure = exports.soil_moisture = exports.flow = exports.pm25 = exports.humidity = exports.device_temperature = exports.temperature = exports.battery = exports.linkquality_from_basic = exports.lock_user_status_response = exports.lock_pin_code_response = exports.lock_set_pin_code_response = exports.lock = exports.lock_programming_event_read_pincode = exports.lock_programming_event = exports.lock_operation_event = exports.hvac_user_interface = exports.thermostat_weekly_schedule = exports.thermostat = exports.fan_speed = exports.fan = void 0;
37
40
  exports.ias_smoke_alarm_1_develco = exports.elko_thermostat = exports.namron_hvac_user_interface = exports.namron_thermostat = exports.power_source = exports.ias_wd = exports.ias_enroll = exports.checkin_presence = exports.lighting_ballast_configuration = exports.curtain_position_analog_output = exports.cover_state_via_onoff = exports.cover_position_via_brightness = exports.cover_position_tilt = exports.identify = exports.command_off_state = exports.command_on_state = exports.command_emergency = exports.command_move_to_hue = exports.command_move_to_saturation = exports.command_move_hue = exports.command_move_to_color = exports.command_move_to_color_temp = exports.command_color_loop_set = exports.command_step_saturation = exports.command_step_hue = exports.command_move_to_hue_and_saturation = exports.command_enhanced_move_to_hue_and_saturation = exports.command_step_color_temperature = exports.command_move_color_temperature = exports.command_stop = exports.command_step = exports.command_move = exports.command_move_to_level = exports.command_toggle = exports.command_off_with_effect = exports.command_off = exports.command_on = exports.command_cover_close = exports.command_cover_open = exports.command_cover_stop = exports.command_arm = exports.command_panic = exports.command_recall = exports.command_store = exports.ias_occupancy_alarm_1_with_timeout = exports.ias_occupancy_only_alarm_2 = exports.ias_alarm_only_alarm_1 = exports.ias_occupancy_alarm_2 = exports.ias_occupancy_alarm_1_report = exports.ias_occupancy_alarm_1 = void 0;
38
- exports.K4003C_binary_input = exports.diyruz_rspm = exports.diyruz_contact = exports.ewelink_action = exports.restorable_brightness = exports.tint404011_move_to_color_temp = exports.tint_scene = exports.orvibo_raw_2 = exports.orvibo_raw_1 = exports.danfoss_icon_hvac_user_interface = exports.danfoss_icon_regulator = exports.danfoss_icon_battery = exports.danfoss_icon_floor_sensor = exports.danfoss_thermostat_setpoint_scheduled = exports.danfoss_thermostat = exports.meazon_meter = exports.heiman_ir_remote = exports.plaid_battery = exports.keypad20_battery = exports.keypad20states = exports.ptvo_switch_analog_input = exports.ptvo_switch_uart = exports.livolo_switch_state_raw = exports.easycodetouch_action = exports.easycode_action = exports.livolo_pir_state = exports.livolo_illuminance_state = exports.livolo_hygrometer_state = exports.livolo_cover_state = exports.livolo_dimmer_state = exports.livolo_curtain_switch_state = exports.livolo_new_switch_state_4gang = exports.livolo_new_switch_state_2gang = exports.livolo_new_switch_state = exports.livolo_socket_state = exports.livolo_switch_state = exports.tuya_switch_scene = exports.WSZ01_on_off_action = exports.tuya_cover_options = exports.tuya_cover_options_2 = exports.ts0216_siren = exports.terncy_temperature = exports.terncy_contact = exports.ZigUP = exports.DTB190502A1 = exports.terncy_knob = exports.tuya_doorbell_button = exports.wiser_device_info = exports.tuya_led_controller = exports.ts0201_temperature_humidity_alarm = void 0;
39
- exports.diyruz_zintercom_config = exports.diyruz_airsense_config_hum = exports.diyruz_airsense_config_pres = exports.diyruz_airsense_config_temp = exports.diyruz_airsense_config_co2 = exports.diyruz_geiger_config = exports.diyruz_geiger = exports.diyruz_freepad_config = exports.javis_lock_report = exports.heiman_scenes = exports.STS_PRS_251_presence = exports.PGC410EU_presence = exports.ZMCSW032D_cover_position = exports.SAGE206612_state = exports.almond_click = exports.color_stop_raw = exports.adeo_button_65024 = exports.scenes_recall_scene_65024 = exports.heiman_air_quality = exports.heiman_hcho = exports.U02I007C01_water_leak = exports.U02I007C01_contact = exports.keen_home_smart_vent_pressure = exports.qlwz_letv8key_switch = exports.konke_action = exports.ptvo_multistate_action = exports.command_status_change_notification_action = exports.W2_module_carbon_monoxide = exports.legrand_greenpower = exports.legrand_power_alarm = exports.legrand_pilot_wire_mode = exports.legrand_master_switch_center = exports.legrand_scenes = exports.bticino_4027C_binary_input_moving = exports.legrand_binary_input_on_off = exports.legrand_binary_input_moving = exports.hue_smart_button_event = exports.byun_gas_true = exports.byun_gas_false = exports.byun_smoke_true = exports.byun_smoke_false = exports.smartthings_acceleration = exports._3310_humidity = exports.kmpcil_res005_on_off = exports.kmpcil_res005_occupancy = exports.diyruz_freepad_clicks = exports._8840100H_water_leak_alarm = exports.enocean_ptm216z = exports.enocean_ptm215ze = exports.enocean_ptm215z = void 0;
41
+ exports.diyruz_rspm = exports.diyruz_contact = exports.ewelink_action = exports.restorable_brightness = exports.tint404011_move_to_color_temp = exports.tint_scene = exports.orvibo_raw_2 = exports.orvibo_raw_1 = exports.danfoss_icon_hvac_user_interface = exports.danfoss_icon_regulator = exports.danfoss_icon_battery = exports.danfoss_icon_floor_sensor = exports.danfoss_thermostat_setpoint_scheduled = exports.danfoss_hvac_ui = exports.danfoss_thermostat = exports.meazon_meter = exports.heiman_ir_remote = exports.plaid_battery = exports.keypad20_battery = exports.keypad20states = exports.ptvo_switch_analog_input = exports.ptvo_switch_uart = exports.livolo_switch_state_raw = exports.easycodetouch_action = exports.easycode_action = exports.livolo_pir_state = exports.livolo_illuminance_state = exports.livolo_hygrometer_state = exports.livolo_cover_state = exports.livolo_dimmer_state = exports.livolo_curtain_switch_state = exports.livolo_new_switch_state_4gang = exports.livolo_new_switch_state_2gang = exports.livolo_new_switch_state = exports.livolo_socket_state = exports.livolo_switch_state = exports.tuya_switch_scene = exports.WSZ01_on_off_action = exports.tuya_cover_options = exports.tuya_cover_options_2 = exports.ts0216_siren = exports.terncy_temperature = exports.terncy_contact = exports.ZigUP = exports.DTB190502A1 = exports.terncy_knob = exports.tuya_doorbell_button = exports.wiser_device_info = exports.tuya_led_controller = exports.ts0201_temperature_humidity_alarm = void 0;
42
+ exports.diyruz_zintercom_config = exports.diyruz_airsense_config_hum = exports.diyruz_airsense_config_pres = exports.diyruz_airsense_config_temp = exports.diyruz_airsense_config_co2 = exports.diyruz_geiger_config = exports.diyruz_geiger = exports.diyruz_freepad_config = exports.javis_lock_report = exports.heiman_scenes = exports.STS_PRS_251_presence = exports.PGC410EU_presence = exports.ZMCSW032D_cover_position = exports.SAGE206612_state = exports.almond_click = exports.color_stop_raw = exports.adeo_button_65024 = exports.scenes_recall_scene_65024 = exports.heiman_air_quality = exports.heiman_hcho = exports.U02I007C01_water_leak = exports.U02I007C01_contact = exports.keen_home_smart_vent_pressure = exports.qlwz_letv8key_switch = exports.konke_action = exports.ptvo_multistate_action = exports.command_status_change_notification_action = exports.W2_module_carbon_monoxide = exports.legrand_greenpower = exports.legrand_power_alarm = exports.legrand_pilot_wire_mode = exports.legrand_master_switch_center = exports.legrand_scenes = exports.bticino_4027C_binary_input_moving = exports.legrand_binary_input_on_off = exports.legrand_binary_input_moving = exports.hue_smart_button_event = exports.byun_gas_true = exports.byun_gas_false = exports.byun_smoke_true = exports.byun_smoke_false = exports.smartthings_acceleration = exports._3310_humidity = exports.kmpcil_res005_on_off = exports.kmpcil_res005_occupancy = exports.diyruz_freepad_clicks = exports.enocean_ptm216z = exports.enocean_ptm215ze = exports.enocean_ptm215z = exports.K4003C_binary_input = void 0;
40
43
  exports.ignore_analog_report = exports.ignore_pressure_report = exports.ignore_humidity_report = exports.ignore_temperature_report = exports.ignore_occupancy_report = exports.ignore_illuminance_report = exports.ignore_basic_report = exports.ignore_onoff_report = exports.awox_refresh = exports.awox_refreshColored = exports.awox_colors = exports.SNZB02_humidity = exports.SNZB02_temperature = exports.hw_version = exports.led_on_motion = exports.tuya_multi_action = exports.command_stop_move_raw = exports.sunricher_switch2801K4 = exports.sunricher_switch2801K2 = exports.tuya_operation_mode = exports.sihas_action = exports.sihas_people_cnt = exports.heiman_doorbell_button = exports.rc_110_level_to_scene = exports.wiser_smart_setpoint_command_client = exports.wiser_smart_thermostat_client = exports.schneider_temperature = exports.schneider_ui_action = exports.schneider_pilot_mode = exports.idlock_fw = exports.idlock = exports.ZB003X_occupancy = exports.ZB003X_attr = exports.itcmdr_clicks = exports.ias_keypad = exports.tuya_relay_din_led_indicator = exports.hue_twilight = exports.hue_tap = exports.hue_dimmer_switch = exports.hue_wall_switch = exports.CCTSwitch_D0001_lighting = exports.CCTSwitch_D0001_levelctrl = exports.hue_wall_switch_device_mode = exports.hue_motion_led_indication = exports.hue_motion_sensitivity = exports.DNCKAT_S00X_buttons = exports.KAMI_occupancy = exports.KAMI_contact = exports.CC2530ROUTER_meta = exports.CC2530ROUTER_led = void 0;
41
44
  exports.TS110E_switch_type = exports.TS110E_light_type = exports.TS110E = exports.wiser_smart_thermostat = exports.wiser_lighting_ballast_configuration = exports.schneider_lighting_ballast_configuration = exports.ZM35HQ_attr = exports.terncy_raw = exports.eurotronic_thermostat = exports.viessmann_thermostat = exports.stelpro_thermostat = exports.SP600_power = exports.ias_ace_occupancy_with_timeout = exports.command_on_presence = exports.EKO09738_metering = exports.metering_datek = exports.command_arm_with_transaction = exports.ignore_electrical_measurement = exports.ignore_metering = exports.ignore_tuya_raw = exports.ignore_tuya_set_time = exports.ignore_time_read = exports.ignore_zclversion_read = exports.ignore_haDiagnostic = exports.ignore_genOta = exports.ignore_genLevelCtrl_report = exports.ignore_poll_ctrl = exports.ignore_command_stop = exports.ignore_command_step = exports.ignore_command_off_with_effect = exports.ignore_command_off = exports.ignore_command_on = exports.ignore_genIdentify = exports.ignore_iasace_commandgetpanelstatus = exports.ignore_iaszone_report = exports.ignore_iaszone_statuschange = exports.ignore_iaszone_attreport = exports.ignore_thermostat_report = exports.ignore_closuresWindowCovering_report = exports.ignore_light_color_colortemp_report = exports.ignore_light_brightness_report = exports.ignore_power_report = exports.ignore_multistate_report = void 0;
45
+ const node_assert_1 = __importDefault(require("node:assert"));
42
46
  const libColor = __importStar(require("../lib/color"));
43
47
  const constants = __importStar(require("../lib/constants"));
44
48
  const exposes = __importStar(require("../lib/exposes"));
@@ -402,9 +406,6 @@ exports.lock_user_status_response = {
402
406
  const userId = data.userid.toString();
403
407
  const result = { users: {} };
404
408
  result.users[userId] = { status: status };
405
- if (options?.expose_pin && data.pincodevalue) {
406
- result.users[userId].pin_code = data.pincodevalue;
407
- }
408
409
  return result;
409
410
  },
410
411
  };
@@ -462,7 +463,7 @@ exports.temperature = {
462
463
  type: ["attributeReport", "readResponse"],
463
464
  convert: (model, msg, publish, options, meta) => {
464
465
  if (msg.data.measuredValue !== undefined) {
465
- const temperature = Number.parseFloat(msg.data.measuredValue) / 100.0;
466
+ const temperature = msg.data.measuredValue / 100.0;
466
467
  const property = (0, utils_1.postfixWithEndpointName)("temperature", msg, model, meta);
467
468
  return { [property]: temperature };
468
469
  }
@@ -473,7 +474,7 @@ exports.device_temperature = {
473
474
  type: ["attributeReport", "readResponse"],
474
475
  convert: (model, msg, publish, options, meta) => {
475
476
  if (msg.data.currentTemperature !== undefined) {
476
- const value = Number.parseInt(msg.data.currentTemperature, 10);
477
+ const value = msg.data.currentTemperature;
477
478
  return { device_temperature: value };
478
479
  }
479
480
  },
@@ -482,7 +483,7 @@ exports.humidity = {
482
483
  cluster: "msRelativeHumidity",
483
484
  type: ["attributeReport", "readResponse"],
484
485
  convert: (model, msg, publish, options, meta) => {
485
- const humidity = Number.parseFloat(msg.data.measuredValue) / 100.0;
486
+ const humidity = msg.data.measuredValue / 100.0;
486
487
  const property = (0, utils_1.postfixWithEndpointName)("humidity", msg, model, meta);
487
488
  // https://github.com/Koenkk/zigbee2mqtt/issues/798
488
489
  // Sometimes the sensor publishes non-realistic vales, it should only publish message
@@ -505,7 +506,7 @@ exports.flow = {
505
506
  cluster: "msFlowMeasurement",
506
507
  type: ["attributeReport", "readResponse"],
507
508
  convert: (model, msg, publish, options, meta) => {
508
- const flow = Number.parseFloat(msg.data.measuredValue) / 10.0;
509
+ const flow = msg.data.measuredValue / 10.0;
509
510
  const property = (0, utils_1.postfixWithEndpointName)("flow", msg, model, meta);
510
511
  if (msg.data.measuredValue !== undefined) {
511
512
  return { [property]: flow };
@@ -516,7 +517,7 @@ exports.soil_moisture = {
516
517
  cluster: "msSoilMoisture",
517
518
  type: ["attributeReport", "readResponse"],
518
519
  convert: (model, msg, publish, options, meta) => {
519
- const soilMoisture = Number.parseFloat(msg.data.measuredValue) / 100.0;
520
+ const soilMoisture = msg.data.measuredValue / 100.0;
520
521
  return { soil_moisture: soilMoisture };
521
522
  },
522
523
  };
@@ -530,7 +531,7 @@ exports.pressure = {
530
531
  pressure = msg.data.scaledValue / 10 ** scale / 100.0; // convert to hPa
531
532
  }
532
533
  else {
533
- pressure = Number.parseFloat(msg.data.measuredValue);
534
+ pressure = msg.data.measuredValue;
534
535
  }
535
536
  return { pressure };
536
537
  },
@@ -944,7 +945,7 @@ exports.ias_no_alarm = {
944
945
  cluster: "ssIasZone",
945
946
  type: ["attributeReport", "commandStatusChangeNotification"],
946
947
  convert: (model, msg, publish, options, meta) => {
947
- const zoneStatus = msg.data.zoneStatus ?? msg.data.zonestatus;
948
+ const zoneStatus = "zonestatus" in msg.data ? msg.data.zonestatus : msg.data.zoneStatus;
948
949
  if (zoneStatus !== undefined) {
949
950
  return {
950
951
  tamper: (zoneStatus & (1 << 2)) > 0,
@@ -1060,7 +1061,7 @@ exports.ias_smoke_alarm_1 = {
1060
1061
  cluster: "ssIasZone",
1061
1062
  type: ["commandStatusChangeNotification", "attributeReport", "readResponse"],
1062
1063
  convert: (model, msg, publish, options, meta) => {
1063
- const zoneStatus = msg.type === "commandStatusChangeNotification" ? msg.data.zonestatus : msg.data.zoneStatus;
1064
+ const zoneStatus = "zonestatus" in msg.data ? msg.data.zonestatus : msg.data.zoneStatus;
1064
1065
  return {
1065
1066
  smoke: (zoneStatus & 1) > 0,
1066
1067
  tamper: (zoneStatus & (1 << 2)) > 0,
@@ -1119,16 +1120,16 @@ exports.ias_carbon_monoxide_alarm_1_gas_alarm_2 = {
1119
1120
  cluster: "ssIasZone",
1120
1121
  type: "commandStatusChangeNotification",
1121
1122
  convert: (model, msg, publish, options, meta) => {
1122
- const { zoneStatus } = msg.data;
1123
+ const { zonestatus } = msg.data;
1123
1124
  return {
1124
- carbon_monoxide: (zoneStatus & 1) > 0,
1125
- gas: (zoneStatus & (1 << 1)) > 0,
1126
- tamper: (zoneStatus & (1 << 2)) > 0,
1127
- battery_low: (zoneStatus & (1 << 3)) > 0,
1128
- trouble: (zoneStatus & (1 << 6)) > 0,
1129
- ac_connected: !((zoneStatus & (1 << 7)) > 0),
1130
- test: (zoneStatus & (1 << 8)) > 0,
1131
- battery_defect: (zoneStatus & (1 << 9)) > 0,
1125
+ carbon_monoxide: (zonestatus & 1) > 0,
1126
+ gas: (zonestatus & (1 << 1)) > 0,
1127
+ tamper: (zonestatus & (1 << 2)) > 0,
1128
+ battery_low: (zonestatus & (1 << 3)) > 0,
1129
+ trouble: (zonestatus & (1 << 6)) > 0,
1130
+ ac_connected: !((zonestatus & (1 << 7)) > 0),
1131
+ test: (zonestatus & (1 << 8)) > 0,
1132
+ battery_defect: (zonestatus & (1 << 9)) > 0,
1132
1133
  };
1133
1134
  },
1134
1135
  };
@@ -1158,7 +1159,7 @@ exports.ias_occupancy_alarm_1 = {
1158
1159
  };
1159
1160
  exports.ias_occupancy_alarm_1_report = {
1160
1161
  cluster: "ssIasZone",
1161
- type: "attributeReport",
1162
+ type: ["attributeReport", "readResponse"],
1162
1163
  convert: (model, msg, publish, options, meta) => {
1163
1164
  const zoneStatus = msg.data.zoneStatus;
1164
1165
  if (zoneStatus !== undefined) {
@@ -2145,16 +2146,17 @@ exports.wiser_device_info = {
2145
2146
  // TODO What is ALG
2146
2147
  const alg = data.slice(1);
2147
2148
  result.ALG = alg.join(",");
2148
- result.occupied_heating_setpoint = alg[2] / 10;
2149
- result.local_temperature = alg[3] / 10;
2149
+ result.occupied_heating_setpoint = Number.parseInt(alg[2], 10) / 10;
2150
+ result.local_temperature = Number.parseInt(alg[3], 10) / 10;
2150
2151
  result.pi_heating_demand = Number.parseInt(alg[9], 10);
2151
2152
  }
2152
2153
  else if (data[0] === "ADC") {
2153
2154
  // TODO What is ADC
2154
2155
  const adc = data.slice(1);
2155
2156
  result.ADC = adc.join(",");
2156
- result.occupied_heating_setpoint = adc[5] / 100;
2157
- result.local_temperature = adc[3] / 10;
2157
+ // TODO: should parseInt?
2158
+ result.occupied_heating_setpoint = Number.parseInt(adc[5], 10) / 100;
2159
+ result.local_temperature = Number.parseInt(adc[3], 10) / 10;
2158
2160
  }
2159
2161
  else if (data[0] === "UI") {
2160
2162
  if (data[1] === "BoostUp") {
@@ -2231,7 +2233,7 @@ exports.ZigUP = {
2231
2233
  let ds18b20Value = null;
2232
2234
  if (msg.data["41368"]) {
2233
2235
  ds18b20Id = msg.data["41368"].split(":")[0];
2234
- ds18b20Value = (0, utils_1.precisionRound)(msg.data["41368"].split(":")[1], 2);
2236
+ ds18b20Value = (0, utils_1.precisionRound)(Number.parseFloat(msg.data["41368"].split(":")[1]), 2);
2235
2237
  }
2236
2238
  return {
2237
2239
  state: msg.data.onOff === 1 ? "ON" : "OFF",
@@ -2257,7 +2259,7 @@ exports.terncy_temperature = {
2257
2259
  cluster: "msTemperatureMeasurement",
2258
2260
  type: ["attributeReport", "readResponse"],
2259
2261
  convert: (model, msg, publish, options, meta) => {
2260
- const temperature = Number.parseFloat(msg.data.measuredValue) / 10.0;
2262
+ const temperature = msg.data.measuredValue / 10.0;
2261
2263
  return { temperature: temperature };
2262
2264
  },
2263
2265
  };
@@ -2283,7 +2285,7 @@ exports.tuya_cover_options_2 = {
2283
2285
  convert: (model, msg, publish, options, meta) => {
2284
2286
  const result = {};
2285
2287
  if (msg.data.moesCalibrationTime !== undefined) {
2286
- const value = Number.parseFloat(msg.data.moesCalibrationTime) / 100;
2288
+ const value = msg.data.moesCalibrationTime / 100;
2287
2289
  result[(0, utils_1.postfixWithEndpointName)("calibration_time", msg, model, meta)] = value;
2288
2290
  }
2289
2291
  if (msg.data.tuyaMotorReversal !== undefined) {
@@ -2315,7 +2317,7 @@ exports.tuya_cover_options = {
2315
2317
  result[(0, utils_1.postfixWithEndpointName)("motor_reversal", msg, model, meta)] = reversalLookup[value];
2316
2318
  }
2317
2319
  if (msg.data.moesCalibrationTime !== undefined) {
2318
- const value = Number.parseFloat(msg.data.moesCalibrationTime) / 10.0;
2320
+ const value = msg.data.moesCalibrationTime / 10.0;
2319
2321
  if (["_TZ3000_cet6ch1r", "_TZ3000_5iixzdo7"].includes(meta.device.manufacturerName)) {
2320
2322
  const endpoint = msg.endpoint.ID;
2321
2323
  const calibrationLookup = { 1: "to_open", 2: "to_close" };
@@ -2704,12 +2706,10 @@ exports.ptvo_switch_uart = {
2704
2706
  cluster: "genMultistateValue",
2705
2707
  type: ["attributeReport", "readResponse"],
2706
2708
  convert: (model, msg, publish, options, meta) => {
2707
- let data = msg.data.stateText;
2708
- if (typeof data === "object") {
2709
+ let data = msg.data.stateText; // ZclArray is only for write
2710
+ if (Array.isArray(data)) {
2709
2711
  let bHex = false;
2710
- // biome-ignore lint/suspicious/noImplicitAnyLet: ignored using `--suppress`
2711
2712
  let code;
2712
- // biome-ignore lint/suspicious/noImplicitAnyLet: ignored using `--suppress`
2713
2713
  let index;
2714
2714
  for (index = 0; index < data.length; index += 1) {
2715
2715
  code = data[index];
@@ -2719,7 +2719,7 @@ exports.ptvo_switch_uart = {
2719
2719
  }
2720
2720
  }
2721
2721
  if (!bHex) {
2722
- data = data.toString("latin1");
2722
+ data = data.toString();
2723
2723
  }
2724
2724
  else {
2725
2725
  data = [...data];
@@ -2838,8 +2838,10 @@ exports.heiman_ir_remote = {
2838
2838
  cluster: "heimanSpecificInfraRedRemote",
2839
2839
  type: ["commandStudyKeyRsp", "commandCreateIdRsp", "commandGetIdAndKeyCodeListRsp"],
2840
2840
  convert: (model, msg, publish, options, meta) => {
2841
+ // TODO: split converter for each cmd?
2841
2842
  switch (msg.type) {
2842
2843
  case "commandStudyKeyRsp":
2844
+ (0, node_assert_1.default)("keyCode" in msg.data);
2843
2845
  return {
2844
2846
  action: "learn",
2845
2847
  action_result: msg.data.result === 1 ? "success" : "error",
@@ -2847,6 +2849,7 @@ exports.heiman_ir_remote = {
2847
2849
  action_id: msg.data.result === 1 ? msg.data.id : undefined,
2848
2850
  };
2849
2851
  case "commandCreateIdRsp":
2852
+ (0, node_assert_1.default)("modelType" in msg.data);
2850
2853
  return {
2851
2854
  action: "create",
2852
2855
  action_result: msg.data.id === 0xff ? "error" : "success",
@@ -2854,6 +2857,7 @@ exports.heiman_ir_remote = {
2854
2857
  action_id: msg.data.id !== 0xff ? msg.data.id : undefined,
2855
2858
  };
2856
2859
  case "commandGetIdAndKeyCodeListRsp": {
2860
+ (0, node_assert_1.default)("packetNumber" in msg.data);
2857
2861
  // See cluster.js with data format description
2858
2862
  if (msg.data.packetNumber === 1) {
2859
2863
  // start to collect and merge list
@@ -2984,9 +2988,6 @@ exports.danfoss_thermostat = {
2984
2988
  if (msg.data.danfossRadiatorCovered !== undefined) {
2985
2989
  result[(0, utils_1.postfixWithEndpointName)("radiator_covered", msg, model, meta)] = msg.data.danfossRadiatorCovered === 1;
2986
2990
  }
2987
- if (msg.data.danfossViewingDirection !== undefined) {
2988
- result[(0, utils_1.postfixWithEndpointName)("viewing_direction", msg, model, meta)] = msg.data.danfossViewingDirection === 1;
2989
- }
2990
2991
  if (msg.data.danfossAlgorithmScaleFactor !== undefined) {
2991
2992
  result[(0, utils_1.postfixWithEndpointName)("algorithm_scale_factor", msg, model, meta)] = msg.data.danfossAlgorithmScaleFactor;
2992
2993
  }
@@ -3049,6 +3050,17 @@ exports.danfoss_thermostat = {
3049
3050
  return result;
3050
3051
  },
3051
3052
  };
3053
+ exports.danfoss_hvac_ui = {
3054
+ cluster: "hvacUserInterfaceCfg",
3055
+ type: ["attributeReport", "readResponse"],
3056
+ convert: (model, msg, publish, options, meta) => {
3057
+ const result = {};
3058
+ if (msg.data.danfossViewingDirection !== undefined) {
3059
+ result[(0, utils_1.postfixWithEndpointName)("viewing_direction", msg, model, meta)] = msg.data.danfossViewingDirection === 1;
3060
+ }
3061
+ return result;
3062
+ },
3063
+ };
3052
3064
  exports.danfoss_thermostat_setpoint_scheduled = {
3053
3065
  cluster: "hvacThermostat",
3054
3066
  type: ["attributeReport", "readResponse"],
@@ -3132,11 +3144,11 @@ exports.danfoss_icon_regulator = {
3132
3144
  ? constants.danfossSystemStatusCode[msg.data.danfossSystemStatusCode]
3133
3145
  : msg.data.danfossSystemStatusCode;
3134
3146
  }
3135
- if (msg.data.danfossHeatsupplyRequest !== undefined) {
3147
+ if (msg.data.danfossHeatSupplyRequest !== undefined) {
3136
3148
  result[(0, utils_1.postfixWithEndpointName)("heat_supply_request", msg, model, meta)] =
3137
- constants.danfossHeatsupplyRequest[msg.data.danfossHeatsupplyRequest] !== undefined
3138
- ? constants.danfossHeatsupplyRequest[msg.data.danfossHeatsupplyRequest]
3139
- : msg.data.danfossHeatsupplyRequest;
3149
+ constants.danfossHeatsupplyRequest[msg.data.danfossHeatSupplyRequest] !== undefined
3150
+ ? constants.danfossHeatsupplyRequest[msg.data.danfossHeatSupplyRequest]
3151
+ : msg.data.danfossHeatSupplyRequest;
3140
3152
  }
3141
3153
  if (msg.data.danfossSystemStatusWater !== undefined) {
3142
3154
  result[(0, utils_1.postfixWithEndpointName)("system_status_water", msg, model, meta)] =
@@ -3454,7 +3466,7 @@ exports.enocean_ptm216z = {
3454
3466
  "106_0": "release",
3455
3467
  "104_": "short_press_2_of_2",
3456
3468
  };
3457
- const ID = `${commandID}_${msg.data.commandFrame.raw?.slice(0, 1).join("_") ?? ""}`;
3469
+ const ID = `${commandID}_${("raw" in msg.data.commandFrame && msg.data.commandFrame.raw?.slice(0, 1).join("_")) ?? ""}`;
3458
3470
  if (lookup[ID] === undefined) {
3459
3471
  logger_1.logger.error(`PTM 216Z: missing command '${ID}'`, NS);
3460
3472
  }
@@ -3463,17 +3475,16 @@ exports.enocean_ptm216z = {
3463
3475
  }
3464
3476
  },
3465
3477
  };
3466
- // biome-ignore lint/style/useNamingConvention: ignored using `--suppress`
3467
- exports._8840100H_water_leak_alarm = {
3468
- cluster: "haApplianceEventsAlerts",
3469
- type: "commandAlertsNotification",
3470
- convert: (model, msg, publish, options, meta) => {
3471
- const alertStatus = msg.data.aalert;
3472
- return {
3473
- water_leak: (alertStatus & (1 << 12)) > 0,
3474
- };
3475
- },
3476
- };
3478
+ // export const _8840100H_water_leak_alarm: Fz.Converter = {
3479
+ // cluster: "haApplianceEventsAlerts",
3480
+ // type: "commandAlertsNotification",
3481
+ // convert: (model, msg, publish, options, meta) => {
3482
+ // const alertStatus = msg.data.aalert;
3483
+ // return {
3484
+ // water_leak: (alertStatus & (1 << 12)) > 0,
3485
+ // };
3486
+ // },
3487
+ // };
3477
3488
  exports.diyruz_freepad_clicks = {
3478
3489
  cluster: "genMultistateInput",
3479
3490
  type: ["readResponse", "attributeReport"],
@@ -3504,7 +3515,7 @@ exports._3310_humidity = {
3504
3515
  cluster: "manuSpecificCentraliteHumidity",
3505
3516
  type: ["attributeReport", "readResponse"],
3506
3517
  convert: (model, msg, publish, options, meta) => {
3507
- const humidity = Number.parseFloat(msg.data.measuredValue) / 100.0;
3518
+ const humidity = msg.data.measuredValue / 100.0;
3508
3519
  return { humidity };
3509
3520
  },
3510
3521
  };
@@ -3799,7 +3810,7 @@ exports.heiman_hcho = {
3799
3810
  type: ["attributeReport", "readResponse"],
3800
3811
  convert: (model, msg, publish, options, meta) => {
3801
3812
  if (msg.data.measuredValue) {
3802
- return { hcho: Number.parseFloat(msg.data.measuredValue) / 1000.0 };
3813
+ return { hcho: msg.data.measuredValue / 1000.0 };
3803
3814
  }
3804
3815
  },
3805
3816
  };
@@ -4267,23 +4278,21 @@ exports.CCTSwitch_D0001_levelctrl = {
4267
4278
  type: ["commandMoveToLevel", "commandMoveToLevelWithOnOff", "commandMove", "commandStop"],
4268
4279
  convert: (model, msg, publish, options, meta) => {
4269
4280
  const payload = {};
4270
- if (msg.type === "commandMove" || msg.type === "commandStop") {
4271
- const action = "brightness";
4272
- if (msg.type === "commandStop") {
4273
- const direction = globalStore.getValue(msg.endpoint, "direction");
4274
- const duration = Date.now() - globalStore.getValue(msg.endpoint, "start");
4275
- payload.action = `${action}_${direction}_release`;
4276
- payload.duration = duration;
4277
- payload.action_duration = duration;
4278
- }
4279
- else {
4280
- const direction = msg.data.movemode === 1 ? "down" : "up";
4281
- payload.action = `${action}_${direction}_hold`;
4282
- globalStore.putValue(msg.endpoint, "direction", direction);
4283
- globalStore.putValue(msg.endpoint, "start", Date.now());
4284
- payload.rate = msg.data.rate;
4285
- payload.action_rate = msg.data.rate;
4286
- }
4281
+ if (msg.type === "commandMove") {
4282
+ (0, node_assert_1.default)("movemode" in msg.data);
4283
+ const direction = msg.data.movemode === 1 ? "down" : "up";
4284
+ payload.action = `brightness_${direction}_hold`;
4285
+ globalStore.putValue(msg.endpoint, "direction", direction);
4286
+ globalStore.putValue(msg.endpoint, "start", Date.now());
4287
+ payload.rate = msg.data.rate;
4288
+ payload.action_rate = msg.data.rate;
4289
+ }
4290
+ else if (msg.type === "commandStop") {
4291
+ const direction = globalStore.getValue(msg.endpoint, "direction");
4292
+ const duration = Date.now() - globalStore.getValue(msg.endpoint, "start");
4293
+ payload.action = `brightness_${direction}_release`;
4294
+ payload.duration = duration;
4295
+ payload.action_duration = duration;
4287
4296
  }
4288
4297
  else {
4289
4298
  // wrap the messages from button2 and button4 into a single function
@@ -4294,10 +4303,11 @@ exports.CCTSwitch_D0001_levelctrl = {
4294
4303
  // CCTSwitch_D0001_move_to_colortemp_recall below.
4295
4304
  let clk = "brightness";
4296
4305
  let cmd = null;
4306
+ (0, node_assert_1.default)("level" in msg.data);
4297
4307
  payload.action_brightness = msg.data.level;
4298
- payload.action_transition = Number.parseFloat(msg.data.transtime) / 10.0;
4308
+ payload.action_transition = msg.data.transtime / 10.0;
4299
4309
  payload.brightness = msg.data.level;
4300
- payload.transition = Number.parseFloat(msg.data.transtime) / 10.0;
4310
+ payload.transition = msg.data.transtime / 10.0;
4301
4311
  if (msg.type === "commandMoveToLevel") {
4302
4312
  // pressing the brightness button increments/decrements from 13-254.
4303
4313
  // when it reaches the end (254) it will start decrementing by a step,
@@ -4328,6 +4338,7 @@ exports.CCTSwitch_D0001_lighting = {
4328
4338
  convert: (model, msg, publish, options, meta) => {
4329
4339
  const payload = {};
4330
4340
  if (msg.type === "commandMoveColorTemp") {
4341
+ (0, node_assert_1.default)("movemode" in msg.data);
4331
4342
  const clk = "colortemp";
4332
4343
  payload.rate = msg.data.rate;
4333
4344
  payload.action_rate = msg.data.rate;
@@ -4358,10 +4369,11 @@ exports.CCTSwitch_D0001_lighting = {
4358
4369
  const lastSeq = globalStore.getValue(msg.endpoint, "last_seq");
4359
4370
  const seq = msg.meta.zclTransactionSequenceNumber;
4360
4371
  let clk = "colortemp";
4372
+ (0, node_assert_1.default)("colortemp" in msg.data);
4361
4373
  payload.color_temp = msg.data.colortemp;
4362
- payload.transition = Number.parseFloat(msg.data.transtime) / 10.0;
4374
+ payload.transition = msg.data.transtime / 10.0;
4363
4375
  payload.action_color_temp = msg.data.colortemp;
4364
- payload.action_transition = Number.parseFloat(msg.data.transtime) / 10.0;
4376
+ payload.action_transition = msg.data.transtime / 10.0;
4365
4377
  // because the remote sends two commands for button4, we need to look at the previous command and
4366
4378
  // see if it was the recognized start command for button4 - if so, ignore this second command,
4367
4379
  // because it's not really button3, it's actually button4
@@ -4525,8 +4537,8 @@ exports.ZB003X_attr = {
4525
4537
  type: ["attributeReport", "readResponse"],
4526
4538
  convert: (model, msg, publish, options, meta) => {
4527
4539
  const data = msg.data;
4528
- const senslookup = { "0": "low", "1": "medium", "2": "high" };
4529
- const keeptimelookup = { "0": 0, "1": 30, "2": 60, "3": 120, "4": 240, "5": 480 };
4540
+ const senslookup = { 0: "low", 1: "medium", 2: "high" };
4541
+ const keeptimelookup = { 0: 0, 1: 30, 2: 60, 3: 120, 4: 240, 5: 480 };
4530
4542
  if (data && data.currentZoneSensitivityLevel !== undefined) {
4531
4543
  const value = data.currentZoneSensitivityLevel;
4532
4544
  return { sensitivity: senslookup[value] };
@@ -4640,7 +4652,7 @@ exports.schneider_temperature = {
4640
4652
  cluster: "msTemperatureMeasurement",
4641
4653
  type: ["attributeReport", "readResponse"],
4642
4654
  convert: (model, msg, publish, options, meta) => {
4643
- const temperature = Number.parseFloat(msg.data.measuredValue) / 100.0;
4655
+ const temperature = msg.data.measuredValue / 100.0;
4644
4656
  const property = (0, utils_1.postfixWithEndpointName)("local_temperature", msg, model, meta);
4645
4657
  return { [property]: temperature };
4646
4658
  },
@@ -4661,7 +4673,7 @@ exports.wiser_smart_thermostat_client = {
4661
4673
  };
4662
4674
  exports.wiser_smart_setpoint_command_client = {
4663
4675
  cluster: "hvacThermostat",
4664
- type: ["command", "commandWiserSmartSetSetpoint"],
4676
+ type: ["commandWiserSmartSetSetpoint"],
4665
4677
  convert: (model, msg, publish, options, meta) => {
4666
4678
  const attribute = {};
4667
4679
  const result = {};
@@ -4669,7 +4681,7 @@ exports.wiser_smart_setpoint_command_client = {
4669
4681
  // This also ensures the next client read of setpoint is in sync with the latest commanded value.
4670
4682
  attribute.occupiedHeatingSetpoint = msg.data.setpoint;
4671
4683
  msg.endpoint.saveClusterAttributeKeyValue("hvacThermostat", attribute);
4672
- result.occupied_heating_setpoint = Number.parseFloat(msg.data.setpoint) / 100.0;
4684
+ result.occupied_heating_setpoint = msg.data.setpoint / 100.0;
4673
4685
  logger_1.logger.debug(`received wiser setpoint command with value: '${msg.data.setpoint}'`, NS);
4674
4686
  return result;
4675
4687
  },
@@ -4705,7 +4717,7 @@ exports.sihas_people_cnt = {
4705
4717
  type: ["attributeReport", "readResponse"],
4706
4718
  convert: (model, msg, publish, options, meta) => {
4707
4719
  const lookup = { "0": "idle", "1": "in", "2": "out" };
4708
- const value = (0, utils_1.precisionRound)(Number.parseFloat(msg.data.presentValue), 1);
4720
+ const value = (0, utils_1.precisionRound)(msg.data.presentValue, 1);
4709
4721
  const people = (0, utils_1.precisionRound)(msg.data.presentValue, 0);
4710
4722
  let result = null;
4711
4723
  if (value <= 80) {
@@ -4866,7 +4878,7 @@ exports.SNZB02_temperature = {
4866
4878
  cluster: "msTemperatureMeasurement",
4867
4879
  type: ["attributeReport", "readResponse"],
4868
4880
  convert: (model, msg, publish, options, meta) => {
4869
- const temperature = Number.parseFloat(msg.data.measuredValue) / 100.0;
4881
+ const temperature = msg.data.measuredValue / 100.0;
4870
4882
  // https://github.com/Koenkk/zigbee2mqtt/issues/13640
4871
4883
  // SNZB-02 reports stranges values sometimes
4872
4884
  if (temperature > -33 && temperature < 100) {
@@ -4880,7 +4892,7 @@ exports.SNZB02_humidity = {
4880
4892
  cluster: "msRelativeHumidity",
4881
4893
  type: ["attributeReport", "readResponse"],
4882
4894
  convert: (model, msg, publish, options, meta) => {
4883
- const humidity = Number.parseFloat(msg.data.measuredValue) / 100.0;
4895
+ const humidity = msg.data.measuredValue / 100.0;
4884
4896
  // https://github.com/Koenkk/zigbee2mqtt/issues/13640
4885
4897
  // SNZB-02 reports stranges values sometimes
4886
4898
  if (humidity >= 0 && humidity <= 99.75) {
@@ -5158,7 +5170,8 @@ exports.command_on_presence = {
5158
5170
  cluster: "genOnOff",
5159
5171
  type: "commandOn",
5160
5172
  convert: (model, msg, publish, options, meta) => {
5161
- const payload1 = exports.checkin_presence.convert(model, msg, publish, options, meta);
5173
+ const newMsg = { ...msg, type: "commandCheckin", data: {} };
5174
+ const payload1 = exports.checkin_presence.convert(model, newMsg, publish, options, meta);
5162
5175
  const payload2 = exports.command_on.convert(model, msg, publish, options, meta);
5163
5176
  return { ...payload1, ...payload2 };
5164
5177
  },
@@ -5168,8 +5181,8 @@ exports.ias_ace_occupancy_with_timeout = {
5168
5181
  type: "commandGetPanelStatus",
5169
5182
  options: [exposes.options.occupancy_timeout()],
5170
5183
  convert: (model, msg, publish, options, meta) => {
5171
- msg.data.occupancy = 1;
5172
- return exports.occupancy_with_timeout.convert(model, msg, publish, options, meta);
5184
+ const newMsg = { ...msg, type: "attributeReport", data: { occupancy: 1 } };
5185
+ return exports.occupancy_with_timeout.convert(model, newMsg, publish, options, meta);
5173
5186
  },
5174
5187
  };
5175
5188
  // biome-ignore lint/style/useNamingConvention: ignored using `--suppress`
@@ -5323,8 +5336,8 @@ exports.terncy_raw = {
5323
5336
  value = msg.data[7];
5324
5337
  const sidelookup = { 5: "right", 7: "right", 40: "left", 56: "left" };
5325
5338
  if (sidelookup[value]) {
5326
- msg.data.occupancy = 1;
5327
- const payload = exports.occupancy_with_timeout.convert(model, msg, publish, options, meta);
5339
+ const newMsg = { ...msg, type: "attributeReport", data: { occupancy: 1 } };
5340
+ const payload = exports.occupancy_with_timeout.convert(model, newMsg, publish, options, meta);
5328
5341
  if (payload) {
5329
5342
  payload.action_side = sidelookup[value];
5330
5343
  payload.side = sidelookup[value]; /* legacy: remove this line (replaced by action_side) */
@@ -5346,11 +5359,11 @@ exports.ZM35HQ_attr = {
5346
5359
  result = { ...result1 };
5347
5360
  }
5348
5361
  if (data && data.currentZoneSensitivityLevel !== undefined) {
5349
- const senslookup = { "0": "low", "1": "medium", "2": "high" };
5362
+ const senslookup = { 0: "low", 1: "medium", 2: "high" };
5350
5363
  result.sensitivity = senslookup[data.currentZoneSensitivityLevel];
5351
5364
  }
5352
5365
  if (data && data["61441"] !== undefined) {
5353
- const keeptimelookup = { "0": 30, "1": 60, "2": 120 };
5366
+ const keeptimelookup = { 0: 30, 1: 60, 2: 120 };
5354
5367
  result.keep_time = keeptimelookup[data["61441"]];
5355
5368
  }
5356
5369
  return result;
@@ -5397,7 +5410,14 @@ exports.wiser_smart_thermostat = {
5397
5410
  }
5398
5411
  if (msg.data[0xe020] !== undefined) {
5399
5412
  // wiserSmartCurrentFilPiloteMode
5400
- const lookup = { 0: "comfort", 1: "comfort_-1", 2: "comfort_-2", 3: "energy_saving", 4: "frost_protection", 5: "off" };
5413
+ const lookup = {
5414
+ 0: "comfort",
5415
+ 1: "comfort_-1",
5416
+ 2: "comfort_-2",
5417
+ 3: "energy_saving",
5418
+ 4: "frost_protection",
5419
+ 5: "off",
5420
+ };
5401
5421
  result.fip_setting = lookup[msg.data[0xe020]];
5402
5422
  }
5403
5423
  if (msg.data[0xe030] !== undefined) {
@@ -5406,7 +5426,14 @@ exports.wiser_smart_thermostat = {
5406
5426
  }
5407
5427
  if (msg.data[0xe031] !== undefined) {
5408
5428
  // wiserSmartValveCalibrationStatus
5409
- const lookup = { 0: "ongoing", 1: "successful", 2: "uncalibrated", 3: "failed_e1", 4: "failed_e2", 5: "failed_e3" };
5429
+ const lookup = {
5430
+ 0: "ongoing",
5431
+ 1: "successful",
5432
+ 2: "uncalibrated",
5433
+ 3: "failed_e1",
5434
+ 4: "failed_e2",
5435
+ 5: "failed_e3",
5436
+ };
5410
5437
  result.valve_calibration_status = lookup[msg.data[0xe031]];
5411
5438
  }
5412
5439
  // Radiator thermostats command changes from UI, but report value periodically for sync,