diff --git a/rack_3.yaml b/rack_3.yaml index 6006de4..538c198 100644 --- a/rack_3.yaml +++ b/rack_3.yaml @@ -1,16 +1,14 @@ substitutions: duct_fan_pin: GPIO13 - duct_fan_id: duct_fan_id duct_fan_pwmfreq: 5000Hz - duct_fan_spd_id: duct_fan_spd_id duct_fan_spd_name: rack_3_duct_fan_spd - heat_pin: GPIO19 - heat_name: "Denon Pwr" + amppwr_pin: GPIO19 + amppwr_name: "Denon Pwr" dallas_pin: GPIO32 - dallas_1_addr: "0x7F0114328974D728" - dallas_1_name: rack_3_temp_cold - dallas_2_addr: "0xB801143296ED7B28" - dallas_2_name: rack_3_temp_hot + dallas_in_addr: "0x7F0114328974D728" + dallas_in_name: rack_3_temp_in + dallas_out_addr: "0xB801143296ED7B28" + dallas_out_name: rack_3_temp_out esphome: name: rack_3 @@ -34,20 +32,16 @@ wifi: captive_portal: output: - - platform: ledc - pin: ${duct_fan_pin} - id: ${duct_fan_id} + - platform: ledc + pin: ${duct_fan_pin} + id: duct_fan_output_id frequency: ${duct_fan_pwmfreq} fan: - platform: speed - id: ${duct_fan_spd_id} - output: ${duct_fan_id} - name: ${duct_fan_spd_name} - # speed: - # low: 0.2 - # medium: 0.6 - # high: 1.0 + id: duct_fan_spd_id + output: duct_fan_output_id + name: ${duct_fan_spd_name} dallas: - pin: @@ -57,17 +51,84 @@ dallas: sensor: - platform: dallas - address: ${dallas_1_addr} - name: ${dallas_1_name} + address: ${dallas_in_addr} + name: ${dallas_in_name} - platform: dallas - address: ${dallas_2_addr} - name: ${dallas_2_name} + address: ${dallas_out_addr} + name: ${dallas_out_name} + id: dallas_out_id + on_value: + then: + number.set: + id: fan_speed_target_out + value: !lambda |- + float lo; + float hi; + lo = id(thermostat_rack3_out).target_temperature_low; + hi = id(thermostat_rack3_out).target_temperature_high; + if (x < lo) { + return 0.0; + } + if (x > hi) { + return 100.0; + } + return 100 * (x - lo) / (hi - lo); +number: + - platform: template + id: fan_speed_target_in + name: Fan Speed Target In + optimistic: true + min_value: 0 + max_value: 100 + step: 1 + - platform: template + id: fan_speed_target_out + name: Fan Speed Target Out + optimistic: true + min_value: 0 + max_value: 100 + step: 1 + on_value_range: + above: 25.0 + then: + fan.turn_on: + id: duct_fan_spd_id + speed: !lambda |- + return x; + +# Dual-point thermostat +climate: + - platform: thermostat + id: thermostat_rack3_out + name: Rack3 Out + sensor: dallas_out_id + visual: + min_temperature: 60 °F + max_temperature: 100 °F + temperature_step: 1 + default_mode: auto + default_target_temperature_low: 75 °F + default_target_temperature_high: 100 °F + min_cooling_off_time: 60s + min_cooling_run_time: 60s + min_heating_off_time: 60s + min_heating_run_time: 60s + min_idle_time: 60s + heat_action: + - logger.log: "Turning off Rack3 Thermostat" + - fan.turn_off: + id: duct_fan_spd_id + idle_action: + - logger.log: "Turning on Rack3 Thermostat" + cool_action: + - logger.log: "WARNING: Rack3 Thermostat has hit high temp!" + #TODO - provide some kind of warning / action here # Sense when receiver is turned on binary_sensor: - platform: gpio - pin: ${heat_pin} - name: ${heat_name} + pin: ${amppwr_pin} + name: ${amppwr_name} device_class: power # on_press: # then: @@ -75,12 +136,12 @@ binary_sensor: # condition: # lambda: 'return id(${duct_fan_spd_id}).state == "OFF";' # then: - # - logger.log: "${duct_fan_spd_name} was off. Turning on as ${heat_name} turned on." + # - logger.log: "${duct_fan_spd_name} was off. Turning on as ${amppwr_name} turned on." # - fan.turn_on: # id: ${duct_fan_spd_id} # speed: LOW # else: - # - logger.log: "${heat_name} turned on, but not turning on ${duct_fan_spd_name} as already on." + # - logger.log: "${amppwr_name} turned on, but not turning on ${duct_fan_spd_name} as already on." # on_release: # then: