Stiebel-Eltron mit CAN-Bus unter Verwendung eines C++-Wrappers

Begonnen von juerg5524, 14 Oktober 2015, 13:43:31

Vorheriges Thema - Nächstes Thema

Mastermind1

#60
Zitat von: juerg5524 am 25 Juni 2017, 09:49:33
Hallo Mastermind,

ich schlagen dir vor, alle Anforderungen auf dem Windows-PC zu realisieren. Beim WW kann man die Solltemperatur entsprechend anpassen. Dabei sollte man beachten, dass nicht allzu oft geändert wird, da die Solltemp. vermutlich in einem Flash-Speicher hinterlegt wird!

Wie für Perl, gibt es auch für PHP (IP-Symcon) die Möglichkeit, einen "SWIG-Wrapper" zu bilden. Ich habe dies gemacht. Leider kann ich den Wrapper nicht für Windows generieren. Dazu benötigt man Visual-Studio, das ich nicht besitze. Aber für den MAC funktioniert der Wrapper. Hast du Visual-Studio?

Wenn ich zu deinen simulierten Daten mit ComfortSoft die Kühlung einschalte, dann entspricht das den Kommandos:

./can_scan can0 680 180.0613.0002           LUEFT_STUFE_HAND = 2
./can_scan can0 680 180.0287.0001           KUEHL_MODE = 1

Kommandos beim Abschalten:

./can_scan can0 680 180.0613.0000
./can_scan can0 680 180.0287.8000

Viele Grüsse
Jürg

P.S.: Der Anhang wurde aus deinem totalscan1 generiert und kann in 50_Elster.pm eingesetzt werden.


danke nochmals.
Zur Aktivierung der kühlung wird zusätzlich noch die Info gesetzt über welches Medium gekühlt werden kann.
Beim mir Fussbodenheizung (=FLAECHE EIN)

So lässt sich die Kühlung mit FBH bei mir aktivieren:

sudo ./can_scan can0 680 180.0287.0001           KUEHL_MODE = 1
sudo ./can_scan can0 680 180.0613.0002           LUEFT_STUFE_HAND = 2
???????sudo ./can_scan can0 680 180.025f.0100            FLAECHE EIN (256) ??????

FLAECHE EIN bereitet mir noch Probleme. wenn ich dies über den WPManager händisch mache, ist später per abfrage:
./can_scan can0 680 180.025f
Ergebnis:
0100 (256)

wie kann ich den wert per can_scan setzen? es kommt "VALUE NOT SET"

Die Reihenfolge der Kommandos habe ich auch noch gedreht, da man am WPM2 selbst auch erst die KUEHLUNG auf ein schalten muss, und dann die Parameter definiert.

Die Temperatur fürs kühlen definiert man dann bei bedarf
680 180.0261.xxxx  Kuehl Solltemperatur
xxxx (22 Grad = 00dc / 21 Grad = 00d2 / 20 Grad = 00c8)

hilft vielleicht manch anderem

Ich möchte die Kuehlung einschalten per Schalter in meiner Heimautomation - wenn genug PV Strom vom Dach kommt - :-)

juerg5524

Hallo Mastermind,

hat ComfortSoft mit dem Setzen von "Fläche ein" auch Probleme?

Viele Grüsse
Jürg

Radiator

Lang nicht mehr reingeschaut...
... zu dem Post https://forum.fhem.de/index.php/topic,42248.msg593543.html#msg593543 habe ich dieselbe Beobachtung. Anscheinend sind die Buffer des USBTin zu klein. Immer wenn ich Daten schnell hintereinander abgefordert hatte, waren einige Antworten "verschwunden". Ab ca. 5 schnell hintereinander gesendeten Befehlen verschwanden Antworten. Einzelabfragen gingen immer einwandfrei. Ob das am Sende, oder Empfangsbuffer liegt - keine Ahnung. Ich habe daher in meinem Modul einen zusätzlichen Sendebuffer eingebaut. Seitdem funktioniert der USBTin wunderbar. Zusätzlich habe ich eine Bandbreitenbegrenzung realisiert, so daß ich nie mehr als 20% der CAN Buskapazität der Wärmepumpe benutze, ich will ja nicht den Bus blockieren und eine Störung in der Wärmepumpe verursachen. Seitdem habe ich keine verlorenen Werte mehr.

