Ich verwende Max-Thermostate ohne Wandthermostat.
Bei dem Versuch die Temperatur des Thermostats via measurementOffset
an einen Referenzfühler (HMS100TF) anzugleichen, bin ich zunächst gescheitert,
da es einfach nicht gelingen wollte.
Ich meine der Fehler liegt in folgender Zeile im Modul 10_MAX.pm.
sub
MAX_Parse($$)
{
..
$measuredTemperature -= $measOffset if($measuredTemperature ne "" and $measOffset ne "");
..
}
Nachdem ich diese auskommentierte passt alles bestens, ich konnte die Temperatur angleichen.
Ich habe Folgendes festgestellt:
- der Thermostat übernimmt measuredTemperature und addiert diesen zum physikalisch gemessenen Wert.
- es kommt als der korrekte bereits vom Thermostat korrigierte Wert beim CUL/COC an.
- die erneute Korrektur des Wertes innerhalb von FHEM ist unnötig
Folgender Log-Auszug
# offset 0
2013.02.07 23:02:32 3: measuredTemperature: 17.4 (john A)
# offset auf 1 gestellt
2013.02.07 23:04:32 3: measuredTemperature: 18.4 (john A) # vom Sensor korrigierter Wert passt
2013.02.07 23:04:32 3: battery 0, rferror 0, panel 0, langateway 1, dstsetting 1, mode 1, valveposition 15 %, desiredTemperature 18, until , curTemp 18.4
2013.02.07 23:04:32 3: measuredTemperature: 17.4 offset: 1.0 # durch den Fehler wird die Korrektur des Sensor rückgängig gemacht
# offset auf -1 gestellt, da ändert sich nix
2013.02.07 23:10:32 3: measuredTemperature: 16.4 # vom Sensor korrigierter Wert passt
2013.02.07 23:10:32 3: battery 0, rferror 0, panel 0, langateway 1, dstsetting 1, mode 1, valveposition 75 %, desiredTemperature 19.5, until , curTemp 16.4
2013.02.07 23:10:32 3: measuredTemperature: 17.4 offset: -1.0 (john B) # durch den Fehler wird die Korrektur des Sensor rückgängig gemacht
Danke für die Untersuchung, vorbildlich!
Ich habs eben so committed.
Guten Abend,
ich versuche schon seit längere Zeit eine Lösung für das Problem in meiner FHEM Installation zu finden. Das Problem ist folgendes,
meine gemessenen Temperaturen die angeziegt werden, sind die aktuelle Temp. + Offset. Wie kann ich das so lösen, dass im FHEM die korrekten Werte angezeigt werden? Ich verwende die Max Thermostate über den Cube an der FB. Danke!
@maplemaple: benutzt du HeatingThermostat oder HeatingThermostatPlus Geräte?
Hallo Matthias,
ich nutze die HeatingThermostat als Geräte.
Deine Beobachtung scheint der Beobachtung vom Threadersteller zu widersprechen. Kannst du das daher etwas detaillierter ausführen:
1. Hast du ein anderes Gerät als Referenz für die Temperatur? Was zeigt das an?
2. Was zeigt FHEM zur gleichen Zeit im "temperature" READING?
3. Was ist das eingestellte Offset?
4. Wie verändert sich das "temperature" READING, wenn du das Offset änderst?
Am besten sehr ausführlich oder mit Tabelle o.ä..
Hallo Matthias,
ich habe jetzt mal einen Versuch gestartet und folgende Werte aufgenommen.
Referenztemperatur ist ein direkt neben dem Heizkörper stehendes normales Raumthermometer und der Wert beträgt 22,7°C.
- Offset=2 temperature=23,4
- Offset=0 temperature=21,5
- Offset=1 temperature=22,5
Ich hoffe du kannst den Fehler nachvollziehen. Danke!
Hallo maplemaple,
das sieht alles richtig aus.
Das Thermostat liefert ohne Offset 21,5.
Nimmst du den Offset auf 1 Grad geht die Temperatur auf 22.5
Bei Offset 2 Grad bekommen wir ca 23.5.
Allgemein : gesendete Temperatur v. Thermostat = (gemessene Temperatur am Thermostat + Offset)
Genau das würde ich erwarten.
Haben wir dein Problem noch nicht verstanden ?
John
Guten Abend John,
vielleicht habe ich mich nicht ganz korrekt ausgedrückt. Bei einem Offset von 1, entspricht die gemessene Temp. genau der gesendeten direkt am Thermostat. Nun Sitze ich nicht direkt am Heizkörper, und ermittele die Differenz zu diesem Ort. Dass soll mein Offset sein, in meinem Fall 2°C.
Soweit bin ich doch sicherlich richtig?! Nun stelle ich als desiredtemperature z.B. 22°C ein. Dann liefert mir doch mein Thermostat die gemessene + Offset als temperature. Das ist doch dann aber nicht die Gleiche wie die desiredtemperature?! Oder verstehe ich da was falsch?
MapleMaple
Zitatei einem Offset von 1, entspricht die gemessene Temp. genau der gesendeten direkt am Thermostat.
Misst du den noch mit einem anderen Fühler ?
Zunächst ein paar Grundlagen:
desiredTemperature
- ist der Temperatur-Sollwert
- nur dieser wird am Thermostat angezeigt, nicht jedoch der Istwert
temperature
- ist der Istwert den das Thermostat über den internen Sensor ermittelt hat
- dieser kann via measurementOffset korrigiert werden
Meine Vorgehensweise, wenn ich measurementOffset ermitteln will.
- ich stelle im Raum einen Thermometer bzw. weiteren genauen Sensor auf
- nachdem dieser eingeschwungen ist, lese ich den Istwert ab, z.B. 21 Grad
- wenn das Thermostat 20 Grad liefert verpasse ich ihm einen measurementOffset von 1 Grad und es liefert nun auch die 21 Grad
- damit ist der Abgleich beendet
John
Danke für die Erläuterungen. Also stimmen dann desiredTemperature und temperature niemals überein?
Theoretisch sollte der Thermostat durch das Heizen die Raumtemperatur so regeln, dass temperature == desiredTemperature wird.
Tatsächlich wird es aber imme eine Regelabweichung geben, insbesondere da die Heizung nur heizen und nicht kühlen kann. Wie ist denn das Verhalten auf lange Zeit? Bleibt eine Konstante Differenz zwischen temperature und desiredTemperature? Oder schwankt das?
Diese Differenz ist in der Heizphase meist genau das Offset.
Wenn ich als desiredTemperature den Wert der gemessenen temperature einstelle, sollte ja das Ventil zu bleiben. Aber das tut es nicht, es geht auf heizt bis es genau das Offset drüber liegt.
Guten Abend,
ich habe jetzt nochmal einige Versuche gestartet und einen Vergleich mit Maxbuddy angestellt. Dort werden die Temperaturen korrekt angezeigt. Welche Möglichkeit habe ich denn von der angezeigten temp das offset abzuziehen?(nur für die Darstellung der Kurven) Kenne mich leider in Perl noch nicht so gut aus. Vielleicht kann mir ja jemand einen Tipp geben. Vielen Dank!
Mathias
Bei mir ist das Reading "temperature" die tatsächliche Temperatur. Ich habe das measurementOffset auf 0.5 gestellt, da vorher "temperature" 0.5 Grad zu wenig anzeigte. Wenn ich desiredTemperature auf z.B. 21 Grad stelle, dann wird es im Raum auf 21 Grad geheizt
und "temperature" zeigt auch 21 Grad an. (Natürlich kann es zu Überschwingern kommen, je nach Raum, Heizkörper, Vorlauftemperatur usw. Auf lange Sicht ist bei mir aber "temperature" == "desiredTemperature")
Ich sehe da also bisher keinen Fehler. Kannst du mal einen Plot anhängen, wo man die dauerhafter Regelabweichung sieht?
Hallo,
anbei mal ein Plot, in dem es gut zu erkennen ist. Aber ich denke ich habe eine Lösung für mein Problem.
in 10_MAX.pm in der Zeile 623,
$measuredTemperature -= $measOffset if($measuredTemperature ne "" and $measOffset ne "" and $shash->{type} =~ /HeatingThermostatPlus/ and $hash->{TYPE} eq "MAXLAN");
müsste das "and" nach /HeatingThermostatPlus/ ein "or" sein. Habe das bei mir jetzt mal geändert und es sieht sehr gut aus. Ich denke das ist genau das, was ich suche.
Was sagt der Fachmann dazu?? Liege ich an der Stelle richtig?
In deinem Plot treffen sich doch desiredTemperature und temperature am Ende, oder? So wie es sein soll?
Ansonsten ist das etwas zu kurz, um das Regelverhalten beurteilen zu können.
Dafür müsstest du eine desiredTemperature für ca. 8 Stunden fest einstellen und dann schauen, wie sich "temperature" dazu bewegt.
Ich vermute, dass "temperature" nach einer gewissen Zeit gleich "desiredTemperature" wird. Kleine Regelabweichungen von +/- ein paar Grad zu Beginn sind bei einer Heizung zu erwarten.
Die Frage ist ja, ob sich auf lange Zeit eine Differenz einstellt, weil das Thermostat möglicherweise falsch mit dem measurementOffset umgeht.
Deine Änderung der Code-Zeile kann ich so nicht einbauen. Der Ausdruck wurde genau so gebaut, nachdem verschiedene andere Leute den getestet und für richtig befunden haben. Sonst würden wir es für diese Leute kaputt machen. Wir müssen daher schauen, unter welchen genauen Umständen es bei dir nicht funktioniert. Bisher habe ich allerdings noch nichts gesehen, was mich davon überzeugt, dass es bei dir nicht richtig funktioniert.
Ich hoffe, dass der oben vorgeschlagenen Plot etwas Licht ins Dunkel bringen kann.
Um das deutlich zu sagen: measurementOffset kann nur dazu benutzt werden, dass das Thermostat die richtige Temperatur an der Heizung anzeigt. Es bringt nichts, measurementOffset auf -2 zu setzten, damit das Thermostat die Temperatur am anderen Ende des Raums "anzeigt". Der Temperaturunterschied an der Heizung und am anderen Ende des Raums ist nämlich nie konstant. So handelt man sich nur Fehler in der Regelung ein.