Weisshaupt Heizungssteuerung

Begonnen von Elektrolurch, 19 Dezember 2013, 13:15:50

Vorheriges Thema - Nächstes Thema

rabbit02

Hallo Elektrolurch,

schön dass ich das Thema nochmal "auftauen" konnte.
Scheint nicht die Masse an Weishaupt WCM-COM Nutzer zu geben.
Konnte mit Deinem Modul meiner Heizung schon nützliche Daten entlocken.
Kannst Du die neue Version ins Forum stellen?
Möchte mich in die Programmierung einarbeiten. Meine Zeiten mit Perl liegen schon einige
Jahre zurück.

Bin auch derzeit von den Möglichkeiten von Fhem etwas erschlagen.

Vielen Dank!

Gruß

Holger

Elektrolurch

Okay, habe die Beschreibung im Beitrag 1 ergänzt um den aktuellen Stand und die drei Dateien aktualisiert.
Da gibt es jetzt auch schöne rgs für die 'Anzeige....

Vorsicht! Da können noch einige Aufrufe an externe perl-Routinen drin sein, die nicht im Paket enthalten sind:

Aktivmon(''ALARM','text');
schreibt ein eigenes "Aktivitätenlog und versendet ev. Maisl.
Einfach als dummy-Rounite in der 99_myUtils definieren.

RefreshScreen(rg)
ist derzeit auch nur experimentell drin, soll den Bildschirm bei Modify der rg neu aufbauen. Manuell Drücken der F5 - Taste macht das selbe im Browser.
Elektrolurch

configDB und Windows befreite Zone!

bugware

Hallo zusammen,

zunächst einmal vielen Dank für die tolle Arbeit an Elektrolurch! Ich habe zwar kein Solarmodul, aber den Brenner kann ich prima auslesen. Nun habe ich gleich mehrere Fragen:
a) gibt es evtl. Updates?
b) konkreter: in 99_myUtilsHeizung.pm wird ein BRENNERFILE, quasi als Log erzeugt. Kann ich dieses einfach auskommentieren? Ich würde statt dessen einen normalen FileLog in FHEM erstellen.
c) Wenn ich jetzt was im SourceCode ändere, wie kann ich dann später updates einpflegen ohne meine Änderungen zu verlieren?
d) Ich würde gerne über FHEM die Warmwasser-Zirkulationspumpe ein- und ausschalten können. Im Moment fällt mir hierzu allerdings nur ein, dass man den Zeitplan der Pumpe anpasst. Einen direkten Schalter scheint es, jedenfalls bei mir, nicht zu geben. Hat evtl. jemand bereits die Definitionen wie die Heiz- und Pumpprogramme aus dem WCM-COM gelesen werden können? Oder gibt es eine bessere Lösung?

Vielen Dank und schon mal ein schönes WE,
Andy.
RPi 2, nanoCUL433, nanoCUL868-HM, SIGNALduino, HM, IT, SOMFY, Weishaupt-Mod, BOTVAC, MYSENSORS

bugware

Hallo nochmal,

noch eine Frage. Kann es sein, dass sich folgende Telegramme $HzTelegrams{2}[0] gegenseitig überschreiben? Müsste man HzTelegrams nicht noch um den "Index" (bin kein PERL-Experte) MODUL erweitern in dem sich die beiden unterscheiden (einmal 6, einmal 10)?

# HK1_P
$HzWerte{'Hk1-Soll-Temp-System'} = {'READING' => 'Hk1-Soll-Temp-System', 'UNIT' => '°C', 'MODUL' => '6', 'BUS' => '0', 'ValueID' => 'idT0002', 'TELEGRAMID' => '2', 'TELEGRAM' => '[6,0,1,2,0,0,0,0]', 'ACCESS' => 'read','MIN' => '0', 'MAX' => '999', 'MUL' => '1', 'DIV' => '10', 'STEP' => '1', 'METHOD' => 'METH_TEMP'};
$HzDevices{'HK1_P'}{READINGS}{'Hk1-Soll-Temp-System'} = $HzWerte{'Hk1-Soll-Temp-System'};
$HzTelegrams{2}[0] =  $HzWerte{'Hk1-Soll-Temp-System'};