Zusätzlich habe ich die Register des USBTin so programmiert, dass nur Antworten direkt an mich durchgereicht werden. Das senkt die Rechnelast für fhem.
Letzte Version : https://forum.fhem.de/index.php/topic,35614.msg450042.html#msg450042

Gruß
Hartmut

Mastermind1

Das mit dem "Puffer" konnte ich mit meinem Canberry ebenfalls feststellen...

ich schalte ja bisher nur die Kühlung ein/aus.

Ich mach in meiner Bash Routine einfach ne kurze Pause zwischen den Befehlen rein...

Und was mein Problem angeht zum einschalten der Kühlung...
So funktioniert das Aktivieren der Kühlung:
------------------------------------------------------------------
sudo ./can_scan can0 680 180.0287.0001           KUEHL_MODE = 1
sudo ./can_scan can0 680 180.0613.0002           LUEFT_STUFE_HAND = 2
sudo ./can_scan can0 680 180.025f.0100            FLAECHE EIN
sudo ./can_scan can0 680 180.0287.0001           KUEHL_MODE = 1
----------------------------------------------------------------
Ich setze Kühlung ein einfach zweimal, dann passts....

Kühlung aus:
./can_scan can0 680 180.0613.0000
./can_scan can0 680 180.0287.8000

Mastermind1

Ich bin derzeit dran mein IP-SYMCON mit Canbus Daten zu füttern (ich hoffe das darf man hier schreiben)  ;D

Laut ElsterTable.inc gibt es ja die Wärmesummenmessung der WPM Steuerung (am Display des WPMW2 kann man die erzeugte Wärme für WW und Heizung ablesen).
Nun möchte ich das per Canbus machen.
Leider kommt bei allen Wärmesummenwerten

Value: 8000 (...... not available)

Hier laut Liste:

{ "WAERMEERTRAG_WW_TAG_WH"                           , 0x092a, 0},
{ "WAERMEERTRAG_WW_TAG_KWH"                          , 0x092b, et_double_val},
{ "WAERMEERTRAG_WW_SUM_KWH"                          , 0x092c, 0},
{ "WAERMEERTRAG_WW_SUM_MWH"                          , 0x092d, et_double_val},
{ "WAERMEERTRAG_HEIZ_TAG_WH"                         , 0x092e, 0},
{ "WAERMEERTRAG_HEIZ_TAG_KWH"                        , 0x092f, et_double_val},
{ "WAERMEERTRAG_HEIZ_SUM_KWH"                        , 0x0930, 0},
{ "WAERMEERTRAG_HEIZ_SUM_MWH"                        , 0x0931,}


Abruf ganz einfach per
./can_scan can0 680 180.0930
./can_scan can0 680 180.0931
./can_scan can0 680 180.092d

Beim allgemeinen Scan werden die Daten ebenfalls nicht "verarbeitet"
./can_scan can0 680 180

Gibt's das inzwischen? Evtl. ist meine can_scan Bibliothek auf meinem Raspi ja veraltet?
.

Mastermind1

Zitat von: Mastermind1 am 28 September 2017, 10:10:44
Ich bin derzeit dran mein IP-SYMCON mit Canbus Daten zu füttern (ich hoffe das darf man hier schreiben)  ;D

Laut ElsterTable.inc gibt es ja die Wärmesummenmessung der WPM Steuerung (am Display des WPMW2 kann man die erzeugte Wärme für WW und Heizung ablesen).
Nun möchte ich das per Canbus machen.
Leider kommt bei allen Wärmesummenwerten

