217 lines
5.6 KiB
YAML
217 lines
5.6 KiB
YAML
# Ofensteuerung auf der Platine pcb/ (v1.0)
|
|
# D0/GPIO16 Relais K1 (230-V-Pumpe, Schließer) - Thermostat an J4 liegt parallel zum Kontakt
|
|
# D1/GPIO5 SCL, D2/GPIO4 SDA -> ADS1115 (0x48): A0-A1 = Stromwandler ZMCT103C (Bürde 100 R, Mitte 1,65 V)
|
|
# D5/GPIO14 SCK, D6/GPIO12 SO, D8/GPIO15 CS -> MAX6675 (Abgas, Thermoelement Typ K)
|
|
# D4/GPIO2 1-Wire, 3x DS18B20 (J5-J7, 4k7 Pull-up)
|
|
# D3/GPIO0 Servo MG996R (Luftklappe, 330 R in Serie)
|
|
# D7/GPIO13 PWM-Pumpe (Transistorstufe wie Umwälzpumpe), RX/GPIO3 Rückmeldung
|
|
# frei auf J10: A0, TX/GPIO1, ADS1115 A2/A3
|
|
substitutions:
|
|
name: ofensteuerung
|
|
|
|
esphome:
|
|
name: ${name}
|
|
friendly_name: Ofensteuerung
|
|
|
|
esp8266:
|
|
board: d1_mini
|
|
restore_from_flash: true
|
|
|
|
logger:
|
|
level: INFO
|
|
baud_rate: 0 # RX/GPIO3 = Rückmeldung PWM-Pumpe
|
|
|
|
wifi:
|
|
ssid: !secret wifi_ssid
|
|
password: !secret wifi_password
|
|
reboot_timeout: 15min
|
|
ap:
|
|
ssid: "Ofensteuerung Fallback"
|
|
|
|
captive_portal:
|
|
|
|
api:
|
|
reboot_timeout: 0s
|
|
encryption:
|
|
key: !secret api_key
|
|
|
|
mqtt:
|
|
broker: 192.168.179.24
|
|
port: 1883
|
|
username: ramiro
|
|
password: !secret mqtt_password
|
|
topic_prefix: gunter/ofensteuerung
|
|
reboot_timeout: 0s
|
|
discovery: true
|
|
log_topic: null
|
|
birth_message:
|
|
topic: gunter/ofensteuerung/status
|
|
payload: online
|
|
will_message:
|
|
topic: gunter/ofensteuerung/status
|
|
payload: offline
|
|
|
|
ota:
|
|
- platform: esphome
|
|
password: !secret ota_password
|
|
|
|
web_server:
|
|
port: 80
|
|
|
|
i2c:
|
|
sda: GPIO4 # D2
|
|
scl: GPIO5 # D1
|
|
scan: true
|
|
frequency: 400kHz
|
|
|
|
spi:
|
|
clk_pin: GPIO14 # D5
|
|
miso_pin: GPIO12 # D6
|
|
|
|
one_wire:
|
|
- platform: gpio
|
|
pin: GPIO2 # D4
|
|
|
|
ads1115:
|
|
- address: 0x48
|
|
continuous_mode: true
|
|
|
|
# ---------------- Pumpe 230 V ----------------
|
|
switch:
|
|
- platform: gpio
|
|
pin: GPIO16 # D0 -> BC546B -> K1
|
|
name: "Pumpe Relais"
|
|
id: pumpe_relais
|
|
restore_mode: RESTORE_DEFAULT_OFF
|
|
icon: mdi:pump
|
|
|
|
# ---------------- Luftklappe (Servo MG996R) ----------------
|
|
output:
|
|
- platform: esp8266_pwm
|
|
id: klappe_pwm
|
|
pin: GPIO0 # D3 (Boot-Pin, Servo-Eingang ist hochohmig)
|
|
frequency: 50 Hz
|
|
- platform: esp8266_pwm
|
|
id: pump_pwm
|
|
pin: GPIO13 # D7
|
|
frequency: 1000 Hz
|
|
inverted: false # Stufe invertiert: Klemmen-Duty = 1 - power (VTS/AMG Profil H)
|
|
min_power: 0.16
|
|
max_power: 0.93
|
|
zero_means_zero: true
|
|
|
|
servo:
|
|
- id: klappe_servo
|
|
output: klappe_pwm
|
|
min_level: 3% # ~0,6 ms -> ggf. an Klappenanschlag anpassen
|
|
max_level: 12% # ~2,4 ms
|
|
transition_length: 4s
|
|
auto_detach_time: 3s # danach kein Haltestrom/Brummen; Klappe hält per Getriebe
|
|
|
|
number:
|
|
- platform: template
|
|
name: "Luftklappe"
|
|
id: luftklappe
|
|
unit_of_measurement: "%"
|
|
min_value: 0
|
|
max_value: 100
|
|
step: 1
|
|
optimistic: true
|
|
restore_value: true
|
|
initial_value: 50
|
|
icon: mdi:valve
|
|
set_action:
|
|
- servo.write:
|
|
id: klappe_servo
|
|
level: !lambda 'return x / 50.0f - 1.0f;' # 0..100 % -> -1..+1
|
|
|
|
# ---------------- PWM-Pumpe (optional) ----------------
|
|
fan:
|
|
- platform: speed
|
|
output: pump_pwm
|
|
name: "PWM-Pumpe"
|
|
id: pwm_pumpe
|
|
restore_mode: RESTORE_DEFAULT_ON
|
|
|
|
sensor:
|
|
# Pumpenstrom über ZMCT103C: 1 A primär = 1 mA sekundär = 100 mV an der Bürde
|
|
- platform: ads1115
|
|
multiplexer: A0_A1
|
|
gain: 0.256 # +-256 mV -> bis ca. 1,8 A eff.
|
|
id: ct_spannung
|
|
sample_rate: 860
|
|
update_interval: never
|
|
internal: true
|
|
- platform: ct_clamp
|
|
sensor: ct_spannung
|
|
name: "Pumpe Strom"
|
|
id: pumpe_strom
|
|
sample_duration: 400ms
|
|
update_interval: 5s
|
|
unit_of_measurement: A
|
|
accuracy_decimals: 3
|
|
filters:
|
|
- multiply: 10.0 # V an 100 R -> A primär
|
|
- lambda: 'return x < 0.015f ? 0.0f : x;'
|
|
- platform: template
|
|
name: "Pumpe Leistung (ca.)"
|
|
unit_of_measurement: W
|
|
device_class: power
|
|
accuracy_decimals: 0
|
|
update_interval: 5s
|
|
lambda: 'return id(pumpe_strom).state * 230.0f * 0.9f;' # Schein -> grob Wirkleistung (cos phi ~0,9 schätzen)
|
|
|
|
- platform: max6675
|
|
cs_pin: GPIO15 # D8 (10k Pull-down auf der Platine)
|
|
name: "Abgastemperatur"
|
|
id: abgas
|
|
update_interval: 5s
|
|
filters:
|
|
- sliding_window_moving_average: {window_size: 3, send_every: 1}
|
|
|
|
# DS18B20 an J5/J6/J7 (ein Bus). Nach dem ersten Start die Adressen aus dem Log eintragen
|
|
# und index durch address: 0x... ersetzen, sonst können die Fühler die Reihenfolge tauschen.
|
|
- platform: dallas_temp
|
|
name: "Temperatur 1"
|
|
index: 0
|
|
update_interval: 10s
|
|
- platform: dallas_temp
|
|
name: "Temperatur 2"
|
|
index: 1
|
|
update_interval: 10s
|
|
- platform: dallas_temp
|
|
name: "Temperatur 3"
|
|
index: 2
|
|
update_interval: 10s
|
|
|
|
- platform: duty_cycle
|
|
pin:
|
|
number: GPIO3 # RX
|
|
mode: INPUT
|
|
name: "PWM-Pumpe Rückmeldung"
|
|
update_interval: 5s
|
|
accuracy_decimals: 0
|
|
|
|
- platform: wifi_signal
|
|
name: "WLAN Signal"
|
|
update_interval: 60s
|
|
- platform: uptime
|
|
name: "Uptime"
|
|
|
|
binary_sensor:
|
|
- platform: template
|
|
name: "Pumpe läuft"
|
|
device_class: running
|
|
lambda: 'return id(pumpe_strom).state > 0.03f;'
|
|
- platform: template
|
|
name: "Pumpe läuft über Thermostat"
|
|
lambda: 'return id(pumpe_strom).state > 0.03f && !id(pumpe_relais).state;'
|
|
- platform: template
|
|
name: "Pumpe Störung" # Relais an, aber kein Strom (Sicherung, Pumpe, Kabel)
|
|
device_class: problem
|
|
lambda: 'return id(pumpe_relais).state && id(pumpe_strom).state < 0.03f;'
|
|
filters:
|
|
- delayed_on: 20s
|
|
- platform: status
|
|
name: "Status"
|