Neues Modul ECOTOUCH für Wärmepumpen Typ Waterkotte ECOTOUCH mit WWPR2-Regler

Begonnen von LR66, 18 Januar 2016, 20:31:44

Vorheriges Thema - Nächstes Thema

LR66

Hallo,
habe ein noch ausbaufähiges Modul für Wärmepumpen Typ Waterkotte ECOTOUCH erstellt. Da ich nur eine Ai1 Air (Powerinverter) mit 1 Aussenkompressor habe, sind Funktionen für andere Module noch anzupassen & zu prüfen. Zunächst ist nur Lesen der Zustände und anlegen Readings implementiert. Im Define wird das Device und Logfile angelegt und mit dem Standard-User/Passwort eingeloggt. Über Pollinterval werden die wichtigsten sog. Tags z.B. alle 60s ausgelesen. Dabei wird der Status und wichtige Temperaturen festgestellt: Prüfung alarm,poweroff(EVU-Abschaltung) und Aktivität Umwälzpumpe. Wenn die aktiv ist werden weitere Stati zu den Wärmequellen Geo oder Kompressoren geholt und geprüft ob Heizen, Kühlen, Wasserbereitung läuft... Nach definierter Zahl von Status-Pollings werden nicht so wichtige Einstellungen geholt - das reduziert die Netzwerklast für die Pumpe und - da noch kein Non-Blocking implementiert - für FHEM.
Bisher bekannte auslesbare Tags hab ich aus Unterlagen von Waterkotte und aus der Android-App ermittelt. Leider fehlt z.B. noch Betriebsstundenzähler Heizstab und Heizung/Wasser ... hier ist jede Hilfe willkommen (siehe Anfangsteil im Code).
Vielleicht kann jmd. das Modul nutzen. Hab es 89_ECOTOUCH.pm genannt, damit wirds dann nur bei define geladen. Hilfe ist in englisch über Webinterface wie bei den Modulen üblich zu finden.
Nach Test in leerem fhem läuft's nun in meinem Haussystem.
Der Code ist sicher nicht optimal - musste mich erstmal an Perl herantasten und im nächsten Schritt mit den fhem-Specials beschäftigen...
Viele Grüße, Lutz

Phili

Hi Lutz,

super das du die Initiative ergreifst :). Hatte bisher alles über httpmod direkt ausgelesen. Über ein eigenes Modul ist das natürlich sehr viel eleganter.
Ich werde das mal am Wochenende parallel laufen lassen und durchtesten.

Vielen Dank
Philipp

LR66

Hi Philipp,
was hast Du denn für eine Anlage? Ich musste zb feststellen, dass bei meinem Powerinverter im Statusword zb nicht bei Aktivität Kompressor das vorhandene Bit für Compressor1 gesetzt wird. Habe um sowas herauszubekommen auch ein Perl-Skript, was pur auf Kommandozeile (vorzugsweise unter Linux?) Tags minütlich ausliest und Änderungen markiert. Da könntest Du zunächst schauen, was so abläuft ... müsstest halt das Skript anpassen um IP und die Module und oder Tags die interessieren. Im Skript wird noch jedes Tag einzeln geholt, im Modul sammle ich für Abruf wg. Last - zum Test aber nie Problem mit der Pumpe.
Was im Modul noch nicht so klappt: alte nicht mehr genutzte Readings werden nicht beim Delete des Device gelöscht - tauchen ggf wieder auf. Wenn man zu oft zu schnell zum Testen startet, kommt ggf eine Fehlermeldung 'too many users' oä, da kein logout erfolgt - ggf mal 2.. Minuten warten mit Skriptneustart oder im Modul temporär disablen.
Grüße, Lutz

Phili

Hi Lutz,

ich hab eine Luft-Wasser-Wärmepumpe EcoTouch Ai1 Air (Zubadan) http://www.waterkotte.de/waermepumpen/product/ecotouch-ai1-air-zubadan-luft-waermepumpe/.