Value: 8000 (...... not available)

Hier laut Liste:

{ "WAERMEERTRAG_WW_TAG_WH"                           , 0x092a, 0},
{ "WAERMEERTRAG_WW_TAG_KWH"                          , 0x092b, et_double_val},
{ "WAERMEERTRAG_WW_SUM_KWH"                          , 0x092c, 0},
{ "WAERMEERTRAG_WW_SUM_MWH"                          , 0x092d, et_double_val},
{ "WAERMEERTRAG_HEIZ_TAG_WH"                         , 0x092e, 0},
{ "WAERMEERTRAG_HEIZ_TAG_KWH"                        , 0x092f, et_double_val},
{ "WAERMEERTRAG_HEIZ_SUM_KWH"                        , 0x0930, 0},
{ "WAERMEERTRAG_HEIZ_SUM_MWH"                        , 0x0931,}


Abruf ganz einfach per
./can_scan can0 680 180.0930
./can_scan can0 680 180.0931
./can_scan can0 680 180.092d

Beim allgemeinen Scan werden die Daten ebenfalls nicht "verarbeitet"
./can_scan can0 680 180

Gibt's das inzwischen? Evtl. ist meine can_scan Bibliothek auf meinem Raspi ja veraltet?
.
Die neueste Bibliothek von Febr. bringt leider dieselbe Antwort..

Wie kann man eigentlich mitsniffen wenn ich die erzeugte Wärmemenge am wpmw2 Abrufe? Das könnte ich ja evtl. Mitlesen, und daraus die richtige abfrage ableiten?

Gesendet von meinem Redmi Note 2 mit Tapatalk


juerg5524

Hallo Mastermind,

"mitsniffen" kannst du, indem du in einer weiteren Bash

./can_logger can0 0

laufen lässt. Die Kommunikation von can_scan wird dir mit dem Zusatz "trace" angezeigt:

./can_scan can0 680 180.092d trace

Viele Grüsse
Jürg

Mastermind1

Mit dem Trace wird ausgespuckt :-) :
Muss ich zusätzlich mal an sniffer testen, bei der Bedienung am Wärmepumpenmanager....

pi@raspberrypi ~/can_progs_neu $ ./can_scan can0 680 180.0930 trace
elster-kromschroeder can-bus address scanner and test utility
copyright (c) 2014 Jürg Müller, CH-5524

     680 00 [5] 31 00 fa 09 30           1...0
  0  6.10.2017 05:28:34.160       680 00 [5] 31 00 fa 09 30           1...0
  1  6.10.2017 05:28:34.175       180 00 [7] d2 00 fa 09 30 80 00     ....0..

send ComfortSoft: 0d00030100fa0930800801cc   can232: t68053100FA0930
recv ComfortSoft: 03000d0200fa0930800001c5   can232: t1807D200FA09308000

value: 8000  (WAERMEERTRAG_HEIZ_SUM_KWH  not available)



oder
pi@raspberrypi ~/can_progs_neu $ ./can_scan can0 680 180.092d trace
elster-kromschroeder can-bus address scanner and test utility
copyright (c) 2014 Jürg Müller, CH-5524

     680 00 [5] 31 00 fa 09 2d           1...-
  0  6.10.2017 05:27:41.678       680 00 [5] 31 00 fa 09 2d           1...-
  1  6.10.2017 05:27:41.690       180 00 [7] d2 00 fa 09 2d 80 00     ....-..

send ComfortSoft: 0d00030100fa092d800801c9   can232: t68053100FA092D
recv ComfortSoft: 03000d0200fa092d800001c2   can232: t1807D200FA092D8000

value: 8000  (WAERMEERTRAG_WW_SUM_MWH  not available)

Mastermind1

Ich antworte mir mal selbst:-) Vielleicht für andere interessant...

