Mischersteuerung mit ESP32 und ESP Home

Hier könnt Ihr eure Smart Home Projekte Vorstellen.


Antworten
Einstein
Beiträge: 26
Registriert: Do 12. Jan 2023, 21:27
1

Mischersteuerung mit ESP32 und ESP Home

Beitrag von Einstein »

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.

  1. 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.

    Vorteil:
    • 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.

  2. Versuch Hausautomations über FHEM
    Nachteil:
    • Ich bekomme einfach keine dauerhaft stabilen Temperaturen (Sensoren) dadurch Fehleranfällig.

    Vorteil:
    • PID - Regler
      You kan script it you can do it.

Ich würde dabei bleiben allerdings die Sensoren.

  1. 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.

  1. 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

  1. 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.

Dateianhänge
Kessel.PNG
Kessel.PNG (13.83 KiB) 993 mal betrachtet
Einstein
Beiträge: 26
Registriert: Do 12. Jan 2023, 21:27
1

Re: Mischersteuerung mit ESP32 und ESP Home

Beitrag von Einstein »

Neues Update

Die Ich habe die Regelung eingebaut.
Nachdem ich alles richtig angeschlossen habe, die richtigen Regelparameter eingestellt habe, keine defekten Relais mehr verbaut habe, (die Heizung ein paar mal gekocht hat) funktioinert die Regelung jetzt erstmal. Jetzt geht es am optimieren.
Aktuell bin ich mit dem Einschwingverhalten noch nicht zufrieden (derzeit +- 3° Ziel +-1°)
Die Temperatur wird auf +- 0,5° gehalten (Ziel +-0,2°)
Hier die aktuelle Konfiguration

Code: Alles auswählen

output:
  - platform: esp32_dac         #Dummy für Ausgang PID Modul
    pin: GPIO25
    id: dac_output


switch:
  - platform: gpio
    pin: 19
    name: "Mischer_zu"
    id: relay1
    #inverted: true
    interlock: [relay2]

  - platform: gpio
    pin: 18
    name: "Mischer_auf" 
    id: relay2 
    #inverted: true
    interlock: [relay1]  

dallas:
  - pin: 23
    update_interval: 10s

#[22:19:05][D][dallas.sensor:082]:   Found sensors:
#[22:19:05][D][dallas.sensor:084]:     0x0e011453f595aa28
#[22:19:05][D][dallas.sensor:084]:     0xe43c01d607557628
#[22:19:05][D][dallas.sensor:084]:     0xc13c01d607623128
#[22:19:05][D][dallas.sensor:084]:     0xdd3c01d60766a728
#[20:01:35][D][dallas.sensor:084]:     0xe03c01d607c7c728 sensor:

sensor:
  - platform: dallas
    name: "Rücklauf"
    address: 0xe03c01d607c7c728
    #address: 0xe43c01d607557628
    #address: 0x0e011453f595aa28
    id: Ruecklauf 

  
