Buderus KM200 Kommunikationsmodul

Begonnen von Sailor, 21 Juli 2014, 12:39:47

Vorheriges Thema - Nächstes Thema

Sailor

Hallo Arno

Zitat von: arnoaugustin am 26 Januar 2016, 23:38:06
Wenn du es so schreibst, dann musst Du aber entweder den &-Ausdruck klammern oder das !=0 weg lassen (wegen Operatoren Rangfolge. Binäres "&" bindet schwächer als "!=")

Mist. OK gefixt mit der naechsten Issue

M
******************************
Man wird immer besser...

Sailor

Hallo Arno

Zitat von: arnoaugustin am 27 Januar 2016, 17:39:26
attr myKM200 IntervalSpecialVal 60
attr myKM200 SpecialVals /heatSources/actualPower /system/sensors/temperatures/supply_t1 /system/sensors/temperatures/return /system/sensors/temperatures/hotWater_t2

So etwas Ähnliches hatten wir am Anfang:

IntervalDynVal
IntervalStatVal
Dabei kamen sich aber die verschiedenen Abfragen ins Gehege und zusätzlich noch Abfragen mit zu kurz gesetzten Intervallen.

Rasultat: Ueberlastung - und die km200 Kiste schaltet auf stur...

Das Problem: Ich kann die Timer nicht getrennt voneinander löschen. Ich muss die Timer am Anfang eines Polling aber löschen um nicht Gefahr zu laufen von einer zweiten Polling - Welle quasi von hinten überrannt zu werden.

Gruss
     Sailor
******************************
Man wird immer besser...

arnoaugustin

Zitat von: Sailor am 02 Februar 2016, 11:16:45
Hallo Arno

So etwas Ähnliches hatten wir am Anfang:

IntervalDynVal
IntervalStatVal
Dabei kamen sich aber die verschiedenen Abfragen ins Gehege und zusätzlich noch Abfragen mit zu kurz gesetzten Intervallen.

Rasultat: Ueberlastung - und die km200 Kiste schaltet auf stur...

Das Problem: Ich kann die Timer nicht getrennt voneinander löschen. Ich muss die Timer am Anfang eines Polling aber löschen um nicht Gefahr zu laufen von einer zweiten Polling - Welle quasi von hinten überrannt zu werden.

Gruss
     Sailor

Hi Sailor,

wie wäre es mit der PollOnly option? Da sind schon verdammt viele Werte mehrfach und Sachen wie die Zeitprogramme muss man ja wirklich nur lesen, wenn man sie ändern möchte.
(Ich hab das bei mit gerade so gelöst, dass mir ein userattr PollOnly definiert habe und von meinem Code aus einfach das DYN-Array überschreibe.  Das funzt für mich so weit, ist aber keine besonders schöne Lösung. Fixt aber gleichzeitig den Bug, dass die Werte bei gesetzten DoNotPoll mehrfach gelesen werden. Die Langnamen setze ich in einem Notify auf ein Dummy-Device um, damit ich nicht mit den langen Namen hantieren muss.)
Was mehrere Intervalle angeht:
Man könnte ja genau ein Zeitintervall setzen und andere Zeitintervalle leiten sich als Vielfache ab. Dann kommt sich auch nichts in die Quere. Also z.B:
attr myKM200 LongPollEvery 10
Man würde dann bei jedem 10. mal polling den Rest holen.

Das Gateway läuft bisher stabil. Schade, dass man so Sachen wie: "Warmwasser einmal Ladung" Seitens des Gateways nicht kann.
Bei mir gibts dafür keinen schreibbaren Wert.
Wenigstens kann man Temporär den Brenner wieder aus der Nachtabsenkung holen. Für Warmwasser muss man leider in den Keller oder das Zeitprogramm verstellen (Frag ich mich ja schon, was die sich dabei gedacht haben).