Um die Wärmemenge (meiner Luft-WP SE WPL13 cool) abfrage zu können, muss ich folgende Indixes (über die Canbus ID 500)  abrufen...
Ansonsten rufe ich eigentlich alles über 180 / 301 ab... In anderen Foreneinträgen, wird die WM ebenfalls per 180 abgerufen... Wird bei mir wohl an der Softwareversion liegen...
keine Ahnung...

Nun kann ich endlich vollautomatisch "die schlechte JAZ" ausrechnen... Zumindest der Gang in den Keller kann ich mir sparen :-)



680 500.
und dann:
092b WAERMEERTRAG_WW_TAG_KWH
092f WAERMEERTRAG_HEIZ_TAG_KWH
092d WAERMEERTRAG_WW_SUM_MWH
0931 WAERMEERTRAG_HEIZ_SUM_MWH
0923 WAERMEERTRAG_2WE_WW_TAG_KWH
0925 WAERMEERTRAG_2WE_WW_SUM_MWH
0927 WAERMEERTRAG_2WE_HEIZ_TAG_KWH0016 RUECKLAUFISTTEMP


Also z.B. "can_scan can0 680 500.092b"



intershopper

Zitat von: juerg5524 am 07 März 2017, 06:39:44

Die 50_Elster.pm bleibt unverändert. Ersetzen solltest Du elster_perl.so und elster_perl_pm.

Viele Grüsse
Jürg

Hallo Jürg,

erstmal danke für deine Mühe. Ich habe auch ein CAN BUS modul am Raspberry und nun mit Hilfe der Hinweise von Knorre das Elster device im FHEM zum Laufen gebracht. Leider habe ich auch diesen disconnect state wie Knorre.
Ich habe die letzte http://juerg5524.ch/data/can_progs_20170715_test.zip heruntergeladen und die beiden Datei ausgetauscht. Leider bekomme ich nun gar keine Werte mehr in FHEM angezeigt. Nur ???? bei get AUSSENTEMPERATUR.

Wenn ich die Dateien aus dieser Version verwende http://juerg5524.ch/data/can_progs_20170125.zip
muss ich die beiden
elster_perl.so
elster_perl.pm
zwar nach der Anleitung von Knorre erneut übersetzen, aber ich sehe Werte im FHEM und kann auch Werte in der WPL 13 ändern. Scheinbar hast du bei den letzten Änderungen etwas verstellt.

Gruß Frank

juerg5524

Hallo Frank,

ich habe die Zwischenversion can_progs_20170305_test.zip auf juerg5524.ch gestellt. Wäre es dir vielleicht möglich zu prüfen, ob diese Version bereits fehlerhaft ist? Ich wäre dir dankbar.

Viele Grüsse
Jürg

intershopper

Zitat von: juerg5524 am 06 November 2017, 14:07:30
Hallo Frank,

ich habe die Zwischenversion can_progs_20170305_test.zip auf juerg5524.ch gestellt. Wäre es dir vielleicht möglich zu prüfen, ob diese Version bereits fehlerhaft ist? Ich wäre dir dankbar.

Viele Grüsse
Jürg

Hallo Jürg,

ich hatte erst jetzt Zeit das auszutesten. Leider funktioniert diese Version can_progs_20170305_test.zip auch nicht. Ich habe Jessie auf dem Raspberry laufen mit Perl 5.20.2 und musste die can_elster_perl.arm etwas anpassen.


swig -perl5 -module elster_perl -c++ elster_perl.i

#CORE_PATH="/usr/lib/perl/5.14/CORE"
[color=red]CORE_PATH="/usr/lib/arm-linux-gnueabihf/perl/5.20.2/CORE"
[/color]

