WP-Steuerung Luxtronik 1 auslesen

Begonnen von Bernd, 29 November 2014, 14:50:26

Vorheriges Thema - Nächstes Thema

mkrauss

Hallo !

Vielen Dank für die guten Tips. Ich habe die Konfig jetzt hier am Laufen.
Leider fehlt es noch etwas an der Zuverlässigkeit.
Es kommt des öfteren vor, dass keine sinnvollen Werte zurück kommen. Die Temperaturen sind dann alle 0.
In den gplot Graphen sieht das dann seltsam aus.

Mir ist aufgefallen, dass in den unvollständigen /falschen Werten der Eintrag TPcount fehlt. Der gibt normalerweise die Anzahl der Elemente an, die zurück geliefert werden.

Gibt es eine Möglichkeit, das Lesen der Werte so lange zu wiederholen, bis TPcount den Wert 12 hat ?
Sowas wie
DO (get MyWPdev WP1100) UNTIL TPcount = 12
mit DOIF bekomme ich ja keine Schleife hin und nach einem Event zu suchen hilft mir auch nicht, weil im state ein "WP1100 Ready: OK"  zurück kommt.
Wo denke ich falsch ?


mkrauss

Hallo !

Nachdem mich die ständigen Nullstellen in den gplots jetzt genug genervt haben, habe ich die classdef soweit aufgebohrt, dass die Werte nur im FHEM landen, wenn sie auch wirklich gelesen wurden.
In der Antwort der Luxtronic gibt es dazu die Anzahl der gesendeten Datenpunkte in einer Zeile.
Bei der Temperaturwert-Abfrage (1100) sind das 12 Datenpunkte.
Die Änderung steckt in der Classdef, die jetzt bei mir wie folgt aussieht:


get WP1100 cmd {"1100\r"}
get WP1100 expect "1100\r\n1100.*\r\n"
get WP1100 postproc {\
my @temperature;\
   $temperature[1] = 0;\
my $a = substr($_, 0);\
my $hash = $defs{%NAME};\
   @temperature = split "[ \;]+", $a;\
if ($temperature[1] == 12 )\
{\
  readingsSingleUpdate($hash, "TPCount", $temperature[1], 1);\
  readingsSingleUpdate($hash, "WP_Temp_Heizkreis_Ist_Vorlauftemperatur", $temper
ature[2] / 10, 1);\
  readingsSingleUpdate($hash, "WP_Temp_Heizkreis_Ist_Ruecklauftemperatur", $temp
erature[3] / 10, 1);\
  readingsSingleUpdate($hash, "WP_Temp_Heizkreis_Soll_Ruecklauftemperatur", $tem
perature[4] / 10, 1);\
  readingsSingleUpdate($hash, "WP_Temp_Heissgastemperatur", $temperature[5] / 10
, 1);\
  readingsSingleUpdate($hash, "WP_Temp_Aussentemperatur", $temperature[6] / 10,
1);\
  readingsSingleUpdate($hash, "WP_Temp_Brauchwarmwasser_Ist_Temperatur", $temper
ature[7] / 10, 1);\
  readingsSingleUpdate($hash, "WP_Temp_Brauchwarmwasser_Soll_Temperatur", $tempe
rature[8] / 10, 1);\
  readingsSingleUpdate($hash, "WP_Temp_Waermequellen_Eintrittstemperatur", $temp
erature[9] / 10, 1);\
  readingsSingleUpdate($hash, "WP_Temp_Waermequellen_Austrittstemperatur", $temp
erature[10] / 10, 1);\
  readingsSingleUpdate($hash, "WP_Temp_Mischkreis_1_Ist_Vorlauftemperatur", $tem
perature[11] / 10, 1);\
  readingsSingleUpdate($hash, "WP_Temp_Mischkreis_1_Soll_Vorlauftemperatur", $te
mperature[12] / 10, 1);\
  readingsSingleUpdate($hash, "Ready", "OK", 1);\
}\
else \
{\
  readingsSingleUpdate($hash, "Ready", "NOK", 1);\
}\
}