Andere Frage: Sind 6-7 Grad Wärmeverlust im Warmwasserspeicher über Nacht in 8 Stunden normal? Bzw. habt ihr das auch so? Bzw. hat das mal einer nachgeguckt? Ladetemperatur 55 Grad, keine Warmwasserzirkulation, Heizkreispumpe aus, keine Wasserentnahme, Buderus 135 Liter Speicher (Herstellerangabe Bereitstellungswärmeaufwand: 1,1kWh/24h). Das Wasser steht also zu 100% in der Zeit in allen Rohren (Bis auf etwaige Wärmezirkulation in den Rohren)
Bei dem Wäremeverlust komme ich rechnerisch auf ca. 2,8-3,3kWh/Tag (+Kesselverlust und dem warmen Wasser was nach dem Brauchwasserheizen im Kessel sinnlos flöten geht).

furban

#1128
Zitat von: arnoaugustin am 02 Februar 2016, 12:25:47
Das Gateway läuft bisher stabil. Schade, dass man so Sachen wie: "Warmwasser einmal Ladung" Seitens des Gateways nicht kann.
Bei mir gibts dafür keinen schreibbaren Wert.
Wenigstens kann man Temporär den Brenner wieder aus der Nachtabsenkung holen. Für Warmwasser muss man leider in den Keller oder das Zeitprogramm verstellen (Frag ich mich ja schon, was die sich dabei gedacht haben).

Genau damit habe ich auch gerade gekämpft und dann die Lösung aus meinem letzten Post verwendet. Ich habe mir praktisch eine eigene Zeitschaltung gebaut in dem ich die Wassertemperatur verändere:


define WassertemperaturPmHigh at *17:00 set KM200 /dhwCircuits/dhw1/temperatureLevels/high 55
define WassertemperaturAmLow at *09:00 set KM200 /dhwCircuits/dhw1/temperatureLevels/high 40


Warmwasser wird bei mir per normalem Zeitprogramm zwischen 8:00 und 22:00 produziert. Tagsüber gibt es keinen hohen Bedarf und somit heize ich das Wasser tagsüber nur auf 40 Grad. Ab 17:00 erhöhe ich dann auf 55 Grad


Zitat von: arnoaugustin am 02 Februar 2016, 12:25:47
Andere Frage: Sind 6-7 Grad Wärmeverlust im Warmwasserspeicher über Nacht in 8 Stunden normal? Bzw. habt ihr das auch so? Bzw. hat das mal einer nachgeguckt? Ladetemperatur 55 Grad, keine Warmwasserzirkulation, Heizkreispumpe aus, keine Wasserentnahme, Buderus 135 Liter Speicher (Herstellerangabe Bereitstellungswärmeaufwand: 1,1kWh/24h). Das Wasser steht also zu 100% in der Zeit in allen Rohren (Bis auf etwaige Wärmezirkulation in den Rohren)

Sieht bei mir sehr ähnlich aus, außer das ich einen 160l Tank habe
Wäremverlust heute Nacht:


2016-02-01_22:02:00 KM200 /dhwCircuits/dhw1/actualTemp: 55
2016-02-01_22:07:25 KM200 /dhwCircuits/dhw1/actualTemp: 54.9
...
2016-02-02_05:44:22 KM200 /dhwCircuits/dhw1/actualTemp: 49.1
2016-02-02_05:49:45 KM200 /dhwCircuits/dhw1/actualTemp: 49
2016-02-02_05:55:11 KM200 /dhwCircuits/dhw1/actualTemp: 49



Über https://www.buderus-connect.de/ kann man übrigens auch eine Einmalladung auslösen. Vielleicht geht das also auch irgendwann einmal über das FHEM Modul.

Sailor

Hallo Arno

