Suche Logik zur Berechnung Taktdauer Heizung

Hallo ihr alle :slight_smile:
Ich möchte die Dauer der Takte meiner Heizung errechnen und weiß nicht, wie ich ansetzen soll.

Ich suche den zeitlichen Abstand der unteren Minimalwerte (grün markiert).

Ich messe alle 20 Sek die Temp vom Vorlauf.

Die Minimalwerte können sich je nach Außentemperatur auch etwas verschieben (denke ich, ich beobachte das erst seit ein paar Tagen)

Die gelb markierten Aussreisser sind die Warmwasserbereitung und nicht (so) relevant.

Hat jemand dazu eine Idee? Dankeeee :slight_smile:

a) auf Unterschreiten eines Grenzwertes von 28 reagieren und bei überschreiten wieder resetten

oder
b) gleitender Durchschnitt der letzten n Werte vs. aktueller Wert. Aber dann auch wieder auf "28" reagieren.

Warum willst Du nicht in Abhängigkeit der Temperatur steuern? Ich nehme mal einfach an, dass Du steuern/regeln willst, da Du nichts zu Deinem eigentlichen Ziel gesagt hast.

Ansonsten würde ich (ohne Störung - Warmwasser) von ca. 1,5 Stunden ausgehen.

Gruß Tommy

Ne das ist nur um die Heizung (Laufzeit) zu optimieren. Steuern will ich nix.

Das mit dem Schwellwert hatte ich tatsächlich auch schon überlegt, aber dacht, das es „besser“ gehen könnte.
Evtl. fallen die Minimalwerte bei -10 Grad ja nur auf 29 Grad weil der Vorlauf hochgeregelt wird…

Ich dachte an etwas wie den Umkehrpunkt zu bestimmen. Die Warmwasserzeit kenne ich und könnte die Zeit ausklammern.

Aber ich weiß es nicht :innocent:

Ich weiß auch nicht, wie man auf diesem Weg wirklich optimieren könnte.

Gruß Tommy

Die Idee ist auch nicht schlecht und unabhängig von konkreten Werten.
Falls das meine Aufgabe wäre, und ich nur einmalig eine Auswertung machen wollte: Werte mit Zeitstempel auf SD-Karte > Auswertung separat im Programm Deiner Wahl (ich würde Excel nehmen).
Als Dauerprojekt dann aber eher ungeeignet, wobei Temperaturen sich ja nicht so wahnsinnig schnell ändern und auch eine Änderung in der Zeit/Tempsteuerung nicht in Echtzeit erfolgen muss.
Wenn Dir Variante 1 reicht, wäre das mein "Tipp".

Hallo,
ich würde mal den neuen Messwert mit dem letzen vergleichen. Wenn die Differenz groß ist dann bist Du auf dem stark fallende Teil. Dann millis() nutzen um an die Zeit dazwischen zu kommen. Ich würde mal mit 10° als Differenz anfangen. Eventuell ist der Zeitwert nicht beim Minimum aber das macht ja nichts, ist aber reproduzierbar.
Eine andere Variante , über die Steigung. Lineare Regression über 4-5 Messwerte.

Umkehrpunkte ist auch gut , geht aber auch nicht ohne die Differenz zu nutzen,sonst ist jeder kleine Umkehrpunkt ein Trigger.

Heinz

1 Like

Läuft die Zirkulationspumpe dauernd bzw auch bei Warmwasser?
Wenn nicht kannst Du diese mittels Stromtrafo auf einer Phase oder paralellgeschaltenem Relais.
Auch ein Relais / Optokoppler paralell zum Thermostat falls Du einen für die ganze Wohnung hast.

Grüße Uwe

Kannst Du irgendwie unterscheiden, ob die WW-Bereitung oder die Heizung läuft?
Abgriff z.B. mit zweitem Temp-Fühler an der Ladeleitung für den WW-Speicher / Puffer-Speicher?

Dann könnte man auf letzte Temperatur / aktuelle Temperatur hinter dem Brenner testen und hätte den Start der steigenen Temperatur und wenn dann der Lader fürs WW steigt bzw. der Lader für den Puffer gleich bleibt, wäre der nicht zu rechnen.
Alternativ könnte man versuchen auf die Heizraumtemperatur zu triggern. Wenn denn das auskühlen des Brenners programmiert ist....

Die Frage ist, was willst Du wissen?
Die verbrannte Energie oder die Zyklen? Die letzteren würden ja nur Sinn machen, um festzustellen, das die Takte zu kurz sind.. :wink:

Ist das Bodenheizung, nach dem Mischer? Warum geht die Temperatur so schnell runter? Heizt du einen Gletscher? Oder arbeitet der Mischer nicht.

