Initialisation depot
This commit is contained in:
369
ESP32/ESP-Home/README.md
Normal file
369
ESP32/ESP-Home/README.md
Normal file
@@ -0,0 +1,369 @@
|
||||
- platform: template
|
||||
name: "Boost Duration (min)"
|
||||
id: boost_duration
|
||||
min_value: 5
|
||||
max_value: 120
|
||||
step: 1
|
||||
initial_value: 30
|
||||
optimistic: true
|
||||
---
|
||||
|
||||
## Example: Dynamic Setpoints from Home Assistant
|
||||
|
||||
You can allow Home Assistant to set the Eco, Confort, and Boost temperatures by exposing them as number entities in ESPHome. Home Assistant can then adjust these values, and ESPHome will use them for the setpoints.
|
||||
|
||||
```yaml
|
||||
|
||||
number:
|
||||
- platform: template
|
||||
name: "Hors gel Temperature"
|
||||
id: hors_gel_temp
|
||||
min_value: 5
|
||||
max_value: 10
|
||||
step: 0.5
|
||||
initial_value: 7
|
||||
optimistic: true
|
||||
- platform: template
|
||||
name: "Eco Temperature"
|
||||
id: eco_temp
|
||||
min_value: 10
|
||||
max_value: 25
|
||||
step: 0.5
|
||||
initial_value: 18
|
||||
optimistic: true
|
||||
- platform: template
|
||||
name: "Confort Temperature"
|
||||
id: confort_temp
|
||||
min_value: 15
|
||||
max_value: 25
|
||||
step: 0.5
|
||||
initial_value: 21
|
||||
optimistic: true
|
||||
- platform: template
|
||||
name: "Boost Temperature"
|
||||
id: boost_temp
|
||||
min_value: 18
|
||||
max_value: 28
|
||||
step: 0.5
|
||||
initial_value: 23
|
||||
optimistic: true
|
||||
|
||||
interval:
|
||||
- interval: 1s
|
||||
then:
|
||||
- lambda: |-
|
||||
static unsigned long boost_start = 0;
|
||||
static bool boost_active = false;
|
||||
if (id(thermostat_mode).state == "Boost") {
|
||||
if (!boost_active) {
|
||||
boost_start = millis();
|
||||
boost_active = true;
|
||||
}
|
||||
id(heater_thermostat).set_target_temperature(id(boost_temp).state);
|
||||
id(heater_thermostat).turn_on();
|
||||
unsigned long boost_duration_ms = (unsigned long)(id(boost_duration).state * 60 * 1000);
|
||||
if (millis() - boost_start > boost_duration_ms) {
|
||||
// End boost, switch to previous mode or Eco by default
|
||||
id(thermostat_mode).publish_state("Eco");
|
||||
boost_active = false;
|
||||
}
|
||||
} else {
|
||||
boost_active = false;
|
||||
if (id(thermostat_mode).state == "Hors gel") {
|
||||
id(heater_thermostat).set_target_temperature(id(hors_gel_temp).state);
|
||||
id(heater_thermostat).turn_on();
|
||||
} else if (id(thermostat_mode).state == "Eco") {
|
||||
id(heater_thermostat).set_target_temperature(id(eco_temp).state);
|
||||
id(heater_thermostat).turn_on();
|
||||
} else if (id(thermostat_mode).state == "Confort") {
|
||||
id(heater_thermostat).set_target_temperature(id(confort_temp).state);
|
||||
id(heater_thermostat).turn_on();
|
||||
} else {
|
||||
id(heater_thermostat).turn_off();
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**How it works:**
|
||||
- Home Assistant can change the Eco, Confort, and Boost temperatures from the UI or automations.
|
||||
- ESPHome uses the current value of each number entity as the setpoint for the selected mode.
|
||||
|
||||
---
|
||||
---
|
||||
|
||||
## Full Example: ESPHome YAML for Sonoff R2 Thermostat with Modes
|
||||
|
||||
Below is a complete ESPHome YAML configuration for a Sonoff R2 acting as a thermostat, using a Xiaomi temperature sensor via MQTT, and supporting remote mode selection (Off, Eco, Confort, Boost) from Home Assistant. All logic runs on the Sonoff R2.
|
||||
|
||||
```yaml
|
||||
esphome:
|
||||
name: sonoff_thermostat
|
||||
platform: ESP8266
|
||||
board: esp01_1m
|
||||
|
||||
wifi:
|
||||
ssid: "YOUR_WIFI_SSID"
|
||||
password: "YOUR_WIFI_PASSWORD"
|
||||
|
||||
logger:
|
||||
|
||||
api:
|
||||
|
||||
ota:
|
||||
|
||||
mqtt:
|
||||
broker: 192.168.1.100
|
||||
username: your_mqtt_user
|
||||
password: your_mqtt_password
|
||||
|
||||
sensor:
|
||||
- platform: mqtt_subscribe
|
||||
name: "Room Temperature"
|
||||
id: room_temp
|
||||
topic: "zigbee2mqtt/your_sensor"
|
||||
unit_of_measurement: "°C"
|
||||
value_template: "{{ value_json.temperature }}"
|
||||
|
||||
switch:
|
||||
- platform: gpio
|
||||
pin: 12
|
||||
id: relay
|
||||
name: "Heater Relay"
|
||||
|
||||
|
||||
select:
|
||||
- platform: template
|
||||
name: "Thermostat Mode"
|
||||
id: thermostat_mode
|
||||
options:
|
||||
- "Off"
|
||||
- "Hors gel"
|
||||
- "Eco"
|
||||
- "Confort"
|
||||
- "Boost"
|
||||
initial_option: "Eco"
|
||||
optimistic: true
|
||||
|
||||
climate:
|
||||
- platform: thermostat
|
||||
name: "Heater Thermostat"
|
||||
id: heater_thermostat
|
||||
sensor: room_temp
|
||||
min_temperature: 5
|
||||
max_temperature: 30
|
||||
heat_action:
|
||||
- switch.turn_on: relay
|
||||
idle_action:
|
||||
- switch.turn_off: relay
|
||||
|
||||
interval:
|
||||
- interval: 1s
|
||||
then:
|
||||
- lambda: |-
|
||||
// Setpoint logic based on mode
|
||||
if (id(thermostat_mode).state == "Eco") {
|
||||
id(heater_thermostat).set_target_temperature(18);
|
||||
id(heater_thermostat).turn_on();
|
||||
} else if (id(thermostat_mode).state == "Confort") {
|
||||
id(heater_thermostat).set_target_temperature(21);
|
||||
id(heater_thermostat).turn_on();
|
||||
} else if (id(thermostat_mode).state == "Boost") {
|
||||
id(heater_thermostat).set_target_temperature(23);
|
||||
id(heater_thermostat).turn_on();
|
||||
// Optionally, add a timer for boost mode
|
||||
} else {
|
||||
id(heater_thermostat).turn_off();
|
||||
}
|
||||
|
||||
# Optionally, add a timer for Boost mode (example: 30 minutes)
|
||||
# See ESPHome docs for advanced timer logic if needed
|
||||
```
|
||||
|
||||
**How it works:**
|
||||
- The Sonoff R2 subscribes to the Xiaomi sensor temperature via MQTT.
|
||||
- The relay controls the heater.
|
||||
- The `select` exposes the mode (Off/Eco/Confort/Boost) to Home Assistant.
|
||||
- The `interval` automation updates the thermostat setpoint and state based on the selected mode.
|
||||
- All logic is local to the Sonoff R2; Home Assistant only changes the mode.
|
||||
|
||||
---
|
||||
# ESP-Home Sonoff R2 Thermostat with MQTT Temperature Sensor
|
||||
---
|
||||
|
||||
## Advanced: Control Modes (Off / Eco / Confort / Boost) from Home Assistant
|
||||
|
||||
If you want the thermostat logic (when to turn the heater ON/OFF) to run inside the Sonoff R2 (ESPHome), but still be able to set the mode (Off, Eco, Confort, Boost) remotely from Home Assistant, follow these guidelines:
|
||||
|
||||
### 1. Add a Select or Input Mode in ESPHome
|
||||
- Use the `select` or `template` component in ESPHome to define the current mode (Off, Eco, Confort, Boost).
|
||||
- Expose this as a selectable entity to Home Assistant.
|
||||
|
||||
### 2. Use Automations in ESPHome
|
||||
- In your ESPHome YAML, use automations to set the target temperature or behavior based on the selected mode.
|
||||
- Example: Eco = 18°C, Confort = 21°C, Boost = 23°C for 30 minutes, Off = always off.
|
||||
|
||||
### 3. Home Assistant Integration
|
||||
- In Home Assistant, you will see the mode selector as an entity. You can change the mode from the UI or automations.
|
||||
- No need for Versatile Thermostat in Home Assistant; all logic is in ESPHome.
|
||||
|
||||
### 4. Example ESPHome YAML Snippet
|
||||
```yaml
|
||||
select:
|
||||
- platform: template
|
||||
name: "Thermostat Mode"
|
||||
id: thermostat_mode
|
||||
options:
|
||||
- "Off"
|
||||
- "Eco"
|
||||
- "Confort"
|
||||
- "Boost"
|
||||
initial_option: "Eco"
|
||||
optimistic: true
|
||||
|
||||
climate:
|
||||
- platform: thermostat
|
||||
name: "Heater Thermostat"
|
||||
sensor: room_temp
|
||||
min_temperature: 5
|
||||
max_temperature: 30
|
||||
heat_action:
|
||||
- switch.turn_on: relay
|
||||
idle_action:
|
||||
- switch.turn_off: relay
|
||||
on_boot:
|
||||
- lambda: |-
|
||||
if (id(thermostat_mode).state == "Eco") {
|
||||
id(heater_thermostat).set_target_temperature(18);
|
||||
} else if (id(thermostat_mode).state == "Confort") {
|
||||
id(heater_thermostat).set_target_temperature(21);
|
||||
} else if (id(thermostat_mode).state == "Boost") {
|
||||
id(heater_thermostat).set_target_temperature(23);
|
||||
// Add timer logic for boost if needed
|
||||
} else {
|
||||
id(heater_thermostat).turn_off();
|
||||
}
|
||||
|
||||
automation:
|
||||
- alias: Set Thermostat Mode
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: select.thermostat_mode
|
||||
action:
|
||||
- lambda: |-
|
||||
if (id(thermostat_mode).state == "Eco") {
|
||||
id(heater_thermostat).set_target_temperature(18);
|
||||
id(heater_thermostat).turn_on();
|
||||
} else if (id(thermostat_mode).state == "Confort") {
|
||||
id(heater_thermostat).set_target_temperature(21);
|
||||
id(heater_thermostat).turn_on();
|
||||
} else if (id(thermostat_mode).state == "Boost") {
|
||||
id(heater_thermostat).set_target_temperature(23);
|
||||
id(heater_thermostat).turn_on();
|
||||
// Add timer logic for boost if needed
|
||||
} else {
|
||||
id(heater_thermostat).turn_off();
|
||||
}
|
||||
```
|
||||
|
||||
### 5. Remarks
|
||||
- All logic (when to turn ON/OFF, setpoints, boost timer) is handled by ESPHome on the Sonoff R2.
|
||||
- Home Assistant only sends the desired mode (Off/Eco/Confort/Boost) to ESPHome.
|
||||
- This approach is robust: the heater will continue to operate as expected even if Home Assistant is offline.
|
||||
|
||||
---
|
||||
|
||||
This guide explains how to use a Sonoff R2 switch with ESPHome to control a heater as a thermostat, using a Xiaomi temperature sensor available via an MQTT broker.
|
||||
|
||||
## Overview
|
||||
- **Device:** Sonoff R2 (relay switch)
|
||||
- **Heater:** Controlled via Sonoff relay (ON/OFF)
|
||||
- **Temperature Sensor:** Xiaomi (publishing to MQTT broker)
|
||||
- **Goal:** Use ESPHome to turn the heater ON/OFF based on the temperature received from MQTT.
|
||||
|
||||
---
|
||||
|
||||
## Steps
|
||||
|
||||
### 1. Flash Sonoff R2 with ESPHome
|
||||
- Install ESPHome on your computer.
|
||||
- Create a new ESPHome configuration for the Sonoff R2.
|
||||
- Flash the Sonoff R2 with the ESPHome firmware.
|
||||
|
||||
### 2. Configure MQTT in ESPHome
|
||||
- Enable the MQTT component in your ESPHome YAML config.
|
||||
- Set the MQTT broker address, username, and password.
|
||||
|
||||
### 3. Subscribe to Xiaomi Sensor via MQTT
|
||||
- Identify the MQTT topic where the Xiaomi sensor publishes temperature (e.g., `zigbee2mqtt/your_sensor` or similar).
|
||||
- Use the `mqtt_subscribe` or `mqtt` sensor in ESPHome to read the temperature value.
|
||||
|
||||
### 4. Create a Thermostat Logic in ESPHome
|
||||
- Use the `climate` component with a `generic` platform, or use a template switch with automation.
|
||||
- Set the relay (switch) as the output to control the heater.
|
||||
- Use the MQTT temperature sensor as the input for the thermostat.
|
||||
|
||||
### 5. Example ESPHome YAML Snippet
|
||||
```yaml
|
||||
esphome:
|
||||
name: sonoff_thermostat
|
||||
|
||||
mqtt:
|
||||
broker: 192.168.1.100
|
||||
username: your_mqtt_user
|
||||
password: your_mqtt_password
|
||||
|
||||
sensor:
|
||||
- platform: mqtt_subscribe
|
||||
name: "Room Temperature"
|
||||
id: room_temp
|
||||
topic: "zigbee2mqtt/your_sensor"
|
||||
unit_of_measurement: "°C"
|
||||
value_template: "{{ value_json.temperature }}"
|
||||
|
||||
switch:
|
||||
- platform: gpio
|
||||
pin: 12
|
||||
id: relay
|
||||
name: "Heater Relay"
|
||||
|
||||
climate:
|
||||
- platform: thermostat
|
||||
name: "Heater Thermostat"
|
||||
sensor: room_temp
|
||||
default_target_temperature_low: 19
|
||||
default_target_temperature_high: 21
|
||||
heat_action:
|
||||
- switch.turn_on: relay
|
||||
idle_action:
|
||||
- switch.turn_off: relay
|
||||
```
|
||||
|
||||
### 6. Upload and Test
|
||||
- Upload the configuration to the Sonoff R2.
|
||||
- Monitor the logs to ensure the temperature is received and the relay switches as expected.
|
||||
|
||||
### 7. Integrate with Home Assistant (Optional)
|
||||
- Add the ESPHome device to Home Assistant for remote control and monitoring.
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting
|
||||
- Ensure the MQTT broker is accessible from the Sonoff R2.
|
||||
- Verify the correct MQTT topic and payload format for the Xiaomi sensor.
|
||||
- Check ESPHome logs for errors.
|
||||
|
||||
---
|
||||
|
||||
## References
|
||||
- [ESPHome MQTT Sensor](https://esphome.io/components/sensor/mqtt.html)
|
||||
- [ESPHome Thermostat Climate](https://esphome.io/components/climate/thermostat.html)
|
||||
- [Sonoff Basic with ESPHome](https://esphome.io/cookbook/sonoff_basic.html)
|
||||
- [Xiaomi Zigbee2MQTT](https://www.zigbee2mqtt.io/)
|
||||
|
||||
---
|
||||
|
||||
**You now have a Sonoff R2 acting as a thermostat, using a Xiaomi temperature sensor via MQTT!**
|
||||
|
||||
---
|
||||
|
||||
**To control modes from Home Assistant, expose a select entity in ESPHome and use automations in ESPHome to change setpoints or behavior based on the selected mode.**
|
||||
148
ESP32/ESP-Home/THERMO_BUREAU.yaml
Normal file
148
ESP32/ESP-Home/THERMO_BUREAU.yaml
Normal file
@@ -0,0 +1,148 @@
|
||||
esphome:
|
||||
name: thermobureau
|
||||
|
||||
esp8266:
|
||||
board: esp8285
|
||||
|
||||
|
||||
# Enable Home Assistant API
|
||||
api:
|
||||
encryption:
|
||||
key: "K61VpR3UU3CTtHaOZcHROEdk7rtB2HWbMJ5VHcJLhEU="
|
||||
|
||||
ota:
|
||||
- platform: esphome
|
||||
password: "315848030ef60c32adaba1857437a2ae"
|
||||
|
||||
wifi:
|
||||
ssid: "Freebox-789E5E"
|
||||
password: "sftbdqn5nnqwn6x4q2sxvc"
|
||||
min_auth_mode: WPA2
|
||||
|
||||
# Enable fallback hotspot (captive portal) in case wifi connection fails
|
||||
ap:
|
||||
ssid: "Sonoff Fallback Hotspot"
|
||||
password: "v0xOuZTqfR75"
|
||||
|
||||
captive_portal:
|
||||
|
||||
logger:
|
||||
|
||||
mqtt:
|
||||
broker: 192.168.1.53
|
||||
username: mqtt
|
||||
password: Secr3t
|
||||
|
||||
sensor:
|
||||
- platform: mqtt_subscribe
|
||||
name: "Room Temperature"
|
||||
id: room_temp
|
||||
topic: "zigbee2mqtt/your_sensor" # Change to your sensor topic
|
||||
unit_of_measurement: "°C"
|
||||
value_template: "{{ value_json.temperature }}"
|
||||
|
||||
switch:
|
||||
- platform: gpio
|
||||
pin: 12
|
||||
id: relay
|
||||
name: "Heater Relay"
|
||||
|
||||
select:
|
||||
- platform: template
|
||||
name: "Thermostat Mode"
|
||||
id: thermostat_mode
|
||||
options:
|
||||
- "Off"
|
||||
- "Hors gel"
|
||||
- "Eco"
|
||||
- "Confort"
|
||||
- "Boost"
|
||||
initial_option: "Eco"
|
||||
optimistic: true
|
||||
|
||||
climate:
|
||||
- platform: thermostat
|
||||
name: "Heater Thermostat"
|
||||
id: heater_thermostat
|
||||
sensor: room_temp
|
||||
min_temperature: 5
|
||||
max_temperature: 30
|
||||
heat_action:
|
||||
- switch.turn_on: relay
|
||||
idle_action:
|
||||
- switch.turn_off: relay
|
||||
number:
|
||||
- platform: template
|
||||
name: "Hors gel Temperature"
|
||||
id: hors_gel_temp
|
||||
min_value: 5
|
||||
max_value: 10
|
||||
step: 0.5
|
||||
initial_value: 7
|
||||
optimistic: true
|
||||
- platform: template
|
||||
name: "Eco Temperature"
|
||||
id: eco_temp
|
||||
min_value: 10
|
||||
max_value: 25
|
||||
step: 0.5
|
||||
initial_value: 18
|
||||
optimistic: true
|
||||
- platform: template
|
||||
name: "Confort Temperature"
|
||||
id: confort_temp
|
||||
min_value: 15
|
||||
max_value: 25
|
||||
step: 0.5
|
||||
initial_value: 21
|
||||
optimistic: true
|
||||
- platform: template
|
||||
name: "Boost Temperature"
|
||||
id: boost_temp
|
||||
min_value: 18
|
||||
max_value: 28
|
||||
step: 0.5
|
||||
initial_value: 23
|
||||
optimistic: true
|
||||
- platform: template
|
||||
name: "Boost Duration (min)"
|
||||
id: boost_duration
|
||||
min_value: 5
|
||||
max_value: 120
|
||||
step: 1
|
||||
initial_value: 30
|
||||
optimistic: true
|
||||
|
||||
interval:
|
||||
- interval: 1s
|
||||
then:
|
||||
- lambda: |-
|
||||
static unsigned long boost_start = 0;
|
||||
static bool boost_active = false;
|
||||
if (id(thermostat_mode).state == "Boost") {
|
||||
if (!boost_active) {
|
||||
boost_start = millis();
|
||||
boost_active = true;
|
||||
}
|
||||
id(heater_thermostat).set_target_temperature(id(boost_temp).state);
|
||||
id(heater_thermostat).turn_on();
|
||||
unsigned long boost_duration_ms = (unsigned long)(id(boost_duration).state * 60 * 1000);
|
||||
if (millis() - boost_start > boost_duration_ms) {
|
||||
id(thermostat_mode).publish_state("Eco");
|
||||
boost_active = false;
|
||||
}
|
||||
} else {
|
||||
boost_active = false;
|
||||
if (id(thermostat_mode).state == "Hors gel") {
|
||||
id(heater_thermostat).set_target_temperature(id(hors_gel_temp).state);
|
||||
id(heater_thermostat).turn_on();
|
||||
} else if (id(thermostat_mode).state == "Eco") {
|
||||
id(heater_thermostat).set_target_temperature(id(eco_temp).state);
|
||||
id(heater_thermostat).turn_on();
|
||||
} else if (id(thermostat_mode).state == "Confort") {
|
||||
id(heater_thermostat).set_target_temperature(id(confort_temp).state);
|
||||
id(heater_thermostat).turn_on();
|
||||
} else {
|
||||
id(heater_thermostat).turn_off();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user