Zitat von: arnoaugustin am 28 Januar 2016, 11:53:26
2) Bei DoNotPoll mehrfache Leerzeichen zulassen (@KM200_DONOTPOLL) enthält sonst Leerelement wenn zwischen den Services im Attribut mehrere Leerzeichen stehen. Im Code sind noch ein paar Stellen an denen statt / / besser /\s+/ stehen sollte - nicht dass es Böse Überraschungen gibt, wenn jemand TABs oder mehrere Spaces verwendet.

Gefixt und 9 mal übernommen.

Gruß
    Sailor
******************************
Man wird immer besser...

arnoaugustin

Zitat von: furban am 02 Februar 2016, 13:51:05
Genau damit habe ich auch gerade gekämpft und dann die Lösung aus meinem letzten Post verwendet. Ich habe mir praktisch eine eigene Zeitschaltung gebaut in dem ich die Wassertemperatur verändere:


define WassertemperaturPmHigh at *17:00 set KM200 /dhwCircuits/dhw1/temperatureLevels/high 55
define WassertemperaturAmLow at *09:00 set KM200 /dhwCircuits/dhw1/temperatureLevels/high 40


Warmwasser wird bei mir per normalem Zeitprogramm zwischen 8:00 und 22:00 produziert. Tagsüber gibt es keinen hohen Bedarf und somit heize ich das Wasser tagsüber nur auf 40 Grad. Ab 17:00 erhöhe ich dann auf 55 Grad


Sieht bei mir sehr ähnlich aus, außer das ich einen 160l Tank habe
Wäremverlust heute Nacht:


2016-02-01_22:02:00 KM200 /dhwCircuits/dhw1/actualTemp: 55
2016-02-01_22:07:25 KM200 /dhwCircuits/dhw1/actualTemp: 54.9
...
2016-02-02_05:44:22 KM200 /dhwCircuits/dhw1/actualTemp: 49.1
2016-02-02_05:49:45 KM200 /dhwCircuits/dhw1/actualTemp: 49
2016-02-02_05:55:11 KM200 /dhwCircuits/dhw1/actualTemp: 49



Über https://www.buderus-connect.de/ kann man übrigens auch eine Einmalladung auslösen. Vielleicht geht das also auch irgendwann einmal über das FHEM Modul.

Hi furban,

Danke für die schnelle Antwort. Das mit dem Wasser auf Hi-Level lassen und per FHEM steuern ist als Workarround gar nicht mal so schlecht. Damit kann man auch ne Einmalladung provizieren (Hochsetzen und Timer zum wieder runter Setzen stellen). Zeitprogramm müsste dann eben immer auf Hi stehen.
Schöner wär natürlich schon, wenn man das nachladen bei der Heizung selber auslösen könnte.
Wenn das über buderus-connect geht, dann muss es ja irgendwie noch eine andere Zugriffsmöglichkeit ins Gateway geben.
Wenn die mit dem gleichen Schlüssel ankommen wie lokal, dann könnte man das mal mitschneiden mit Wireshark und gucken was die dem Gateway schicken. Fritzbox kann ja per undokumentiertem Feature den ganzen Traffic abspeichern.
Ist allerdings das dann schon einiges an Aufwand das zu analysieren.
Hast du das Gateway immer am Internet?
Bei Dir also auch ca. 8 Grad in 6 Stunden. Scheint also normal zu sein (is ja wie bei VW. Gemessen wird der Speicher scheinbar am Prüfstand ohne Rohre mit Isolierstopfen o.ä.  >:( )
Viele Grüße,

Arno


Sailor

Hallo furban

Zitat von: furban am 02 Februar 2016, 13:51:05
Über https://www.buderus-connect.de/ kann man übrigens auch eine Einmalladung auslösen. Vielleicht geht das also auch irgendwann einmal über das FHEM Modul.

Kannste das mit WireShark mal mitschneiden? Vielleicht kriegen wir den Service raus, über den das läuft.

Gruß
    Sailor
******************************
Man wird immer besser...

arnoaugustin

Nochmal ich  ;)
Ich habe hier gerade was gefunden, muss ich heut Abend mal ausprobieren:
Service: /dhwCircuits/dhw1/operationMode