- platform: dallas name: "Vorlauf" address: 0xc13c01d607623128 id: Vorlauf - platform: dallas name: "Zuleitung" #address: 0xe43c01d607557628 #address: 0xe03c01d607c7c728 address: 0x0e011453f595aa28 id: zuleitung - platform: template name: "Sollwert_Rücklauf" id: sw_rl
- platform: pid name: "PID Climate Result" type: RESULT on_value: # Berrechnung der Solltemperatur then: - climate.control: id: pid_mischer target_temperature: !lambda |- if (id(Vorlauf).state >= 95) { return 20; } else if(id(zuleitung).state >= id(sw_rl).state -3) { return id(zuleitung).state + 3; } else { return id(sw_rl).state; }
- platform: pid #name: "PID Climate Cool" name: "PID Climate HEAT" id: pidmi #type: COOL type: HEAT accuracy_decimals: 0 # Steuerung der Mischers abgreifen der Einstellung des PWM Ausgangs on_value: then: - cover.control: id: mischer_kessel #position: !lambda |- # return id(dac_output).set_level; 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; } - platform: pid name: "PID Climate KP" type: KP - platform: pid name: "PID Climate KI" type: KI - platform: pid name: "PID Climate KD" type: KD - platform: pid name: "PID Climate PROPORTIONAL" type: PROPORTIONAL - platform: pid name: "INTEGRAL" type: INTEGRAL - platform: pid name: "PID DERIVATIVE" type: DERIVATIVE cover: #Mischerausgang - platform: time_based name: "Mischer_Kessel" id: mischer_kessel open_action: - switch.turn_on: relay2 open_duration: 2.2min close_action: - switch.turn_on: relay1 close_duration: 2.2min 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 #cool_output: dac_output visual: #Temperaturanzeige in Home Assistant min_temperature: 10 max_temperature: 90 control_parameters: kp: 0.05 ki: 0.00166 kd: 0.0 #1.20249 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 on_state: then: - sensor.template.publish: id: sw_rl #position: !lambda |- # return id(pidmi).state/100; state: !lambda |- return id(pid_mischer).target_temperature; button: - platform: template #für Autotune (erste Einstellung) name: "PID Climate Autotune"
on_press: - climate.pid.autotune: pid_mischer #[20:52:18][I][pid.autotune:124]: pid_climate_controller: PID Autotune finished! #[20:52:18][I][pid.autotune:140]: pid_climate_controller: PID Autotune: #[20:52:18][I][pid.autotune:141]: State: Succeeded! #[20:52:18][I][pid.autotune:158]: All checks passed! #[20:52:18][I][pid.autotune:162]: Calculated PID parameters ("Ziegler-Nichols PID" rule): #[20:52:18][I][pid.autotune:163]:
#[20:52:18][I][pid.autotune:164]: control_parameters: #[20:52:18][I][pid.autotune:165]: kp: 0.16977 #[20:52:18][I][pid.autotune:166]: ki: 0.00499 #[20:52:18][I][pid.autotune:167]: kd: 1.44299 #[20:52:18][I][pid.autotune:168]:
#[20:52:18][I][pid.autotune:169]: Please copy these values into your YAML configuration! They will reset on the next reboot. #[20:52:18][D][pid.autotune:175]: Alternative Rules: #[20:52:18][D][pid.autotune:207]: Rule 'Ziegler-Nichols PI': #[20:52:18][D][pid.autotune:208]: kp: 0.12732, ki: 0.00225, kd: 0.00000 #[20:52:18][D][pid.autotune:207]: Rule 'Pessen Integral PID': #[20:52:18][D][pid.autotune:208]: kp: 0.19806, ki: 0.00728, kd: 2.02018 #[20:52:18][D][pid.autotune:207]: Rule 'Some Overshoot PID': #[20:52:18][D][pid.autotune:208]: kp: 0.09422, ki: 0.00278, kd: 2.13562 #[20:52:18][D][pid.autotune:207]: Rule 'No Overshoot PID': #[20:52:18][D][pid.autotune:208]: kp: 0.05659, ki: 0.00166, kd: 1.20249 #[20:52:18][I][pid.autotune:181]: pid_climate_controller: Autotune completed
Dateianhänge
TempRL_detail.PNG
TempRL_detail.PNG (43.63 KiB) 931 mal betrachtet
TempRL.PNG
TempRL.PNG (48.52 KiB) 931 mal betrachtet
Benutzeravatar
niels56
Beiträge: 2
Registriert: Do 28. Mär 2024, 14:56

Re: Mischersteuerung mit ESP32 und ESP Home

Beitrag von niels56 »

Hallo Einstein. Eine echte Lösung eines Einstein, vielleicht nicht so komplex wie die Relativitätstheorie :D aber großartig. Vielen Dank dafür.

ich habe nun die Schaltung aufgebaut und sie läuft sinnvoll. Da ich diese aber gerne für eine Heizkurve verwenden würde, habe ich nach einer Lösung gesuch, die Regelvorgabe aus einer Wertetabelle zu beziehen, in der Außentemperatur zur Vorlauftemperatur gematcht wird. Leider habe ich auch nach längerer Suche eine solche funktion in HA nicht gefunden. Bin aber auch kein Profi, übe noch und lerne aus Videos immer wieder etwas dazu. Es kann also auch sein, dass ich die falschen Worte zum Suchen verwende... Mir schwebte eine Template Sensor vor, der diese Wertetabelle abfragt und den entsprechende Wert wiedergibt.
Ich wäre für einen Hinweis dankbar, ob sowas überhaupt geht, oder wo ich weitere Informationen bekommen kann!
Eine Ausbaustufe habe ich auch im Kopf. Über eine Eingabe könnte die Raumtemperatur korrigiert werden und die manuelle Korrektureeingabe zur Anpassung der Wertetabelle (Heizkurve) beitragen. Das ganze automatisch, wäre sicher der Endzustand. Aber da werde ich noch lange für üben müssen...