# GAS_P
$HzWerte{'Wärmeanforderung'} = {'READING' => 'Wärmeanforderung', 'UNIT' => '°C', 'MODUL' => '10', 'BUS' => '0', 'ValueID' => 'idT0002', 'TELEGRAMID' => '2', 'TELEGRAM' => '[10,0,1,2,0,0,0,0]', 'ACCESS' => 'read','MIN' => '-30', 'MAX' => '130', 'MUL' => '1', 'DIV' => '10', 'STEP' => '10', 'METHOD' => 'METH_TEMP2'};
$HzDevices{'GAS_P'}{READINGS}{'Wärmeanforderung'} = $HzWerte{'Wärmeanforderung'};
$HzTelegrams{2}[0] =  $HzWerte{'Wärmeanforderung'};


Beste Grüße,
Andy.
RPi 2, nanoCUL433, nanoCUL868-HM, SIGNALduino, HM, IT, SOMFY, Weishaupt-Mod, BOTVAC, MYSENSORS

Elektrolurch

Hallo Andy,

zuerst einmal zu Deinem letzten Post:

Darüber bin ich auch gestolpert. Wärmeanforderung und HK1-System-Soll
scheinen gem. dem Java-Code des Wcmcom das gleiche zu sein. Nachdem ich eine Zeitlang mir die Werte der Anlage angesehen habe, bin ich zu dem Schluß gekommen, dass sie wenig aussagekräftig sind.
Aber vielleicht habe ich da auch etwas übersehen.
Der Wert "Wärmeanforderung" taucht meines Wissens ja auch nur auf der Eingangsseite auf und nicht mehr bei den Heizkreisen.

Zitat:
a) gibt es evtl. Updates?
A bisserl was habe ich geändert, aber nichts von Bedeutung. In der Steuerung der Vorlauf-Temp (sub Vorlauftempkontrolle) und bei der Darstellung in den readingsGroups.
Steht im Beitrag 1.
b) konkreter: in 99_myUtilsHeizung.pm wird ein BRENNERFILE, quasi als Log erzeugt. Kann ich dieses einfach auskommentieren? Ich würde statt dessen einen normalen FileLog in FHEM erstellen.

Kein Problem. Ich habe das File für die Entwicklung des Moduls gebraucht. Zum Beispiel, um zu testen, ob die Berechnung des Gasverbrauches stimmt. Mittlerweile fast 100 % so wie der Gaszähler das anzeigt.

c) Wenn ich jetzt was im SourceCode ändere, wie kann ich dann später updates einpflegen ohne meine Änderungen zu verlieren?

Stellen markieren und später mit dem linux-Kommand "diff" die beiden Dateien vergleichen.
Aber derzeit habe ich nichts Neues mehr geplant, da das Wcmcom-Modul einwandfrei und ziemlich störungsresistent läuft. Das Einzige, was ich noch machen muss, ist die Nutzung des Wcmcom über user / passwd. Der Code steht quasi zwar schon drin, ist aber noch nicht aktiviert. Ich glaube, das ich die Stellen derzeit einfach auskommentiert habe.
Ist irgendwas mit "token"....


d) Ich würde gerne über FHEM die Warmwasser-Zirkulationspumpe ein- und ausschalten können. Im Moment fällt mir hierzu allerdings nur ein, dass man den Zeitplan der Pumpe anpasst. Einen direkten Schalter scheint es, jedenfalls bei mir, nicht zu geben. Hat evtl. jemand bereits die Definitionen wie die Heiz- und Pumpprogramme aus dem WCM-COM gelesen werden können? Oder gibt es eine bessere Lösung?


