Hallo
Seit ich meinen Heizkessel habe bin ich am überlegen wie ich am Besten die Rücklauftemperaturanhebung regele.
(Athmos Vergaserkessel)
Die vom Kesselhesteller enpfohlene war ein einfaches Thermostat was bei einer bestimmten Temperatur geöffnet hat.
Funktioniert war mir aber zu unflexibel.
(Ladomat)
Also habe ich mich dagegen entschieden und stattdessen einen 3-Wegemischer eingebaut.
Denn möcht ich jetzt regeln.
- Versuch die Heizungssteuerung (Resol DeltaSolMX)
Schöne Steuerung mit vielen Funktionen und ein und Ausgängen bin zufrieden damit aber die Mischersteuerung ist nicht die beste.
Nachteile:Einfache Regelung (Die Temperatur ist zu hoch na dann mache ich den Mscher auf und warte was passiert)
Speicher ist voll. (Wenn mal mal etwas zu viel in den Ofen legt) Jetzt pumpen wir den Speicher so lange im Kreis bis er unter der eingestellten Temperatur ist.
Das Gerät funktioniert bis jetzt ohne einen Fehler und immer noch meine Backuplösung weil der Rest der Anlage so gut läuft und ich den Regler auch über Netzwerk auslesen kann.
- Versuch Hausautomations über FHEM
Nachteil:Ich bekomme einfach keine dauerhaft stabilen Temperaturen (Sensoren) dadurch Fehleranfällig.
PID - Regler
You kan script it you can do it.
Ich würde dabei bleiben allerdings die Sensoren.
- Versuch jetzt mit ESP32
Soll alle Vorteile haben ohne die oben genannten Nachteile.Soll nur mit Strom funktionieren
Alle Sensoren direkt angeschlossen
Kurze Leitungen (Derzeit sind zwichen Steuerung und Kessel ca. 20m Leitungen)
Ohne Netzwerk Cloud und Internet funktionieren.
Nicht viel kosten
Hardware:
ESP32
Relaisbord (SSR) von Chinese des Vertrauens
Temperatursensoren DS18B20
Wiederstand xxxOhm für Temperatursensoren
Lötzubehör
Software: Home Assistant mit ESPHome
Die Theorie:
Systemskizze siehe im Anhang.
Der Mischer arbeitet wie ein "Time Based Cover" er braucht eine Zeit x um auf- und zufahren. Alle Werte dazwichen können errechnet werden. und das macht das Cover bereits.
Die Regelung soll ein PID-Regeler übernehmen dafür haben wir "PID Climate"
Der Rest sind ein paar einfache Funktionen if und else.
Sollte also kein Problem sein.
Also schnell auf den Schreibtisch alles zusammengesteckt und losprogrammiert.
- Problem
"PID-Climat" redet nicht direkt mit "Time Based Cover"
Lösung:
Einen GPIO als PWM Ausgang definieren.
Somit hat man zwar einen GPIO nutzlos verbraucht kann aber mit "PID-Climat" arbeiten
Internetsuche --> erfolglos. Fragen hier im Forum --> erfolglos. Probieren probieren testen --> nach 1Woche mit einem halben Jahr Pause dazwichen konnte ich das Problem auch lösen
- Problem
Gewünchte Solltemperatur wurde nicht angezeigt.
Nachlesen hat geholfen ist alles optional einstellbar. --> gelöst
Derzeitiger Fortschritt:
Hardware liegt auf meinem Schreibtisch.
Software sollte funktionieren. (siehe unten)
Weitere Planung:
Test am System
Schaltung löten
Kabel zusammenstellen
Alles in einen Kasten bauen und nutzen
(Dislpay anbauen)
Stand 12.11.2023
Code: Alles auswählen
output:
- platform: esp32_dac
pin: GPIO25
id: dac_output
switch:
- platform: gpio
pin: 18
name: "Mischer_auf"
id: relay1
inverted: true
interlock: [relay2]
- platform: gpio
pin: 19
name: "Mischer_zu"
id: relay2
inverted: true
interlock: [relay1]
dallas:
- pin: 23
update_interval: 10s
sensor:
- platform: dallas
name: "Rücklauf"
address: 0xe43c01d607557628
id: Ruecklauf
- platform: dallas
name: "Vorlauf"
address: 0xc13c01d607623128
id: Vorlauf
- platform: dallas
name: "Zuleitung"
address: 0xdd3c01d60766a728
id: zuleitung
- platform: pid
name: "PID Climate Result"
type: RESULT
on_value:
then:
- climate.control:
id: pid_mischer
target_temperature: !lambda |-
if (id(Vorlauf).state >= 95) {
return 20;
} else if(id(zuleitung).state >= 70) {
return id(zuleitung).state + 3;
} else {
return 73;
}
- platform: pid
name: "PID Climate HEAT"
id: pidmi
type: HEAT
accuracy_decimals: 0
on_value:
then:
- cover.control:
id: mischer_kessel
#position: !lambda |-
# return id(pidmi).state/100;
position: !lambda |-
if (id(pidmi).state/100 - id(mischer_kessel).position >= 0.01) {
return id(pidmi).state/100;
} else if (id(pidmi).state/100 - id(mischer_kessel).position <= -0.01) {
return id(pidmi).state/100;
}
cover:
- platform: time_based
name: "Mischer_Kessel"
id: mischer_kessel
open_action:
- switch.turn_on: relay1
open_duration: 2.1min
close_action:
- switch.turn_on: relay2
close_duration: 2.1min
stop_action:
- switch.turn_off: relay1
- switch.turn_off: relay2
climate:
- platform: pid
name: "PID Climate Controller"
id: pid_mischer
sensor: Ruecklauf
default_target_temperature: 73°C
heat_output: dac_output
visual:
min_temperature: 10
max_temperature: 90
control_parameters:
kp: 0.49460
ki: 0.00487
kd: 12.56301
output_averaging_samples: 5 # smooth the output over 5 samples
derivative_averaging_samples: 5 # smooth the derivative value over 10 samples
deadband_parameters:
threshold_high: 0.2°C # deadband within +/-0.2°C of target_temperature
threshold_low: -0.2°C
Ich würde mich über Verbesserungvorschläge freuen.