Aber schon Hilfe zum ersten Schritt ist jetzt erstmal notwendig :lol: . In jedem Fall schon al Danke für das Bestehende und auch für eine eventuelle Antwort.
Viele Grüße
Niels

Einstein
Beiträge: 26
Registriert: Do 12. Jan 2023, 21:27
1

Re: Mischersteuerung mit ESP32 und ESP Home

Beitrag von Einstein »

Hallo

freut mich das es Jemanden etwas nutzt.
zur Heizkurve:
So etwas sollte sich eigentlich recht leicht berrechnen lassen.
man braucht einen Startpunkt.
sagen wir 20°C Außentemperatur, da will keiner mehr Heizen Also es reicht eine Vorlautemperatur von 20°C
--> Wert 1= 20
Wenn es Kälter wird muss mehr geheizt werden
Also zb. 10°C wollen wir 30°C Vorlauftemperatur 0°C 40°C -10°C 50°
--> Wert 2 = 20°C - Außentemperatur ( in meinem Beispiele 10 20 und 30) =x
Vorlauf = 20+x
Um das auf das Haus anzupassen sollte man die Steigung verändern können Also bauen wir einen Faktor ein. --> Y (üblicherweise zwischen 0,3 (gut Gedämmt + Fußbodenheizung) und 2 (Altbau))
Vorlauf = 20+xy
evlt ist es Günstig das ganze noch zu verschieben Also noch ein Offset z
Das mach dann
20+z+x
y
Wenn ich mir das so anschaue kommen ich damit so ziemlich an die Kennlinie meiner Heizungsteuerung.
Dazu noch ein min und max Temperatur festlegen --> fertig

Das sollte sich eingtlich recht leicht programieren lassen.

Hier der Code der meine Heizung über den Winter gebracht hat.
jetzt mit Display das man auch live sehen kann was der Kessel macht.
Und einer zusätzlichen Einstellmöglichkeit für die Vorlauftemperatur.

Code: Alles auswählen

captive_portal:

font:
  - file: "fonts/comic.ttf"
    id: my_font
    size: 20

image:
  - file: "fonts/KC25.jpg"
    id: my_image
    type: RGB24

color:
  - id: my_red
    red: 100%
    green: 0%
    blue: 0%
  - id: my_green
    red: 0%
    green: 100%
    blue: 0%
  - id: my_blue
    red: 0%
    green: 0%
    blue: 100%
  - id: my_yellow
    red: 100%
    green: 100%
    blue: 0%

spi:
  clk_pin: GPIO14
  mosi_pin: GPIO13
  miso_pin: GPIO12

output:
  - platform: esp32_dac         #Dummy für Ausgang PID Modul
    pin: GPIO25
    id: dac_output


switch:
  - platform: gpio
    pin: 19
    name: "Mischer_zu"
    id: relay1
    #inverted: true
    interlock: [relay2]

  - platform: gpio
    pin: 18
    name: "Mischer_auf" 
    id: relay2 
    #inverted: true
    interlock: [relay1]  
  