O ja, das würde ich auch, da die Pumpe meist läuft, wenn ich sie sowieso nicht brauche. Aber da scheint es wirklich nichts an der Oberfläche oder in dem Modul zu geben.

Die Hz-Umlaufpumpe schalte ich ja mit Hk2-Betriebsart = Sommer aus, das funktioniert einwandfrei.

Ab dem 1.5. setze ich per fhem alle Thermostate auf "off" und dann sieht die Routine sub Vorlauftempkontrolle, dass es keine Wärmeanforderung gibt und setzt die Hz auf Sommer.
Drehe ich ein Thermostat, z.B. im Keller, wieder auf, geht auch die Hz automatisch wieder an.

Ich hatte mal in die Web-Seite auf der Wcmcom für die Zeitprogrammierung der WW-Pumpe reingeschaut, die erschien etwas anders aufgebaut. Vielleicht auch wegen der vielen Felder. Da muss man die IDs sich merken und dann im Java-Code die Codierung der Werte verstehen.
Das war die ganze Crux um das Wcmcom sich zum "Sklaven" zu machen.  :-)

Gruß


Elektrolurch
configDB und Windows befreite Zone!

bugware

Hallo Elektrolurch,

eine Magen-Darm-Grippe später, will ich kurz antworten.

Zu Wärmeanforderung und HK1-System-Soll:
Bei mir sind da unterschiedliche Werte hinter (5 und 8°C). Also im Prinzip quasi gleich. Allerdings hat die Doppelbelegung in FHEM mal den einen, mal den anderen Wert angezeigt und jedesmal auch einen Logeintrag gemacht. Hab es jetzt wie oben angedeutet unterschieden indem Modul und Bus als Index genutzt werden.

zu b)
Ok, also raus damit bei mir ;o)

zu d)
Also, das Auslesen der Zeitprogramme habe ich hinbekommen und die Bedeutung der Werte konnte ich auch nachvollziehen. Sind natürlich ziemlich viele Werte, so dass ich ein eigenes Device dafür angelegt habe. Als nächstes werde ich versuchen noch eine Logikebene darüber zu implementieren, die durch vorübergehendes verändern des Programms die Zirkulationspumpe für z.B. 15 Minuten einschaltet. Das könnte man dann später per Taster, z.B. neben der Dusche oder so, auslösen.

Dazu zwei Fragen:
1) Sehe ich das richtig, dass Updates der devices über die Timer erfolgen sollen und das nicht alle Devices automatisch aktualisiert werden sollen? Wenn ich die Zeitprogramme automatisch aktualisieren wollte müsste ich also z.B. in Wcmcom_GetValues($hash,'HK1_ZP',0); in sub Wcmcom_HKDaten($) ergänzen, oder?
Wie kann man das Update manuel auslösen?

2) Bei der angesprochenen Logik bin ich mir unsicher, ob man dass besser in dem Heizungsscript macht, oder ob man das eher mit FHEM-elementen macht, dummys, notifies usw., die dann Befehle wie set Hk1-ZP-ZP-Mo-1-Start 06:00 auslösen. Da ich noch neu in FHEM bin, habe ich davon noch keine Ahnung. Oder soll ich es ähnlich anlegen, wie die Befehle, die du z.B. zur Berechnung des Gasverbrauchs angelegt hast? Was wäre wohl besser? Mal sehen...

Beste Grüße,
Andy.
RPi 2, nanoCUL433, nanoCUL868-HM, SIGNALduino, HM, IT, SOMFY, Weishaupt-Mod, BOTVAC, MYSENSORS

Elektrolurch

Hallo Andy,

schön, dass da noch jemand mit Weisshaupt seine Zeit verbringt. :D
Für mich war das auch sozusagen mein Erstlingswerk und ich habe da relativ viel reingepackt, was vermutlich gar nicht in ein Modul sollte, wie z.B. die Sache mit dem Gasverbrauch.
Auf der anderen Seite hat es mich aber auch gejuckt, was intelligentes zu bauen und perl war damals für mich auch neu.
(Bin mit Assembler, Fortran V und C groß geworden)