${CROSS_COMPILE}g++ -shared -Wall -D__LINUX__ -D__ARM__ -D__CONSOLE__ -D__CAN__ -DSWIG -I${CORE_PATH} \
  -lc -lpthread -ldl -lperl \
  elster_perl.cpp elster_perl_wrap.cxx elster_instance.cpp \
  KIpSocket.cpp KThread.cpp KCriticalSection.cpp KCanDriver.cpp KComm.cpp KRPiCanDriver.cpp \
  KCanCommDriver.cpp KCanServer.cpp KStream.cpp NUtils.cpp NCanUtils.cpp KElsterTable.cpp KScanTable.cpp KCanElster.cpp \
  KCanTcpDriver.cpp KTcpClient.cpp [color=red]KSniffedFrame.cpp[/color] \
  -o elster_perl.so

# sudo cp elster_perl.so /usr/lib/perl/5.14.2
# sudo cp elster_perl.pm /usr/lib/perl/5.14.2
# sudo cp 50_Elster.pm /opt/fhem/FHEM

# sudo /etc/init.d/fhem start



KSniffedFrame.cpp hat in deiner Version gefehlt, sonst startet FHEM nicht.


perl: symbol lookup error: /usr/lib/arm-linux-gnueabihf/perl/5.20/elster_perl.so: undefined symbol: _ZN12KSniffedDataC1Ev


Der disconnect state und die Fragezeichen bei get Aussentemp sind aber auch schon in der März Version.

Gruß Frank

juerg5524

Hallo Frank,

danke für deine Tests. Ich werde es genauer anschauen. Das kann allerdings etwas dauern.

Viele Grüsse
Jürg

Mastermind1

Eine Frage in die Runde, hat sich schon jemand an das Auslesen und interpretieren des aktuellen Betriebsstatus gemacht?
Ich hab dazu per scan auf 680 180 folgende Dinge gefunden die auf "STATUS" schliessen lassen..

0059  -> Heizkreisstatus
0176  -> Betriebsstatus
01d2  -> Pumpenstatus
fdad   -> WP Pumpenstatus
005a  -> Speicherstatus
0063 -> Kesselstatus

Wenn die WP läuft und meiner Meinung nach WW macht, dann steht bei 680 180.0176 Betriebsstatus (65) drin.

Hat jemand eine Deutung der Statusangaben?

Interessieren würde mich:
- heizen
- Warmwasser
- Abtauen
- nur Heizkreispumpe



mmeine

Hallo,

ich versuche mich derzeit an der Einbindung meiner SE WPC 7cool (mit WPM3) in FHEM auf meinem Rispberry. Vielen Dank erstmal für euer Engagement und Eure umfangreichen Vorleistungen zu diesem Thema.

Ich habe PiCan-Schaltung mit galvanischer Trennung von Jürg nachgebaut, angeschlossen und nach der PiCan-Anleitung ins Linux eingebunden.
Übrigens in Jürg's Schaltbild PiCan.sch hat sich der Fehlerteufel eingeschlichen. Der Widerstand R8 darf nicht an Pin 5 des MCP2551 sondern muss an Pin 8. Danach hat es auch bei mir geklappt.

Dein ,,can_scan" funktioniert soweit einwandfrei und ich bekomme Daten zurück. Die ,,50_Elster.pm" habe ich entsprechend angepasst und die ,,elster_perl.pm" und ,,elster_perl.so" neu kompiliert und in das Verzeichnis (bei mir) ,,/usr/lib/arm-linux-gnueabihf/perl/5.24/" kopiert.
Nach dem Define-Befehl in FHEM hab ich jetzt die selben Probleme mit disconnect. Bekomme aber mit jedem get-Befehl aktuellere Werte gelesen.

Wie habt Ihr das jetzt mit dem Bufferüberlauf bzw. Begrenzung der Buslast gelöst, und wie bekomme ich die Werte bei Veränderung auf eine Variable geschrieben, damit ich Sie an meine SPS weiterleiten kann.

Ich bin sowohl Linux- als aus FHEM-Anfänger

Danke schon mal und viele Grüße.