Skip to content

Commit f40f0d5

Browse files
authored
fix: Schneider Electric: implement pilot mode with modernextend, modify device attributes and remove unused converters (#11603)
1 parent 9c3a7c1 commit f40f0d5

3 files changed

Lines changed: 33 additions & 48 deletions

File tree

src/converters/fromZigbee.ts

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4600,18 +4600,6 @@ export const idlock_fw: Fz.Converter<"genBasic", undefined, ["attributeReport",
46004600
return result;
46014601
},
46024602
};
4603-
export const schneider_pilot_mode: Fz.Converter<"schneiderSpecificPilotMode", undefined, ["attributeReport", "readResponse"]> = {
4604-
cluster: "schneiderSpecificPilotMode",
4605-
type: ["attributeReport", "readResponse"],
4606-
convert: (model, msg, publish, options, meta) => {
4607-
const result: KeyValueAny = {};
4608-
const lookup: KeyValueAny = {1: "contactor", 3: "pilot"};
4609-
if ("pilotMode" in msg.data) {
4610-
result.schneider_pilot_mode = lookup[msg.data.pilotMode];
4611-
}
4612-
return result;
4613-
},
4614-
};
46154603
export const schneider_ui_action: Fz.Converter<"wiserDeviceInfo", undefined, "attributeReport"> = {
46164604
cluster: "wiserDeviceInfo",
46174605
type: "attributeReport",

src/converters/toZigbee.ts

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4590,20 +4590,6 @@ export const idlock_relock_enabled: Tz.Converter = {
45904590
await entity.read("closuresDoorLock", [0x4005], {manufacturerCode: Zcl.ManufacturerCode.DATEK_WIRELESS_AS});
45914591
},
45924592
};
4593-
export const schneider_pilot_mode: Tz.Converter = {
4594-
key: ["schneider_pilot_mode"],
4595-
convertSet: async (entity, key, value, meta) => {
4596-
utils.assertString(value, key);
4597-
const lookup = {contactor: 1, pilot: 3};
4598-
value = value.toLowerCase();
4599-
const mode = utils.getFromLookup(value, lookup);
4600-
await entity.write("schneiderSpecificPilotMode", {pilotMode: mode}, {manufacturerCode: Zcl.ManufacturerCode.SCHNEIDER_ELECTRIC});
4601-
return {state: {schneider_pilot_mode: value}};
4602-
},
4603-
convertGet: async (entity, key, meta) => {
4604-
await entity.read("schneiderSpecificPilotMode", ["pilotMode"], {manufacturerCode: Zcl.ManufacturerCode.SCHNEIDER_ELECTRIC});
4605-
},
4606-
};
46074593
export const schneider_dimmer_mode: Tz.Converter = {
46084594
key: ["dimmer_mode"],
46094595
convertSet: async (entity, key, value, meta) => {

src/devices/schneider_electric.ts

Lines changed: 33 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -551,6 +551,21 @@ const schneiderElectricExtend = {
551551
},
552552
zigbeeCommandOptions: {manufacturerCode: Zcl.ManufacturerCode.SCHNEIDER_ELECTRIC},
553553
}),
554+
pilotMode: () =>
555+
m.enumLookup<"heatingCoolingOutputClusterServer", SchneiderHeatingCoolingOutputCluster>({
556+
name: "schneider_pilot_mode",
557+
cluster: "heatingCoolingOutputClusterServer",
558+
attribute: "heatingOutputMode",
559+
description:
560+
"Controls piloting mode (from 'old description'). According to SE the attribute is called 'Heating output mode', and the corresponding custom cluster is heatingCoolingOutputClusterServer.",
561+
entityCategory: "config",
562+
access: "ALL",
563+
lookup: {
564+
Contactor: 1,
565+
Pilot: 3,
566+
},
567+
zigbeeCommandOptions: {manufacturerCode: Zcl.ManufacturerCode.SCHNEIDER_ELECTRIC},
568+
}),
554569
addHvacUserInterfaceCfgCustomAttributes: () =>
555570
m.deviceAddCustomCluster("hvacUserInterfaceCfg", {
556571
ID: Zcl.Clusters.hvacUserInterfaceCfg.ID,
@@ -1766,21 +1781,20 @@ export const definitions: DefinitionWithExtend[] = [
17661781
vendor: "Schneider Electric",
17671782
description: "Heating thermostat",
17681783
whiteLabel: [{model: "CCTFR6710", fingerprint: [{modelID: "CCTFR6710"}]}],
1769-
fromZigbee: [fz.thermostat, fz.metering, fz.schneider_pilot_mode],
1784+
fromZigbee: [fz.thermostat, fz.metering],
17701785
toZigbee: [
17711786
tz.schneider_temperature_measured_value,
17721787
tz.thermostat_system_mode,
17731788
tz.thermostat_running_state,
17741789
tz.thermostat_local_temperature,
17751790
tz.thermostat_occupied_heating_setpoint,
17761791
tz.thermostat_control_sequence_of_operation,
1777-
tz.schneider_pilot_mode,
17781792
tz.schneider_temperature_measured_value,
17791793
],
1794+
extend: [schneiderElectricExtend.addHeatingCoolingOutputClusterServer(), schneiderElectricExtend.pilotMode()],
17801795
exposes: [
17811796
e.power(),
17821797
e.energy(),
1783-
e.enum("schneider_pilot_mode", ea.ALL, ["contactor", "pilot"]).withDescription("Controls piloting mode"),
17841798
e
17851799
.climate()
17861800
.withSetpoint("occupied_heating_setpoint", 4, 30, 0.5)
@@ -2365,28 +2379,31 @@ export const definitions: DefinitionWithExtend[] = [
23652379
access: "ALL",
23662380
reporting: {min: 0, max: 3600, change: 0},
23672381
}),
2382+
schneiderElectricExtend.addWiserDeviceInfoCluster(),
23682383
],
23692384
},
23702385
{
23712386
zigbeeModel: ["WDE002497"],
23722387
model: "WDE002497",
23732388
vendor: "Schneider Electric",
23742389
description: "Smart thermostat",
2375-
fromZigbee: [fz.stelpro_thermostat, fz.metering, fz.schneider_pilot_mode, fzLocal.wiser_device_info, fz.hvac_user_interface, fz.temperature],
2390+
fromZigbee: [fz.stelpro_thermostat, fz.metering, fzLocal.wiser_device_info, fz.hvac_user_interface, fz.temperature],
23762391
toZigbee: [
23772392
tz.thermostat_occupied_heating_setpoint,
23782393
tz.thermostat_system_mode,
23792394
tz.thermostat_running_state,
23802395
tz.thermostat_local_temperature,
23812396
tz.thermostat_control_sequence_of_operation,
2382-
tz.schneider_pilot_mode,
23832397
tz.schneider_thermostat_keypad_lockout,
23842398
tz.thermostat_temperature_display_mode,
23852399
],
2386-
extend: [schneiderElectricExtend.addWiserDeviceInfoCluster()],
2400+
extend: [
2401+
schneiderElectricExtend.addWiserDeviceInfoCluster(),
2402+
schneiderElectricExtend.addHeatingCoolingOutputClusterServer(),
2403+
schneiderElectricExtend.pilotMode(),
2404+
],
23872405
exposes: [
23882406
e.binary("keypad_lockout", ea.STATE_SET, "lock1", "unlock").withDescription("Enables/disables physical input on the device"),
2389-
e.enum("schneider_pilot_mode", ea.ALL, ["contactor", "pilot"]).withDescription("Controls piloting mode"),
23902407
e
23912408
.enum("temperature_display_mode", ea.ALL, ["celsius", "fahrenheit"])
23922409
.withDescription("The temperature format displayed on the thermostat screen"),
@@ -2415,21 +2432,23 @@ export const definitions: DefinitionWithExtend[] = [
24152432
model: "WDE011680",
24162433
vendor: "Schneider Electric",
24172434
description: "Smart thermostat",
2418-
fromZigbee: [fz.stelpro_thermostat, fz.metering, fz.schneider_pilot_mode, fzLocal.wiser_device_info, fz.hvac_user_interface, fz.temperature],
2435+
fromZigbee: [fz.stelpro_thermostat, fz.metering, fzLocal.wiser_device_info, fz.hvac_user_interface, fz.temperature],
24192436
toZigbee: [
24202437
tz.thermostat_occupied_heating_setpoint,
24212438
tz.thermostat_system_mode,
24222439
tz.thermostat_running_state,
24232440
tz.thermostat_local_temperature,
24242441
tz.thermostat_control_sequence_of_operation,
2425-
tz.schneider_pilot_mode,
24262442
tz.schneider_thermostat_keypad_lockout,
24272443
tz.thermostat_temperature_display_mode,
24282444
],
2429-
extend: [schneiderElectricExtend.addWiserDeviceInfoCluster()],
2445+
extend: [
2446+
schneiderElectricExtend.addWiserDeviceInfoCluster(),
2447+
schneiderElectricExtend.addHeatingCoolingOutputClusterServer(),
2448+
schneiderElectricExtend.pilotMode(),
2449+
],
24302450
exposes: [
24312451
e.binary("keypad_lockout", ea.STATE_SET, "lock1", "unlock").withDescription("Enables/disables physical input on the device"),
2432-
e.enum("schneider_pilot_mode", ea.ALL, ["contactor", "pilot"]).withDescription("Controls piloting mode"),
24332452
e
24342453
.enum("temperature_display_mode", ea.ALL, ["celsius", "fahrenheit"])
24352454
.withDescription("The temperature format displayed on the thermostat screen"),
@@ -2749,29 +2768,19 @@ export const definitions: DefinitionWithExtend[] = [
27492768
model: "S520619",
27502769
vendor: "Schneider Electric",
27512770
description: "Wiser Odace Smart thermostat",
2752-
fromZigbee: [
2753-
fz.stelpro_thermostat,
2754-
fz.metering,
2755-
fz.schneider_pilot_mode,
2756-
fzLocal.wiser_device_info,
2757-
fz.hvac_user_interface,
2758-
fz.temperature,
2759-
fz.occupancy,
2760-
],
2771+
fromZigbee: [fz.stelpro_thermostat, fz.metering, fzLocal.wiser_device_info, fz.hvac_user_interface, fz.temperature, fz.occupancy],
27612772
toZigbee: [
27622773
tz.thermostat_occupied_heating_setpoint,
27632774
tz.thermostat_occupied_cooling_setpoint,
27642775
tz.thermostat_system_mode,
27652776
tz.thermostat_local_temperature,
27662777
tz.thermostat_control_sequence_of_operation,
2767-
tz.schneider_pilot_mode,
27682778
tz.schneider_thermostat_keypad_lockout,
27692779
tz.thermostat_temperature_display_mode,
27702780
tz.thermostat_running_state,
27712781
],
27722782
exposes: [
27732783
e.binary("keypad_lockout", ea.STATE_SET, "lock1", "unlock").withDescription("Enables/disables physical input on the device"),
2774-
e.enum("schneider_pilot_mode", ea.ALL, ["contactor", "pilot"]).withDescription("Controls piloting mode"),
27752784
e
27762785
.enum("temperature_display_mode", ea.ALL, ["celsius", "fahrenheit"])
27772786
.withDescription("The temperature format displayed on the thermostat screen"),
@@ -2803,6 +2812,8 @@ export const definitions: DefinitionWithExtend[] = [
28032812
},
28042813
extend: [
28052814
schneiderElectricExtend.addWiserDeviceInfoCluster(),
2815+
schneiderElectricExtend.addHeatingCoolingOutputClusterServer(),
2816+
schneiderElectricExtend.pilotMode(),
28062817
m.poll({
28072818
key: "measurement",
28082819
option: exposes.options.measurement_poll_interval().withDescription("Polling interval of the occupied heating/cooling setpoint"),

0 commit comments

Comments
 (0)