So nun zu Deinen Fragen:
Zitat:
zu d)
Also, das Auslesen der Zeitprogramme habe ich hinbekommen und die Bedeutung der Werte konnte ich auch nachvollziehen. Sind natürlich ziemlich viele Werte, so dass ich ein eigenes Device dafür angelegt habe. Als nächstes werde ich versuchen noch eine Logikebene darüber zu implementieren, die durch vorübergehendes verändern des Programms die Zirkulationspumpe für z.B. 15 Minuten einschaltet. Das könnte man dann später per Taster, z.B. neben der Dusche oder so, auslösen.


Ich habe das leider erst später mit den Submodulen, wie z.B. in dem netachmo-Modul gesehen. Im Prinzip könnte man das für die Weisshaupt-Komponenten auch so aufbauen. Da ich bislang der Einzige war und das Teil läuft,  habe ich aber dann andere Sachen gemacht.

Für die ZP sollte es m.M.n. drei Dinge geben:

set HzAnlage ZP ein|aus
get HzAnlage ZP
und ein reading, welches den aktuellen Zustand der ZP wiedergibt (d.h. wenn das Zeitprogramm die ZP einschaltet, so sollte über das reading auch ein Event generiert werden können)

Zitat
Dazu zwei Fragen:
1) Sehe ich das richtig, dass Updates der devices über die Timer erfolgen sollen und das nicht alle Devices automatisch aktualisiert werden sollen? Wenn ich die Zeitprogramme automatisch aktualisieren wollte müsste ich also z.B. in
Code: [Auswählen]
Wcmcom_GetValues($hash,'HK1_ZP',0);
in
Code: [Auswählen]
sub Wcmcom_HKDaten($)
ergänzen, oder?

Ja. Das Konstrukt ist etwas unglücklich, da ich nicht wusste, dass dem InternalTimer
man "beliebbiges" mitgeben kann. Ich bin davon ausgeganben, dass der $hash zwingend erforderlich ist. Das was da übergeben werden kann, dient eigentlich nur dazu, den gesetzten InternalTimer wiederzufinden.

Den Zustand der Gasanlage hole ich alle 60 Sekunden, damit die Verbrauchmessung auch stimmt. Der regelt ja den Gasstrom rauf und runter und den Wert brauche ich ja, um den exakten Verbrauch zu bestimmen.

Für die Solaranlage wird das alle 20 Minuten ausgelesen, wenn sie nicht läuft, bei Energiegewinnung alle 5 Minuten.
Und die anderen Werte hole ich nur gelegentlich ab, bzw. wenn es sich um Einstellungen (GAS-F, SOL_F usw handelt) nicht zeitgesteuert, da diese Werte ja nur an der HzAnlage oder über die Weboberfläche des Wcmcom geändert werden können.
Zitat:
kann man das Update manuel auslösen?

Sollte eigentlich ja mit dem Wcmcom_GetValues (??? ich habe gerade den Code nicht greifbar)  gehen. Die startet einen non-blocking Call an das Wcmcom.
Über den nonblocking Call wird eine Routine mitgegeben, die vom nonblocking aufgerufen wird, wenn die Daten dann da sind.
Da müsstest Du dann verzweigen, damit die Werte ev. sinnvoll weiterverarbeitet werden.
(Das sind bei mir so Routinen, wie Wcmcom_Brennerdaten, Wcmcom_Solardaten).

Wie man readings setzt, findest Du ziemlich weit unten in der Wcmcom_set - Routine.  Da frage ich bspw. auch gegen die Bereichsgrenzen für Werte ab, wie ich sie aus der Wcmcom in dem jafa-zeugs gefunden habe und in dem großen internen hash für die Datenkonvertierung / Beschreibung hinterlegt habe.
Die hatte ich ursprünglich in externen Dateien hinterlegt und bei Modulstart eingelesen. Solche Init-Dateien sind aber seitens der fhem-Gurus nicht so erwünscht gewesen.