RC35:
auto = nach Zeitprogramm
on = Einmalladung
off = aus

RC300:
off = aus
high = Einmalladung
HCprogramm = Warmwasserbereitung läuft mit den Heizkreisprogrammen
ownprogram = Zeitprogramm für Warmwasser



Sailor

Hallo Arno

Zitat von: arnoaugustin am 02 Februar 2016, 12:25:47
wie wäre es mit der PollOnly option? Da sind schon verdammt viele Werte mehrfach und Sachen wie die Zeitprogramme muss man ja wirklich nur lesen, wenn man sie ändern möchte.
(Ich hab das bei mit gerade so gelöst, dass mir ein userattr PollOnly definiert habe und von meinem Code aus einfach das DYN-Array überschreibe.  Das funzt für mich so weit, ist aber keine besonders schöne Lösung. Fixt aber gleichzeitig den Bug, dass die Werte bei gesetzten DoNotPoll mehrfach gelesen werden. Die Langnamen setze ich in einem Notify auf ein Dummy-Device um, damit ich nicht mit den langen Namen hantieren muss.)

Also ich haette ja die wirklich brandaktuell notwendigen vielleicht einfach ueber den "get" - Befehl geholt.

Und um die doppelten Readings unter anderem Namen loszuwerden ist ja genau der DoNot-Poll Befehl da.
Damit schmeiss ich gefuehlte 25% der Werte raus.

Gruss
    Sailor
******************************
Man wird immer besser...

arnoaugustin

Zitat von: Sailor am 02 Februar 2016, 14:50:16
Hallo Arno

Also ich haette ja die wirklich brandaktuell notwendigen vielleicht einfach ueber den "get" - Befehl geholt.

Und um die doppelten Readings unter anderem Namen loszuwerden ist ja genau der DoNot-Poll Befehl da.
Damit schmeiss ich gefuehlte 25% der Werte raus.

Gruss
    Sailor

Hallo Sailor,

aber wenn ich die Zeitprogramme auch nicht laufend lesen will und sie mit DoNotPoll raus werfe, dann kann ich sie aber auch nicht mehr schreiben. Was unter DoNotPoll steht sollte dann aber wenigstens mit get und set schreib oder lesbar sein.
Gibt es eigentlich ein Problem, wenn ich ein get mache und das Polling gerade aktiv ist? Das wird ja asynchron ausgeführt. Wenn der Request abgesetzt ist kann FHEM ja weiter laufen und theoretisch könnte ich dran kommen und einen get-Befehl absetzen und wieder im Modul landen?

VG
  Arno

Sailor

Hallo Arno

Zitat von: arnoaugustin am 28 Januar 2016, 11:53:26
ich hab hier noch Probleme damit, dass alle Werte teilweise viermal geholt werden. Da dauert das Auslesen für meine paar Werte über 20 Sekunden statt 5 Sekunden die es bei mir mit dem Patch braucht. Außerdem wurden Logs und Notifies mehrfach getriggert (Daran habe ich das auch erst gemerkt).

Im Log sieht man dann schon, dass etliche Services mehrfach hintereinander geholt werden und wenn ich das Device mit "list myKM200" angucke, dann werden die Services unten in den Listen mehrfach angezeigt.
list myKM200

Ich hab hier einen Patch auf Basis der neusten Version aus dem Repo, der das Problem behebt. (Frage bleibt allerdings, warum die ganzen Duplikate überhaupt entstehen - Dazu müsste ich mir das ganze aber mal wenn ich mehr Zeit genauer angucken).

Ich habe deine Konfiguration mal verwendet und konnte dein Vierfach-Problem nicht nachvollziehen.
Daher habe ich den Patch (noch) nicht eingebunden, da ich erst gerne die Ursache kennen möchte.