- platform: gpio pin: 32 name: "Relais3" id: relay3 #inverted: true - platform: gpio pin: 33 name: "Relais4" id: relay4 #inverted: true - platform: gpio pin: 21 name: "Relais5" id: relay5 inverted: true - platform: gpio pin: 2 name: "Relais6" id: relay6 inverted: true - platform: gpio pin: 4 name: "Relais7" id: relay7 inverted: true - platform: gpio pin: 5 name: "Relais8" id: relay8 inverted: true dallas: - pin: 23 update_interval: 10s #[13:52:26][D][dallas.sensor:082]: Found sensors: #[13:52:26][D][dallas.sensor:084]: 0x0e011453f595aa28 #[13:52:26][D][dallas.sensor:084]: 0xc13c01d607623128 #[13:52:26][D][dallas.sensor:084]: 0xe03c01d607c7c728 #[13:52:26][D][dallas.sensor:084]: 0xdd3c01d60766a728 sensor: - platform: dallas name: "Rücklauf" address: 0xe03c01d607c7c728 #address: 0xe43c01d607557628 accuracy_decimals: 2 id: Ruecklauf
- platform: dallas name: "Vorlauf" filters: - offset: 0.4 address: 0xdd3c01d60766a728 accuracy_decimals: 2 id: Vorlauf - platform: dallas name: "Zuleitung" #address: 0xe43c01d607557628 address: 0xc13c01d607623128 accuracy_decimals: 2 id: zuleitung - platform: dallas name: "Raum" #address: 0xe43c01d607557628 address: 0x0e011453f595aa28 id: raum - platform: pid name: "PID Climate Result" type: RESULT on_value: # Berrechnung der Solltemperatur then: - climate.control: id: pid_mischer target_temperature: !lambda |- if (id(Vorlauf).state >= 95) { return 20; } else if(id(zuleitung).state >= id(sollwert).target_temperature -3) { return id(zuleitung).state + 3; } else { return id(sollwert).target_temperature; }
- platform: template id: test name: "Test1" accuracy_decimals: 5 #1 lambda: |- return id(pidmi).state/100;
- platform: template id: test2 name: "Test2" accuracy_decimals: 5 #100 lambda: |- return id(mischer_kessel).position; - platform: pid #name: "PID Climate Cool" name: "PID Climate HEAT" id: pidmi #type: COOL type: HEAT accuracy_decimals: 0 # Steuerung der Mischers abgreifen der Einstellung des PWM Ausgangs on_value: then: - cover.control: id: mischer_kessel #position: !lambda |- # return id(dac_output).set_level; 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; } else {} - platform: pid name: "PID Climate KP" type: KP - platform: pid name: "PID Climate KI" type: KI - platform: pid name: "PID Climate KD" type: KD - platform: pid name: "PID Climate PROPORTIONAL" type: PROPORTIONAL - platform: pid name: "INTEGRAL" type: INTEGRAL - platform: pid name: "PID DERIVATIVE" type: DERIVATIVE cover: #Mischerausgang - platform: time_based name: "Mischer_Kessel" id: mischer_kessel open_action: - switch.turn_on: relay2 open_duration: 2.2min close_action: - switch.turn_on: relay1 close_duration: 2.2min stop_action: - switch.turn_off: relay1 - switch.turn_off: relay2 has_built_in_endstop: True
climate: - platform: pid name: "PID Climate Controller" id: pid_mischer sensor: Ruecklauf default_target_temperature: 73°C heat_output: dac_output #cool_output: dac_output visual: #Temperaturanzeige in Home Assistant min_temperature: 10 max_temperature: 90 control_parameters: kp: 0.05 ki: 0.00166 kd: 0.0 #1.20249 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 - platform: thermostat name: "Sollwert" id: sollwert sensor: Vorlauf idle_action: - switch.turn_off: relay8 min_idle_time: 2s heat_action: - switch.turn_on: relay8 min_heating_off_time: 2s min_heating_run_time: 2s visual: min_temperature: 50 max_temperature: 80 temperature_step: 1 button: - platform: template name: "PID Climate Autotune" on_press: - climate.pid.autotune: pid_mischer #[20:52:18][I][pid.autotune:124]: pid_climate_controller: PID Autotune finished! #[20:52:18][I][pid.autotune:140]: pid_climate_controller: PID Autotune: #[20:52:18][I][pid.autotune:141]: State: Succeeded! #[20:52:18][I][pid.autotune:158]: All checks passed! #[20:52:18][I][pid.autotune:162]: Calculated PID parameters ("Ziegler-Nichols PID" rule): #[20:52:18][I][pid.autotune:163]:
#[20:52:18][I][pid.autotune:164]: control_parameters: #[20:52:18][I][pid.autotune:165]: kp: 0.16977 #[20:52:18][I][pid.autotune:166]: ki: 0.00499 #[20:52:18][I][pid.autotune:167]: kd: 1.44299 #[20:52:18][I][pid.autotune:168]:
#[20:52:18][I][pid.autotune:169]: Please copy these values into your YAML configuration! They will reset on the next reboot. #[20:52:18][D][pid.autotune:175]: Alternative Rules: #[20:52:18][D][pid.autotune:207]: Rule 'Ziegler-Nichols PI': #[20:52:18][D][pid.autotune:208]: kp: 0.12732, ki: 0.00225, kd: 0.00000 #[20:52:18][D][pid.autotune:207]: Rule 'Pessen Integral PID': #[20:52:18][D][pid.autotune:208]: kp: 0.19806, ki: 0.00728, kd: 2.02018 #[20:52:18][D][pid.autotune:207]: Rule 'Some Overshoot PID': #[20:52:18][D][pid.autotune:208]: kp: 0.09422, ki: 0.00278, kd: 2.13562 #[20:52:18][D][pid.autotune:207]: Rule 'No Overshoot PID': #[20:52:18][D][pid.autotune:208]: kp: 0.05659, ki: 0.00166, kd: 1.20249 #[20:52:18][I][pid.autotune:181]: pid_climate_controller: Autotune completed graph: # Show multi-trace graph - id: multi_temperature_graph duration: 1h x_grid: 10min y_grid: 10.0 # degC/div width: 180 height: 80 traces: - sensor: Ruecklauf line_type: DASHED line_thickness: 2 color: my_blue - sensor: Vorlauf line_type: SOLID line_thickness: 3 color: my_red - sensor: zuleitung line_type: DOTTED line_thickness: 2 color: my_green display: - platform: ili9xxx model: ILI9341 data_rate: 20MHz dc_pin: 27 cs_pin: 15 reset_pin: 26 rotation: 90 lambda: |- auto red = Color(255, 0, 0); auto green = Color(0, 255, 0); auto blue = Color(0, 0, 255); auto white = Color(255, 255, 255); it.line(50, 180, 200, 180, blue); it.line(50, 60, 200, 60, red); it.line(120, 180, 120, 60, red); it.image(200, 25, id(my_image)); it.circle(120, 180, 10, white); it.printf(140, 30, id(my_font), my_red, "%.1f°C", id(Vorlauf).state); it.printf(140, 150, id(my_font), my_blue, "%.1f°C", id(Ruecklauf).state); it.printf(50, 150, id(my_font), my_yellow, "%.1f°C", id(zuleitung).state); it.printf(100, 190, id(my_font), "%.1f%%", (id(mischer_kessel).position*100)); //it.print(100, 190, id(my_font), "76,5%"); //Mischer it.graph(10, 70, id(multi_temperature_graph)); # VCC = 5V # GND = GND # CS = G15 # Reset = G33 # DC = G27 # SDI(MOSI) = G13 # SCK = G14 # LED = 3V3 # SDO(MISO) = G12
Benutzeravatar
niels56
Beiträge: 2
Registriert: Do 28. Mär 2024, 14:56