get WP1200 cmd {"1200\r"}
get WP1200 expect "1200\r\n1200.*\r\n"
get WP1200 postproc {\
my @eingang;\
   $eingang[1] = 0;\
my $a = substr($_, 0);\
my $hash = $defs{%NAME};\
   @eingang = split "[ \;]+", $a;\
readingsSingleUpdate($hash, "ECount", $eingang[1], 1);\
if ($eingang[1] == 6 )\
{\
  readingsSingleUpdate($hash, "WP_Eingang_Abtau_Soledruck_Durchfluss", $eingang[
2], 1);\
  readingsSingleUpdate($hash, "WP_Eingang_Sperrzeit_vom_EVU", $eingang[3], 1);\
  readingsSingleUpdate($hash, "WP_Eingang_Hochdruckpressostat", $eingang[4], 1);
\
  readingsSingleUpdate($hash, "WP_Eingang_Motorschutz", $eingang[5], 1);\
  readingsSingleUpdate($hash, "WP_Eingang_Niederdruckpressostat", $eingang[6], 1
);\
  readingsSingleUpdate($hash, "WP_Eingang_Anschluss_einer_Fremdstromanode", $ein
gang[7], 1);\
  readingsSingleUpdate($hash, "Ready", "OK", 1);\
}\
else \
{\
  readingsSingleUpdate($hash, "Ready", "NOK", 1);\
}\
}

get WP1300 cmd {"1300\r"}
get WP1300 expect "1300\r\n1300.*\r\n"
get WP1300 postproc {\
my @ausgang;\
   $ausgang[1] = 0;\
my $a = substr($_, 0);\
my $hash = $defs{%NAME};\
   @ausgang = split "[ \;]+", $a;\
if ($ausgang[1] == 13 )\
{\
readingsSingleUpdate($hash, "ACount", $ausgang[1], 1);\
readingsSingleUpdate($hash, "WP_Ausgang_Abtauventil", $ausgang[2], 1);\
readingsSingleUpdate($hash, "WP_Ausgang_Brauchwarmwasserumwaelzpumpe", $ausgang[
3], 1);\
readingsSingleUpdate($hash, "WP_Ausgang_Fussbodenheizungsumwaelzpumpe", $ausgang
[4], 1);\
readingsSingleUpdate($hash, "WP_Ausgang_Heizungsumwaelzpumpe", $ausgang[5], 1);\
readingsSingleUpdate($hash, "WP_Ausgang_Mischer_1_Auf", $ausgang[6], 1);\
readingsSingleUpdate($hash, "WP_Ausgang_Mischer_1_Zu", $ausgang[7], 1);\
readingsSingleUpdate($hash, "WP_Ausgang_Ventilation_des_Waermepumpengehaeuses",
$ausgang[8], 1);\
readingsSingleUpdate($hash, "WP_Ausgang_Soleumwaelzpumpe", $ausgang[9], 1);\
readingsSingleUpdate($hash, "WP_Ausgang_Verdichter_1_in_Waermepumpe", $ausgang[1
0], 1);\
readingsSingleUpdate($hash, "WP_Ausgang_Verdichter_2_in_Waermepumpe", $ausgang[1
1], 1);\
readingsSingleUpdate($hash, "WP_Ausgang_Zusatzumwaelzpumpe_Zirkulationspumpe", $
ausgang[12], 1);\
readingsSingleUpdate($hash, "WP_Ausgang_Zweiter_Waermeerzeuger_1", $ausgang[13],
1);\
readingsSingleUpdate($hash, "WP_Ausgang_Zweiter_Waermeerzeuger_2_Sammelstoerung"
, $ausgang[14], 1);\
readingsSingleUpdate($hash, "Ready", "OK", 1);\
}\
else \
{\
  readingsSingleUpdate($hash, "Ready", "NOK", 1);\
}\
}



Damit die If-Abfrage keine unintialisierte Variable findet, die das Logfile zumüllt, musste ich die Deklaration des Feldes @temperature (bzw @eingang und @ausgang) und die Initialisierung der Variablen (des ersten Feldelements $temperature[1]) trennen.

Ich hoffe mal, ich habe mir damit nicht aus Dummheit oder Unwissenheit andere Probleme eingefangen.

Das Einsammeln der Temperaturwerte alle 5 Minuten mache ich mit einem at +*00:05:00 get MyWPdev WP1100. Von alleine liefert die Luxtronic ja nichts. Wenn die Übertragung nicht klappt, wird in 5 Minuten wieder probiert.

Schön wäre es, wenn bei einem NOK Rückgabewert einfach nach 10 Sekunden nochmal probiert würde. Ich denke da vielleicht an ein DoIF.
Oder gibt es dazu eine elegantere Lösung ?

Gruß,
Michael

Jasimo

Hallo,
wollte auch mal meine WS8H in FHEM einbinden und frage mich, ob man über den RS232 Port auch Anpassungen an der Konfiguration vornehmen kann?