Finaler "smarter" Code für die Lüftersteuerung
unknown
plain_text
a year ago
2.5 kB
35
Indexable
esphome:
name: pwmfan
friendly_name: pwmfan
esp32:
board: esp32dev
framework:
type: arduino
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "123456789123456"
ota:
platform: esphome
password: "12345612345678"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
manual_ip:
static_ip: 192.168.178.126
gateway: 192.168.178.1
subnet: 255.255.255.0
ap:
ssid: "Pwmfan Fallback Hotspot"
password: "123456789"
captive_portal:
# Output configurations for PWM signals
output:
- platform: ledc
pin: GPIO27
frequency: 5000 Hz
id: fan_pwm_1
- platform: ledc
pin: GPIO33
frequency: 5000 Hz
id: fan_pwm_2
- platform: ledc
pin: GPIO32
frequency: 5000 Hz
id: fan_pwm_3
# Input controls for the GUI
number:
- platform: template
name: "Fan Speed [%]"
id: fan_speed
min_value: 0
max_value: 100
step: 1
optimistic: true
set_action:
- lambda: |-
ESP_LOGD("fan_speed", "Fan Speed set to: %.2f", x);
- platform: template
name: "Night Reduction [%]"
id: night_reduction
min_value: 0
max_value: 100
step: 1
optimistic: true
set_action:
- lambda: |-
ESP_LOGD("night_reduction", "Night Reduction set to: %.2f", x);
switch:
- platform: template
name: "Winter Mode"
id: winter_mode
optimistic: true
turn_on_action:
- lambda: |-
ESP_LOGD("winter_mode", "Winter Mode turned ON");
turn_off_action:
- lambda: |-
ESP_LOGD("winter_mode", "Winter Mode turned OFF");
# Fan speed automation
interval:
- interval: 1s
then:
- lambda: |
float speed = id(fan_speed).state;
float reduction = id(night_reduction).state;
bool winter = id(winter_mode).state;
static bool reverse = false;
static unsigned long last_swap = millis();
if (winter && (millis() - last_swap >= 45000)) {
reverse = !reverse;
last_swap = millis();
}
float fan1_speed = 50 + (reverse ? -1 : 1) * speed * 0.5;
float fan2_speed = 50 + (reverse ? 1 : -1) * speed * 0.5;
float fan3_speed = 50 + ((reverse ? -1 : 1) * speed * 0.5 * (100 - reduction)/100);
// Apply fan speeds
id(fan_pwm_1).set_level(fan1_speed / 100.0);
id(fan_pwm_2).set_level(fan2_speed / 100.0);
id(fan_pwm_3).set_level(fan3_speed / 100.0);
Editor is loading...
Leave a Comment