Zitat:
Bei der angesprochenen Logik bin ich mir unsicher, ob man dass besser in dem Heizungsscript macht, oder ob man das eher mit FHEM-elementen macht, dummys, notifies usw., die dann Befehle wie
Code: [Auswählen]
set Hk1-ZP-ZP-Mo-1-Start 06:00
auslösen. Da ich noch neu in FHEM bin, habe ich davon noch keine Ahnung. Oder soll ich es ähnlich anlegen, wie die Befehle, die du z.B. zur Berechnung des Gasverbrauchs angelegt hast? Was wäre wohl besser? Mal sehen...


Tja. Das Einschalten der ZP ist ja standardmässig nicht vorgesehen. Dafür aber einen set-Befehl zu haben, ist meiner Meinung nach eleganter, da kompakt im Modul drin.
Das war auch die Überlegung beim Gasverbrauch. Ich denke, dass da niemand einen eigenen Algorythmus für schreiben möchte... und externe notifys dafür baut.
Die reine fhem-Lehre sagt allerdings eher so was: Das Modul liefert readings, die aus einer Hardware kommen. Alles was abgeleitet wird, ist extern zu machen.

Ich habe ja schon ziemlcih viel extern in der sub HzAnlage_not, weil da dann Dinge noch von anderen, außen liegenden devices (z.B. Wetter und Meßfühler) abhängig sind.
Das war für mich das Kriterium für eine Trennung des Codes.

Elektrolurch
configDB und Windows befreite Zone!

uli69

Hallo Elektrolurch,

danke schon mal für deine Arbeit. Wenn ich die Authentifizierung in der WCM-Home einschalte funktioniert der Zugriff leider nicht. Ich habe in der Benutzerverwaltung einen User fhem als "Benutzer" mit passwort angelegt.

In der habe ich dann noch folgende Einträge:
define HzAnlage Wcmcom hostname=heizung username=fhem passwd=xxxxx secret="Please enter Username and Password!"
attr HzAnlage passwd Wqpmu4Ma
attr HzAnlage secret Please enter Username and Password!

Habe ich da noch einen falschen Eintrag oder gibt es da noch irgendwo einen Bug?

Und vielleicht als Anregung für weitere Erweiterungen, eventuell könnte man die Config noch so aufteilen, dass man sich die einzelnen Module (Gas, Heizkreis 1, Heizkreis 2 ...) z.B. per include zusammenstellen könnte, ich habe z.B. kein Solarmodul und auch nur einen Heizkreis.

Uli

Elektrolurch

Hallo Ulli,

Zitat:
danke schon mal für deine Arbeit. Wenn ich die Authentifizierung in der WCM-Home einschalte funktioniert der Zugriff leider nicht. Ich habe in der Benutzerverwaltung einen User fhem als "Benutzer" mit passwort angelegt.

In der habe ich dann noch folgende Einträge:
define HzAnlage Wcmcom hostname=heizung username=fhem passwd=xxxxx secret="Please enter Username and Password!"
attr HzAnlage passwd Wqpmu4Ma
attr HzAnlage secret Please enter Username and Password!

Habe ich da noch einen falschen Eintrag oder gibt es da noch irgendwo einen Bug?

Nein. Ich habe das noch nicht implementiert. Ich muss mal die Zeit finden, mir das für nonblocking - Calls mit Auth anzusehen. Steht bei mir auf der todo - Liste.

Zitat:
Und vielleicht als Anregung für weitere Erweiterungen, eventuell könnte man die Config noch so aufteilen, dass man sich die einzelnen Module (Gas, Heizkreis 1, Heizkreis 2 ...) z.B. per include zusammenstellen könnte, ich habe z.B. kein Solarmodul und auch nur einen Heizkreis.