Wenn Du du `ne Ahnung hast, dann melde dich doch mal.
Danke

Gruss
    Sailor
******************************
Man wird immer besser...

arnoaugustin

Zitat von: Sailor am 02 Februar 2016, 15:05:52
Hallo Arno

Ich habe deine Konfiguration mal verwendet und konnte dein Vierfach-Problem nicht nachvollziehen.
Daher habe ich den Patch (noch) nicht eingebunden, da ich erst gerne die Ursache kennen möchte.

Wenn Du du `ne Ahnung hast, dann melde dich doch mal.
Danke

Gruss
    Sailor

Bei mir passiert das wenn ich DoNotPoll gesetzt habe. Ich denke, das ist aber auch aus dem Code ersichtlich, da beim Attribut-Setzen auch noch mal ein Timer aufgezogen wird. Beim "define" in der Init-Funktion. Und wenn in der fhem.cfg dann das DoNotPoll attribut kommt wird im Modul nochmal ein Timer aufgezogen. Evtl. liegts auch daran, dass ich nen Dualcore habe und die Threads dann möglicherweise echt parallel laufen....
Falls das der Fall ist, dann sollte das auf einem PC (der ja heute üblicherweise min. 2 Cores hat) auch passiern.


arnoaugustin

Zitat von: Sailor am 02 Februar 2016, 14:42:10
Hallo furban

Kannste das mit WireShark mal mitschneiden? Vielleicht kriegen wir den Service raus, über den das läuft.

Gruß
    Sailor

Siehe Antwort #1132

arnoaugustin

Zitat von: arnoaugustin am 02 Februar 2016, 14:47:49
Nochmal ich  ;)
Ich habe hier gerade was gefunden, muss ich heut Abend mal ausprobieren:
Service: /dhwCircuits/dhw1/operationMode

RC35:
auto = nach Zeitprogramm
on = Einmalladung
off = aus

RC300:
off = aus
high = Einmalladung
HCprogramm = Warmwasserbereitung läuft mit den Heizkreisprogrammen
ownprogram = Zeitprogramm für Warmwasser

Habs mal getestet (RC300). Folgendes scheint zu gehen:
set KM200 /dhwCircuits/dhw1/operationMode high
The service /dhwCircuits/dhw1/operationMode has been changed to: high

Dabei fällt mir noch auf, dass bei Brauchwassererwärmung auf 55 Grad die Speicherumwälzung bereits abgeschaltet und die Heizungspumpe eingeschaltet wird, wenn der Vorlauf noch 68 Grad hat. Damit ist der Vorlauf für die Heizkörper eigentlich vorübergehend zu hoch und wenn das im Sommer auch so ist, dann wär das Verschwendung, da zuviel Energie im runter kühlenden Kessel gelassen wird. Korrekt wäre, wenn die Umwälzung, zumindest im Sommer, so lange läuft bis Vorlauftemperatur und Speichertemperatur gleich sind.

# hier ist Heizkreislauf für Heizkörper wieder aktiv, Vorlauf aber auf knapp 69 Grad.
2016-02-02_07:46:01 Buderus PumpModulation: 100
2016-02-02_07:46:00 Buderus WaterTemp: 55.7
2016-02-02_07:43:00 Buderus SupplyTemp: 68.5
2016-02-02_07:43:00 Buderus ReturnTemp: 68.8
2016-02-02_07:42:57 Buderus WaterTemp: 54.5

furban

Zitat von: arnoaugustin am 02 Februar 2016, 15:29:53
Habs mal getestet (RC300). Folgendes scheint zu gehen:
set KM200 /dhwCircuits/dhw1/operationMode high
The service /dhwCircuits/dhw1/operationMode has been changed to: high

Habe gerade auch mal einen Test gemacht. Erst waren meine Einstellungen so. Warmwasserbereitung war also aktiv.