Das wiederum weiß ich :wink: Mir ging es um den Logikteil der Berechnung.

Ich wollte es gern über die Software realisieren.

Ja die Zeiten kenne ich aber wollte es über die Temperatur nur vom Heizungsvorlauf realisieren.

Weil Die Heizung etwas überdimensioniert ist und dann taktet und abschaltet.
Das wollte ich noch weiter optimieren über die ca. 40 einstellbaren Parameter, in dem ich die Laufzeiten versuche weiter zu erhöhen.
Dazu der Gedanke der automatischen Berechnung der Zeitabstände, damit ich nicht selber immer die Kurven auswerten muss :slight_smile:

Mir fällt halt bisher nur die Berechnung der Zeit zwischen 2 Schwellwerten bei Unterschreitung ein.

Das ist aber nicht optimal, weil ich halt nicht weiß, ob zum Beispiel 27 Grad immer unterschritten werden, auch wenn der Vorlauf mal höher ist im tiefsten Winter….

Obwohl: Fällt mir gerade ein! Wenn es richtig kalt ist, läuft die Heizung eh durch, nur durch die WW Aufbereitung unterbrochen.
Also könnte es mit den Schwellwerten evtl. doch klappen….

Lieber würde ich aber universeller den tiefsten Punkt berechnen und dann die Zeit zwischen 2 von den tiefsten Punkten ermitteln.
Aber das bekomme ich in C++ (noch) nicht hin.

was hat das mit c++ Kenntnissen zu tun?
Erst braucht man eine Strategie.
Die kann man auf Papier in Pseudo Code schreiben oder zeichnen.
Codieren ist dann nur mehr der letzte Schritt.
Ob daraus dann Basic, Pascal, Fortran oder C++ wird, hängt wohl nur mehr daran was man hat, was mach braucht, was man kann.

1 Like

Ich wollte es ja nicht in Basic etc. programmieren und diese Forum hat mit Basic etc. auch wenig zu tun...
Ich hatte ja eingangs beschrieben:

Wie man halt logisch den tiefsten Punkt berechnet.

Wo ist denn das Problem?

byte tempCurrent;
byte tempOld;
uint32_t lastSwitchTime;
uint32_t switchTime;
const byte hysterese = 5;
byte zaehler;
#include <Streaming.h>     // https://github.com/janelia-arduino/Streaming

void setup()
{
  Serial.begin(115200);
#if (defined(ARDUINO_AVR_MEGA) || defined(ARDUINO_AVR_MEGA2650)) // https://github.com/arduino/Arduino/issues/10764
  delay(300);
#endif
  Serial << (F("\r\nStart...\r\n")) << endl;
}

void  loop()

{
  findeSchaltpunkt();
}


void findeSchaltpunkt()
{
  if (tempCurrent > tempOld)
  {
    if (zaehler == 0)
    {
      switchTime = millis();
    }
    zaehler++;
    if (zaehler == hysterese)
    {
      Serial << F("Letzte Pause war: ") << (switchTime - lastSwitchTime) / 1000 << F(" Sekunden") << endl;
      lastSwitchTime = switchTime;
    }
  }
  else
  {
    zaehler = 0;
    tempOld = tempCurrent;
  }
}

1 Like

Nimm die gegebenen Vorschläge und arbeite es aus.

Der "tiefste" Punkte innerhalb welcher Zeiteinheit? 1 Stunde?

Wie liegen deine Werte vor? Zeit als UTC, Temperatur als Float? Was hast soweit?

Wie soll das Ergebnis aus obiger Grafik aussehen? Du schreibst nämlich du willst "Taktung" haben... ja was ist denn das lt obiger Grafik? 90 - 90- 90- 3xx - 90 - 90 - ???

oder willst da nur einen Event haben wenn "der tiefste Punkt" erreicht ist?

1 Like

OK, und der Mischer arbeitet schon? Der mischt ja das abgekühlte Rückwasser mit dem Kesserwasser um eine gewisse Vorlauftemp. zu halten. Und er gibt nach dem aufheizen weniger Kesserwasser zu und steigert das, je nach dem, wie sehr das Rückwasser abgekühlt ist. Damit wird die Vorlauftemperatur des Heizkreises einige Zeit gehalten. Bei dir gibt es aber kein Halten, sondern oben eine Nadel und dann steiler Abfall der Temperatur, als ob kein Mischer vorhanden ist. Aber bei Heizkörpern hat man einen höheren Vorlauf und bei Bodenheizung hat man deine Vorlauftemp. aber über einen Mischer eine Zeit lang gehalten. Irgendwie passt das zu keinem der Zwei Systeme. Ich bin gerade dabei unsere Heizungseinstellungen ein wenig zu überdenken, deshalb fällt mir das zur Zeit auf.