Meinst du mit Powerinverter den Verdichter? Bei mir läuft auch nur der Verdichter 2 (I51.5 -> Bit 4). Ich lese momentan nur die Außentemperaturren, die Rücklauftemperatur Ist und Soll, und die Warmwassertemperatur. Hab mal ein paar screens angefügt. Wie man den Heizstab auslesen kann weiß ich auch noch nicht. Habe auch noch kein Attribut dafür gefunden.

Eine hilfreiche Liste gibt es hier: https://github.com/openhab/openhab/blob/master/bundles/binding/org.openhab.binding.ecotouch/src/main/java/org/openhab/binding/ecotouch/EcoTouchTags.java

(http://fs5.directupload.net/images/160119/txp749ms.jpg)

Gruß
Philipp

LR66

Hi Philipp,
das ist interessant und feine Plots - da kämpfe ich noch mit SVG. Bei mir wird bei Kompressorbetrieb I51 Bit4 nicht gesetzt - ich finde meinen über I1458 (Du sicher auch, da schaut die APP drauf).
Die bekannten Tags (I51...) habe ich im Skript und im Modul alle gelistet und mit engl.Name und dt. Kommentar am Anfang definiert- da findest Du sicher auch noch interessantes für Dich. Das OpenHab-Modul kenne ich - im wesentlichen hat er dort aber eine Geothermieanlage abgebildet und die anderen Tags interessierten ihn nicht so (hatte mal versucht Kontakt aufzunehmen). Ich habe viele der Tags mit ihrer offiz. Deutung aus einer Doku von Waterkotte zur früheren ModBus-RS485-Anbindung und dann weitere an meiner Anlage über die APP/Webinterface ermittelt. Im Skript/Modul habe ich auch die offizielle Bit-Bedeutung des state_words I51 hinterlegt - Bit 4 (bei 0 beginnend) ist übrigends auch offiziell Kompressor1 und Bit6 heisst 'Status externer Wärmeerzeuger' -> das ist zumindest bei mir der Heizstab! Deine Zubadan hat doch 2 Kompressoren im Außenteil: laufen die immer gleichzeitig mit gleicher Leistung? Für einen Kompressor 2 gibts eigentlich das Bit5, ich vermute aber, dass auch das Zubadan-Außenteil wie eine einzige Einheit betrachtet wird.   
Hast Du noch Specials wie Solarkollektor, externen Wasserspeicher, Pool oder Raumfühler? Kannst Du auch Umkehrkühlung schalten und ist das der gleiche Kreislauf wie Heizung (also Fußboden - oder Deckenverteiler)?
Grüße, Lutz

Phili

Hi Lutz,

ich bin noch kein Experte. Wir sind erst im Oktober letzten Jahres in unser neues EFH eingezogen und verleben nun den ersten Winter mit der Heizung. Bisher ging es mir primär darum die Heizung optimal einzustellen. Ich habe in jedem Raum LaCrosse Temperatur Sensoren und kann so die Temperaturverläufe beobachten. Wir können im Sommer auch runterkühlen über die FBH. Pool, Raumfühler und Solar haben wir nicht.

Habe gerade nochmal im Handbuch nachgelesen. Es stimmt, der externe Wärmeerzeuger scheint der Heizstab zu sein. Das verwundert mich nur, da unser Heizungsmonteur die Sicherung vom Heizstab extra rausgenommen hat. Also kann doch der Heizstab eigentlich gar nicht laufen... Das muss ich nochmal nachfragen.

Zurück zum Thema: I1458 kann ich nicht auslesen, da kommt bei mir unknown tag. Betriebsstunden möchte ich auch noch auslesen können. Wobei man das auch zur noch berechnen könnte über die logs. Also wie lange sind die einzelnen bits auf "1" gesetzt sind.
Was ich auch noch machen will ist die Auslastung der Rotoren außen auszulesen. So wie auf dem Display der Waterkotte.

(http://uploads.tapatalk-cdn.com/20160119/c2349cee23a099cd326c55291a31f989.jpg)

Wie kann ich das script starten?

Gruß
Philipp

LR66

Hi Philipp,
wg. Test:
1. Variante Skript
Hast Du einen Linux-Rechner für fhem oder ein Rechner mit perl drauf? Mit Editor Datei wtk5.pl anpassen! Hab gerade nachgesehen: Zeile 192 auf Deine IP, Zeile 200 auf Pfad für Cookie und Zeile 304 auf Pfad für logfile korrigieren und auf Konsole mit Befehl: perl wtk5.pl starten.

BESSER
2. FHEM: installier Dir ggf zum Testen ein leeres FHEM (macht ja nix bei anderer IP oder bei geä. ports), lad das ECOTOUCH-Modul, dann
     "define myheatpump ECOTOUCH 192.168.xx.yy 30 5 Default:water,heating,cooling,comp1,comp2"
Dann schaun wir mal was im Reading steht  :)

Ggf vorher im Device global verbose auf 5 setzen, dann wird mehr ins globale Log geschrieben...

Grüße, Lutz

Phili

So bin heute mal dazu gekommewn das Modul zu testen. Läuft soweit. Temps werden so angezeigt wie auch über meine HTTPMOD Methode. Das einzige was nicht läuft sind die I51 stati. Meine bits sind anders als bei dir. Ext. Wärmeerzeuger ist bei mir auf 6 und Verdichter auf 5. Analog zu der Liste hier: https://github.com/openhab/openhab/blob/master/bundles/binding/org.openhab.binding.ecotouch/src/main/java/org/openhab/binding/ecotouch/EcoTouchTags.java
Ich lass es mal über Nacht parallel laufen und loggen.

Phili

Die Betriebsstunden werte ich übrigens über HourCounter aus. Ich lasse mir dazu die stati "1" aus I51 zählen und lasse sie mir dann grafisch ausgeben (pro Tag/pro Monat)

LR66

Das I51-Wort wird bei mir eigentlich identisch ausgewertet wie bei openhab (beachte Bit 0...11):
my @default_state_word =(
#[bitval,name_bit   ,modul      ,usage], #description_de
[1,'state_sourcepump'   ,'geo'      ,1], #'Status Quellenpumpe'
[2,'state_heatpump'   ,'main'      ,1], #'Status Heizungsumwälzpumpe'
[4,'state_evd'      ,'geo'      ,1], #'Status Freigabe Regelung EVD/Magnetventil'
[8,'state_comp1'   ,'comp1'   ,1], #'Status Verdichter 1'
[16,'state_comp2'   ,'comp2'   ,1], #'Status Verdichter 2'
[32,'state_extheater'   ,'main'      ,1], #'Status externer Wärmeerzeuger'
[64,'state_alarm'   ,'main'      ,1], #'Status Alarmausgang'
[128,'state_cooling'   ,'main'      ,1], #'Status Motorventil Kühlbetrieb'
[256,'state_water'   ,'water'   ,1], #'Status Motorventil Warmwasser'
[512,'state_pool'   ,'pool'      ,1], #'Status Motorventil Pool'
[1024,'state_solar'   ,'solar'   ,1], #'Status Solarbetrieb'
[2048,'state_cooling4way','cooling'   ,1], #'Status 4-Wegeventil im Kältekreis'
);


Wenn Du schreibst, dass Dein 'Verdichter auf 5' liegt, entspricht das sicher Bit4 (mit Bitwert 16 s.o.) und damit comp2 (wenn man bei 0 beginnt). Könnest Du mal ein Screenshot Definition und Readings schicken?


LR66

Zu Deiner Variante mit HTTPMOD auszulesen: sowas wie Außentemp, Wassertemperatur über Tag liefert immer korrekte Werte. Heizungs- oder Kühlungsflow/returnwerte sind nur bei laufender Umwälzpumpe und jeweiligem Modus Heizung/Kühlung  korrekt.

Phili

Hi Lutz,

hier mal mein Reading ohne das Geo Modul:

(http://www2.pic-upload.de/thumb/29591842/Unbenannt.jpg)

Ich bin verwirrt in deinem Modul wird Verdichter 1 als aktiv angezeigt, über HTTPMOD Verdichter 2.

Hier mal meine code über HTTPMOD:
define HeizungHTTP HTTPMOD http://192.168.0.9/cgi/readTags 600
attr HeizungHTTP userattr disable enableControlSet event-on-change-reading reAuthRegex reading1Expr reading1Name reading1Regex reading2Expr reading2Name reading2Regex reading3Expr reading3Name reading3Regex reading4Expr reading4Name reading4Regex reading5Expr reading5Name reading5Regex reading6Expr reading6Name reading6Regex reading7Expr reading7Name reading7Regex reading8Expr reading8Name reading8Regex reading[1-4]+Expr reading[1-4]Expr readingsExpr.* readingsRegex requestData requestHeader requestHeader.* requestHeader1 requestHeader2 requestHeader3 requestHeader4 sid0URL sid1Data sid1IDRegex sidURL stateFormat verbose
attr HeizungHTTP alias Waterkotte
attr HeizungHTTP disable 0
attr HeizungHTTP enableControlSet 1
attr HeizungHTTP group Temperatur
attr HeizungHTTP reAuthRegex .*E_NEED_LOGIN.*
attr HeizungHTTP reading1Expr $val/10
attr HeizungHTTP reading1Name AußenTemperatur
attr HeizungHTTP reading1Regex #A1\s+S_OK\n\d+\s(-{0,1}\d+)
attr HeizungHTTP reading2Expr $val/10
attr HeizungHTTP reading2Name Außentemperatur_1h
attr HeizungHTTP reading2Regex #A2\s+S_OK\n\d+\s(-{0,1}\d+)
attr HeizungHTTP reading3Expr $val/10
attr HeizungHTTP reading3Name Außentemperatur_24h
attr HeizungHTTP reading3Regex #A3\s+S_OK\n\d+\s(-{0,1}\d+)
attr HeizungHTTP reading4Expr $val/10
attr HeizungHTTP reading4Name Temperatur_Rücklauf_Soll
attr HeizungHTTP reading4Regex #A31\s+S_OK\n\d+\s(-{0,1}\d+)
attr HeizungHTTP reading5Expr $val/10
attr HeizungHTTP reading5Name Temperatur_Rücklauf
attr HeizungHTTP reading5Regex #A30\s+S_OK\n\d+\s(-{0,1}\d+)
attr HeizungHTTP reading6Expr $val/10
attr HeizungHTTP reading6Name Temperatur_Warmwasser_Soll
attr HeizungHTTP reading6Regex #A37\s+S_OK\n\d+\s(-{0,1}\d+)
attr HeizungHTTP reading7Expr $val/10
attr HeizungHTTP reading7Name Temperatur_Warmwasser
attr HeizungHTTP reading7Regex #A19\s+S_OK\n\d+\s(-{0,1}\d+)
attr HeizungHTTP reading8Expr $val/10
attr HeizungHTTP reading8Name VisuStatus
attr HeizungHTTP reading8Regex #I51\s+S_OK\n\d+\s(-{0,1}\d+)
attr HeizungHTTP requestData n=8&t1=A1&t2=A2&t3=A3&t4=A31&t5=A30&t6=A37&t7=A19&t8=I51
attr HeizungHTTP requestHeader1 User-Agent: curl/7.45.0
attr HeizungHTTP requestHeader2 Accept: */*
attr HeizungHTTP requestHeader3 Cookie: IDALToken=$sid
attr HeizungHTTP sid1Data username=admin&password=wtkadmin
attr HeizungHTTP sid1IDRegex .*IDALToken=([0-9a-z]*).*
attr HeizungHTTP sidURL http://192.168.0.9/cgi/login
attr HeizungHTTP stateFormat {sprintf("AußenTemperatur %.1f °C, Rücklauf %.1f °C", ReadingsVal($name,"AußenTemperatur",0), ReadingsVal($name,"Temperatur_Rücklauf",0))}
#attr HeizungHTTP event-on-change-reading Temperatur
#attr HeizungHTTP sidURL http://192.168.0.9/cgi/login?username=admin&password=wtkadmin
define SVG_Waterkotte SVG logdb:SVG_Waterkotte:HISTORY
attr SVG_Waterkotte fixedrange 2days
attr SVG_Waterkotte group Waterkotte
attr SVG_Waterkotte room Hausanschlussraum,Plots
define SVG_Waterkotte_WW SVG logdb:SVG_Waterkotte_WW:HISTORY
attr SVG_Waterkotte_WW fixedrange 2days
attr SVG_Waterkotte_WW group Waterkotte
attr SVG_Waterkotte_WW room Hausanschlussraum,Plots
define SVG_Waterkotte_Aussen SVG logdb:SVG_Waterkotte_Aussen:HISTORY
attr SVG_Waterkotte_Aussen fixedrange 2days
attr SVG_Waterkotte_Aussen group Waterkotte
attr SVG_Waterkotte_Aussen room Hausanschlussraum,Plots
define SVG_Waterkotte_State SVG logdb:SVG_Waterkotte_State:HISTORY
attr SVG_Waterkotte_State group Waterkotte
attr SVG_Waterkotte_State room Hausanschlussraum
define SVG_Waterkotte_State2 SVG logdb:SVG_Waterkotte_State2:HISTORY
attr SVG_Waterkotte_State2 group Waterkotte
attr SVG_Waterkotte_State2 room Hausanschlussraum,Plots



define Heizung.Verdichter dummy
attr Heizung.Verdichter alias Verdichter
attr Heizung.Verdichter devStateIcon 0:sani_pump@grey 1:sani_pump@green
attr Heizung.Verdichter group Heizung.Status
attr Heizung.Verdichter room Hausanschlussraum
define Heizung.Verdichter2 dummy
attr Heizung.Verdichter2 alias Verdichter2
attr Heizung.Verdichter2 devStateIcon 0:sani_pump@grey 1:sani_pump@green
attr Heizung.Verdichter2 group Heizung.Status
attr Heizung.Verdichter2 room Hausanschlussraum
define Heizung.Heizumwaelzpumpe dummy
attr Heizung.Heizumwaelzpumpe alias Heizungsumwälzpumpe
attr Heizung.Heizumwaelzpumpe devStateIcon 0:sani_garden_pump@grey 1:sani_garden_pump@green
attr Heizung.Heizumwaelzpumpe group Heizung.Status
attr Heizung.Heizumwaelzpumpe room Hausanschlussraum
define Heizung.Quellpumpe dummy
attr Heizung.Quellpumpe alias Quellpumpe
attr Heizung.Quellpumpe devStateIcon 0:sani_garden_pump@grey 1:sani_garden_pump@green
attr Heizung.Quellpumpe group Heizung.Status
attr Heizung.Quellpumpe room Hausanschlussraum
define Heizung.extWaermeerzeuger dummy
attr Heizung.extWaermeerzeuger alias Ext. Wärmeerzeuger
attr Heizung.extWaermeerzeuger devStateIcon 0:sani_garden_pump@grey 1:sani_garden_pump@green
attr Heizung.extWaermeerzeuger group Heizung.Status
attr Heizung.extWaermeerzeuger room Hausanschlussraum

define HeizungVisuNotify notify HeizungHTTP:VisuStatus:.* {\
\
my $nVisuStatus=ReadingsVal($NAME,"VisuStatus",0);;\
\
my $thisStatus = ($nVisuStatus & 1)>0?1:0;;\
fhem "setreading Heizung.Quellpumpe state $thisStatus";;\
\
$thisStatus = ($nVisuStatus & 2)>0?1:0;;\
fhem "setreading Heizung.Heizumwaelzpumpe state $thisStatus";;\
\
$thisStatus = ($nVisuStatus & 4)>0?1:0;;\
fhem "setreading Heizung.Verdichter state $thisStatus";;\
\
$thisStatus = ($nVisuStatus & 5)>0?1:0;;\
fhem "setreading Heizung.Verdichter2 state $thisStatus";;\
\
$thisStatus = ($nVisuStatus & 6)>0?1:0;;\
fhem "setreading Heizung.extWaermeerzeuger state $thisStatus";;\
\
if ($nVisuStatus & 7 > 0 ) {\
  fhem "define HeizungHTTPRead at +00:02:00 set HeizungHTTP reread";;\
}\
}


Gruß
Philipp

LR66

Hi, aber das sieht doch ganz gut aus mit den Daten über mein Modul.
Mit Deinem HttpMod wird der Status bei Dir über das I51 ermittelt, da ist der Code nicht ganz korrekt: auch wenn ich den ? Operator nicht so kenne, das mit ($nVisuStatus & 5)>0?1 kann nicht passen, da müsste jeweils der Bitwert stehen - das einzige wo es passt scheint Umwälzpumpe zu sein (...& 2). Gib in den Zeilen mal den Bitwert aus meinem Code s.o. an.
Über mein Modul ist schon deutlich zu sehen, dass bei Dir zum einen das State-Bit im I51 bei Aktivität Kompressor1 angeht und auch die relevanten weiteren Tags zu Comp1 (Ophrs und Leistung). Bei mir wird Aktivität des einen Kompressors nur über Tag comp1_state gezeigt, bei Dir bleibt das auf 0 - sind halt Typunterschiede. Interessant ist auch der Wert in comp1_state_? - mir ist die Bedeutung nicht klar (daher das Fragezeichen). Bei mir steht da seit längerem nur 20 drin. Findest Du den Wert bei Dir am Pumpendisplay?
Man könnte übrigens auch noch die Ventilstellungen Richtung Kompressor (wie am Schaubild), aber bringt m.E. nix. Vielleicht könnten wir mal telefonieren- schick mir ggf. mal PN.
Grüße, Lutz

Phili

Hi Lutz,

können wir gerne machen (schick dir Daten per PN).

Ich hab mein HTTPMOD jetzt mal komplett auskommentiert und nur noch alles über dein Modul laufen lassen. Ich hab im log relativ oft die message "ECOTOUCH_Login: message: #E_TOO_MANY_USERS". Habe mal mit dem Akualisierungswert rumgespielt aber die Meldung kommt trotzdem ab und an. Ich glaub dadurch werden manchmal nictht alle Werte geloggt und dadurch bekomme ich Abrisse in den plots (siehe Bild).
(http://www2.pic-upload.de/thumb/29606306/Unbenannt.jpg)

Noch eine Frage: Kann es sein das durch das Modul automatisch eine log Datei angelegt wird? Da ich über logdb logge wäre es gut, wenn man das durch den user selbst in der FHEM.cfg definieren könnte.
comp1_state_? steht bei mir immer auf 1891. Ich hab auch schon in der Waterkotte gesucht aber nichts gefunden.
Ich muss noch unterdrücken, dass die Dummywerte -999 in mein log geschrieben werden. Das zerhaut nämlich sämtliche plots :D.

Gruß
Philipp

Phili

Und das kommt immer beim speichern der fhem.cfg:
PERL WARNING: Use of uninitialized value in string eq at ./FHEM/89_ECOTOUCH.pm line 552, <$fh> line 325.