/dhwCircuits/dhw1/actualTemp 50.8 2016-02-02 19:01:58
/dhwCircuits/dhw1/currentSetpoint 55 2016-02-02 19:01:58
/dhwCircuits/dhw1/operationMode ownprogram 2016-02-02 19:01:58
/dhwCircuits/dhw1/status ACTIVE 2016-02-02 19:01:58
/dhwCircuits/dhw1/switchPrograms/A/1-Mo 0000 off 0800 high 2200 off 2016-02-02 19:01:59
/dhwCircuits/dhw1/switchPrograms/A/2-Tu 0000 off 0800 high 2200 off  2016-02-02 19:01:59
....
/dhwCircuits/dhw1/temperatureLevels/high 55 2016-02-02 19:01:59
/dhwCircuits/dhw1/temperatureLevels/off 0 2016-02-02 19:01:59
/dhwCircuits/dhw1/waterFlow 0 2016-02-02 19:01:59
/dhwCircuits/dhw1/workingTime 54759 2016-02-02 19:01:59


dann habe ich das Zeitprogramm für heute mal beendet. Dadurch hat sich der Wert für currentSetpoint von 55 auf 10 gesenkt. Sonst ist sichtbar nichts passiert


/dhwCircuits/dhw1/actualTemp 50.5 2016-02-02 19:07:22
/dhwCircuits/dhw1/currentSetpoint 10 2016-02-02 19:07:22
/dhwCircuits/dhw1/operationMode ownprogram 2016-02-02 19:07:22
/dhwCircuits/dhw1/status ACTIVE 2016-02-02 19:07:22
/dhwCircuits/dhw1/switchPrograms/A/1-Mo 0000 off 0800 high 2200 off  2016-02-02 19:07:22
/dhwCircuits/dhw1/switchPrograms/A/2-Tu 0000 off 0800 high 1500 off  2016-02-02 19:07:22
/dhwCircuits/dhw1/temperatureLevels/high 55 2016-02-02 19:07:23
/dhwCircuits/dhw1/temperatureLevels/off 0 2016-02-02 19:07:23
/dhwCircuits/dhw1/waterFlow 0 2016-02-02 19:07:23
/dhwCircuits/dhw1/workingTime 54759 2016-02-02 19:07:23


und dan habe ich über buderus-connect mal eine Einmalladung angestoßen und das Einzige was sich geändert hat ist das der currentSetpoint wieder auf 55 gesetzt wurde.


/dhwCircuits/dhw1/actualTemp 50.3 2016-02-02 19:12:44
/dhwCircuits/dhw1/currentSetpoint 55 2016-02-02 19:12:44
/dhwCircuits/dhw1/operationMode ownprogram 2016-02-02 19:12:44
/dhwCircuits/dhw1/status ACTIVE 2016-02-02 19:12:45
/dhwCircuits/dhw1/switchPrograms/A/1-Mo 0000 off 0800 high 2200 off  2016-02-02 19:12:45
/dhwCircuits/dhw1/switchPrograms/A/2-Tu 0000 off 0800 high 1500 off  2016-02-02 19:12:45
/dhwCircuits/dhw1/temperatureLevels/high 55 2016-02-02 19:12:45
/dhwCircuits/dhw1/temperatureLevels/off 0 2016-02-02 19:12:45
/dhwCircuits/dhw1/waterFlow 0 2016-02-02 19:12:45
/dhwCircuits/dhw1/workingTime 54759 2016-02-02 19:12:45


Komischerweise ist currentSetpoint keinen Wert den ich selbst beschreiben kann. Riecht also stark danach das es da doch noch weitere Readings gibt die bisher nicht gefunden wurden.

Das könnte ich nun mal versuchen mit WireShark mitzuschneiden, aber so was habe ich ewig nicht mehr gemacht.
Dazu muss ich auch mit dem WireShark im IP Strom sein, oder? Das wäre dann leider nur auf meiner FritzBox 7490 der Fall. Oder ginge das auch von meinem PC hier aus der ja im selben Netz steht?

Gruß

Frank