Es gibt da bei fhem wohl so ein Konzept für Sub-Module. Leider aber nirgends dokumentiert :-)
Derzeit kann man nur per Attribut die Module auswählen, die man haben möchte, damit die Zahl der readings nicht zu groß wird.
Ich habe diesbezüglich auch nichts weiter entwickelt, da es  wohl wenig Weisshaupt - Nutzer gibt und die anderen Module, die eine Weisshaupt-Anlage noch hat, ich nicht testen kann.
Heute, nach 1,5 Jahren perl - Erfahrung, würde ich ev. manches etwas anders "hinschreiben"...
Gruß

Elektrolurch

configDB und Windows befreite Zone!

uli69

Zitat[Nein. Ich habe das noch nicht implementiert. Ich muss mal die Zeit finden, mir das für nonblocking - Calls mit Auth anzusehen. Steht bei mir auf der todo - Liste.
Ich will mich die nächsten Wochen mal intensiver mit FHEM beschäftigen. Mal schauen, ob ich da am Wochenende was finde.

uli69

WCM-Home verwendet Digest Authentifzierung. Soweit ich das bisher überblicke scheint HttpUtils.pm aber nur Basic Authentification zu unterstützen.

uli69

So, ich habe anstatt UtilsHttp jetzt mit LWP die Digest-Authentifizierung hinbekommen. Bei mir erweckt es den Anschein, das es funktioniert  ;). Die Unterscheidung blocking und nonblocking konnte ich nicht so richtig nachvollziehen, in UtilsHttp wird zwar non-blocking IO verwendet aber da dann doch immer auf eine Rückantwort gewartet wird machte das IMHO nicht so wirklich Sinn. Ich habe deswegen auch nur den Blocking-IO Teil portiert und non-blocking auf Blocking umgestellt.

Damit man die Änderungen besser sieht habe ich zudem zwei Patches angehängt, der Patch format.patch ist erst mal nur der Durchlauf durch einen Perl-Formatter, auth.patch enthält dann die wirklichen Änderungen.


jetexman

Hallo Elektrolurch,
vielen Dank schon mal für die Weishaupt-FHEM-Pionierarbeit...
Habe mittlerweile auch eine Weishaupt Gastherme und möchte eine ähnliche Regelung wie du umsetzen.

Welche Heizkörperthermostate verwendest du denn, die dir die Ventilstellung zurückmelden?
Ich habe die homematic-ventile und hoffe, dass es damit auch umsetzbar ist.

Gruß
Philipp


Elektrolurch

Hallo Philipp,

die Heizungsanlage (Weisshaupt) und die Heizkörperthermostate haben ja zunächst wenig miteinander zu tun.
Ich habe die FHT. Für die Steuerung der Heizungsanlage (Vorlauftemperatur, Umschaltung Betriebsart) werte ich bei den Thermostaten folgende readings aus:

actuator: Ventilstellung in %
desired-temp: Soll-Temperatur
measured-temp: Ist-Temperatur

Wie die entspechenden readings bei Homematik aussehen, weiß ich nicht.
Eine sub "Vorlaufgtempkontrolle" rufe ich periodisch auf und stelle über sie fest, wie der aktuelle Heizbedarf ist
Derzeit haben wir gerade 11 Grad Außentemperatur und Sonneneinstrahlung auf die Fassade, so dass die Steuerung die Heizung auf "Sommerbetrieb" im Heizkreis gestellt hat.
Elektrolurch

configDB und Windows befreite Zone!

extraem

Hallo

Ich habe das 99_myUtilsHeizung.pm jetzt auch im Einsatz (ja hat lange gedauert)
Ich würde damit auch gerne den Gasverbrauch berechnen lassen aber ich komme nicht weiter da immer wenn ich Gas-End eingeben will kommt eine Meldung wegen dem Solar -- ich habe aber kein Solar und auch keinen zweiten Heizkreis

Kann mir jemand sagen wie ich das 99_myUtilsHeizung.pm ans laufen bekomme ohne Solar und ohne dem zweiten Heizkreis (ich habe leider keine Ahnung von Perl)

Danke
Franz