@@ -643,15 +643,19 @@ export class HomeAssistant extends Extension {
643643 break ;
644644 }
645645 case "climate" : {
646- const setpointProperties = [ "occupied_heating_setpoint" , "current_heating_setpoint" ] ;
647- const setpoint = ( firstExpose as zhc . Climate ) . features . filter ( isNumericExpose ) . find ( ( f ) => setpointProperties . includes ( f . name ) ) ;
646+ const heatingSetpoint = ( firstExpose as zhc . Climate ) . features
647+ . filter ( isNumericExpose )
648+ . find ( ( f ) => [ "occupied_heating_setpoint" , "current_heating_setpoint" ] . includes ( f . name ) ) ;
649+ const coolingSetpoint = ( firstExpose as zhc . Climate ) . features
650+ . filter ( isNumericExpose )
651+ . find ( ( f ) => f . name === "occupied_cooling_setpoint" ) ;
652+ const primarySetpoint = heatingSetpoint ?? coolingSetpoint ;
648653 assert (
649- setpoint && setpoint . value_min !== undefined && setpoint . value_max !== undefined ,
654+ primarySetpoint && primarySetpoint . value_min !== undefined && primarySetpoint . value_max !== undefined ,
650655 "No setpoint found or it is missing value_min/max" ,
651656 ) ;
652657 const temperature = ( firstExpose as zhc . Climate ) . features . find ( ( f ) => f . name === "local_temperature" ) ;
653658 assert ( temperature , "No temperature found" ) ;
654-
655659 const discoveryEntry : DiscoveryEntry = {
656660 type : "climate" ,
657661 object_id : endpointName ? `climate_${ endpointName } ` : "climate" ,
@@ -662,9 +666,9 @@ export class HomeAssistant extends Extension {
662666 state_topic : false ,
663667 temperature_unit : "C" ,
664668 // Setpoint
665- temp_step : setpoint . value_step ,
666- min_temp : setpoint . value_min . toString ( ) ,
667- max_temp : setpoint . value_max . toString ( ) ,
669+ temp_step : primarySetpoint . value_step ,
670+ min_temp : primarySetpoint . value_min . toString ( ) ,
671+ max_temp : primarySetpoint . value_max . toString ( ) ,
668672 // Temperature
669673 current_temperature_topic : true ,
670674 current_temperature_template : `{{ value_json["${ temperature . property } "] }}` ,
@@ -693,17 +697,16 @@ export class HomeAssistant extends Extension {
693697 discoveryEntry . discovery_payload . action_template = `{% set values = {None:None,'idle':'idle','heat':'heating','cool':'cooling','fan_only':'fan'} %}{{ values[value_json["${ state . property } "]] }}` ;
694698 }
695699
696- const coolingSetpoint = ( firstExpose as zhc . Climate ) . features . find ( ( f ) => f . name === "occupied_cooling_setpoint" ) ;
697- if ( coolingSetpoint ) {
698- discoveryEntry . discovery_payload . temperature_low_command_topic = setpoint . name ;
699- discoveryEntry . discovery_payload . temperature_low_state_template = `{{ value_json["${ setpoint . property } "] }}` ;
700+ if ( heatingSetpoint && coolingSetpoint ) {
701+ discoveryEntry . discovery_payload . temperature_low_command_topic = heatingSetpoint . name ;
702+ discoveryEntry . discovery_payload . temperature_low_state_template = `{{ value_json["${ heatingSetpoint . property } "] }}` ;
700703 discoveryEntry . discovery_payload . temperature_low_state_topic = true ;
701704 discoveryEntry . discovery_payload . temperature_high_command_topic = coolingSetpoint . name ;
702705 discoveryEntry . discovery_payload . temperature_high_state_template = `{{ value_json["${ coolingSetpoint . property } "] }}` ;
703706 discoveryEntry . discovery_payload . temperature_high_state_topic = true ;
704707 } else {
705- discoveryEntry . discovery_payload . temperature_command_topic = setpoint . name ;
706- discoveryEntry . discovery_payload . temperature_state_template = `{{ value_json["${ setpoint . property } "] }}` ;
708+ discoveryEntry . discovery_payload . temperature_command_topic = primarySetpoint . name ;
709+ discoveryEntry . discovery_payload . temperature_state_template = `{{ value_json["${ primarySetpoint . property } "] }}` ;
707710 discoveryEntry . discovery_payload . temperature_state_topic = true ;
708711 }
709712
0 commit comments