I just realized what exactly the follow me is supposed to do, and realized I have something similar. Basically if I understand it right there’s a temp sensor in the remote, and it replaces the temp sensor in the heat pump.
Instead of the remote though, I’m using an ESP8266 with a Dallas temp sensor. The basic idea is when the dallas sensor gets a new value, connect to the heatpump esp chip and set a template number to have that value. Then in an automation treat the template number as a thermometer and handle it like you like.
Here’s an example:
In the heatpump ESP chip yaml add this:
globals:
- id: auto_mode
type: bool
restore_value: false
initial_value: 'false'
switch:
- platform: template
name: ${friendly_node_name} Auto Mode
id: ${node_id}_auto_mode
icon: mdi:car-turbocharger
optimistic: true
lambda: return id(auto_mode);
turn_on_action:
- lambda: |-
id(auto_mode) = true;
id(${node_id}_automation_lambda).press();
turn_off_action:
- lambda: |-
id(auto_mode) = false;
button:
- platform: template
internal: true
id: ${node_id}_automation_lambda
on_press:
- lambda: |-
if (id(auto_mode)) {
float tempDifference = id(${node_id}_my_climate).target_temperature - id(${node_id}_room_temperature_c).state;
ESP_LOGW(
"climate_temp", "difference: %f°F, target: %f°F, room: %f°F",
(tempDifference * 1.8),
(id(${node_id}_my_climate).target_temperature * 1.8 + 32),
(id(${node_id}_room_temperature_c).state * 1.8 + 32)
);
if(tempDifference > $heat_on_below_set_temp) {
ESP_LOGW("climate_mode", "Mode: [%s]","heat");
if (ClimateMode::CLIMATE_MODE_HEAT != id(${node_id}_my_climate).mode) {
ESP_LOGW("climate_mode", "Mode: [%s]","setting mode heat");
id(${node_id}_my_climate).make_call().set_mode(ClimateMode::CLIMATE_MODE_HEAT).perform();
}
delay(2000);
if(tempDifference > $heat_turbo_on_below_set_temp) {
ESP_LOGW("climate_preset", "Preset: [%s]", "boost");
if (ClimatePreset::CLIMATE_PRESET_BOOST != id(${node_id}_my_climate).preset.value()) {
ESP_LOGW("climate_preset", "Preset: [%s]", " setting boost heat");
id(${node_id}_my_climate).make_call().set_preset(ClimatePreset::CLIMATE_PRESET_BOOST).perform();
} else if (tempDifference < -$heat_turbo_off_above_set_temp) {
ESP_LOGW("climate_preset", "Preset: [%s]", "none");
if (ClimatePreset::CLIMATE_PRESET_NONE != id(${node_id}_my_climate).preset.value()) {
ESP_LOGW("climate_preset", "Preset: [%s]", " setting none heat");
id(${node_id}_my_climate).make_call().set_preset(ClimatePreset::CLIMATE_PRESET_NONE).perform();
}
}
}
} else if(tempDifference < -$cool_on_above_set_temp) {
ESP_LOGW("climate_mode", "Mode: [%s]", "cool");
if (ClimateMode::CLIMATE_MODE_COOL != id(${node_id}_my_climate).mode) {
ESP_LOGW("climate_mode", "Mode: [%s]", "setting mode cool");
id(${node_id}_my_climate).make_call().set_mode(ClimateMode::CLIMATE_MODE_COOL).perform();
}
delay(2000);
if (tempDifference < -$cool_turbo_on_above_set_temp) {
ESP_LOGW("climate_preset", "Preset: [%s]", "boost");
if (ClimatePreset::CLIMATE_PRESET_BOOST != id(${node_id}_my_climate).preset.value()) {
ESP_LOGW("climate_preset", "Preset: [%s]", " setting boost cool");
id(${node_id}_my_climate).make_call().set_preset(ClimatePreset::CLIMATE_PRESET_BOOST).perform();
} else if (tempDifference > $cool_turbo_off_below_set_temp) {
ESP_LOGW("climate_preset", "Preset: [%s]", "none");
if (ClimatePreset::CLIMATE_PRESET_NONE != id(${node_id}_my_climate).preset.value()) {
ESP_LOGW("climate_preset", "Preset: [%s]", " setting none cool");
id(${node_id}_my_climate).make_call().set_preset(ClimatePreset::CLIMATE_PRESET_NONE).perform();
}
}
}
}
}
number:
- platform: template
name: ${friendly_node_name} Room Temperature °C
id: ${node_id}_room_temperature_c
optimistic: true
min_value: -40
max_value: 100
restore_value: true
step: 0.1
on_value:
then:
- lambda: |-
id(${node_id}_automation_lambda).press();
in the Dallas Esp chip yaml have it include this:
http_request:
id: http_request_data
useragent: esphome/device
timeout: 10s
esp8266_disable_ssl_support: true
dallas:
- pin: ${dallas_pin}
id: ${device_name}_pin
update_interval: ${dallas_update}
sensor:
- platform: dallas
address: ${dallas_address}
name: ${friendly_name}
id: ${device_name}
dallas_id: ${device_name}_pin
on_value:
then:
- http_request.post: !lambda |-
return "http://some-heatpump.lan/number/some_heatpump_room_tempreture_c/set?value=" + std::to_string(x);
Net result is a pure wifi and ESP replacement for follow me.