Re: Mischersteuerung mit ESP32 und ESP Home

Beitrag von niels56 »

Hallo Einstein
Schönen Dank für die schnelle Reaktion und Danke für die kurze Nachhilfe in Kurvendiskussion :lol: . Für eine Gerade ist das vermutlich einfach zu machen, und so ist es auch in meiner Heizungssteuerung. Dort gibt es allerdings einen dritten Punkt, um die Steigung nicht über den gesamten Bereich linear zu machen, sondern im Grunde zwei Geraden zu haben mit unterschiedlicher Steigung. Da es hier bei steigenden Temperaturen im Bereich von 16 °C trotzdem immer noch einen manuellen Eingriff benötigt, kam ich auf die oben geschilderte Idee mit der Wertetabelle. damit wäre eine freie Gestaltung/ Anpassung einer Heizkurve möglich. Die Idee fand ich ganz erfreulich :-), zumal dann eine halbautomatische Anpassung möglich wäre.
So viel noch zum Hintergrund meiner Frage.
Ich starte jetzt erstmal mit Deinen Tips und versuche mich an der Programmierung, da habe ich eh noch erheblichen Nachholbedarf.

Nun denn, Danke noch mal und ich melde mich, wenn ich den ersten Schritt getan habe.

Viele Grüße und noch einen schönen restfeiertag. Niels

Antworten