Hallo zusammen,
ich bin ein absoluter FHEM-/Perl-Anfänger. Mit meinem Modul können Daten aus der Wärmepumpe gelesen und verändert werden. Aus Vorsicht teste ich vorwiegend in einer Simulationsumgebung (Windows). Wenn jemand daran interessiert ist, werde ich gerne auch mehr dazu schreiben.
Viele Grüsse
Jürg
P.S.: Weitere Software dazu befindet sich unter http://juerg5524.ch im File can_progs_fhem_test.zip (später in can_progs.zip).
@juerg5524
Habe einen Raspberry inklusive PICAN.
Möchte mich damit in die bestehende Heizung mit dem Elfatherm E6 hängen.
Wie muß ich den PICAN in FHEM dafür konfigurieren?
Hallo Chris
der PICAN kann als SocketCAN-Schnittstelle konfiguriert werden. Die Bitrate für den E6 sollte bei 20000 bits/sec liegen:
# ip link set can0 up type can bitrate 20000
Dann kannst Du meine Software (ohne FEHM) verwenden. "can0" ist das Device, das Du verwenden kannst.
Zum Elfatherm E6 habe ich keine Zugriffsdaten (Zuordnung, zu welchem CAN-ID - Elster-Index - Paar man welchen Wert abfragen kann). Die benötigten Daten kannst Du aber selbst ermitteln. Dazu brauchst Du das Programm ComfortSoft. Warnung: Ist ziemlich kompliziert.
Viele Grüsse
Jürg
@juerg5524
Danke für den Tipp vorerst einmal.
Werde ich nach den Feiertagen gleich einmal ein wenig testen.
Gab es eigentlich schon Einbindungen via CAN an Heizungsreglern usw. in FHEM?
@juerg5524
Mit diesen Einstellungen kommen jetzt Daten an.
Wie kann ich die Schnittstelle jetzt in FHEM einbinden?
Hallo Burny4600
Das Wrapper-Modul (Files elster_perl.so und elster_perl.pm) kannst Du mit dem Skript can_elster_perl.arm erzeugen. Diese beiden Files ins Library-Perl-Verzeichnis kopieren. Bei mir ist das:
/usr/lib/perl/5.14.2
Das Modul "50_Elster.pm" solltest Du auf Deine WP anpassen. Danach ins FHEM-Verzeichnis kopieren.
Viele Grüsse
Jürg
@juerg5524
Kannst du mir das etwas genauer erläutern was du mit dem Wrapper-Modul usw. meinst.
Ich finde zwar die Dateien aber wo muss ich mit dem Skript can_elster_perl.arm die Dateien erzeugen, bzw. wo muß ich das gesamte can_progs Verzeichnis am Raspi ablegen?
Hallo Chris
Das Wrapper-Modul elster_perl.so wird zur Laufzeit mit "use elster_perl;" in ein Perl-Programm eingebunden. Alle Methoden, die im File elster_perl.h aufgeführt sind, können dann vom Perl-Programm verwendet werden. In Deinem Fall solltest Du
elster_perl::setdev("can0");
verwenden. set_can232 solltest Du auskommentieren.
Wo das Verzeichnis can_progs steht, spielt keine Rolle. Am besten vielleicht in Deinem Home-Verzeichnis. Wechsle ins prog-Verzeichnis und starte can_elster_perl.arm:
>cd can_progs
>./can_elster_perl.arm
Dabei wird die Open-Source swig verwendet (generiert elster_perl_wrap.cxx).
Viele Grüsse und gutes Gelingen
Jürg
Hallo zusammen,
Ich habe einen Raspberry und PICAN paltine. Diese hängt an einer Tecalor TTL 15A .
Bekomme das Modul und das PICAN Board nicht zum laufen.
Kann jemand eine Detailierte Anleitung schreiben?
Danke und Gruß
NIWA
Hallo Niwa,
was alles geht nicht? Für den Einstieg gibt es eine Beschreibung auf messpunkt.org.
Viele Grüsse
Jürg
Servus,
haben schon einige die Verbindung realisiert?
Ich wollte mich mal dran machen. Scheitere leider aber schon ein ein paar Punkten.
Ich wollte erstmal einen can_scan machen.
Aber die gewünschten informationen kommen leider nicht. Und ich bekomme immer was anderes.
root@rpi-keller:~/can_progs# ./can_scan ttyACM0 780 total
elster-kromschroeder can-bus address scanner and test utility
copyright (c) 2014 Jürg Müller, CH-5524
scan on CAN-id: 780
list of valid can id's:
000 (a51a = 165-26)
root@rpi-keller:~/can_progs# ./can_scan ttyACM0 780 total
elster-kromschroeder can-bus address scanner and test utility
copyright (c) 2014 Jürg Müller, CH-5524
scan on CAN-id: 780
list of valid can id's:
000 (a51a = 165-26)
483 (a51a = 165-26)
503 (4307 = 67-07)
root@rpi-keller:~/can_progs# ./can_scan ttyACM0 780 total
elster-kromschroeder can-bus address scanner and test utility
copyright (c) 2014 Jürg Müller, CH-5524
scan on CAN-id: 780
list of valid can id's:
000 (a51a = 165-26)
183 (a51a = 165-26)
Vorschläge?
Ideen?
Hallo Brun,
möglicherweise ist die Id 780 bereits vergeben. Könntest Du es bitte mit der Id 680 versuchen (und zunächst ohne den Zusatz "total").
Viele Grüsse
Jürg
Hallo Jürgen,
das Ergebnis ist reproduzierbar immer das selbe.
Ich bekomme immer eine ähnliche Ausgabe wie schon oben. Egal welche Sender ID ich nehme.
Gruß Brun
Hallo Burn,
es könnte auch an der Hardware liegen. Z.B., wenn keine galvanische Trennung vorliegt und ein Fehlerstrom fliest (kann die Hardware zerstören). Ebenfalls zu einem Fehlverhalten kann ein falsch abgeschlossener CAN-Bus führen. Ich nehme aber an, dass Du ein sehr kurzes Kabel (1 oder 2 Meter) verwendest, welches nicht abgeschlossen werden muss.
Wenn Du passiv die Daten am CAN-Bus analysierst, sind da Unregelmässigkeiten zu sehen (siehe Programm can_logger)?
Gibt es beim Wiederholen von
./can_scan ttyACM0 680 503.000b trace
auch Unregelmässigkeiten?
Viele Grüsse
Jürg
So. Habs jetzt endlich mal geschafft.
Angeschlossen habe ich den Adapter mit nur einen 10cm langen Kabel. Da der RPI direkt neben dem WPM ist. Hab ich da vielleicht schon was falsch gemacht?
mit can_scan bekomme ich nur etwa sowas:
./can_scan ttyACM0 680 503.000b trace
elster-kromschroeder can-bus address scanner and test utility
copyright (c) 2014 Jürg Müller, CH-5524
680 00 [5] a1 03 fa 00 0b .....
680 00 [5] a1 03 fa 00 0b .....
0 29.11.2016 15:02:40.856 680 00 [5] a1 03 fa 00 0b .....
no value read
Und das ändert sich auch permanent.
Sorry, aber von CAN habe ich leider kein blassen Schimmer.
Gruß Brun
Hallo Brun,
mich würde interessieren, welche CAN-IDs Deine WP verwendet. Mit dem Befehl
./can_logger ttyACM0
werden diese aufgelistet und mit
./can_logger ttyACM0 60 logfile
werden die Meldungen alle 60 Sekunden in "logfile..." abgespeichert. Mit einem solchen Log kann ich Dir eventuell weiterhelfen.
Viele Grüsse
Jürg
P.S.: Welchen CAN-Adapter hast Du im Einsatz?
Hallo Jürg,
mit can_log sehe ich immer folgende Adressen:
180
480
500
Ich Kann dir gerne so ein Logfile geben. Aber ungern öffentlich.
Als Adapter verwende ich den USBtin von Fischl.
Gruß Brun
Hallo Brun,
dann sollte zu diesen Adressen mit
./can_scan ttyACM0 680 xxx.000b trace
eine Antwort kommen. (Anstelle von xxx 180, 480 oder 500 einsetzen.)
Viele Grüsse
Jürg
Hallo zusammen,
Hallo juerg5524,
ich habe meine Stiebel Eltron WPF13 mit WPM2 über CAN Bus an meinen RPI2 angeschlossen.
Verwendet habe ich ein PiCan2 Interface und ein aktuelles Jessie System.
Abschlusswiderstand 120 Ohm habe ich direkt auf dem PiCan Board durch die Brücke (JP) gesetzt
mit
ip link set can0 type can bitrate 20000
ifconfig can0 up
aktiviere ich das Can Interface.
danach habe ich folgende Daten empfangen:
pi@rpi_can:~/can/can_progs $ candump can0
can0 602 [7] 66 02 FE 01 00 00 00
can0 180 [7] 66 79 FE 01 00 00 00
can0 480 [7] A6 79 FE 01 00 00 00
can0 602 [7] 66 02 FE 01 00 00 00
can0 180 [7] 66 79 FE 01 00 00 00
can0 480 [7] A6 79 FE 01 00 00 00
can0 601 [7] 60 01 52 00 00 00 00
es kommt aber nur alle paar Minuten mal ein Telegramm.
Ist das normal? oder ist das erstmal der Anfang?
Muss ich nun eine dieser Adressen mit dem
./can_scan ttyACM0 680 xxx.000b trace
"anfragen" ?
Bin über jeden Hinweis dankbar.
Nun habe ich mit
./can_logger can0 60 logfile.txt
folgende Aufzeichnung gemacht:
0 26.1.2017 13:26:40.742 602 00 [7] 66 02 fe 01 00 00 00 f......
1 26.1.2017 13:26:40.763 180 00 [7] 66 79 fe 01 00 00 00 fy.....
2 26.1.2017 13:26:40.786 480 00 [7] a6 79 fe 01 00 00 00 .y.....
3 26.1.2017 13:33:40.752 602 00 [7] 66 02 fe 01 00 00 00 f......
4 26.1.2017 13:33:40.774 180 00 [7] 66 79 fe 01 00 00 00 fy.....
5 26.1.2017 13:33:40.798 480 00 [7] a6 79 fe 01 00 00 00 .y.....
6 26.1.2017 13:40:40.746 602 00 [7] 66 02 fe 01 00 00 00 f......
7 26.1.2017 13:40:40.768 180 00 [7] 66 79 fe 01 00 00 00 fy.....
8 26.1.2017 13:40:40.790 480 00 [7] a6 79 fe 01 00 00 00 .y.....
9 26.1.2017 13:41:54.783 601 00 [7] 60 01 52 01 00 00 00 `.R....
10 26.1.2017 13:47:40.767 602 00 [7] 66 02 fe 01 00 00 00 f......
11 26.1.2017 13:47:40.789 180 00 [7] 66 79 fe 01 00 00 00 fy.....
12 26.1.2017 13:47:40.811 480 00 [7] a6 79 fe 01 00 00 00 .y.....
13 26.1.2017 13:51:24.766 601 00 [7] 60 01 52 00 00 00 00 `.R....
14 26.1.2017 13:54:40.773 602 00 [7] 66 02 fe 01 00 00 00 f......
15 26.1.2017 13:54:40.795 180 00 [7] 66 79 fe 01 00 00 00 fy.....
16 26.1.2017 13:54:40.817 480 00 [7] a6 79 fe 01 00 00 00 .y.....
17 26.1.2017 14:01:40.756 602 00 [7] 66 02 fe 01 00 00 00 f......
18 26.1.2017 14:01:40.778 180 00 [7] 66 79 fe 01 00 00 00 fy.....
19 26.1.2017 14:01:40.800 480 00 [7] a6 79 fe 01 00 00 00 .y.....
20 26.1.2017 14:08:40.769 602 00 [7] 66 02 fe 01 00 00 00 f......
21 26.1.2017 14:08:40.791 180 00 [7] 66 79 fe 01 00 00 00 fy.....
22 26.1.2017 14:08:40.813 480 00 [7] a6 79 fe 01 00 00 00 .y.....
23 26.1.2017 14:15:40.763 602 00 [7] 66 02 fe 01 00 00 00 f......
24 26.1.2017 14:15:40.785 180 00 [7] 66 79 fe 01 00 00 00 fy.....
25 26.1.2017 14:15:40.807 480 00 [7] a6 79 fe 01 00 00 00 .y.....
26 26.1.2017 14:22:40.783 602 00 [7] 66 02 fe 01 00 00 00 f......
27 26.1.2017 14:22:40.805 180 00 [7] 66 79 fe 01 00 00 00 fy.....
28 26.1.2017 14:22:40.827 480 00 [7] a6 79 fe 01 00 00 00 .y.....
29 26.1.2017 14:25:08.817 601 00 [7] 60 01 52 01 00 00 00 `.R....
30 26.1.2017 14:29:40.788 602 00 [7] 66 02 fe 01 00 00 00 f......
31 26.1.2017 14:29:40.810 180 00 [7] 66 79 fe 01 00 00 00 fy.....
32 26.1.2017 14:29:40.832 480 00 [7] a6 79 fe 01 00 00 00 .y.....
33 26.1.2017 14:34:38.779 601 00 [7] 60 01 52 00 00 00 00 `.R....
34 26.1.2017 14:36:40.788 602 00 [7] 66 02 fe 01 00 00 00 f......
35 26.1.2017 14:36:40.810 180 00 [7] 66 79 fe 01 00 00 00 fy.....
36 26.1.2017 14:36:40.832 480 00 [7] a6 79 fe 01 00 00 00 .y.....
37 26.1.2017 14:43:40.785 602 00 [7] 66 02 fe 01 00 00 00 f......
anbei meine log Datei als Anhang.
Sind darin nun meine Zugangsadressen?
Zitat von: juerg5524 am 02 Dezember 2016, 10:35:41
dann sollte zu diesen Adressen mit
./can_scan ttyACM0 680 xxx.000b trace
eine Antwort kommen. (Anstelle von xxx 180, 480 oder 500 einsetzen.)
Das werde ich nachher mal ausprobieren....
Oder hat jemand dazu noch einen weiteren Hinweis?
Das Ergebnis meines scans:
pi@rpi_can:~/can/can_progs $ ./can_scan can0 680 180.0126 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 01 26 1...&
0 27.1.2017 07:58:46.969 680 00 [5] 31 00 fa 01 26 1...&
1 27.1.2017 07:58:46.982 180 00 [7] d2 00 fa 01 26 3b 00 ....&;.
send ComfortSoft: 0d00030100fa0126800801ba can232: t68053100FA0126
recv ComfortSoft: 03000d0200fa01263b00016e can232: t1807D200FA01263B00
value: 3b00 (MINUTE 59)
pi@rpi_can:~/can/can_progs $ ./can_scan can0 680 480.0126 trace
elster-kromschroeder can-bus address scanner and test utility
copyright (c) 2014 Jürg Müller, CH-5524
680 00 [5] 91 00 fa 01 26 ....&
0 27.1.2017 07:59:57.829 680 00 [5] 91 00 fa 01 26 ....&
1 27.1.2017 07:59:57.852 480 00 [7] d2 00 fa 01 26 00 00 ....&..
send ComfortSoft: 0d00090100fa0126800801c0 can232: t68059100FA0126
recv ComfortSoft: 09000d0200fa012600000139 can232: t4807D200FA01260000
value: 0000 (MINUTE 0)
pi@rpi_can:~/can/can_progs $ ./can_scan can0 680 602.0126 trace
elster-kromschroeder can-bus address scanner and test utility
copyright (c) 2014 Jürg Müller, CH-5524
680 00 [5] c1 02 fa 01 26 ....&
0 27.1.2017 08:00:20.507 680 00 [5] c1 02 fa 01 26 ....&
680 00 [5] c1 02 fa 01 26 ....&
1 27.1.2017 08:00:21.544 680 00 [5] c1 02 fa 01 26 ....&
2 27.1.2017 08:00:21.551 602 00 [7] d2 00 fa 01 26 00 00 ....&..
send ComfortSoft: 0d000c0102fa0126800801c5 can232: t6805C102FA0126
recv ComfortSoft: 0c020d0200fa01260000013e can232: t6027D200FA01260000
value: 0000 (MINUTE 0)
pi@rpi_can:~/can/can_progs $
(Ich hoffe ich habe jetzt nichts verstellt oder überschrieben)
Hmmmmmm....
:o :o :o
und was sagt mir das Ergebnis nun?
ich möchte gerne meine ganzen Wärmepumpen-Daten über das Fhem_Modul aufzeichnen und darstellen?
Kann mir jemand den weiteren Weg beschreiben wie es nun weiter geht?
Hallo Korre,
der CAN Bus ist ein multi Mater Bus, dh. alle fangen an zu senden nach ein IDL und hören gleichzeitig mit,
wobei der Knoten mit dem kleinstem ID gewinnt und sendet weiter und die Anderen hören ab da mit (Arbitrierung).
Also das war nur eine kleine Teorie die der Sache nicht weiter hilft, aber hilft dazu zu verstehen wie die einzelne
Messages aufgebaut sind.
Die Zahlen 680, 180 etc. sind CAN-Ids (werden in einem Bus von 1 bis 2047 vergeben).
Ein CAN-Message ist so Aufgebaut:
CAN-ID byte1 .. .. byte8 (maximal)
hier:
680 [len] 31 00 fa 01 26
hier muss man aufpassen (in dein CAN-Programm nachlesen) wie die einzelnen Bytes bei einem Word oder Long dargestellt werden (high low Folge).
Eine CAN-ID kann nur von einem Knoten gesendet werden aber alle können es empfangen.
Aus den CAN-IDs sieht man das es kein CANopen Protokol ist (dann wäre es einfacher gewisse dinge rauszufinden).
Als erstes muss man wissen was die einzelnen Messages transportieren und wie sie aufgebaut sind (vll. eine CAN Beschreibung
der einzelnen Messages von Hersteler?).
Wenn nicht muss man das rausfinden:
z.B. Etwas verstellen und schauen was gesendet wird und was geantwortet wird.
Wenn man dies hat, kann man sich an die Anbindung an fhem machen.
Gerhard
Hallo Korre,
Du hast damit nichts verstellt. Das ist eine einfache Anfrage, die vermutlich nur zur ID 180 die korrekten Minuten zurück gibt.
Wie zu Beginn dieses Beitrags, kannst Du den Wrapper zusammen mit 50_Elster.pm verwenden. Das Perl-Modul musst Du aber an Deine WP anpassen.
In 50_Elster.pm gibt es eine kleine Anleitung.
Viele Grüsse
Jürg
Hallo zusammen,
habe nun wie in der 50_Elster - Anleitung beschrieben einen Total-scan gemacht.
Hatte dabei einige Unklarheiten.
Wenn ich nur ./can_scan can0 680 total trace
durch führe konnte ich keine Aufzeichnung als Trace-Datei finden.
Weiß nicht genau wie das vorgesehen ist, aber ich dachte die Option "trace" erzeugt eine Datei. ???
Ich habe mir dann mit folgendem Befehl beholfen und die Ausgaben in eine Datei umgeleitet.
./can_scan can0 680 total trace >totalscan_korre
Die Datei im Anhang sieht sehr umfangreich und vielversprechend aus.
Ist die Datei korrekt und kann diese so weiterverwendet werden?
Ich habe versucht die Datei in CS_Brücke zu laden, kam leider nicht weiter,
da beim "Start" die Meldung "serielle Schnittstelle konnte nicht geöffnet werden" erschien.
Ich muss bestimmt erst "com2com" starten, bzw. aus dem Internet downloaden. ( habe das Programm in Jürgs can_progs nicht finden können ....)
Kann mir jemand einen weiteren Tipp geben, bzw. könnte jemand meine totalscan-Datei mit comfortSoft umwandeln?
Hallo Korre,
ich werde Dir helfen. Aber leider muss ich feststellen, dass in meiner Software ein Fehler auftritt, den ich zuerst korrigieren muss. Der Fehler äussert sich so, dass die Zuordnung im Scan verschoben ist. Bei den Zeilen aus Deinem Scan
45227 30.1.2017 14:54:05.563 680 00 [5] c1 02 fa fd b7 .....
45228 30.1.2017 14:54:05.582 602 00 [7] d2 00 fa fd b4 96 00 .......
{ 0x602, 0xfdb7, 0x9600},
680 00 [5] c1 02 fa fd b8 .....
45229 30.1.2017 14:54:05.587 680 00 [5] c1 02 fa fd b8 .....
45230 30.1.2017 14:54:05.605 602 00 [7] d2 00 fa fd b6 80 00 .......
680 00 [5] c1 02 fa fd b9 .....
45231 30.1.2017 14:54:05.610 680 00 [5] c1 02 fa fd b9 .....
45232 30.1.2017 14:54:05.628 602 00 [7] d2 00 fa fd b7 80 00 .......
ist die erste Anfrage zum Elster-Index fdb7, die Antwort taucht aber erst in der übernächsten Anfrage auf. Es mag auch damit zusammenhängen, dass ich für den Live-Test nur den Raspi verwendete. Windows und MAC wurden mit Simulationen getestet!
Ich hoffe, dass Du etwas Geduld aufbringen kannst.
Ja, es braucht zuerst com0com (und nicht com2com).
Viele Grüsse
Jürg
Hallo Jürg,
danke schonmal vorab, dass du dich der Sache annimmst.
Warum könnte das verschoben sein?
Habe ich was falsch gemacht mit meinem umleiten der Ausgaben in die Datei, oder reagiert bei meiner Konstellation etwas träge?
Ich habe es mit meinem Raspi B und der PiCan Schnittstelle gescannt.
Klar habe ich etwas Geduld, auch wenn ich schon sehr gespannt bin, was bei diesem meinem Projekt als nächstes passiert. 8) 8) 8) .
Hsllo,
bin relativer Laie in der Thematik.
Habe vor einen WPMII über einen USBtin an einen Raspberry 3 anzubinden.
Probleme gehen schon los einen Totalscan zu machen.
Bei der Befehlseingabe kommt folgendes :
./can_scan.arm: Permission denied
Hab versucht was im Forum in Erfahrung zu bringen. Leider ohne Erfolg.
Wer kann helfen?
GRuß
niwa
Hallo niwa,
vermutlich kannst Du mit dem Befehl "chmod" das Ausführungsrecht freischalten:
chmod 777 can_scan.arm
eventuell auch
sudo chmod 777 can_scan.arm
Viele Grüsse
Jürg
Hallo Jürg,
danke für deine Hilfe.
Das Problem war die Berechtigung . Ich hab vor lauter Bäumen den Wald nicht gesehen.
ich bekomme nach dem kompelieren folgende Ausgabe
./can_scan /dev/ttyACM0 680
elster-kromschroeder can-bus address scanner and test utility
copyright (c) 2014 Jürg Müller, CH-5524
list of valid can id's:
000 (0000 = 0-00)
Sieht irgendwie nicht so gut aus, oder?
Gruß
Niwa
Hallo Niwa,
nein, sieht wirklich nicht gut aus! Welche WP hast du im Einsatz?
Viele Grüsse
Jürg
Hallo Korre,
im neusten can_progs.zip gibt es ein "fhem_tab_korre.inc" das Du in 50_Elster.pm einsetzen kannst. Damit ist 50_Elster.pm exakt auf Deine WP ausgelegt.
In "scan_data_korre.inc" sind die ausgefilterten Daten zu Deinem Scan. Eine ComfortSoft-Darstellung ist im Anhang ersichtlich.
Der Fehler beim Scan ist korrigiert.
Viele Grüsse
Jürg
Hallo Jürg,
hab eine Tecalor TTL 15 AS mit einem WPM II im Einsatz.
Mein Buskabel ist ca. 30 cm lang und ist mit 120 Ohm am USBtin terminiert.
Mit der Version vom 25.01. habe ich mit folgendem Befehl was rausbekommen:
./can_scan /dev/ttyACM0 680 180
Mit der akutellen Version sieht es schlecht aus, sprich ich bekomme gar nix angezeigt.
GRuß
Niwa
Hallo Niwa,
danke für die Fehlermeldung. Bekommst Du denn mit
./can_logger ttyACM0 0
oder mit
./can_scan 680 180.000b trace
etwas?
Der Bus ist bereits an 2 Enden terminiert. Bei 30 cm sollte man nicht zusätzlich terminieren.
Mit dem USBtin solltest Du vorsichtig sein, da er nicht galvanisch trennt!
Viele Grüsse
Jürg
Hallo Jürg,
bei beiden Befehle bekomme ich Ausgaben
Gruß
Niwa
Hallo Niwa,
könntest Du bitte den Befehl, der nicht funktionierte, mit dem Zusatz "trace" ausführen:
./can_scan ttyACM0 680 180 trace
Viele Grüsse
Jürg
Hallo Jürg,
habe ich gemacht. Ich bekomme eine Ausgabe.
fhem
Welche Befehle muss ich ausführen, damit ich dein fhem Modul nutzen kann?
Gruß
Niwa
Hallo Niwa,
Du brauchst von der WP einen Scan. Mit den Daten des Scans kann man dann die richtige Tabelle in 50_Elster.pm einsetzen. Dazu müsste aber zu
./can_scan ttyACM0 680
eine Liste mit 4 bis 7 Geräten (IDs) angezeigt werden. Kriegst Du diese Liste mit der neusten Software? Wenn nein: Kannst Du einige Zeilen, welche
./can_logger ttyACM0 0
generiert, hier posten? Einfach um zu sehen, welche IDs bei Dir aktiv sind.
Viele Grüsse
Jürg
Hallo Jürg,
bei ./can_scan ttyACM0 680 bekomme ich keine IDs angezeigt.
Beim ./can_logger ttyACM0 0 habe ich folgendes bekommen:
0 10.2.2017 14:02:37.803 601 00 [7] d2 00 fa 00 0b 80 00 .......
1 10.2.2017 14:02:37.803 602 00 [7] d2 00 fa 00 0b 80 00 .......
2 10.2.2017 14:02:37.806 180 00 [7] a0 79 0c ff fd 00 00 .y.....
3 10.2.2017 14:02:37.806 480 00 [7] a1 00 fa 01 99 00 00 .......
4 10.2.2017 14:02:37.806 500 00 [7] 92 00 fa 01 99 00 93 .......
5 10.2.2017 14:02:37.806 480 00 [7] a1 00 fa 01 d6 00 00 .......
6 10.2.2017 14:02:37.806 480 00 [7] a1 00 16 00 00 00 00 .......
7 10.2.2017 14:02:37.807 500 00 [7] 92 00 fa 01 d6 01 c8 .......
8 10.2.2017 14:02:37.809 480 00 [7] a1 00 fa 07 a8 00 00 .......
9 10.2.2017 14:02:37.809 480 00 [7] a0 00 fa 02 ca 01 03 .......
10 10.2.2017 14:02:37.809 500 00 [7] 92 00 16 01 96 00 00 .......
11 10.2.2017 14:02:37.810 480 00 [7] a0 00 fa 09 17 00 00 .......
12 10.2.2017 14:02:37.810 180 00 [7] a0 79 0c ff fd 00 00 .y.....
13 10.2.2017 14:02:40.946 180 00 [7] a0 79 0c ff fd 00 00 .y.....
14 10.2.2017 14:02:42.929 480 00 [7] a1 00 fa 01 99 00 00 .......
15 10.2.2017 14:02:42.972 500 00 [7] 92 00 fa 01 99 00 93 .......
16 10.2.2017 14:02:44.942 480 00 [7] a1 00 fa 01 d6 00 00 .......
17 10.2.2017 14:02:44.960 480 00 [7] a1 00 16 00 00 00 00 .......
18 10.2.2017 14:02:44.977 480 00 [7] a1 00 fa 07 a8 00 00 .......
19 10.2.2017 14:02:44.996 480 00 [7] a0 00 fa 02 ca 00 ff .......
20 10.2.2017 14:02:45.014 480 00 [7] a0 00 fa 09 17 00 00 .......
21 10.2.2017 14:02:45.031 480 00 [7] a1 00 fa 0a 36 00 00 ....6..
22 10.2.2017 14:02:45.049 480 00 [7] a1 00 fa 07 a8 00 00 .......
23 10.2.2017 14:02:45.174 500 00 [7] 92 00 fa 01 d6 01 c9 .......
24 10.2.2017 14:02:45.217 500 00 [7] 92 00 16 01 96 00 00 .......
25 10.2.2017 14:02:45.438 500 00 [7] 92 00 fa 07 a8 02 18 .......
Hallo ,
ich bekomme weder das mit dem totalscan als auch das importieren in die CS_Bruecke sowie die Verbindung zur Comfort Soft hin.
Wer kann mir weiterhelfen?
Gruß
Niwa
Hallo Niwa,
nach dem Log sind Deine IDs: 180, 480, 500, 601 und 602. Vermutlich sind 301 und 302 auch vorhanden. Was erhältst Du mit
./can_scan ttyACM0 680 180.000b
Anstelle von 180 kannst Du auch 480, 500 usw. einsetzen. Du solltest zu allen gültigen IDs einen Wert erhalten. Wenn der Wert = 8000 ist, dann gibt es zum Elster-Index 0199 (anstelle von 000b) einen gültigen Wert. Wenn Du nichts erhältst, dann würde mich die Ausgabe zu
./can_scan ttyACM0 680 180.000b trace
interessieren. Möglicherweise setzt der Raspi kein Telegramm ab.
Viele Grüsse
Jürg
Hallo Jürg,
Befehl 1 war leider erfolglos.
Folgende Ausgabe bekomme ich beim 2. Befehl:
./can_scan ttyACM0 680 180.000b 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 00 0b 1....
0 20.2.2017 17:08:44.582 180 00 [7] d2 00 fa 00 0b 80 00 .......
send ComfortSoft: 0d00030100fa000b8008019e can232: t68053100FA000B
recv ComfortSoft: 03000d0200fa000b80000197 can232: t1807D200FA000B8000
value: 8000 (GERAETE_ID not available)
Hallo Niwa,
das sieht schon mal nicht schlecht aus. Das heisst, Du kannst den Scan mit dem Zusatz "trace" machen. Die notwendigen Daten erhältst Du dann. Allerdings werden sehr viele Daten geliefert und wenn sie auf einem Flash-Speicher gespeichert werden, kann damit der Speicher zerschossen werden!
Befehl:
./can_scan ttyACM0 680 total trace
Wo der Fehler liegt, weiss ich momentan noch nicht. Ich werde aber versuchen, ihn zu finden.
Viele Grüsse
Jürg
Hallo Jürg,
hab deinen Befehl eingegeben. Es kommen zw. 60 und 80 zeichen dann ist der Scan vorbei.
Es wird keine Datei geschrieben.
Gruß
Niwa
Hallo Niwa,
was genau kommt nach der Copyright-Zeile?
Nein, eine Datei wird nicht geschrieben. Dazu kann man z.B. die Ausgabe umlenken:
./can_scan ttyACM0 680 total trace >scan.inc
Viele Grüsse
Jürg
Folgende Ausgabe habe ich bekommen
elster-kromschroeder can-bus address scanner and test utility
copyright (c) 2014 Jürg Müller, CH-5524
scan on CAN-id: 680
list of valid can id's:
680 00 [5] 01 00 fa 00 0b .....
0 24.2.2017 11:03:01.341 500 00 [7] 92 00 fa 01 d6 01 25 ......%
680 00 [5] 01 01 fa 00 0b .....
680 00 [5] 01 01 fa 00 0b .....
680 00 [5] 01 01 fa 00 0b .....
5 24.2.2017 11:03:03.372 680 00 [5] 01 01 fa 00 0b .....
680 00 [5] 01 02 fa 00 0b .....
6 24.2.2017 11:03:03.379 680 00 [5] 01 02 fa 00 0b .....
680 00 [5] 01 03 fa 00 0b .....
7 24.2.2017 11:03:03.386 680 00 [5] 01 03 fa 00 0b .....
680 00 [5] 11 00 fa 00 0b .....
8 24.2.2017 11:03:03.391 680 00 [5] 11 00 fa 00 0b .....
680 00 [5] 11 01 fa 00 0b .....
9 24.2.2017 11:03:03.398 680 00 [5] 11 01 fa 00 0b .....
680 00 [5] 11 02 fa 00 0b .....
10 24.2.2017 11:03:03.404 680 00 [5] 11 02 fa 00 0b .....
680 00 [5] 11 03 fa 00 0b .....
Hallo Niwa,
es sieht so aus, als ob einzelne Befehle gehen, aber bei einer Befehls-Serie geht nichts. Wäre es denkbar, dass der Raspi den USBtin mit zu wenig Strom versorgt?
Viele Grüsse
Jürg
@all: Gibt es jemanden, der den Raspi 3 erfolgreich mit dem USBtin betreibt?
Hallo zusammen,
ich wollte nun mein Gerät in FHEM anlegen mit
define WP Elster can0
hat nicht funktioniert. Modul konnte nicht geladen werden etc.
Dann habe ich versucht das Modul manuell zu laden.
reload 50_Elster.pm
Can't locate loadable object for module elster_perl in @INC (@INC contains: . /etc/perl /usr/local/lib/arm-linux-gnueabihf/perl/5.20.2 /usr/local/share/perl/5.20.2 /usr/lib/arm-linux-gnueabihf/perl5/5.20 /usr/share/perl5 /usr/lib/arm-linux-gnueabihf/perl/5.20 /usr/share/perl/5.20 /usr/local/lib/site_perl ./FHEM) at /usr/share/perl5/elster_perl.pm line 11.
Compilation failed in require at ./FHEM/50_Elster.pm line 60.
BEGIN failed--compilation aborted at ./FHEM/50_Elster.pm line 60.
Ok. es haben sich wohl irgendwelche Verzeichnisse geändert da ich Perl5.20 auf einem aktuellen System habe ( mit FHEM 5.8 )
Alles klar. die beiden Daten elster_perl.pm und elster_perl.so /usr/lib/arm-linux-gnueabihf/perl/5.20.2 kopiert.
reload 50_Elster.pm
Can't load '/usr/lib/arm-linux-gnueabihf/perl/5.20/elster_perl.so' for module elster_perl: libperl.so.5.14: Kann die Shared-Object-Datei nicht öffnen: Datei oder Verzeichnis nicht gefunden at /usr/lib/arm-linux-gnueabihf/perl/5.20/DynaLoader.pm line 187.
at /usr/lib/arm-linux-gnueabihf/perl/5.20/elster_perl.pm line 11.
Compilation failed in require at ./FHEM/50_Elster.pm line 60.
BEGIN failed--compilation aborted at ./FHEM/50_Elster.pm line 60.
Die Datei 'elster_perl.so' ist definitiv vorhanden,
weitere folgende Versuche mit reload 50_Elster.pm enden mit:
Attempt to reload elster_perl.pm aborted.
Compilation failed in require at ./FHEM/50_Elster.pm line 60.
BEGIN failed--compilation aborted at ./FHEM/50_Elster.pm line 60.
in der Zeile 60 in der 50_Elster.pm steht
use elster_perl; # SWIG wrapper zu elster_perl.so (C++-Modul)
:o :o :o
Das Module "elster_perl.so " kann bei mir nicht geladen werden.
Weiß jemand Rat?
ich bin mir gerade nicht sicher ob vielleicht die Datei, "libperl.so.5.14" vermisst wird.
die habe ich nämlich so nicht gefunden sondern nur die Datei "libperl.so.5.20.2" ???
Wieso wird denn die Datei "libperl.so.5.14" gebraucht?
Wo kommt diese Abhängigkeit her? "libperl.so.5.20.2" habe ich gefunden.
Hat jemand ein aktuelles Jessie mit FHEM5.8 und dem Wrapper am laufen?
Habe mal noch swig installiert um die beiden Dateien
elster_perl.pm und elster_perl.so neu zu erzeugen leider ohne Erfolg:
sudo ./can_elster_perl.arm
elster_perl_wrap.cxx:743:20: fatal error: EXTERN.h: Datei oder Verzeichnis nicht gefunden
#include "EXTERN.h"
^
compilation terminated.
elster_instance.cpp: In function 'void elster_instance::Undef()':
elster_instance.cpp:439:12: warning: deleting object of polymorphic class type 'KCanElster' which has non-virtual destructor might cause undefined behaviour [-Wdelete-non-virtual-dtor]
delete Can;
^
Wenn ich mir die Liste der Installierten Bibliotheken anschaue, erscheint libperl (mit falscher Version), aber keine "elster_perl"
sudo ldconfig -p | grep perl
libperl.so.5.20 (libc6,hard-float) => /usr/lib/arm-linux-gnueabihf/libperl.so.5.20
:'( :'( :'(
Hat jemand eine Idee wie ich die beiden Dateien in ein aktuelles System integrieren kann um die WP auszulesen?
OK, bin einen Schritt weiter:
Die "falsche" perllib kommt aus meiner Builddatei weil das natürlich nicht angepasst wurde:
folgende Zeile musste an meinen neuen Gegebenheiten passen
CORE_PATH="/usr/lib/arm-linux-gnueabihf/perl/5.20.2/CORE"
Ein Linkerfehler besagte dann ständig, dass "lperl" nicht gefunden wurde.
nachstellen konnte ich das ganze mit
sudo ld -lperl --verbose
und tatsächlich, es ist ja auch libperl.so.5.20 vorhanden, anstelle libperl.so.
Also kurz einen Link anlegen mit:
sudo ln -s /usr/lib/arm-linux-gnueabihf/libperl.so.5.20 /usr/lib/arm-linux-gnueabihf/libperl.so
Ok, eine paar Warnungen aber es hat geklappt:
sudo ./can_elster_perl.arm
In file included from elster_perl_wrap.cxx:745:0:
elster_perl_wrap.cxx: In function 'void boot_elster_perl(PerlInterpreter*, CV*)':
/usr/lib/arm-linux-gnueabihf/perl/5.20.2/CORE/XSUB.h:164:20: warning: unused variable 'items' [-Wunused-variable]
#define dITEMS I32 items = (I32)(SP - MARK)
^
/usr/lib/arm-linux-gnueabihf/perl/5.20.2/CORE/XSUB.h:172:16: note: in expansion of macro 'dITEMS'
dSP; dAXMARK; dITEMS
^
elster_perl_wrap.cxx:2505:3: note: in expansion of macro 'dXSARGS'
dXSARGS;
^
elster_instance.cpp: In function 'void elster_instance::Undef()':
elster_instance.cpp:439:12: warning: deleting object of polymorphic class type 'KCanElster' which has non-virtual destructor might cause undefined behaviour [-Wdelete-non-virtual-dtor]
delete Can;
^
pi@rpi_can:~/can/20170301-can_progs/can_progs $
die beiden Dateien in "/usr/share/perl/5.20" kopieren.
shutdwn restart in fhem mit anschließend reload 50_Elster.pm und ALLES GUT 8) 8) 8) 8)
nun noch define WP Elster can0
und siehe da ein neues Gerät ist da ;D ;D ;D ;D
Und nun ????
Ist es bei euch auch so, dass wenn ihr mit einem Klick auf den "get"-Knopf den Wert einer Variable abfragen wollt der Status auf disconnected umspringt?
Wie kann ich nun die Werte in FHEM mittracen??? Muss ich mich für jeden Wert neu connecten, oder ist in meinem Modul doch noch was faul?????
Readings err QUELLE_IST: value (01d4) not read 2017-03-01 22:20:11
Hallo Korre,
gratuliere zu Deinem Erfolg. Aber das mit dem Disconnect darf nicht sein. Ich werde es überprüfen.
Viele Grüsse
Jürg
Hallo Jürg,
Hallo Kollegen,
ich habe mir die Sache nochmals in Ruhe angeschaut.
folgende Punkte:
1.) beim Neustart des rpi muss ich die Can Schnittstelle konfigurieren und "up" bringen. (dazu habe ich nun ein kleines Script in der crontab @reboot)
-Ist das auch bei euch so, bzw. ist das die normale Vorgehensweise?
2.) Elster zeigte sporadisch "disconnect" obwohl ich trotz disconnect Status Werte manuell (get Knopf) lesen kann.
- bei Abfrage der gleichen Variablen (Readings) hintereinander entstand das disconnect.
- im Moment geht jedoch alles wie erwartet ( ein Abfragen der gleichen Variable im Sekundentakt funktioniert und connect bleibt erhalten).
- hatte jemand ähnliches Verhalten?
3.) Werte aufzeichnen und in Logfile schreiben.
- wird wohl am besten über ein notify oder at als "pull" -Abfrage umzusetzen sein?
- Sollen dann alle gewünschten IDs (Readings) in einem notify seriell abgefragt werden?
- schreibt ihr dann alle Readings in ein Logfile?
- Wie habt ihr das gelöst?
Vielen Dank.
Hallo Korre,
ich habe unter Windows mit einer Simulation das Modul 50_Elster getestet und Korrekturen vorgenommen. In "can_progs_20170305_test.zip" sind die Dateien dazu. Wenn Du mit dieser Version immer noch den "Disconnect" hast, werde ich es auch auf dem Raspi testen.
Viele Grüsse
Jürg
Ich habe es mit dem Raspi getestet. Den Disconnect konnte ich mit der WP-Simulation (stiebel_simul) nicht feststellen.
stiebel_simul <==> CAN-Bus <= Raspi => fhem (50_Elster.pm)
Kleine Korrektur in can_progs_20170306_test.zip.
Hallo Jürg,
anbei screenshots zu dem derzeitigen Verhalten.
Heute habe ich erst festgestellt, dass bei einem fhem Befehl bei der Eingabe in das Eingabefeld oben
zB "get WP AUSSENTEMP" ein Popup Fenster erscheint. Das Modul möchte eigentlich was sagen ...... aber Text fehlt.
Auch zu erkennen auf den Screenshots sind Internals STATE "disconnected".
Muss ich nun nur die 50_ELSTER.PM Datei ersetzten oder alles bauen ???
Hallo Korre,
das Popup Fenster erhalte ich auch, allerdings bleibt es Connected. Mit einer falschen Anforderung z.B.
get WP aa
erscheint dasselbe Fenster, aber jetzt mit Inhalt. Bei
set WP MONAT 3
funktioniert es. Und bei
set WP MM 3
kommt eine andere Liste, als beim "get". Die Reihenfolge in den Listen verstehe ich nicht.
Die 50_Elster.pm bleibt unverändert. Ersetzen solltest Du elster_perl.so und elster_perl_pm.
Viele Grüsse
Jürg
Erstmal hut ab, was für ein "hirnschmalz" und Aufwand da inzwischen in die CANBUS Kromschröder Abfrage gesteckt wurde!
Ich mache mich nach langer Zeit mal wieder an die Canbus Steuerung meiner WPL13 mit dem WPM2.
Canbus Raspi Interface mit Abschlusswiderstand + FEK Fernbedienung vorhanden.
Kurze Frage, da ich seit kurzem eine Photovoltaikanlage habe.
Ich möchte:
- die Kühlung -sofern genügend PV Strom vorhanden ist- ein und ausschalten können.
(Kuehlung EIN, Flaeche EIN)
- die WW Bereitung einschalten wenn genügend PV Strom vorhanden ist
(Die Logik mit der PV Strom Prüfung habe ich anderweitig bereits (IP-Symcon Modbus))
Ich habe parallel noch einen Windows 7 Mini PC im Heizraum.
Wie komme ich am einfachsten an diese Anforderung?
- Auf dem Windows PC die Kromschröder Software (liegt mir vor) installieren
- RASPI Canbus Interface über einen Virtuellen Comport mounten
- CSBRUECKE.EXE starten
- Kromschröder Comfortsoft starten und Änderung vornehmen
Die gemachten Änderungen werden angezeigt/mitgeschnitten?
Das könnte ich dann für die normale Ansteuerung direkt über RASPI verwenden?
P.S.
Ich denke das müsste lt. ElsterTable.inc hier zu suchen sein:
{ "KUEHLMODE" , 0x0287, 0}, Wahrscheinlich Kühlung AUS/EIN
{ "FLAECHENKUEHLUNG" , 0x025f, 0}, Wahrscheinlich FBH Kühlung AUS/EIN
{ "KUEHL_FREIGABE_TEMPERATUR" , 0x03dd, 0}, Wahrscheinlich gewünschte Raumptemperatur
anbei ein 24h log... nicht am datum/Uhrzeit stören... der raspi war noch unkonfiguriert...
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.
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 für die Info.
Sorry für die späte Antwort. Hab keine Benachrichtigung erhalten...
Ich habe zusätzlich einen Mini PC 24*7 mit win 10. Dann muss ich mir noch anschauen, wie ich das canbus Modul vom Raspberry virtuell in das Windows einbinden kann, damit die kromschröder(stiebel) Software zufrieden ist.
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 - :-)
Hallo Mastermind,
hat ComfortSoft mit dem Setzen von "Fläche ein" auch Probleme?
Viele Grüsse
Jürg
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
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
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?
.
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
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
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)
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"
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
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
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
Hallo Frank,
danke für deine Tests. Ich werde es genauer anschauen. Das kann allerdings etwas dauern.
Viele Grüsse
Jürg
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
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.
Mein Industrialcanberry Interface (auf meinem Raspi Pi Model B) funktioniert nicht mehr (LED leuchtet nicht mehr.. - defekt)...
Kurze Frage: Welche Canbus Interfaces kann man mit einem Raspi Pi Modell B empfehlen?
Hallo Jürg,
ich hab deine 50_Elster.pm so halbwegs erfolgreich bei mir eingebunden. Allerdings läuft die Geschichte noch etwas instabil. Ich habe auch den Eindruck das die Buslast, bzw Rechenkapazität ziemlich ausgelastet wird. Die Werte werden nicht automatisch aktualisiert. Immer wenn ich jedoch den "get" befehl für einen Wert ausführe, werden gleich mehrere Werte (aber immer andere) aktualisiert. Mein Hauptproblem allerdings ist derzeit die Logdatei. Diese wird bei jedem "get" Befehl mir u.g. Daten zugemüllt, obwohl scheinbar ja nur ein Wert abgefragt wird . Selbst mit "Verbose=0" kann ich das Loggen nicht verhindern. Da ich den "get" Befehl aller Minute zur Aktualisierung ausführen will, wird meine LOG-Datei rießig und gut für de SD-Card ist das sicher auch nicht.
Kannst du mir helfen, wie ich erstmal das mitloggen deaktivieren oder eingrenzen kann, und wo ich evt. das Zeitinterval für die autom. Aktualisierung einstellen kann.
Außerdem liest er nicht immer korrekte Werte ein. Beim "SAMMEL_RELAISSTATUS" liest er manchmal eine Dezimalzahl "4.1" oder "44.1" aus und manchmal wie benötigt eine ganze Zahl "364".
Wäre schön wenn du mir dabei helfen kannst.
Danke Markus.
Hier ein kurzer Ausschnitt des Logging:
1345900 13.1.2018 10:39:36.927 180 00 [7] 60 79 5a 02 00 00 00 `yZ....
1345903 13.1.2018 10:39:36.953 180 00 [7] 60 79 fa 0a 20 00 00 `y.. ..
1345935 13.1.2018 10:39:38.819 180 00 [7] 22 00 0c 00 0e 00 00 "......
1345964 13.1.2018 10:39:40.731 180 00 [7] d2 00 fa 01 01 00 00 .......
1345969 13.1.2018 10:39:40.862 180 00 [7] d2 00 fa 02 7e 00 00 ....~..
1345996 13.1.2018 10:39:41.948 180 00 [7] 22 00 0e 01 dd 00 00 "......
1346003 13.1.2018 10:39:42.559 180 00 [7] 22 00 16 01 13 00 00 "......
680 00 [5] 31 00 fa 0a 20 1...
1346056 13.1.2018 10:39:46.302 680 00 [5] 31 00 fa 0a 20 1...
1346057 13.1.2018 10:39:46.312 680 00 [7] 61 02 fa 14 61 00 00 a...a..
get sniffed: 180 000e 47.7
get sniffed: 180 07fc 0.472
get sniffed: 180 0802 73
get sniffed: 180 000c 1.4
get sniffed: 180 0016 27.5
get sniffed: 180 01d4 18.1
get sniffed: 180 0a20 0
1346058 13.1.2018 10:39:46.320 180 00 [7] d2 00 fa 0a 20 00 00 .... ..
1346120 13.1.2018 10:39:49.385 180 00 [7] 22 00 0c 00 0e 00 00 "......
1346170 13.1.2018 10:39:51.918 180 00 [7] 22 00 0e 01 dd 00 00 "......
1346192 13.1.2018 10:39:53.114 180 00 [7] 22 00 16 01 13 00 00 "......
680 00 [5] 31 00 fa 00 0c 1....
1346217 13.1.2018 10:39:54.557 680 00 [5] 31 00 fa 00 0c 1....
1346218 13.1.2018 10:39:54.572 180 00 [7] d2 00 fa 00 0c 00 0e .......
1346323 13.1.2018 10:39:59.939 180 00 [7] 22 00 0c 00 0e 00 00 "......
680 00 [5] 31 00 fa 0a 20 1...
1346352 13.1.2018 10:40:01.620 680 00 [5] 31 00 fa 0a 20 1...
1346353 13.1.2018 10:40:01.635 180 00 [7] d2 00 fa 0a 20 00 00 .... ..
1346371 13.1.2018 10:40:01.911 180 00 [7] 22 00 0e 01 dd 00 00 "......
1346393 13.1.2018 10:40:03.040 180 00 [7] 22 00 16 01 13 00 00 "......
1346411 13.1.2018 10:40:03.832 180 00 [7] 60 79 0c 00 0e 00 00 `y.....
1346412 13.1.2018 10:40:03.838 180 00 [7] 60 79 16 01 13 00 00 `y.....
1346413 13.1.2018 10:40:03.846 180 00 [7] 60 79 0e 01 dd 00 00 `y.....
1346415 13.1.2018 10:40:03.864 180 00 [7] 60 79 53 00 00 00 00 `yS....
1346417 13.1.2018 10:40:03.879 180 00 [7] 60 79 5a 02 00 00 00 `yZ....
1346420 13.1.2018 10:40:03.905 180 00 [7] 60 79 fa 0a 20 00 00 `y.. ..
680 00 [5] 31 00 fa 0a 20 1...
1346439 13.1.2018 10:40:05.044 180 00 [7] d2 00 fa 0b 76 00 00 ....v..
1346440 13.1.2018 10:40:05.060 680 00 [5] 31 00 fa 0a 20 1...
1346441 13.1.2018 10:40:05.078 180 00 [7] d2 00 fa 0a 20 00 00 .... ..
680 00 [5] 31 00 fa 0a 20 1...
1346523 13.1.2018 10:40:09.609 680 00 [5] 31 00 fa 0a 20 1...
1346524 13.1.2018 10:40:09.624 180 00 [7] d2 00 fa 0a 20 00 00 .... ..
1346530 13.1.2018 10:40:09.890 180 00 [7] 22 00 0c 00 0d 00 00 "......
1346581 13.1.2018 10:40:12.353 180 00 [7] 22 00 0e 01 dd 00 00 "......
1346592 13.1.2018 10:40:12.976 180 00 [7] 22 00 16 01 13 00
Hallo Markus
Ich habe einige Fehler korrigiert, getestet habe ich nur in einem Simulationsaufbau (can_progs_20180114.zip). Bitte nimm auch das neue 50_Elster.pm aus dem Verzeichnis fhem.
Setze in 50_Elster.pm (Zeile 73) "my $trace_all = 0;".
Die Zeile 523 mit "elster_perl::toggle_trace();" solltest du löschen.
Ich bin gespannt, ob damit deine Fehler verschwinden.
Viele Grüsse
Jürg
Hallo Jürg,
danke erstmal für die schnelle Antwort. Hab die neuen Dateien eingespielt und siehe da, die Loggerei hat ein Ende. Prima ;D
Eine automatische Aktualisierung erfolgt immer noch nicht, ist das OK so?
Wofür ist eigentlich "elster_perl::toggle_trace();" da?
Mir ist aufgefallen das anstelle der Errors beim auslesen jetzt "?" angezeigt werden. Das kann ich sicher programmtechnisch noch rausfiltern (bei ungültigen Empfang das Reading max. 5 mal wiederholen). Aber ist das normal, das die Fehllesung so häufig kommt? Hat jemand auch die Probleme? Ich hab dir mal mein Log angehängt.
2018.01.15 17:29:51 3: getstring(680 180 000c): 3.4
2018.01.15 17:30:26 3: getstring(680 180 0a20): ?
2018.01.15 17:30:36 3: getstring(680 180 0a20): ?
2018.01.15 17:30:41 3: getstring(680 180 0a20): ?
2018.01.15 17:30:43 3: getstring(680 180 0a20): ?
2018.01.15 17:30:44 3: getstring(680 180 0a20): 348
2018.01.15 17:33:07 3: getstring(680 480 fdac): ?
2018.01.15 17:33:12 3: getstring(680 480 fdac): ?
2018.01.15 17:33:14 3: getstring(680 480 fdac): 0
2018.01.15 17:33:26 3: getstring(680 480 0921): 0.732
2018.01.15 17:33:32 3: getstring(680 180 091d): 0.929
2018.01.15 17:33:35 3: getstring(680 180 0101): 0
2018.01.15 17:33:38 3: getstring(680 180 000c): 3.2
2018.01.15 17:33:42 3: getstring(680 180 0001): ?
2018.01.15 17:33:45 3: getstring(680 180 0001): ?
2018.01.15 17:33:47 3: getstring(680 180 0001): 0
2018.01.15 17:33:57 3: getstring(680 180 0053): ?
2018.01.15 17:34:00 3: getstring(680 180 0053): 256
2018.01.15 17:34:04 3: getstring(680 180 0287): ?
2018.01.15 17:34:08 3: getstring(680 180 0287): ?
2018.01.15 17:34:09 3: getstring(680 180 0287): ?
2018.01.15 17:34:10 3: getstring(680 180 0287): 0
2018.01.15 17:34:16 3: getstring(680 180 0805): ?
2018.01.15 17:34:18 3: getstring(680 180 0805): 0
2018.01.15 17:34:23 3: getstring(680 180 07fc): ?
2018.01.15 17:34:24 3: getstring(680 180 07fc): 0.493
2018.01.15 17:34:34 3: getstring(680 180 0802): ?
2018.01.15 17:34:36 3: getstring(680 180 0802): 75
2018.01.15 17:34:40 3: getstring(680 180 07ff): 0.000
2018.01.15 17:34:48 3: getstring(680 180 0112): Automatik
2018.01.15 17:34:53 3: getstring(680 180 0058): 2
2018.01.15 17:35:00 3: getstring(680 180 01d4): 3.6
2018.01.15 17:35:06 3: getstring(680 180 0016): ?
2018.01.15 17:35:07 3: getstring(680 180 0016): ?
2018.01.15 17:35:10 3: getstring(680 180 0016): ?
2018.01.15 17:35:14 3: getstring(680 180 0016): 26.7
2018.01.15 17:35:19 3: getstring(680 180 0a20): ?
2018.01.15 17:35:25 3: getstring(680 180 0a20): ?
2018.01.15 17:35:27 3: getstring(680 180 0a20): 348
2018.01.15 17:35:31 3: getstring(680 180 000e): ?
2018.01.15 17:35:33 3: getstring(680 180 000e): 45.8
2018.01.15 17:35:37 3: getstring(680 180 005a): 2
2018.01.15 17:35:42 3: getstring(680 180 0931): 3.836
2018.01.15 17:35:47 3: getstring(680 180 092d): 3.187
2018.01.15 17:35:52 3: getstring(680 180 01d6): 50.7
2018.01.15 17:36:04 3: getstring(680 480 fdac): 0
2018.01.15 17:36:08 3: getstring(680 180 027e): off
Danke Gruß Markus
Hallo,
habe festgestellt, das bei "can_scan" ebenfalls mal Werte gelesen werden und dann mal wieder nicht. Nutzt du die selben Proceduren in FHEM wie auch bei "can_scan" oder liegt das vielleicht doch an meiner Hardware?
Gruß Markus
Hallo Jürg,
hab mich wegen der automatischen Aktualisierung nochmal mit der "Elster_Read" beschäftigt. Ich habe das Problem, das diese nicht automatisch aufgerufen wird, wenn was im Emfangsbuffer "gesnifft" wird. Dazu habe ich in der "Elster_Define" unten die beiden Zeilen aktiviert.
$hash->{FD} = 8;
$selectlist{"$name.$dev"} = $hash;
ebenfalls habe ich in der "Elster_Undef" die folgenden Zeilen eingefügt.
my $dev = $hash->{DeviceName};
my $name = $hash->{NAME};
delete($selectlist{"$name.$dev"});
delete($hash->{FD});
Die "Elster_Read" wird nach einem RELOAD immer noch nicht ausgeführt. Ich vermute das die Übergabe des "$hash->{FD} = 8;" noch fehlerhabt ist. Laut meinen recherschen müsste dort eigentlich
$hash->{FD}=fileno($port);
angegeben werdn. Wie komme ich nun an die "Schnittstellennummer"? Was muß ich jetzt hier angeben. Ich nutze SocketCan "can0". Kannst du mir hier weiterhelfen?
Dankeschön.
Gruß Markus.
Hallo Markus,
ja, can_scan und meine FHEM-Anbindung verwenden dieselben Prozeduren. Es sollte also zuerst mit can_scan zum Laufen gebracht werden. Verwende vielleicht auch eine ältere can_scan Version.
Was die auskommentierten Stellen machen sollten, das weiss ich nicht mehr. Vielleicht kann dir jemand vom Forum weiterhelfen. Ich bin kein guter Perl-Programmierer. Meine Stärken liegen bei Delphi und C++. Das ist auch der Grund, dass ich das "elster_perl"-Modul in C++ zur Verfügung gestellt habe.
"can0" wird in elster_perl geöffnet. can0 ist der Default-Wert. Für can1 müsste man
elster::perl::setdev("can1");
aufrufen. Mit "toggle_trace" wird das Tracing umgeschaltet (ein oder aus).
Viele Grüsse
Jürg
Zitat von: Mastermind1 am 02 Januar 2018, 23:27:15
Mein Industrialcanberry Interface (auf meinem Raspi Pi Model B) funktioniert nicht mehr (LED leuchtet nicht mehr.. - defekt)...
Kurze Frage: Welche Canbus Interfaces kann man mit einem Raspi Pi Modell B empfehlen?
Hallo in die Runde..!
Ich hatte vor einigen Wochen auch vor ein Projekt mit Raspi 3 und CAN-Interface zu starten, um damit an meine LWZ-504 zu kommen.
Inzwischen habe ich aber dafür eine "elegantere" Lösung gefunden, da die 504 auch USB hat und es dazu das FHEM-Modul THZ gibt.
Kurz gesagt - ich hab zwei USB-Interface-Module übrig, die wahrscheinlich nur in der Schublade verschwinden würden.
Anzubieten hätte ich ein PiCAN 2-Modul passend für den Raspi und ein USBtin-Interface von Fischl.
Beide habe ich kurz vor Weihnachten 2017 bestellt und bekommen und sind daher praktisch neuwertig. Ich hab auf beiden lediglich ein Jumper-Stiftpaar für den Abschlusswiderstand gelötet und beide für wenige Tage zum sniffen betrieben, bevor ich auf die USB-Lösung getroffen bin.
Wenn du Mastermind1 oder jemand anders Interesse daran ha(s)t, einfach schreiben - hier oder per PN. Beim Preis lässt sich sicher reden... ;)
Ciao..!
Hallo,
erst mal Danke an Jürg (juerg5524), das fhem modul funktioniert. Ich habe zwar immer wieder mal Fehlermeldungungen, das Werte nicht gelesen werden. Derzeit polle ich jede Minute die Werte über den CAN Bus. Es wäre schön, wenn sich die Werte ohne pull Methode von selbst aktualisieren würden.
defmod hzg.read.wpl13.status at +*00:01:00 {\
fhem "get WPL13 AUSSENTEMP";;\
sleep 2;; \
fhem "get WPL13 PROGRAMMSCHALTER";;\
sleep 2;; \
fhem "get WPL13 RUECKLAUFISTTEMP";;\
sleep 2;; \
fhem "get WPL13 WPVORLAUFIST";;\
sleep 2;; \
fhem "get WPL13 PUFFERSOLL";;\
sleep 2;;\
fhem "get WPL13 SPEICHERISTTEMP";;\
sleep 2;;\
fhem "get WPL13 BETRIEBSSTATUS";;\
sleep 2;;\
fhem "get WPL13 INFO_TYP";;\
\
\
}
attr hzg.read.wpl13.status alias Betriebsstatus Überwachung
attr hzg.read.wpl13.status alignTime 00:00
attr hzg.read.wpl13.status group Status
attr hzg.read.wpl13.status room Heizung
Die CAN Adresse für WAERMEPUMPENSTATUS funktioniert bei mir nicht
// nach chriss1980 / knx forum
// Verdichter 1: 0x0001
// DHC 1: 0x0002
// DHC 2: 0x0004
// Pufferladepumpe: 0x0008
// Warmwasserladepumpe: 0x0010
// HK 1 Pumpe: 0x0020
// HK 2 Pumpe: 0x0040
// Mischer auf: 0x0080
// EVU-Sperre: 0x0100
// Quellenpumpe: 0x0200
// Kuehlkreispumpe: 0x0800
{ "WAERMEPUMPEN_STATUS" , 0x0062, et_little_endian},
Ich habe mich deshalb BETRIEBSSTATUS und INFO_TYP bedient
// Verdichter 1: 0x0001
// Verdichter 2: 0x0002
// Pufferladepumpe 1: 0x0040
// Pufferladepumpe 2: 0x0080
// DHC 1: 0x1000
// DHC 2: 0x2000
// Warmwasserladepumpe: 0x4000
// EVU Sperre: 0x8000
{ "BETRIEBS_STATUS" , 0x0176, 0},
// HK1 Pumpe: 0x0001
// HK2 Punpe: 0x0002
// Mischer auf: 0x0004
// Mischer zu: 0x0008
// Quellenpumpe: 0x0010
// Solarpumpe: 0x0020
// 2. WE: 0x0040
// Zirkulationspumpe: 0x0080
{ "INFO_TYP" , 0x019c, 0},
Ich habe meine WPL13 um ein paar sinnvolle Usereadings erweitert. So kann Pumpen- und Verdichterstatus überwacht werden.
Verdichter {
if(ReadingsVal($NAME,"BETRIEBSSTATUS",0) & 1){return "on"} else {return "off"}
},
Pufferladepumpe {
if(ReadingsVal($NAME,"BETRIEBSSTATUS",0) & 1 << 6){return "on"} else {return "off"}
},
Warmwasserladepumpe {
if((ReadingsVal($NAME,"BETRIEBSSTATUS",0) & 1 << 15) eq "1"){return "on"} else {return "off"}
},
Heizpatrone {
if((ReadingsVal($NAME,"INFO_TYP",0) & 1 << 6) eq "1"){return "on"} else {return "off"}
},
DHC_1 {
if((ReadingsVal($NAME,"BETRIEBSSTATUS",0) & 1 << 12) eq "1"){return "on"} else {return "off"}
},
DHC_2 {
if((ReadingsVal($NAME,"BETRIEBSSTATUS",0) & 1 << 13) eq "1"){return "on"} else {return "off"}
},
Heizkreispumpe {
if((ReadingsVal($NAME,"INFO_TYP",0) & 1 ) eq "1"){return "on"} else {return "off"}
}, Zirkulationspumpe {if((ReadingsVal($NAME,"INFO_TYP",0) & 1 << 7) eq "1"){return "on"} else {return "off"}
}
Gruß Frank
Hallo Frank,
das mit den Fehlermeldungen habe ich auch, dazu hab ich in der "sub Elster_Get($@)" nach der Zeile
my $res = elster_perl::getstring($Elster_str);
folgenden Code eingetragen
my $counter = 1;
while (($res eq '?') && ($counter <= 5)) # max. 5 Versuche falls Auslesen nicht geklappt
{
select(undef, undef, undef, 1.0); # 1,0 Sekunden warten (Pause)
$res = elster_perl::getstring($Elster_str); # nochmal auslesen
$counter++;
Log3 ($name,4,"getstring($Elster_str): $res, Versuch: $counter");
}
damit wird bei einem GET-Befehl max. 5mal neu ausgelesen falls eine Fehlauslesung passiert. Zwischendurch wird jeweils 1 sec gewartet, kann noch optimiert werden. Zumindest habe ich jetzt spätestens nach dem 3. Leseversuch meine Daten.
Das mit dem sniffen funktioniert bei mir leider auch nicht. Laut dem Forum sollt es ja noch bis zur Version vom 25.01.2017 funktioniert haben. Diese Version habe ich aber selbst nicht probiert. Keine Ahnung was seit dem geändert wurde.
Wird bei dir die "sub Elster_Read($)" regelmäßig ausgeführt? Bei mir nicht. Ich glaube die ist für das Anstoßen des sniffens notwendig. Ich weiß nicht ob das was mit der Zeile
require "$attr{global}{modpath}/FHEM/DevIo.pm";
aus der "sub Elster_Initialize($)" und
DevIo_OpenDev( $hash, 0, "Elster_DevInit" );
aus der "sub Elster_Define($$)" in Version 25.01.17 zu tun hat, die gab es nähmlich nicht mehr in den jüngeren Versionen. ???
Gruß Markus.
Hallo Markus
Ich habe das Gerüst von Radiator übernommen. Er griff mittels Perl-Funktionen auf die serielle Schnittstelle zu. Deshalb das
require .... DevIo.pm"
Das wird aber hier nicht benötigt. Ebenso der Aufruf von DevIo_OpenDev.
Ich habe in can_progs_2018014_test.zip einiges korrigiert. Ich wäre deshalb froh, wenn ihr mir zu dieser Version Rückmeldungen geben könntet.
Danke und viele Grüsse
Jürg
Hallo Jürg,
danke für die Rückmeldung, wie bereits oben beschrieben funktioniert die Version vom 14.01.2018 recht stabil auf meinem Rispberry. Ich nutze sie derzeit aber nur zum Auslesen von ca. 12 Werten, also in einer "abgespeckten" Version.
- Die GET-Funktion läuft mit meinen oben beschriebenen Ergänzungen (nochmaliges lesen bei fehlerhaften Werten) gut und ich erhalte somit immer meine geswünschten Werte.
- Die SET-Funktion habe ich momentan noch nicht im Einsatz und somit auch nicht getestet.
- Die Sniffer-Funktion läuft garnicht. Wäre aber eine tolle Option um nicht alle Werte mit GET abzufragen.
Die Funktionen "Elster_Ready" und "Elster_Read", die meines erachtens für die Snifferei zuständig sind werden bei mir nicht aufgerufen. Warum auch immer???
Wenn du noch andere Angaben benötigtst, dann melde dich einfach.
Gruß Markus
und schöne Restostern.
Hallo Markus
Danke für deine Rückmeldung. Ein getstring setzt bis zu dreimal eine Anfrage ab. Dieser Wert ist in KCanElster.h mit count = 3 vorgegeben:
bool Send(unsigned count = 3, bool WaitForAnswer = true, int inner_delay = 50);
Diesen Wert könnte man auch auf 10 oder 15 erhöhen. Das müsste dann zum selben Resultat führen.
Ich bin daran, die Sniffer-Funktion zu testen und zu korrigieren.
Viele Grüsse
Jürg
Hallo
Mit can_progs_20180405_test.zip funktioniert das "Sniffen" wieder. Ich habe es in einer MAC-Simulation ausgetestet.
Für das Anstossen von Elster_Ready und Elster_Read ist
$readyfnlist{"$name.$dev"} = $hash;
zuständig. "DevIo_OpenDev" macht das vorher, obwohl die Prozedur mit einem Fehler endete.
Viel Vergnügen
Jürg
Danke Jürg,
ich werde es bei Gelegenheit testen, hab aber im Moment viel um die Ohren, kann also etwas dauern.
Gruß Markus
Hallo Jürg,
ich habe die Version vom 05.04.2018 im Einsatz und das sniffen funktioniert. Leider habe ich immer noch Fehler bei manchen get Aufrufen.
Da das sniffen nun geht könnte man auch ein sh Script auf dem PI laufen lassen, was jede Minute die Werte über can_send ... holt.
Gruß Frank
Ich spiele mal wieder an meiner Canbus Anbindung ;)
Eine Frage, wo finde ich den den aktuellen Betriebsstatus. Gibt es so etwas?
Also Kühlung / Heizen / Warmwasser / Aus ?
ich hab probiert
680 180.fdae
680 180.0176 (Betriebsstatus)
Ein Tipp?
@Juerg5524, erst ein mal ein riiiesiges Dankeschön für deine Arbeit. Ist wirklich toll was du da auf die Beine gestellt hast!!!
Bei mir habe ich die neuste Version von 50_Elster.pm am laufen. Die Werte kann ich mit "get" einzeln abholen. Das Sniffen geht aber leider nach wie vor nicht. Ich teste live auf meiner WP. Mein Ziel wäre die Werte alle 60 Sekunden oder so aus zu lesen und dann an meine Loxone Steuerung zu schicken.
Geht bei euch das Sniffen nun einwandfrei?
Gruss
Chris
Hallo
Ich habe einen Raspi3, FHEM und die Stiebel Eltron WPL 18 e mit WPM II. Ganz euphorisch habe ich diesen Thread gefunden und wollte mich dieses Weekend mal damit auseinandersetzen. Hat es jemand schon mit Raspi3 zum Laufen gebracht?
Lg c
Zitat von: choetzu am 28 Oktober 2018, 00:39:38
Hallo
Ich habe einen Raspi3, FHEM und die Stiebel Eltron WPL 18 e mit WPM II. Ganz euphorisch habe ich diesen Thread gefunden und wollte mich dieses Weekend mal damit auseinandersetzen. Hat es jemand schon mit Raspi3 zum Laufen gebracht?
Lg c
Ob raspi 1 - 3 hat keine Bedeutung. :-)
Wichtiger ist eher das jew. verwendete canbus Interface zum laufen zu bekommen. Der Rest ist dank der tollen Arbeit mit dem Modul hier nur noch die Kür.... P.s. das Modul funktioniert auch ohne fhem ;-) ich nutze es nativ für ip-symcon.
herzlichen Dank für dein Feedback, Mastermind1. Super schonmal. Ich habe mir soeben ein Pican2 bestellt. Sollte diese Woche kommen. ;)
Wie schätzt du folgendes ein? Ich habe vor 2.5 Jahren mit Fhem begonnen. Bis dato wusste ich noch nix von ssh, mysql, raspi, perl, fhem, regex, html, css und co.. Hab ich mir alles Schritt für Schritt angeeignet. Heute bin ich zwar weiter, aber sehr weit weg selber Codes zu programmieren geschweige denn komplizierte Scripts zu verstehen. CAN scheint mir nochmals ein neues Gebiet zu sein. Ist es für einen Anfänger wie mich möglich, diese Schnittstelle WPL <--> FHEM gemäss Anleitung von Jürg zu machen. Meine Euphorie ist etwas der Ernüchterung gewichen, beim Lesen der Posts und Juergs Anleitung...
Lg c
PS Jürg: Schwiiizer?
guten Abend, resp. Morgen ;)
ich habe nun den PiCAN with GPS + Gyro +Accelerometer CAN-Bus for Raspberry Pi 3 (http://skpang.co.uk/catalog/pican-with-gps-gyro-accelerometer-canbus-for-raspberry-pi-3-p-1521.html) auf dem Raspi 3 (Testgerät) montiert. Doch nun stellt sich mir die erste Frage, wie, resp. mit welchem Kabel verbinde ich meine Stiebel Eltron WPL 18 e mit WPM II mit dem Pican? Für Euch scheint dies alles klar zu sein, da noch niemand diese Frage gestellt hat ;) Der Schaltplan von Jürg ist mir auch nicht schlüssig (http://juerg5524.ch/data/piCan_Schema.pdf) Ich wäre mega froh um eine Hilfestellung. Nicht dass mir die Heizung kapputt geht, jetzt wo es kälter wird..
Danke. Lg c
Hallo Choetzu
Wie du an meiner Web-Seite sehen kannst, bin ich "Schwiizer".
Die Schaltung wurde von Schwanti (https://www.haustechnikdialog.de/Forum/t/169910/ComfortSoft-mit-CAN-BUS-Anbindung-Raspberry-Pi-verwenden?page=5) nachgebaut.
Am WPM 2 gibt es einen 4-poligen Stecker, dort musst du abgreifen, und zwar CANH, CANL und GND. Für meine Schaltung ist auch der 4. Pol (18 Volt) notwendig.
Viele Grüsse
Jürg
Guten Tag Jürg,
danke für deine Hilfe. Ich habe deinen Link (Schwantis Schaltung) versucht zu interpretieren. Als Laie aber einfach viel zu hoch..
Siehe Bild, rotes Rechteck. Ist dies der 4-polige Stecker (X15). In der Bedienungsanleitung steht unter X15:
1 BUS High
2 BUS Low
3 Ground -
4 + (nur in Verbindung mit DFü-COntroller (DCO) angeschlossen
Geht 1 auf Can_H, 2 auf Can_L und 4 auf Gnd beim PiCAN? Ich denke ja, gell?
Muss ich irgendwo noch Ohm dazwischen stecken oder kann ich es direkt vom WPMII an den PiCAN stecken?
Lg c (auch aus der Schwiiz)
Hallo Choetzu
Pin 4 solltest auf keinen Fall verwenden. GND steht für "ground".
Direkt ohne Widerstand anschliessen. Das Kabel, das vermutlich weniger als 2 Meter lang ist, braucht keine verdrillten Adernpaare.
Viele Grüsse
Jürg
So, lieber Jürg, ich habe es endlich geschafft. Es funktioniert und ich bin brutal happy. Ich danke dir herzlich für dieses Modul... Da hast du ganz viel Arbeit reingesteckt, die mir nun zu Gute kommt.
Ich kann via Fhem mit GET auslesen und mit SET setzen. Da ich das Forum in den letzten Tagen ziemlich "gespamt" habe, ohne Antworten oder Hilfestellungen zu erhalten, habe ich der besseren Uebersicht halber meine 4 letzten Beiträge gelöscht. Dafür liefere ich folgend eine KURZANLEITUNG für Dummies wie mich. Klar, die Infos sind irgendwo erhältlich, aber m.E. irgendwie zu stark zerstreut... Es soll keine Kritik sein, sondern eine Hilfestellung für Gleichgesinnte (doofies wie ich):
Hardware (in meinem Fall):
1. Raspi3 mit Betriebssystem Stretch
2. Pican2 --> http://skpang.co.uk/catalog/pican-with-gps-gyro-accelerometer-canbus-for-raspberry-pi-3-p-1521.html
3. Cat5 Kabel. In meinem Fall nicht länger als 1,5 Meter. Sollte es nicht gehen, dann mit 120OHM versuchen, seitens Raspi.
4. Verbindung Pican2 mit der Wärmepumpe WPMII (bei mir Stiebel Eltron WPL 18e), siehe Bild:
- X15 (WPMII) Pin 1 (H) mit Can_H (Pican2) verbinden
- X15 (WPMII) Pin 2 (L) mit Can_L (Pican2) verbinden
- X15 (WPMII) Pin 3 (-) mit GND (Pican2) verbinden
5. Raspi an Strom anschliessen und einschalten.
Software:
1. Stretch und Fhem müssen vorinstalliert sein
2. Auf juerg5524.ch die aktuellste can_progs.zip runterladen, entpacken und auf den Raspi hochladen. Bei mir in den Folder /home/pi/can_progs/ . Ich habe Schreibrechte 777 gegeben. Ich weiss, nicht optimal...
3. Die Datei http://www.skpang.co.uk/dl/can-test_pi2.zip runterladen, entpacken und auf Raspi hochladen. Bei mir in den Folder /home/pi/can-test_pi2/ . Auch hier habe ich Schreibrechte 777 gegeben.
4. Terminal öffnen und mit Raspi3 per SSh verbinden
5. CAN bootfähig (can0) machen, indem man im Terminal folgendes eingibt:
sudo nano /boot/conig.txt
Am Ende der Datei folgende Zeilen eingeben und dann speichern.
dtparam=i2c_arm=on
dtparam=spi=on
enable_uart=1
dtoverlay=mcp2515-can0,oscillator=16000000,interrupt=25
dtoverlay=spi-bcm2835-overlay
6. Reboot
7. Terminal erneut starten und "cd /home/pi/can-test_pi2/" eingeben
8. CAN Schnittstelle aktivieren, indem man folgendes nacheinander eingibt
sudo ip link set can0 type can bitrate 20000
sudo ifconfig can0 up
sudo ifconfig can0
./candump can0
Wichtig ist dabei die bitrate 20000 bei der ersten Eingabe. Ansonsten geht das nicht.
Nach ./candump can0 sollte dann sowas ähnliches wie folgendes kommen:
can0 480 [7] A1 00 FA 01 D6 00 00
can0 480 [7] A1 00 16 00 00 00 00
can0 500 [7] 92 00 FA 01 D6 01 1B
can0 480 [7] A1 00 FA 07 A8 00 00
can0 480 [7] A0 00 5F 04 00 00 00
can0 500 [7] 92 00 16 01 17 00 00
can0 500 [7] 92 00 FA 07 A8 00 08
can0 180 [7] A0 79 0C 00 4E 00 00
can0 180 [7] A0 79 FA 01 D7 01 01
9. Nun in den Ordner "cd /home/pi/can_progs/" wechseln
10. Sicherstellen, dass man swig (sudo apt-get install swig) und libperl-dev (sudo apt-get install libperl-dev) installiert hat. Dies war bei mir nicht der Fall.
11. Die Datei "/home/pi/can_progs/can_elster_perl.arm in einem Texteditor öffnen und den folgenden Pfad in der Datei anpassen (Perl Version kann anders sein). Den Pfad müsst Ihr überprüfen. Danach speichern.
CORE_PATH="/usr/lib/arm-linux-gnueabihf/perl/5.24.1/CORE"
12. sudo ./can_elster_perl.arm im Terminal auslösen. Dabei werden die Dateien elster_perl.so, elster_perl.pm kompiliert (sagt man dem so? :)
13. sudo cp elster_perl.so /opt/fhem/FHEM
14. sudo cp elster_perl.pm /opt/fhem/FHEM
15. sudo cd fhem (also in Pfad /home/pi/can_progs/fhem/ wechseln)
16. sudo cp 50_Elster.pm /opt/fhem/FHEM
17. In FHEM wechseln und "shutdown restart" oder im Terminal "sudo /etc/init.d/fhem start" eingeben
18. Das Device "define <name> Elster can0" eingeben.
19. Nachdem das Device erstellt ist, sollte im state "connected" stehen.
20. Mit "GET" die einzelnen Werte abfragen oder mit "SET" eingeben
So, ich hoffe das hilft einigen. Und sollte ich was vergessen haben, bitte melden.
Over and out.
Lg c
Zitat von: intershopper am 24 März 2018, 09:40:08
Hallo,
erst mal Danke an Jürg (juerg5524), das fhem modul funktioniert. Ich habe zwar immer wieder mal Fehlermeldungungen, das Werte nicht gelesen werden. Derzeit polle ich jede Minute die Werte über den CAN Bus. Es wäre schön, wenn sich die Werte ohne pull Methode von selbst aktualisieren würden.
defmod hzg.read.wpl13.status at +*00:01:00 {\
fhem "get WPL13 AUSSENTEMP";;\
sleep 2;; \
fhem "get WPL13 PROGRAMMSCHALTER";;\
sleep 2;; \
fhem "get WPL13 RUECKLAUFISTTEMP";;\
sleep 2;; \
fhem "get WPL13 WPVORLAUFIST";;\
sleep 2;; \
fhem "get WPL13 PUFFERSOLL";;\
sleep 2;;\
fhem "get WPL13 SPEICHERISTTEMP";;\
sleep 2;;\
fhem "get WPL13 BETRIEBSSTATUS";;\
sleep 2;;\
fhem "get WPL13 INFO_TYP";;\
\
\
}
attr hzg.read.wpl13.status alias Betriebsstatus Überwachung
attr hzg.read.wpl13.status alignTime 00:00
attr hzg.read.wpl13.status group Status
attr hzg.read.wpl13.status room Heizung
Die CAN Adresse für WAERMEPUMPENSTATUS funktioniert bei mir nicht
// nach chriss1980 / knx forum
// Verdichter 1: 0x0001
// DHC 1: 0x0002
// DHC 2: 0x0004
// Pufferladepumpe: 0x0008
// Warmwasserladepumpe: 0x0010
// HK 1 Pumpe: 0x0020
// HK 2 Pumpe: 0x0040
// Mischer auf: 0x0080
// EVU-Sperre: 0x0100
// Quellenpumpe: 0x0200
// Kuehlkreispumpe: 0x0800
{ "WAERMEPUMPEN_STATUS" , 0x0062, et_little_endian},
Ich habe mich deshalb BETRIEBSSTATUS und INFO_TYP bedient
// Verdichter 1: 0x0001
// Verdichter 2: 0x0002
// Pufferladepumpe 1: 0x0040
// Pufferladepumpe 2: 0x0080
// DHC 1: 0x1000
// DHC 2: 0x2000
// Warmwasserladepumpe: 0x4000
// EVU Sperre: 0x8000
{ "BETRIEBS_STATUS" , 0x0176, 0},
// HK1 Pumpe: 0x0001
// HK2 Punpe: 0x0002
// Mischer auf: 0x0004
// Mischer zu: 0x0008
// Quellenpumpe: 0x0010
// Solarpumpe: 0x0020
// 2. WE: 0x0040
// Zirkulationspumpe: 0x0080
{ "INFO_TYP" , 0x019c, 0},
Ich habe meine WPL13 um ein paar sinnvolle Usereadings erweitert. So kann Pumpen- und Verdichterstatus überwacht werden.
Verdichter {
if(ReadingsVal($NAME,"BETRIEBSSTATUS",0) & 1){return "on"} else {return "off"}
},
Pufferladepumpe {
if(ReadingsVal($NAME,"BETRIEBSSTATUS",0) & 1 << 6){return "on"} else {return "off"}
},
Warmwasserladepumpe {
if((ReadingsVal($NAME,"BETRIEBSSTATUS",0) & 1 << 15) eq "1"){return "on"} else {return "off"}
},
Heizpatrone {
if((ReadingsVal($NAME,"INFO_TYP",0) & 1 << 6) eq "1"){return "on"} else {return "off"}
},
DHC_1 {
if((ReadingsVal($NAME,"BETRIEBSSTATUS",0) & 1 << 12) eq "1"){return "on"} else {return "off"}
},
DHC_2 {
if((ReadingsVal($NAME,"BETRIEBSSTATUS",0) & 1 << 13) eq "1"){return "on"} else {return "off"}
},
Heizkreispumpe {
if((ReadingsVal($NAME,"INFO_TYP",0) & 1 ) eq "1"){return "on"} else {return "off"}
}, Zirkulationspumpe {if((ReadingsVal($NAME,"INFO_TYP",0) & 1 << 7) eq "1"){return "on"} else {return "off"}
}
Gruß Frank
Hallo Frank,
danke für deine Vorlagen. Ich habe diesbezüglich eine Frage. Ich habe bei mir auch keine WAERMEPUMPENSTATUS. Aber ich krieg auch BETRIEBSSTATUS und INFO_TYP nicht hin.
ich habe eine WPL18e.
Was meinst du genau mit:
{ "BETRIEBS_STATUS" , 0x0176, 0},
und
{ "INFO_TYP" , 0x019c, 0},
Wo genau muss ich diesen Code platzieren?
Danke für die Hilfe... lg c
Hallo choetzu,
0x0176 und 0x019c sind die CAN bus Adressen. Die sollten bei deiner WPL18 gleich sein.
Füge einfach die usereadings an der WPL Can object in Fhem im Attribute usereadings ein.
Dann sind neue Eigenschaften sichtbar.
Gruss Frank
Danke schonmal für die genauen Anleitungen und das FHEM Modul. Hat dadurch bei mir mit Raspi 3 + PiCan2 sofort geklappt!
Ich habe eine TTL 10 AC mit WPM II.
Generell passt schon vieles zusammen. Wahrscheinlich müsst ich auch mal die Logs laufen lassen, um alle Werte zu finden.
Ich würde auch gerne die Fehlermeldungen der WP verarbeiten, jedoch scheint Adresse 0001 nicht in der Vorlage/Plugin gemappt zu sein. Diese enthält wohl die Nummer des Fehlerspeichers für den aktuellen Fehler (ist es ein Ringspeicher?). Das Datum des Fehlers (wie in der Fehlerliste im WPM) bekommt man aber nicht per CAN Bus oder? D.h. man wartet auf Änderung von 0001 und baut sich so eine eigene Fehlerliste auf. Oder gibt es einen einfacheren Weg? Und wäre dies die erste Anlaufstelle um am schnellsten herauszufinden, ob etwas mit der Heizung gerade nicht i.O. ist oder anhand welcher Werte "alarmiert" ihr?
EDIT: Über die Anpassung der elster.pm Datei kann ich ja die fehlenden Adressen aufnehmen oder gibt es noch einen anderen Weg? Insbesondere wäre die Frage, wo das Wertemapping/Wertecasting stattfindet bzw. man den Dateityp anpassen kann oder muss man es dafür neu compilieren?
Mein FHEM Log war noch voll mit "elster: get sniffed.." Einträgen. Musste die Zeile "elster_perl::toggle_trace" entsprechend im PM-File auskommentieren. Wäre schön, wenn man das über das Plugin Trace Level steuern könnte o.ä. und es per Default eher aus wäre. Weil durch häufiges Schreiben geht ja auch schneller die SD Karte kaputt :)
Hallo, ich habe es endlich auch mal geschafft meine LWZ504 anzuschließen. Das Modul hat nicht gleich mit der LWZ504 zusammen funktioniert, doch davon gibt es in einem späteren Post mehr, wenn ich alles fertig eingerichtet habe. Bei der Inbetriebnahme sind mir zwei Fehler in den Programmen aufgefallen. Die CAN Send Routine hat nicht auf die Antwort gewartet wenn sich ein anderes Telegram dazwischen gemogelt hat. Mir haben bei meinen Scans Werte gefehlt und das hat dann wohl zu den nicht erfoglreichen Gets geführt die hier im Thread erwähnt werden. Und im Elster Modul für fhem hat das Sniffen nicht funktioniert. Anbei sind die gefixten Programmdateien für die can_progs vom 20.05.18.
Der Fix für das Sniffen ist in den Zeilen 667 und 668 von 50_Elster.pm
if (hex($el->{ID}) == hex($recv_id) &&
hex($el->{EIdx}) == hex($elster_idx))
In der 50_Elster.pm habe ich auch noch den Befehl in Zeile 529 auskommentiert (siehe Beitrag zuvor).
Für den Fix für die verlorenen Antworttelegramme wurden die folgenden Zeilen nach Zeile 171 in die KCanElster.cpp eingefügt.
else
continue;
Der Bereich sieht dann so aus:
Ok = true;
#if !defined(__UVR__)
if (Ok)
SniffedData.ClearSniffedValue(RecvFrame);
else
continue;
#endif
return Ok;
Für den Fix mit den verlorenen Telegrammen muss man dann die elster_perl lib neu kompilieren mit ./elster_perl.arm und dann die elster_perl.so in das passende Verzeichnis kopieren.
Hallo jodamm
Vielen herzlichen Dank, deine Fehler-Korrektur in KCanElster.cpp ist für die Stabilität von grosser Bedeutung! Das mit dem Sniffen werde ich bei Gelegenheit anschauen.
Viele Grüsse
Jürg
P.S.: KCanElster.cpp ist in can_prog.zip korrigiert.
Hallo
Stiebel hat nun zum 3. mal bei mir einen der beiden Kompressoren ausgetauscht (min. 3 Monate insgesamt mit Strom geheizt) und ich zweifle sehr, dass dies der letzte war.
Dieser Zweifel brachte mich zu diesem Forum, da ich meine WP überwachen und loggen möchte (die startet ja nach einem Fehler gleich wieder.)
Der Servicemonteur sagte mir bei Fragen mit Vernetzung, dass ein Freak aus der Schweiz die WP von Stiebel schon länger loggt..wird wohl Jürg sein ;)
Ich möchte allen und vor allem Jürg danken für ihren Beitrag, der mir vielleicht hilft, dass meine Stromkosten nicht weiter explodieren und ich jetzt ein neues Hobby habe ;) (Haus automatisieren)
Ich warte leider immer noch auf die CAN-Schnittstelle und werde danach meine Erfahrung mit euren Anleitungen und Software berichten.
CANBus
Ich werde beide Augen zudrücken und wie choetzu eine Stichleitung legen...bei dieser Baud. sollte es ja mit der Kabellänge keine Probleme geben.
Ist es richtig, dass hier noch niemand die Fehlermeldungen geloggt hat?
Nochmals vielen Dank und Grüsse...auch aus Schwiizerland(TG)
Philipp
Hallo nochmals
Ich habe mit RaPi FHEM, Perl und Python praktisch noch keine Erfahrung aber dank euren Posts kriege ich nun schon mal die Aussentemperatur rein, 8)
danach funktioniert die Struktur leider nicht mehr.
Vielen Dank nochmals!
Ich habe eine WPL33HT mit WPM 2.1, die eine andere Struktur hat als das Tabellenfile von Jürg.
Ich konnte im Netz die Comfortsoft nirgends finden, da der Link nicht mehr gültig ist.
Könnte mir jemand das Scanfile im Anhang bearbeiten, damit ich es in die ElsterTable einbinden kann oder weiss jemand wo ich die Software kriegen kann?
merci
Grüsse Philipp
Hallo Philipp
Die Datei für deine WP findest du im Anhang.
Viel Spass
Jürg
Hallo Jürg,
Darf ich fragen wie du Fehler detektierst und anzeigst?
Danke und Gruß,
Gerrit
Edit: sorry Auto Korrektur
Hallo Jürg
Vielen herzlichen Dank für deine Bemühungen..ich habe die Änderungen in 50_Elster übernommen und habe gesehen, dass eigentlich nur die WPM-Adresse bei mir 300 ist.
Muss aber erstmal den RasPi neu aufsetzen, da der nicht mehr startet. :-\
Bin öfters Gesch. in Wohlen und müsste dir eigendlich min. eine Flasche Wein mal in den Briefkasten stellen ;)
Allerdings hat meine WP 2 FUs/ 2 Komp. und für meine Diagnose brauche ich unbedingt noch zusätzliche Daten der IWS.(siehe PDF)
Infos Temperaturen:
Am meisten interessiert mich die SauggastempHD, aber auch die anderen Daten wie Ströme, Drehzahl und Wärmemenge wären interessant.
Ich nehme an, das IWS ist Adresse 500 oder? Wie komme ich nun zu den Indizies?
Geht das mit Comfortsoft und deiner Brücke und woher bekomme ich die Software...soll ich mal Stiebel fragen?..die zittern schon wenn ich wieder anrufe ;)
Ich nehme mal an, wenn ich die Fehler des HD-Verdichters(2.Seite PDF) tracen will, muss ich das an FHEM vorbei lösen?
Nochmals vielen Dank
Gruss Philipp
Hallo Gerrit
Der Typ zum einzelnen Wert wird in der Datei ElsterTable.inc zugeordnet.
Wenn du einen Scan durchführst
./can_scan can0 680 total >scan.txt
und mir scan.txt gibst, kann ich dir die Werte, die von der Software ComfortSoft generiert werden, zukommen lassen. Für einen vollständigen Scan musst du zwingend die neuste can_progs.zip Software verwenden!
Im Anhang ist eine Fehlerliste von ComfortSoft.
FHEM verwende ich nur in einer Simulation, um Austesten zu können. Ich zeige deshalb keine Fehler an.
Viele Grüsse
Jürg
Hallo Philipp
Danke, das mit der Flasche Wein ist lieb von dir, aber übertrieben!
Die Datei ElsterTable.inc enthält alle mir bekannten "Elster-Paare" und diese Paare stimmen nicht zwingend. ComfortSoft liefert keine zusätzlichen Werte.
Kannst du z.B. die "SAUGGASTEMP" im WPM anzeigen? Wenn du das kannst, dann muss der WPM den Wert von ID 180 abfragen, d.h. er ist auf dem CAN-Bus sichtbar.
Viele Grüsse
Jürg
Zitat von: Phil_E am 15 Januar 2019, 12:52:06
Stiebel hat nun zum 3. mal bei mir einen der beiden Kompressoren ausgetauscht (min. 3 Monate insgesamt mit Strom geheizt) und ich zweifle sehr, dass dies der letzte war.
Hallo Phillip,
die elektrische Zusatzheizung ist bei mir separat abgesichert. Seitdem ich unmittelbar nach Einzug mal einen Defekt hatte und daraufhin unwissentlich mit Heizstab geheizt habe, ist die Sicherung bei mir permanent aus. Das heisst, wenn Dein Kompressor mal wieder kaputt ist, wirds zwar kalt in der Hütte, so bekommst Du aber sofort mit, wenns Probleme gibt und heizt nicht ohne Dein Wissen mit Heizstab.
Gruß,
Thorsten
Zitat von: thorschtn am 21 Januar 2019, 10:52:21
die elektrische Zusatzheizung ist bei mir separat abgesichert. Seitdem ich unmittelbar nach Einzug mal einen Defekt hatte und daraufhin unwissentlich mit Heizstab geheizt habe, ist die Sicherung bei mir permanent aus. Das heisst, wenn Dein Kompressor mal wieder kaputt ist, wirds zwar kalt in der Hütte, so bekommst Du aber sofort mit, wenns Probleme gibt und heizt nicht ohne Dein Wissen mit Heizstab.
Hallo Thorsten
Danke für deine Info, aber mein DHC springt erst bei Notbetrieb an und den stelle ich manuell ein. Der Heizwendel im Speicher (für Not-Notbetrieb) ist eh abgeschaltet, da ich den nicht am Sperrschütz habe. ;)
Ich habe so lange mit Strom geheizt, da Stiebel jedes Mal mind. 3 Wochen braucht, bist der Kompressor getauscht ist!
Gruss Philipp
Hallo Jürg
Danke für die Antwort. Ich überlege mir mal bei Stiebel die kompletten Adressen und Eigenschaften der Parameter anzufragen.
Die schulden mir noch was!
Ist das IWS nicht ID500?
Ich habe den Bus mal aufgezeichnet, bin dann runter in den Keller und habe den WPM auf Infos Temp "SAUGGASTEMPHD" gestellt
Danach kann man im File sehen, dass nur im unteren Bereich gewisse neue Werte beiI D500 auftauchen.
Da ich zuerst auf Aussentemp gestellt habe und danach nach 0C suchte, nahm ich an, dass die 2Byte FA05 die Adresse des Sauggastemp ist--> gedreht 05FA.
Das war falsch..inzwischen habe ich gemerkt, dass die Adresse in Byte 4/5 ist und nicht gedreht werden muss!
--> gelbe Markierung 1Byte nach rechts
Danach habe ich einen Eintrag in der ElsterTable.inc und 50Elster.pm gemacht.(ist das ok)?
{ "SAUGGASTEMPHD" , 0x05d7, et_dec_val},
"SAUGGASTEMPHD" => { EIdx => "05d7", ID => "500" } ,
In FHEM Sauggastemp ausgewählt...kam der Wert ohne Komma zurück.
So habe ich auch den Strom gefunden!
Habe nur jetzt die Möglichkeit aufzuzeichnen, da ich sonnst wieder auf <-5° ein Jahr warten muss ;)
So, jetzt gehts ans ploten oder DB, die Zeit drängt ;)
Gruss Philipp
Zitat von: juerg5524 am 20 Januar 2019, 09:57:14
Im Anhang ist eine Fehlerliste von ComfortSoft.
Hallo Jürg, vielen Dank für die Infos. Hab im Bauexpertenforum noch einen Beitrag von 2014 von dir gefunden, in dem du die Fehlerfeld Struktur näher erläuterst. Da das mit der Fehlernummer aus Adresse 0001 zufällig gepasst hatte (genau in dem Feld war zufällig der gleiche Fehlercode wie aktuell, aber eben doch anderer Zeitpunkt in den Feldern davor), hat ich mir die Daten ansonsten nicht mehr angeschaut. Aber alle Daten der Historie mit Zeitangaben sind in den Feldern aufgeteilt. Der letzte Fehler aktuell im letzen Fehler-Feld 139. In der ElsterTable.inc hab ich noch weitere Felder gefunden, die vllt mehr Infos zum aktuellen geben (oder ist bei mir jetzt immer der aktuelle Fehler in Feld 139?). Zwar Schade zum Testen aber zum Glück gibts aktuell nicht so häufig Fehler ;) (Alle paar Monate mal einer)
Ich werde die neueste Version heut oder morgen zum Laufen bringen und dann Feedback geben!
Hallo Philipp
Die Einträge in ElsterTable.inc und 50_Elster.pm sind richtig, aber hast du auch die folgende Zeile entfernt?
{ "LEISTUNGSREDUZIERUNG_KUEHLEN" , 0x05d7, 0},
Viele Grüsse
Jürg
Guten Tag,
Bei mir läuft das Elster Modul seit einiger Zeit stabil. Danke Jürg für das tolle Modul und deinen unermüdlichen Support! Einfach super.
Frage in die Runde: wie habt ihr nun die Steuerung der Heizung in Fhem umgesetzt? Welche notify und DOIFS habt ihr? Welche Readings beobachtet ihr?
Ich habe lediglich ein at zum Auslesen der Readingss
defmod Timer_WPL18e_auslesen at +*00:05:00 {\
fhem "get WPL18e AUSSENTEMP";;\
sleep 2;; \
fhem "get WPL18e PROGRAMMSCHALTER";;\
sleep 2;; \
fhem "get WPL18e RUECKLAUFISTTEMP";;\
sleep 2;; \
fhem "get WPL18e WPVORLAUFIST";;\
sleep 2;; \
fhem "get WPL18e PUFFERSOLL";;\
sleep 2;;\
fhem "get WPL18e SPEICHERISTTEMP";;\
}
attr Timer_WPL18e_auslesen alias Betriebsstatus Überwachung
attr Timer_WPL18e_auslesen alignTime 00:00
attr Timer_WPL18e_auslesen group Status
attr Timer_WPL18e_auslesen room Heizung
Habe aktuell Probleme das Perl-Modul zu bauen (mit Perl lib 5.28.1 von raspbian buster, Raspi 3, can_progs Feb 2019, CORE_PATH angepasst)
Das so. File wird nicht gebaut, zwischendrin gibt es einen Error beim Kompilieren:
In file included from /usr/include/features.h:424,
from /usr/include/arm-linux-gnueabihf/sys/ioctl.h:21,
from KRPiCanDriver.cpp:24:
/usr/include/arm-linux-gnueabihf/bits/socket.h:282:45: error: flexible array member 'cmsghdr::__cmsg_data' not at end of 'struct timehdr'
__extension__ unsigned char __cmsg_data __flexarr; /* Ancillary data. */
Habe das arm-Build File noch angepasst, aber auch das hat nicht geholfen (64-bit und fPic Flag entfernt, damit gleich Aufruf aus älterer can_progs Version)
Hat das jemand schon erfolgreich unter raspbian buster gebaut?
EDIT: mit dem alten so-File und einem manuellen Link von 5.28 auf libperl.5.24.1.so (damit war die so gelinkt) geht es noch, nur der state vom Modul wird mit ??? Fragezeichen angezeigt. Neu bauen geht aktuell aber nicht mehr
Hallo Zusammen,
vielen Dank für die grandiose Arbeit von euch Allen.
Ich habe euren Anleitungen folgen können und alles installiert. Elster-Modul läuft und empfängt FHEM Readings. Allerdings scheinen die Zuordnungen nicht immer richtig zu sein.
Leider schaffe ich es nicht, die ComfortSoft zum laufen zu bringen. Daher möchte ich euch bitten, das Scanfile im Anhang zu bearbeiten, damit ich es in die ElsterTable einbinden kann.
Anlage: WPM3, Hydraulikmodul THM eco, Wärmepumpe Tecalor TTL 15 A(C)S (ohne Kühlung).
Danke im Voraus
Liebe Grüsse
Frank
Hallo Ratzefummel
Leider unterstützt ComfortSoft den WPM3 nicht mehr. Aber du kannst mit "special/log_to_scan" aus deinem log-File ein File im "scan_data"-Format erzeugen (siehe Anhang). Was dabei auffällt, sind die vielen CAN-Ids:
100
180
379
380
480
500
579
601
680
700
Da die 680 auch vorkommt, solltest du sie zum Sannen nicht verwenden!
Die fhem-include-Datei kannst du mit "fhem/LogAnalyze" aus dem Scan erzeugen (siehe Anhang).
Viele Grüsse
Jürg
Hallo gbr,
ich bin zwar neu hier, kann dir aber helfen, da ich die gleichen Probleme hatte!
Das kommt wohl von der neuen Raspbian-Version.
Die Lösung ist, in der Datei KSocketCanDriver.cpp die Struktur timehdr umzusortieren. (Zeile 109).
Gruß
Christian
Hallo Jürg,
nach Anfagsproblemen, konnte ich mittlerweile deine Tools (vom 8.2.19) kompilieren, habe scans erstellt, konvertiert und jetzt ein lauffähiges FHEM-Modul.
Vielen Dank für die intensiven Vorarbeiten!
Nach dem Durchschauen der gets und sets in FHEM ist mir aufgefallen, das das Tool LogAnalize die IDs rausgelassen hat, die im Scan einen Inhalt von 0 geliefert hatten.
Etwas zur Vorgeschichte ist in HT-Dialog-Forum nachzulesen:
http://www.htdialog.de/Forum/t/169910/ComfortSoft-mit-CAN-BUS-Anbindung-Raspberry-Pi-verwenden?page=8 (http://www.htdialog.de/Forum/t/169910/ComfortSoft-mit-CAN-BUS-Anbindung-Raspberry-Pi-verwenden?page=8)
Ich könnte da jetzt per Hand Einträge ergänzen, jedoch habe ich Bedenken, da ich die jeweiligen Datentypen nicht kenne.
Ich habe eine LWZ 304 Trend.
Du schreibst, dass die Software Comfortsoft nicht mehr mit dem WPM3 zurechtkommt.
Wie finde ich heraus, welcher bei mir verbaut ist?
Gruß
Christian
Hallo Zusammen,
ich habe eine Stiebel Eltron LWZ 304 SOL (Baujahr 2018) und würde für diese gerne mit Hilfe von Jürgs Tools einen KNX Wrapper bauen. Leider bin ich nach Lektüre von diesem Thread und der Readme noch nicht ganz sicher, wie ich die Tools dafür verwenden muss. Als ersten Schritt habe ich einen Raspberry Pi 3 mit dem CAN Modul von IndustrialBerry bestückt und an die Heizung angeschlossen. Das funktioniert soweit, über candump kann ich Nachrichten mitsniffen und auch über das Tool can_logger kann ich Daten aufzeichnen. Die initiale Abfrage mit can_send zum scannen der IDs läuft bei mir allerdings ins Leere und ergibt keine gefundenen Werte.
./can_scan can0 680 total
elster-kromschroeder can-bus address scanner and test utility
copyright (c) 2014 Jürg Müller, CH-5524
scan on CAN-id: 680
list of valid can id's:
Meine Vermutung ist, dass dies mit einer ID zusammenhängt, die wohl etwas untypisch ist im Vergleich zu dem was ich hier sonst so gelesen habe (ID 6a1, die ich mit Hilfe des can_logger herausgefunden habe).
Die Abfrage der Minuten liefert leider kein Ergebnis:
./can_scan can0 700 180.0126
elster-kromschroeder can-bus address scanner and test utility
copyright (c) 2014 Jürg Müller, CH-5524
no value read
Wisst ihr, wie ich weiter vorgehen kann, um meine Heizung zum Antworten zu bewegen? Muss ich mich zum Beispiel initial als "Bedienteil" identifizieren?
Viele Grüße
labe
Hallo labe,
ich war vor einem Monat in der gleichen Situation mit meiner LWZ304 Trend.
Die Tools von Jürg müssen ein wenig angepasst werden, weil die ID 680 nicht mehr funktioniert.
Wenn du ein aktuelles Raspbian (Buster) hast, musst du noch ein wenig mehr anpassen, damit die Tools wieder compilieren.
Meine ersten Versuche habe ich mit Informationen aus dem Haustechnik-Dialog-Forum gemacht.
Hier habe ich auch eine Zusammenfassung meiner Schritte gepostet.
http://www.htdialog.de/Forum/t/169910/ComfortSoft-mit-CAN-BUS-Anbindung-Raspberry-Pi-verwenden?page=8 (http://www.htdialog.de/Forum/t/169910/ComfortSoft-mit-CAN-BUS-Anbindung-Raspberry-Pi-verwenden?page=8)
Schau dir erst mal den letzten Eintrag an und dann ggf weiter zurück.
Gruß
Christian
Zitat von: gbr am 04 Oktober 2019, 17:36:02
Habe aktuell Probleme das Perl-Modul zu bauen (mit Perl lib 5.28.1 von raspbian buster, Raspi 3, can_progs Feb 2019, CORE_PATH angepasst)
Das so. File wird nicht gebaut, zwischendrin gibt es einen Error beim Kompilieren:
In file included from /usr/include/features.h:424,
from /usr/include/arm-linux-gnueabihf/sys/ioctl.h:21,
from KRPiCanDriver.cpp:24:
/usr/include/arm-linux-gnueabihf/bits/socket.h:282:45: error: flexible array member 'cmsghdr::__cmsg_data' not at end of 'struct timehdr'
__extension__ unsigned char __cmsg_data __flexarr; /* Ancillary data. */
Habe das arm-Build File noch angepasst, aber auch das hat nicht geholfen (64-bit und fPic Flag entfernt, damit gleich Aufruf aus älterer can_progs Version)
Hat das jemand schon erfolgreich unter raspbian buster gebaut?
EDIT: mit dem alten so-File und einem manuellen Link von 5.28 auf libperl.5.24.1.so (damit war die so gelinkt) geht es noch, nur der state vom Modul wird mit ??? Fragezeichen angezeigt. Neu bauen geht aktuell aber nicht mehr
hallo, wie hast du das mit dem "manuellen Link" hingekriegt? ich weiss nicht genau, wo ich das machen muss. Danke. Lg C
Jetzt hier noch die aktuelle Lösung mit neuestem canprogs.zip:
can_elster_perl.arm ausführbar machen: chmod +x can_elster_perl.arm
Anpassung von can_elster_perl.arm
CORE_PATH="/usr/lib/arm-linux-gnueabihf/perl/5.28/CORE"
Und Anpassung von KSocketCanDriver.cpp
Zeile 107 und 108 tauschen
das ganze bauen: ./can_elster_perl.arm
Danach dann die pm, so und die 50_elster.pm aus dem fhem ordner nach opt/fhem/FHEM kopieren
Zitat von: gbr am 09 Februar 2020, 13:51:10
Jetzt hier noch die aktuelle Lösung mit neuestem canprogs.zip:
can_elster_perl.arm ausführbar machen: chmod +x can_elster_perl.arm
Anpassung von can_elster_perl.arm
CORE_PATH="/usr/lib/arm-linux-gnueabihf/perl/5.28/CORE"
Und Anpassung von KSocketCanDriver.cpp
Zeile 107 und 108 tauschen
das ganze bauen: ./can_elster_perl.arm
Danach dann die pm, so und die 50_elster.pm aus dem fhem ordner nach opt/fhem/FHEM kopieren
als Ergänzung: Auf http://juerg5524.ch/list_data.php gibts die neuste can_progs (version 20200209), die auch für Buster gehen. Dann, wie von gbr beschrieben kompilieren und verschieben. Ich musste die Anpassung vonKSocketCanDriver.cpp nicht machen, wieso auch immer.
Danke Jürg für die neue can_progs Version.
Hallo
Suche ein PICAN Modul das Galvanisch getrennt ist.
Habe nur ein Dual Modul gefunden:
https://buyzero.de/products/pican2-duo-isolated (https://buyzero.de/products/pican2-duo-isolated)
Finde kein Fertiges Modul so wie es Juerg5524 beschreibt.
Hallo zusammen
Ich habe es tatsächlich geschafft mit der super Arbeit von Jürg und diesem Thread meine WPL mittels einem Pican anzubinden. Fhem dient hier nur als Bridge, denn ich nutze ioBroker auf einem weiteren Pi. Es läuft alles soweit :) Fhem kann die Werte auslesen und ioBroker bekommt sie mittels Telnet weitergereicht. Einzig eine Sache funktioniert nicht - ich kann das Aktualisieren der Werte jeweils nur manuell per get anstoßen (siehe Screenshot). Dann wird der jeweilige Wert auch sofort aktualisiert.
Wie bekomme ich es denn hin, dass Fhem diese bei Änderung automatisch erhält oder (als Workaround?) in einem bestimmten Interval abruft?
Bonusfrage: Warum sind diese Zeitstempel eigentlich rot? ;)
Gruß
Frank
Hallo Frank,
ich bin ebenfalls über das Problem gestolpert, dass die Readings nicht automatisch aktualisiert werden. Ich habe etwas Entwicklungserfahrung und habe mir mal die 50_Elster.pm angesehen. Dort gibt es eine sub Elster_read() die das über ein singleReadingUpdate behandeln sollte. Hier habe ich einen Fehler entdeckt und korrigiert
sub Elster_Read($)
{
my ($hash) = @_;
my @cList = keys %Elster_gets;
if ($sniffed_set != 1)
{
return;
}
my $buf = elster_perl::getsniffedvalue();
while (length($buf) > 10)
{
my @arr = split /\s+/, $buf;
my $recv_id = shift @arr;
my $elster_idx = shift @arr;
my $value = join(" ", @arr);
#printf "elster_read_: $recv_id $elster_idx $value\n";
$buf = elster_perl::getsniffedvalue();
for my $key (@cList)
{
my $el = $Elster_gets{$key};
if ($el)
{
#printf "id: $el->{ID} $el->{EIdx}\n";
if ($el->{ID} == hex($recv_id) &&
$el->{EIdx} == hex($elster_idx))
{
#printf "single update: $key $value\n";
readingsSingleUpdate($hash, "$key", "$value", 1);
last;
}
}
}
$buf = elster_perl::getsniffedvalue();
}
return;
}
Im If Statement werden leider hexWerte mit dezimal Werten verglichen und dadurch wird die readingsSingleUpdate Funktion nie aufgerufen.
Ich habe es mal angepasst und noch einen Check hinzugefügt, da bei mir die PUFFERTEMP_UNTEN1 ständig über den CAN Bus geht und mit das reading dauernd aktualisiert werden würde, obwohl der Value gleich ist.
sub Elster_Read($)
{
my ($hash) = @_;
my @cList = keys %Elster_gets;
my $myTime = localtime();
if ($sniffed_set != 1)
{
return;
}
my $buf = elster_perl::getsniffedvalue();
while (length($buf) > 10)
{
#Log3 ($buf,3, "Buffer length > 10");
my @arr = split /\s+/, $buf;
my $recv_id = shift @arr;
my $elster_idx = shift @arr;
my $value = join(" ", @arr);
my $newValue = 'id:' . $recv_id . ' idx:' . $elster_idx . ' val:' . $value;
#printf "elster_read_: id: $recv_id $hex_recv_id index: $elster_idx $hex_elster_idx value: $value\n";
#printf "$oldValue \n";
$buf = elster_perl::getsniffedvalue();
for my $key (@cList)
{
my $el = $Elster_gets{$key};
if ($el)
{
#printf "----------------> id: $el->{ID} hex($el->{ID}) $el->{EIdx} \n";
if (hex($el->{ID}) == hex($recv_id) &&
hex($el->{EIdx}) == hex($elster_idx) &&
$oldValue ne $newValue )
{
#print strftime "%Y-%m-%d %H:%M:%S", localtime time;
printf "$myTime single update: $key $value\n";
$oldValue = $newValue;
readingsSingleUpdate($hash, "$key", "$value", 1);
last;
}
}
}
$buf = elster_perl::getsniffedvalue();
}
return;
}
Weiter oben habe ich noch eine globale Variable angelegt my $oldValue ='empty';
my $sniff = 0;
my $oldValue = 'empty';
#####################################################
# Elster_Initialize($) #
# Parameter hash #
#####################################################
sub Elster_Initialize($)
Einfach die /opt/fhem/FHEM/50_Elster.pm mit meiner Version überschreiben, dann sollten die Readings automatisch aktualisiert werden, sobald sie auf dem CAN-Bus erscheinen
Gruß Frank
Hallo Namensvetter :)
Wow sehr geil - vielen Dank! Ich habe es bei mir (vorerst) mit einem regelmäßigen Poll per
FHEM Update Command:
define WPL_UPDATE at +*00:00:10
get WPL HEIZKURVE;;
get WPL HZK_PUMPE;;
get WPL LAUFZEIT;;
get WPL PROGRAMMSCHALTER;;
get WPL SOLARBETRIEB;;
get WPL SOMMERBETRIEB;;
get WPL STATUS_HEIZKREIS;;
get WPL STATUS_KESSEL;;
get WPL STATUS_SPEICHER;;
get WPL STATUS_WP_PUMPEN;;
get WPL STATUS_WP;;
get WPL TEMP_AUSSEN;;
get WPL TEMP_HILFSKESSEL_SOLL;;
get WPL TEMP_KESSEL_SOLL;;
get WPL TEMP_MAX_WW;;
get WPL TEMP_PUFFER_SOLL;;
get WPL TEMP_RAUM_SOLL;;
get WPL TEMP_RAUM_SOLL_NACHT;;
get WPL TEMP_RUECKLAUF_IST;;
get WPL TEMP_SOLAR;;
get WPL TEMP_SPEICHER_UNTEN;;
get WPL TEMP_VORLAUF_IST;;
get WPL TEMP_WARMWASSER_IST;;
get WPL TEMP_WARMWASSER_SOLL;;
get WPL TEMP_WARMWASSER_SOLL_NACHT;;
"gelöst". Aber das hat sich schon bei der Umsetzung nicht richtig angefühlt ;) Aber es funktioniert immerhin...
Deine Lösung probiere ich mal aus - das wäre perfekt :)
Gruß Frank
Hallo,
ich habe die Feiertage mal genutzt um meinen WPM4 weitere Daten zu entlocken. Die ElsterTablebe.inc habe ich um neue Adressen erweitert.
Nun kann ich die gesamten Prozessdaten der Wärmepumpe sehen
- WP_Volumenstrom
- Lufteintrittstemperatur
- Verdichter Frequenz
- Verdampfertemperatur
- Fortlufttemperratur
- WP Verdichter Starts
- ...
Dabei wurde ersichtlich, das der WPM4 an die CANID 100 die Anfrage sendet und dann die CAN ID 514 antwortet. Eine Anfrage auf der Kommandozeile mit ./can_scan can0 680 514.xxx erhielt ich ebenfalls meine Ergebnisse. Die ElsterTable.inc habe ich auch um die richtigen Datentypen erweitert.
Gruß Frank
Ich habe weitere Werte rechnerisch ermittelt:
Wärmstrom über den WP_WASSERVOLUMENSTOM l/min * 4,18/60 * (VLtemp -RLtemp)
WAERMELEISTUNG {
sprintf("%.2f",(ReadingsVal($NAME,"WP_WASSERVOLUMENSTROM",0) * (4.18 / 60) * (ReadingsVal($NAME,"WPVORLAUFIST",0) -
ReadingsVal($NAME,"RUECKLAUFISTTEMP_WP_IWS",0)))*1)
}
damit kann man in den Diagramm sehr schön die WärmeLeistung ablesen und mit der aufgenommen elektrischen Energie vergleichen. Ich greife die Leistung direkt vom Drehstromzähler ab und kann somit den realen COP errechnen.
COP_real = WAERMELEISTUNG / (aktuelle Leistung Drehstromzähler)
Gruß Frank
Hallo zusammen,
ich bin recht frisch in der FHEM Welt, was Modulprogrammierung und Perl angeht. Ich habe aber schon länger die Programme von Jürg (
can_prog) bei mir im Einsatz
und wollte dies nun auch in FHEM einbinden.
Mein Aufbau: Ich habe eine Stiebel Eltron WPL18 als Außengerät, WPM2 mit einem Heizkreis. Ein RaspberryPi3 + PiCAN2 dient dabei als Schnittstelle. Hier ist auch FHEM installiert.
Da ich sporadisch Probleme mit der Anlage habe und nicht ständig in den Keller laufen wollte, habe ich mit den
can_prog und der ComfortSoft
die Möglichkeit Fehler auszulesen und Daten aufzuzeichnen.
FHEM läuft auch auf dem RaspPi und so kam auch das
50_Elster.pm Modul zur Installation. Die Änderungen und Anpassungen in diesem Forum wurden eingepflegt,
das Modul funktioniert... Mir ist aber aufgefallen das die Systemlast am RaspPi deutlich angestiegen ist.
Ich habe mich auf die Suche gegeben und das Modul
50_Elster.pm grundliegend geändert.
Das würde ich gerne hier vorstellen.
Vorher:Das Modul registriert sich in der
$readyfnlist und somit wird von FHEM die
Elster_Ready($) aufgerufen. Diese Funktion soll nun die (fehlende) Verbindung aufbauen.
Da die Verbindung bereits in der
Elster_Define($) aufgebaut wurde und die
Elster_Ready($) nicht richtig beendet wird, bleibt es in dieser schleife...
Zusätzlich wird bei jeden durchlauf die
Elster_Read($) aufgerufen, welche Daten vom C++ Wrapper empfängt und in Readings schreibt.
Bei vielen Readings geht das ordentlich auf die CPU. Interhopper hat dem bereits entgegengewirkt, indem nur Readings geschrieben werden,
die sich auch geändert haben. Das entlastet das System, da nicht mehr so viele events gefeuert werden.
Beschreibung (Nachher):Das Modul wurde nun wie folgt angepasst, so dass es jetzt stabiler und Ressourcenschonender laufen sollte.
Das Modul verwendet nun einen Timer, welcher in regelmäßigen Abständen die Daten abholt. Der Timer lässt sich bei der Definition übergeben.
Define Heizung Elster can0 [Timer]
Dieser wird in Sekunden angegeben und ist optional. Wird kein Wert übergeben, so wird 10s als default angenommen. Das lässt sich unter DEF später auch noch ändern.
Nach dem hinzufügen versucht das Modul über den C++ Wrapper eine Verbindung aufzubauen. Gelingt dies, wird
STATE=connected gesetzt und der Aktualisierungtimer wird gestartet.
Meldet das C++ Wrapper einen Fehler, wird nach 30s versucht die Verbindung erneuert aufzubauen.
STAT wird solange auf
disconnected gesetzt.
Steht die Verbindung, wird die Elster_Read($) (und noch weitere Funktionen) nach Ablauf des Timers aufgerufen und die Daten verarbeitet. Die Daten kommen so rein wie diese auf dem Bus auftauchen.
Wenn sehr viele Daten kommen, steigt auch hier die CPU last an, da ich den code von Interhopper wieder entfernt habe. Besser ist es, wenn wir das Attribut
event-on-change-reading [.*]
setzen. Das hat den gleichen Effekt. Der Benutzer hat aber mehr Kontrolle...
Attribute:Es sind auch Attribute hinzugekommen.
autoAddReadings [on:off]
Wenn nicht vorhanden oder auf [on] gestellt, werden alle Readings die in der Liste Elster_gets stehen, automatisch hinzugefügt
oder aktualisiert sobald diese auf dem Bus auftauchen. Das könnten auch mal 300 Readings sein...
Möchte man das nicht, so das Attribut auf [off] stellen.
autoPullReadings [Reading1 Reading2 ...]
erwartet eine mit Leerzeichen getrennte Liste von Readings. Diese werden bei jedem durchlauf angefordert [get] und aktualisiert.
Hier sind (noch) keine Redex ausdrücke erlaubt! Die Readings müssen auch in der Elster_gets enthalten sein!
Weitere Funktionen
GET [readingname]
Über get [readingname] können Werte angefordert werden. Es wird automatisch das Reading angelegt oder aktualisiert.
Sind diese einmal in der Readings Liste, werden diese aktualisiert, wenn neue daten empfangen werden. Damit lässt das Modul
sehr leicht auf die eigenen Bedürfnisse anpassen, ohne hunderte uninteressanter Readings im Device zu haben.
GET _Fehlerliste
Fehler werden abgerufen und formatiert im Reading 1_FehlerListe abgelegt.
GET _Leistung
Leistungsdaten, die der WPM bereitstellt, werden abgerufen und in Readings abgelegt.
GET _Systemzeit
Datum und Uhrzeit des WPM.
SET RemoveReadingst
Durch ein SET wird ein vorhandenes Reading entfernt. Das gleiche Ergebnis erzielt man durch die FHEM Funktion deletereading[modul][reading].
Das ist der aktuelle Stand.
ToDo´s:
Das Modul soweit entwickeln, das es keine ,,händische" eingriffe mehr in die 50_Elster.pm notwendig sind und alles über Parameter erfolgen kann.
Das Modul soweit stabil bekommen, was die verschiedenen Schnittstellen angeht. Ich konnte das nur an der PiCAN2 Testen.
Noch die eine oder andere Funktion einbauen; zb. Formatierte Ausgabe der Verbrauchszahlen aus dem WPM2.
Modul Dokumentation erstellen
Bei mir kann ich zurzeit keine Werte über den CAN Bus setzen, auch nicht über ComfortSoft.
Früher ging das.
Ich weiß noch nicht, woran das liegt. So ist die SET Funktion im Modul nicht getestet!!!
Ich hoffe das sich ein paar Leute finden, die das Modul aufspielen und Testen könnten. Freu mich auf Verbesserungsvorschläge oder Feedback.
Bitte beachtet das die Anleitungen die bei den can_progs beiliegen immer noch gültig sind und eventuell Anpassungen an dem Modul erfordern.
!!! Die Verwendung geschieht auf eigene Gefahr !!!Gruß Niko.
Update
09.02.2021 : Fehler beseitigt, dass das Attribut autoAddReadings nicht funktioniert hat.
17.02.2021 : Zwei weitere GET´s (_Leistung, _Systemzeit) hinzugefügt.
Hallo Araktos,
ich habe Deine neue 50_Elster.pm seit gestern Abend im Einsatz.
Das Modul funktioniert bisher einwandfrei und macht genau das, was Du beschrieben hast. GET-Werte werden dem Timer entsprechend abgefragt und neue Readings erscheinen, wenn man es so möchte. Die Fehler-Liste ist super übersichtlich und nützlich. Ich werde weiter ausgiebig testen.
Anregung: Nicht jeder Wert muss unbedingt im Timer-Takt abgefragt werden. Beim Fehlerspeicher z.B. würde mir ein tägliches Intervall genügen. Vielleicht könnte man dem autoPullReadings Attribut neben dem Namen noch ein Intervall mitgeben. Ohne Intervall in Attribut gilt der Timer des DEFINE. Z.B. attr autoPullReadings Name1:60 Name2 Name3:360
Es würde reichen, wenn die Fehlerliste nur die Fehler anzeigt und nicht alle leeren Slots.
Klasse Arbeit. Hut ab!!! Ich bin begeistert.
Danke
Gruß Frank
Hallo Ratzefummel,
vielen Dank für das Feedback.
Ich habe noch ein wenig weiter an dem Modul geschraubt und 2 weitere Funktionen hinzugefügt. Siehe oben in meinem Post.
Zu deinen Anregungen:
Die Funktionen _Fehlerliste, _Leistung, _Systemzeit sind von dem Intervall nicht betroffen. Allein bei der _Fehlerliste schon über 100 Werte gelesen werden, habe ich darauf verzichtet. Mein Gedanke war die Fehler über ein at einmal am Tag abzurufen, oder "händisch" im Device.
Ich habe auch entfernt, das leere Zeilen angezeigt werden.
Das gleiche gilt auch für die _Systemzeit und _Leistungsdaten.
Verschiedene Intervalle bei den verschiedenen Readings ist mit deutlich mehr Aufwand verbunden. Ich müsste für theoretisch unendlich viele Readings
Timer vorsehen und diese verwalten...
Wenn es dazu bedarf gibt, kann ich mich gerne damit beschäftigen :)
Als Workaroung verwende ich FHEM Funktionen, die im Modul schon vorhanden sind:
event-on-change-reading .* -- um weniger Events zu erzeugen,
event-min-interval [reading:int] -- hab ich selber nicht, soll aber das machen, was du oben gemeint hats,
DBLogExklusive .* / DBLogInclusive [reading:int], [reading:int], .. -- für Readings die ich in eine Datenbank logge.
Ich bin auch immer für Vorschläge offen und lasse mich auch gerne umstimmen ;)
Ich habe auch in der ElsterTable.inc einige Fehler gefunden und korrigiert. Ich hänge diese Datei ebenfalls oben bei.
Da bin ich mir noch nicht ganz sicher, ob ich diese Dateien auch zum Download anbieten darf. Wenn du die dies Datei verwenden möchtest,
muss diese in das can_progs kopiert werden und dann alle programme neu kompiliert werden.
Auch das mit dem Scannen und Analysieren, muss erneuert gemacht werden...
Gruß Niko.
Hallo,
ich bin neu hier und stoße wegen meiner Tecalor TSBC 200, TTL 15 ACS, WPM4 und FEK zu Euch. Dazu möchte ich mit Euch meine ersten Eindrücke zum CAN-Setup teilen. Fragen werden sicherlich in Zukunft von mir noch kommen.
Den CAN Bus zapfe ich z.Zt. direkt am FEK ab und nutze dazu einen Raspberry 4B mit PiCAN2 Erweiterung und Raspberry Pi OS Lite. Aussagen im Netz (https://forum-raspberrypi.de/forum/thread/46135-pican2-can-bus-auf-raspberry-pi-4/), dass PiCAN2 mit einem Raspberry 4 nicht funktioniert, sind falsch.
Linux raspberrypi 5.10.17-v7l+ #1403 SMP Mon Feb 22 11:33:35 GMT 2021 armv7l GNU/Linux
Unter Hinzufügen von
dtparam=spi=off
dtoverlay=mcp2515-can0,oscillator=16000000,interrupt=25
dtoverlay=spi0-2cs
nach
/boot/config.txt
wird der PiCAN2 erkannt und mit dem Anlegen des can0 interfaces in
/etc/network/interfaces
mit folgendem Inhalt
# interfaces(5) file used by ifup(8) and ifdown(8)
# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'
# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d
# CAN-Bus
auto can0
iface can0 can static
bitrate 50000
wird das can0 interface bei jedem Boot automatisch aktiviert.
Ich bitte zu beachten, dass die hier im Forum kolportierte 20000 bit/s Baudrate bei mir nicht funktioniert und ich stattdessen 50000 bit/s Baudrate nutze.Ein erster Scan mit CAN ID 780 brachte folgendes magere Ergebnis:
pi@raspberrypi:~/can_progs $ ./can_scan can0 780
elster-kromschroeder can-bus address scanner and test utility
copyright (c) 2014 Jürg Müller, CH-5524
list of valid can id's:
100 (8000 = 502-02-)
401 (8000 = 501-02-)
500 (4604 = 70-04)
Das Nutzen der Sender CAN ID 680, welche ausdrücklich nicht für WPM3 empfohlen wird, war da ergiebiger:pi@raspberrypi:~/can_progs $ ./can_scan can0 680
elster-kromschroeder can-bus address scanner and test utility
copyright (c) 2014 Jürg Müller, CH-5524
list of valid can id's:
000 (8000 = not available)
100 (8000 = 502-02-)
180 (8000 = 449-04-)
200 (8000 = 449-04-)
201 (8000 = 449-04-)
202 (8000 = 449-04-)
301 (8000 = 449-04-)
302 (8000 = not available)
303 (8000 = not available)
304 (8000 = 449-04-)
401 (8000 = 501-02-)
480 (8000 = 449-04-)
500 (8000 = 446-04-)
601 (8000 = 449-04-)
602 (8000 = not available)
603 (8000 = not available)
604 (8000 = 449-04-)
605 (8000 = 449-04-)
606 (8000 = 449-04-)
Ein ausführlichen Scan habe ich mit scan.txt angehängt.
Die ersten Fragestellungen, die mich nun umtreiben sind:
- wie kann ich meine Zirkulationspumpe über CAN schalten
- zu welchen Geräten gehören die ermittelten CAN IDs
Ich freue mich über Hilfestellung, ansonsten schaue ich mal wie weit ich selber komme und berichte dann hier.
Gruß
Hallo N(Zgazucs,
ich habe mir dein scan mal in den Simulator geladen, aber seltsamerweise kann ComfortSoft keine Geräte finden.
Könnest du bei Gelegenheit aus ein scan mit der ID 780 machen. Vielleicht ist da was anders.
Ich habe im Code noch folgendes gefunden was eventuell helfen könnte:
...
my $direkt = "000";
my $kessel = "180";
my $bedien_1 = "301";
my $bedien_2 = "302";
my $manager = "480";
my $heiz = "500";
my $mischer_1 = "601";
my $mischer_2 = "602";
...
In der Elster Tabelle findet sich diesen Kommentar:
{ "SOFTWARE_VERSION" , 0x019a, 0},
{ "SPEICHER_ZEIT_STATUS" , 0x019b, 0},
// HK1 Pumpe: 0x0001
// HK2 Punpe: 0x0002
// Mischer auf: 0x0004
// Mischer zu: 0x0008
// Quellenpumpe: 0x0010
// Solarpumpe: 0x0020
// 2. WE: 0x0040
// Zirkulationspumpe: 0x0080
{ "INFO_TYP" , 0x019c, 0},
{ "MISCHERPARAMETER_ZU" , 0x019d, 0},
{ "WW_BETRIEB" , 0x019e, 0},
Der Kommentar bezieht sich auf das Register 0x019c.
Wenn du die Zirkulationspumpe über das Panel ein und ausschalten kannst, würde ich das tun und diesen Wert beobachten.
Wenn es der richtige ist, sollte er sich ändern.
Danach kannst du versuchen über CAN den Wert zu setzen.
Gruß Niko.
Hi Niko,
danke für Dein erstes Feedback. Im Anhang findest Du die Scans mit der CAN ID 700 bzw. 780. Nach meinem ersten Eindruck stellen diese keine weiteren Informationen, über den Scan mit der CAN ID 680 heraus, bereit.
Soweit ich den Austausch hier im Thread und auch in anderen Foren verstanden habe, kann ComfortSoft mit WPM3 und neuer nicht umgehen.
Dein Vorschlag
{"INFO_TYP", 0x019c, 0}
zu nutzen, scheint vielversprechend zu sein. Im Moment resultiert das bei mir in 0x81 und könnte dazu passen, dass sowohl die HK1- und Zirkulationspumpe bei Abfrage eingeschaltet waren.
Allerdings um die Zirkulationspumpe damit an- oder auszuschalten, ist das vermutlich nicht der richtige Weg. "INFO TYP" lässt eher darauf schließen, dass man hier abfragen und nicht setzen/schreiben kann. Würde auch wenig Sinn machen, da man sonst unbeabsichtigt beim Schalten der Zirkulationspumpe die anderen Pumpenzustände überschreibt. Hier muss ich noch auf die Suche gehen, welcher Index der Richtige sein könnte. Das muss ich vermutlich mitsniffen, wenn ich am WPM die Pumpe schalte.
Ich bin weiterhin offen für weitere Vorschläge.
Gruß
Hallo N(Zgazucs,
was mir gerade noch durch den Kopf ging:
Du hast schon recht der Index "INFO..." deutet auch eine Information hin :)
Andersrum, der Ausgang für die Zirkulationspumpe ist auf dem WPM. Würde ich das WPM Designen, würde ich den direkten Ausgang nicht über CAN schalten lassen...
Der Ausgang wird durch das Programm im WPM geschaltet. Die Uhrzeiten sollten aber über CAN gesetzt werden können.
Was ist wen du die Zeiten setzt und der Rest macht der WPM3?
Gruß Niko.
Exakt Niko,
das ist auch das was mir vorschwebt, nur ein bisschen angepasst. Ich programmiere die Zeiten der Zirkulationspumpe durchgängig 24 Stunden am Tag und schalte dann entsprechend der WPM Einstellungen
Zirkulationspumpe Aus
bzw.
Zirkulationspumpe Programm
Ich werde weiter berichten, sobald ich mal Zeit habe die Befehle am Raspy mitzuschneiden, während ich die Befehle am WPM auslöse.
Ein weiteres Problem ist bei mir auch noch das Auslesen der relativen Luftfeuchte und Raumtemperatur meiner Fernbedienung FET. Da weiß ich noch nicht, wie ich am Besten vorgehe :-(
Gruß
So langsam laufe ich mich warm.
Wem es hilft, die relative Luftfeuchte und die Raumtemperatur des FEKs bekommt man über
{ "RAUMTEMPERATUR_FEK" , 0x4ec7, et_dec_val},
{ "LUFTFEUCHTE_FEK" , 0x4ec8, et_dec_val},
Das FEK hat bei mir die CAN ID 401.
./can_scan can0 680 401.4ec7
elster-kromschroeder can-bus address scanner and test utility
copyright (c) 2014 Jürg Müller, CH-5524
value: 00d2 (RAUMTEMPERATUR_FEK 21.0)
./can_scan can0 680 401.4ec8
elster-kromschroeder can-bus address scanner and test utility
copyright (c) 2014 Jürg Müller, CH-5524
value: 021e (LUFTFEUCHTE_FEK 54.2)
Hallo zusammen,
auch bei mir klappt alles wunderbar , siehe unten :)
Schreiben (SET) klappt auch bisher getestet nur RAUMSOLL.
Lässt sich eigentlich den SG Ready Modus (PV Anlage Überschuss nutzen) hier auch via CAN-BUS ansteuern?
Falls ja hat es jemanden bereits probiert und welches Wert sollte hierfür aktiviert werden?
Hallo zusammen.
Ich bin neu hier im Forum und hab mir ein Projekt vorgenommen, meine Stiebel Eltron WPF 07 in die Haussteuerung zu integrieren.
Dazu bin ich sehr schnell auf die Seite juerg5524.ch gestoßen und letztendlich in diesem Forum gelandet.
Mein Vorhaben ist, einen ESP32 Microcontroller mit einem MCP2515 auszustatten.
Dieser wird vom fertigen ESP-Home Projekt (https://esphome.io/components/canbus.html) supportet.
Und das ESP-Home Projekt ist wiederum ausgezeichnet im Home-Assistant (https://www.home-assistant.io/) integriert.
Mein Home-Assistant erlaubt mir, meine KNX-Haussteuerung zu regeln und z.B. Heizungsstellwerte zu kontrollieren oder Temperatur-Regler zu steuern.
Über ESP-Home habe ich auch Bodentemperaturfühler eingebunden und die Daten werden via Home Assistant an den KNX Heizungsregler gesendet.
Die wesentliche Arbeit für mich ist also zunächst mich gründlich Einzulesen, den ESP32 an den CAN-Bus der Heizung zu hängen und hoffentlich Daten über ESP-Home zu scannen und an den HomeAssistant zu übermitteln. Vorteil an der ganzen Sache: Die Anzeige der Daten, die ich von der Heizung erhalte übernimmt der Home Assistant in der fertigen Webanwendung.
Außerdem ist der ESP32 preislich unschlagbar günstig.
Auf der Seite von Jürg habe ich ein Paket mit dem Beinamen ESP32 gefunden aber leider noch keine näheren Infos dazu entdeckt.
Wie weit ist denn das Projekt schon fortgeschritten? Wo gibt es nähere Infos dazu? Oder hat schon jemand etwas ähnliches umgesetzt?
Hallo robob,
ich nutze ESPHOME mit einem ESP8266 und lese damit seit einigen Tagen die Daten aus meiner Stiebel Eltron Wärmepumpensteuerung aus und visualisiere sie in Home Assistant.
Das funktioniert mittlerweile gut.
Wir scheinen uns sehr gut zu ergänzen, denn als nächsten Schritt möchte ich gerne einen KNX Fussbodenheizungsregler einsetzen und habe auch schon so wie Du überlegt, einen ESPHome Temperatursensor zu verwenden, denn der ist ja deutlich günstiger als die KNX Lösungen.
Ich poste hier einfach mal meine Esphome Configuration, welche noch recht chaotisch ist, denn als Python Programmierer kenne ich eigentlich keinen Switch Case ;):
globals:
- id: el_aufnahmeleistung_ww_tag_wh_float
type: float
restore_value: yes
- id: el_aufnahmeleistung_ww_tag_wh_flag
type: bool
restore_value: yes
- id: el_aufnahmeleistung_ww_tag_kwh
type: float
restore_value: yes
- id: el_aufnahmeleistung_ww_tag_kwh_flag
type: bool
restore_value: yes
- id: el_aufnahmeleistung_heiz_tag_wh_float
type: float
restore_value: yes
- id: el_aufnahmeleistung_heiz_tag_wh_flag
type: bool
restore_value: yes
- id: el_aufnahmeleistung_heiz_tag_kwh
type: float
restore_value: yes
- id: el_aufnahmeleistung_heiz_tag_kwh_flag
type: bool
restore_value: yes
- id: el_aufnahmeleistung_ww_total_kWh_float
type: float
restore_value: yes
- id: el_aufnahmeleistung_ww_total_kWh_flag
type: bool
restore_value: yes
- id: el_aufnahmeleistung_ww_total_mWh
type: float
restore_value: yes
- id: el_aufnahmeleistung_ww_total_mWh_flag
type: bool
restore_value: yes
- id: el_aufnahmeleistung_heiz_total_kWh_float
type: float
restore_value: yes
- id: el_aufnahmeleistung_heiz_total_kWh_flag
type: bool
restore_value: yes
- id: el_aufnahmeleistung_heiz_total_mWh
type: float
restore_value: yes
- id: el_aufnahmeleistung_heiz_total_mWh_flag
type: bool
restore_value: yes
sensor:
- platform: template
name: "Außentemperatur"
id: temperature_kitchen
unit_of_measurement: "°C"
icon: "mdi:water-percent"
device_class: "temperature"
state_class: "measurement"
accuracy_decimals: 1
- platform: template
name: "Stromverbrauch Warmwasser heute"
id: daily_electric_energy_water
unit_of_measurement: "kWh"
device_class: "energy"
state_class: "measurement"
accuracy_decimals: 3
- platform: template
name: "Stromverbrauch Heizung heute"
id: daily_electric_energy_heating
unit_of_measurement: "kWh"
device_class: "energy"
state_class: "measurement"
accuracy_decimals: 3
- platform: template
name: "Stromverbrauch Warmwasser total"
id: total_electric_energy_water
unit_of_measurement: "mWh"
device_class: "energy"
state_class: "measurement"
accuracy_decimals: 3
- platform: template
name: "Stromverbrauch Heizung total"
id: total_electric_energy_heating
unit_of_measurement: "mWh"
device_class: "energy"
state_class: "measurement"
accuracy_decimals: 3
binary_sensor:
- platform: template
name: "EVU Sperre"
id: "evu_lock"
time:
- platform: homeassistant
id: homeassistant_time
on_time:
- seconds: 50
then:
- canbus.send:
data: [ 0xa1, 0x14, 0xfa,0x09,0x1c,0x00,0x00 ]
can_id: 0x680
- delay: 200ms
- canbus.send:
data: [ 0xa1, 0x14, 0xfa,0x09,0x1d,0x00,0x00 ]
can_id: 0x680
- delay: 200ms
- canbus.send:
data: [ 0xa1, 0x14, 0xfa,0x09,0x20,0x00,0x00 ]
can_id: 0x680
- delay: 200ms
- canbus.send:
data: [ 0xa1, 0x14, 0xfa,0x09,0x21,0x00,0x00 ]
can_id: 0x680
- delay: 10s
- lambda: |-
if (id(el_aufnahmeleistung_ww_total_mWh_flag) and id(el_aufnahmeleistung_ww_total_kWh_flag)){
id(el_aufnahmeleistung_ww_total_mWh) += id(el_aufnahmeleistung_ww_total_kWh_float);
id(total_electric_energy_water).publish_state(id(el_aufnahmeleistung_ww_total_mWh));
};
id(el_aufnahmeleistung_ww_total_mWh_flag)=false;
id(el_aufnahmeleistung_ww_total_kWh_flag)=false;
- lambda: |-
if (id(el_aufnahmeleistung_heiz_total_mWh_flag) and id(el_aufnahmeleistung_heiz_total_kWh_flag)){
id(el_aufnahmeleistung_heiz_total_mWh) += id(el_aufnahmeleistung_heiz_total_kWh_float);
id(total_electric_energy_heating).publish_state(id(el_aufnahmeleistung_heiz_total_mWh));
};
id(el_aufnahmeleistung_heiz_total_mWh_flag)=false;
id(el_aufnahmeleistung_heiz_total_mWh_flag)=false;
- canbus.send:
data: [ 0xa1, 0x14, 0xfa,0x09,0x1b,0x00,0x00 ]
can_id: 0x680
- delay: 200ms
- canbus.send:
data: [ 0xa1, 0x14, 0xfa,0x09,0x1a,0x00,0x00 ]
can_id: 0x680
- delay: 200ms
- canbus.send:
data: [ 0xa1, 0x14, 0xfa,0x09,0x1e,0x00,0x00 ]
can_id: 0x680
- delay: 200ms
- canbus.send:
data: [ 0xa1, 0x14, 0xfa,0x09,0x1f,0x00,0x00 ]
can_id: 0x680
- delay: 10s
- lambda: |-
if (id(el_aufnahmeleistung_ww_tag_kwh_flag) and id(el_aufnahmeleistung_ww_tag_wh_flag)){
id(el_aufnahmeleistung_ww_tag_kwh) += id(el_aufnahmeleistung_ww_tag_wh_float);
id(daily_electric_energy_water).publish_state(id(el_aufnahmeleistung_ww_tag_kwh));
};
id(el_aufnahmeleistung_ww_tag_kwh_flag)=false;
id(el_aufnahmeleistung_ww_tag_wh_flag)=false;
- lambda: |-
if (id(el_aufnahmeleistung_heiz_tag_kwh_flag) and id(el_aufnahmeleistung_heiz_tag_wh_flag)){
id(el_aufnahmeleistung_heiz_tag_kwh) += id(el_aufnahmeleistung_heiz_tag_wh_float);
id(daily_electric_energy_heating).publish_state(id(el_aufnahmeleistung_heiz_tag_kwh));
};
id(el_aufnahmeleistung_heiz_tag_kwh_flag)=false;
id(el_aufnahmeleistung_heiz_tag_wh_flag)=false;
- canbus.send:
data: [ 0xa1, 0x14, 0xfa,0x00,0x74,0x00,0x00 ]
can_id: 0x680
- lambda: |-
ESP_LOGD("main", "EVU Sperre requested");
spi:
id: McpSpi
clk_pin: GPIO16
mosi_pin: GPIO5
miso_pin: GPIO4
canbus:
- platform: mcp2515
id: my_mcp2515
spi_id: McpSpi
cs_pin: GPIO14
can_id: 4
bit_rate: 20kbps
on_frame:
- can_id: 0x180
then:
- lambda: |-
if(x[0]==0xA0 and x[1]==0x79 and x[2]==0x0C) {
float temperature =float(float((int((x[4])+( (x[3])<<8))))/10);
id(temperature_kitchen).publish_state(temperature);
ESP_LOGD("main", "Temperature received over can is %f", temperature);
}
- can_id: 0x514
then:
- lambda: |-
if(x[0]==0xd2 and x[1]==0x00 and x[2]==0xfa and x[3]==0x09) {
if(x[4]==0x1b){
id(el_aufnahmeleistung_ww_tag_kwh) =float(int((x[6])+( (x[5])<<8)));
id(el_aufnahmeleistung_ww_tag_kwh_flag)=true;
ESP_LOGD("main", "el_aufnahmeleistung_ww_tag_kwh received over can is %f", id(el_aufnahmeleistung_ww_tag_kwh));}
else if(x[4]==0x1f){
id(el_aufnahmeleistung_heiz_tag_kwh) =float(int((x[6])+( (x[5])<<8)));
id(el_aufnahmeleistung_heiz_tag_kwh_flag)=true;
ESP_LOGD("main", "el_aufnahmeleistung_heiz_tag_kwh received over can is %f", id(el_aufnahmeleistung_heiz_tag_kwh));}
else if(x[4]==0x1d){
id(el_aufnahmeleistung_ww_total_mWh) =float(int((x[6])+( (x[5])<<8)));
id(el_aufnahmeleistung_ww_total_mWh_flag)=true;
ESP_LOGD("main", "el_aufnahmeleistung_ww_total_mWh received over can is %f", id(el_aufnahmeleistung_ww_total_mWh));}
else if(x[4]==0x21){
id(el_aufnahmeleistung_heiz_total_mWh) =float(int((x[6])+( (x[5])<<8)));
id(el_aufnahmeleistung_heiz_total_mWh_flag)=true;
ESP_LOGD("main", "el_aufnahmeleistung_heiz_total_mWh received over can is %f", id(el_aufnahmeleistung_heiz_total_mWh));}
}
- can_id: 0x514
then:
- lambda: |-
if(x[0]==0xd2 and x[1]==0x00 and x[2]==0xfa and x[3]==0x09) {
if (x[4]==0x1a){
id(el_aufnahmeleistung_ww_tag_wh_float) = (float((int((x[6])+( (x[5])<<8))))/1000);
id(el_aufnahmeleistung_ww_tag_wh_flag)=true;
ESP_LOGD("main", "el_aufnahmeleistung_ww_tag_kwh received over can is %f", id(el_aufnahmeleistung_ww_tag_wh_float));}
else if (x[4]==0x1e){
id(el_aufnahmeleistung_heiz_tag_wh_float) = (float((int((x[6])+( (x[5])<<8))))/1000);
id(el_aufnahmeleistung_heiz_tag_wh_flag) = true;
ESP_LOGD("main", "el_aufnahmeleistung_heiz_tag_wh received over can is %f", id(el_aufnahmeleistung_heiz_tag_wh_float));}
else if (x[4]==0x1c){
id(el_aufnahmeleistung_ww_total_kWh_float) = (float((int((x[6])+( (x[5])<<8))))/1000);
id(el_aufnahmeleistung_ww_total_kWh_flag)=true;
ESP_LOGD("main", "el_aufnahmeleistung_ww_total_kkWh received over can is %f", id(el_aufnahmeleistung_ww_total_kWh_float));}
else if (x[4]==0x20){
id(el_aufnahmeleistung_heiz_total_kWh_float) = (float((int((x[6])+( (x[5])<<8))))/1000);
id(el_aufnahmeleistung_heiz_total_kWh_flag) = true;
ESP_LOGD("main", "el_aufnahmeleistung_heiz_total_kWh received over can is %f", id(el_aufnahmeleistung_heiz_total_kWh_float));}
}
if(x[0]==0xd2 and x[1]==0x00 and x[2]==0xfa and x[3]==0x00 and x[4]==0x74){
if(x[5]==0x80 and x[6]==0x00){
id(evu_lock).publish_state(false);
}
else{
id(evu_lock).publish_state(true);
};
};
Zitat von: momad am 12 Mai 2021, 13:21:33
Hallo zusammen,
auch bei mir klappt alles wunderbar , siehe unten :)
Schreiben (SET) klappt auch bisher getestet nur RAUMSOLL.
Hallo author=momad, Dein Screenshot sieht so aus als wäre er von Home Assistant. Wenn dem so ist, könntest Du einmal beschreiben, wie Du das technisch gelöst hast?
Hallo Vincent,
klar, gerne gebe ich unten Hinweise zu den Temperaturfühlern.
Woher weiß ich, welche Adresse mein FEK bzw. meine Heizung hat?
Nutzt du auch einen Pegelwandler wie bei ESPHome (https://esphome.io/components/canbus.html?highlight=can#mcp2515-component) empfohlen, oder betreibst du deinen Aufbau ohne Pegelwandler?
Könntest du evtl. Fotos von deinem Aufbau schicken?
Ich möchte bei der Heizung nichts kaputt machen.
Danke für die Config. Langsam komme ich dahinter, mit dem File "Telegramm-Aufbau.txt" von Jürg.
Ich nutze als Temperatursensoren die DS18B20 (1-wire).
Die gibt es z.B. bei Amazon oder dem Onlinehändler der Wahl Edelstahlummantelt mit entsprechendem Kabel.
Die Sensoren habe ich im Estrich verlegt, indem ich an ein Ende eines Kabelschlauches eine passende Kupferhülse verlegt hab. Damit der Fühler auch tatsächlich die Estrichtemperatur misst, hab ich etwas Graphitpaste als Wärmeleitpaste in die Endhülsen gegeben.
Hier ein Link zu den Kupferhülsen: https://www.etherma.com/de/produkte/26881
Die DS18B20 lassen sich über 1-wire parasitär betreiben und haben eine eigene Adresse für den seriellen Bus. Man kommt also mit 2 Adern aus.
Die Fühler werden auf der ESP-Home Seite ganz gut beschrieben inklusive Beispielcode: https://esphome.io/components/sensor/dallas.html
Wichtig ist folgender Eintrag, der den jeweiligen verwendeten Pin beschreibt:
dallas:
- pin: GPIO4
Und dann noch die Beschreibung der Sensoren mit der jeweiligen Adresse.
Die Adresse bekommt man raus, indem man die Fühler zunächst ohne Adressangabe betreibt und sich das Logfile ansieht.
Diese ist v.a. wichtig, wenn mehrere Fühler am gleichen Gerät hängen.
sensor:
- platform: dallas
address: 0x11012032E38A2028
name: "T.HzgVorlaufDG"
- platform: dallas
address: 0x17012032C8D95828
name: "T.HzgRücklaufDG"
Einmal konfiguriert erscheinen die Fühler normalerweise direkt im Home-Assistant.
Vom Home-Assistant übertrage ich die Fühlertemperaturen dann an den KNX-Bus, indem ich in der config.yaml den Abschnitt "expose" wie folgt editiere
expose:
- type: 'temperature'
entity_id: 'sensor.t_hzgvorlaufdg'
address: '3/0/5'
- type: 'temperature'
entity_id: 'sensor.t_hzgrucklaufdg'
address: '3/0/6'
Hallo robob,
Fotos ist gerade schlecht, weil alles gut verbaut ist. Hier ist das aber gut dargestellt: https://elkement.wordpress.com/2016/08/24/hacking-my-heat-pump-part-2-logging-energy-values/
Aber das Einzige, was Du machen musst, ist CAN High und CAN Low vom MCP2515 anschließen. Ground habe ich entgegen des Beispiels nicht angeschlossen, sollte auch nicht nötig sein.
Vergesse, nicht den Jumper für den Abschlusswiderstand am MCP2515 zu entfernen.
Da ich die Komponenten eigentlich für was Anderes einsetzen wollte, wo kein Platz war für den Pegelwandler arbeite ich mit der Variante ohne Pegelwandler.
Du siehst die Adressen (welche bei dem Protokoll ja anscheinend die CAN ID´s sind), wenn Du den CAN Konfigurierst und Dir dann den Log Output anschaust. Es werden da scheinbar alle Nachrichten im Log ausgegeben.
Wie in der Config zu entnehmen ist, sende ich auf ID 0x680. Ob das immer richtig und gut ist weiß ich nicht.
So mein ESP-WROOM-32 hängt jetzt via MCP2515 an meiner Heizung.
Hier ist das Pinout-Diagramm dazu:
http://esp32.net/images/Magic-Cauldron/ESP-WROOM-32-Breakout/Magic-Cauldron_ESP-WROOM-32-Breakout_V2.0a_DiagramPinout.png (http://esp32.net/images/Magic-Cauldron/ESP-WROOM-32-Breakout/Magic-Cauldron_ESP-WROOM-32-Breakout_V2.0a_DiagramPinout.png)
Ursprünglich wollte ich über den DC-DC-Konverter die Spannung direkt bei meiner Heizung abgreifen. Aber dann fällt das Heizungsdisplay aus.
Also hab ich das jetzt doch via USB-Stecker gelöst.
Unten angehängt ein paar Bilder.
Und hier die Einstellungen die ich an der ESP-Home Config verwende - der Rest ist derzeit gleich wie bei Vincent und muss noch mit den CAN-IDs an meine Umgebung angepasst werden.
spi:
id: McpSpi
clk_pin: GPIO23
mosi_pin: GPIO22
miso_pin: GPIO21
canbus:
- platform: mcp2515
id: my_mcp2515
spi_id: McpSpi
cs_pin: GPIO19
can_id: 4
bit_rate: 20kbps
on_frame:
Was mich dazu vor allem interessiert: Ich erhalte offenbar Pakete von 6 verschiedenen CAN-IDs?!
100, 180, 301, 480, 514, 700
Woher kommt das und woher weiß ich, welche CAN-ID von der Heizung oder von der FEK-Fernbedienung kommt?
Weiters bekomme ich die falschen Werte für den Stromverbrauch.
[12:47:11][D][canbus:066]: received can message std can_id=0x100 size=7
[12:47:11][D][canbus:066]: received can message std can_id=0x180 size=7
[12:47:11][D][canbus:066]: received can message std can_id=0x301 size=7
[12:47:12][D][sensor:121]: 'Stromverbrauch Heizung heute': Sending state 32800.76953 kWh with 3 decimals of accuracy
[12:47:12][D][canbus:032]: send extended id=0x680 size=7
[12:47:12][D][main:193]: EVU Sperre requested
[12:47:12][D][canbus:066]: received can message std can_id=0x514 size=7
[12:47:12][D][canbus:066]: received can message std can_id=0x480 size=7
[12:47:12][D][canbus:066]: received can message std can_id=0x700 size=7
So,
ich hab jetzt an alle Adressen die im Log angezeigt werden eine Anfrage für einen Wert aus der Elster-Tabelle gesendet.
Ich bekomme eine Antwort von id514 bzw. id 51e. Aber der Wert stimmt nicht mit der am Display gezeigten Leistung an der Heizung überein.
spi:
id: McpSpi
clk_pin: GPIO18
mosi_pin: GPIO23
miso_pin: GPIO19
canbus:
- platform: mcp2515
id: my_mcp2515
spi_id: McpSpi
cs_pin: GPIO15
can_id: 680
use_extended_id: false
bit_rate: 20kbps
on_frame:
- can_id: 0x100
then:
- lambda: |-
if(x[0]==0xd2 and x[1]==0x00 and x[2]==0xfa and x[3]==0x09 and x[4]==0x1c) {
float wert =float(float((int((x[4])+( (x[3])<<8))))/10);
ESP_LOGD("main", "Antwort von ID100: %f", wert);
}
- can_id: 0x180
then:
- lambda: |-
if(x[0]==0xd2 and x[1]==0x00 and x[2]==0xfa and x[3]==0x09 and x[4]==0x1c) {
float wert =float(float((int((x[4])+( (x[3])<<8))))/10);
ESP_LOGD("main", "Antwort von ID180: %f", wert);
}
- can_id: 0x301
then:
- lambda: |-
if(x[0]==0xd2 and x[1]==0x00 and x[2]==0xfa and x[3]==0x09 and x[4]==0x1c) {
float wert =float(float((int((x[4])+( (x[3])<<8))))/10);
ESP_LOGD("main", "Antwort von ID301: %f", wert);
}
- can_id: 0x401
then:
- lambda: |-
if(x[0]==0xd2 and x[1]==0x00 and x[2]==0xfa and x[3]==0x4e and x[4]==0xc7) {
float wert =float(float((int((x[4])+( (x[3])<<8))))/10);
ESP_LOGD("main", "Antwort von ID401 - Bedienteil: %f", wert);
}
- can_id: 0x402
then:
- lambda: |-
if(x[0]==0xd2 and x[1]==0x00 and x[2]==0xfa and x[3]==0x4e and x[4]==0xc7) {
float wert =float(float((int((x[4])+( (x[3])<<8))))/10);
ESP_LOGD("main", "Antwort von ID401 - Bedienteil: %f", wert);
}
- can_id: 0x480
then:
- lambda: |-
if(x[0]==0xd2 and x[1]==0x00 and x[2]==0xfa and x[3]==0x09 and x[4]==0x1c) {
float wert =float(float((int((x[4])+( (x[3])<<8))))/10);
ESP_LOGD("main", "Antwort von ID480: %f", wert);
}
- can_id: 0x504
then:
- lambda: |-
if(x[0]==0xd2 and x[1]==0x00 and x[2]==0xfa and x[3]==0x09 and x[4]==0x1c) {
float wert =float(float((int((x[4])+( (x[3])<<8))))/10);
ESP_LOGD("main", "Antwort von ID504: %f", wert);
}
- can_id: 0x514
then:
- lambda: |-
if(x[0]==0xd2 and x[1]==0x00 and x[2]==0xfa and x[3]==0x09 and x[4]==0x1c) {
float wert =float(float((int((x[4])+( (x[3])<<8))))/10);
ESP_LOGD("main", "Antwort von ID514: %f", wert);
}
- can_id: 0x700
then:
- lambda: |-
if(x[0]==0xd2 and x[1]==0x00 and x[2]==0xfa and x[3]==0x09 and x[4]==0x1c) {
float wert =float(float((int((x[4])+( (x[3])<<8))))/10);
ESP_LOGD("main", "Antwort von ID301: %f", wert);
}
Hmm ich weiß nicht ob es Dir bewusst ist aber die Stellen vor dem Komma und nach dem Komma kommen als eigene CAN Nachrichten als Signed 16 bit werte. Die baue ich dann im Nachgang zusammen wie das Display es macht. Läuft hier vielleicht was schief?
...und ich sehe in Deiner Konfig gar keine Anfragen. Schau in meinem Code wie ich Anfragen sende.
Die Werte der Leistungsaufnahmen kommen alle an der CAN ID 0x514. Ich sehe nach einer Anfrage die ID´s aus der Elster Tabelle mehrfach auf dem CAN. Es scheint als reicht ein Teilnehmer die Anfrage immer weiter.
Es scheint also für angefragte Werte nur die Antwort der ID 0x514 relevant zu sein. Bitte schaue Dir noch mal meinen (zugegebenermaßen noch recht chaotischen) Code an.
Noch ein Thema. Hier wird die elektrische Leistungsaufnahme geloggt, nicht die erzeugte Wärmemenge. Vertauscht Du vielleicht die Werte?
...und noch was. Die Protokollbeschreibung angehängt am Ticket habe ich mal im Netz gefunden. Das Adressen stimmen nicht mit denen bei mir überein aber man bekommt eine Idee, welche Teilnehmer es so gibt.
Hi,
danke für die Liste.
Hier der aktuelle Status:
Ich habe die Kontakte umgelötet auf Pins, die lt. einer Spezifikationstabelle empfohlen werden.
Das mit den Adressen verstehe ich inzwischen einigermaßen. Allerdings - wie errechnet sich z.B. die Adresse 69E bzw. 6A0 für das CAN-Bus Paket?
Und ich hab sowohl die Werte vom Stromverbrauch als auch die der Warmwasserleistung verglichen. Ich erhalte immer die gleiche Antwort.
Was ich noch nicht verstanden habe - ich habe zwar gesehen, dass du in deinem Code die Hex-Werte in der if-Anweisung vergleichst.
Aber ich hab noch nicht verstanden, wie sich die Werte berechnen. Mir fehlen da einige Basics beim Programmiercode.
Was bedeutet <<8?
Sorry wegen meinem Code oben - ich hab den einige Male bearbeitet. Da dürfte sich der falsche reingeschummelt haben.
Ich habe inzwischen den MCP2515 an ein NI USB-8473 in der Garage gehängt um mitzuprotokollieren.
Der funktioniert zwar nur mit 125kbs, aber ich sehe dann wenigstens was beim Sendevorgang passiert:
Beim Senden der folgenden Anfragen im Code sehe ich nur zwei Einträge in der Log-Ausgabe am NI Device. Nämlich den mit der Sende-ID 0x100 (4E C7) und den mit der Sende-ID 0x780 (09 20). Die anderen beiden Pakete werden nicht gelogged. Woran könnte das liegen?
Ich hab auch schon versucht ein Delay von 1000 ms dazwischen zu hängen - gleiches Resultat.
Und ich kann auch Pakete vom NI-Device an mein MCP2515 senden. Ich sehe dann die Pakete auch im Logscreen.
time:
- platform: homeassistant
id: homeassistant_time
on_time:
- seconds: /10
then:
- canbus.send:
data: [ 0x61, 0x11, 0xfa,0x4e,0x20,0x00,0x00 ]
can_id: 0x100
- canbus.send:
data: [ 0x61, 0x12, 0xfa,0x4e,0xc7,0x00,0x00 ]
can_id: 0x100
- canbus.send:
data: [ 0xa1, 0x1e, 0xfa,0x09,0x1c,0x00,0x00 ]
can_id: 0x780
- canbus.send:
data: [ 0xa1, 0x1e, 0xfa,0x09,0x20,0x00,0x00 ]
can_id: 0x780
Ich hab jetzt die Config so angepasst, dass ich alle Pakete von den Adressen die so herumschwirren als HEX-Wert ausgebe.
Ich frage die Werte 0126 (=Uhrzeit - Minute), 092d (= WM WW Summe) sowie 0931 (=WM Heizen Summe) ab.
Zumindest die Minuten müssten sich nach einiger Zeit ändern.
Unten die Config und ein Auszug aus dem Logfile.
Auffallend ist vor allem, dass ich als Antwort immer 80 00 als Antwort-Wert empfange.
captive_portal:
time:
- platform: homeassistant
id: homeassistant_time
on_time:
- seconds: /10
then:
- canbus.send:
data: [ 0xa1, 0x1e, 0xfa,0x09,0x31,0x00,0x00 ]
can_id: 0x780
- delay: 200ms
- canbus.send:
data: [ 0xa1, 0x1e, 0xfa,0x09,0x2d,0x00,0x00 ]
can_id: 0x780
- delay: 200ms
- canbus.send:
data: [ 0xa1, 0x1e, 0xfa,0x01,0x26,0x00,0x00 ]
can_id: 0x780
- delay: 200ms
spi:
id: McpSpi
clk_pin: GPIO18
mosi_pin: GPIO23
miso_pin: GPIO19
canbus:
- platform: mcp2515
id: my_mcp2515
spi_id: McpSpi
cs_pin: GPIO15
can_id: 780
use_extended_id: false
bit_rate: 20kbps
on_frame:
- can_id: 0x100
then:
- lambda: |-
int wert0 = int(x[0]);
int wert1 =int(x[1]);
int wert2 =int(x[2]);
int wert3 =int(x[3]);
int wert4 =int(x[4]);
int wert5 =int(x[5]);
int wert6 =int(x[6]);
ESP_LOGD("main", "Antwort von 100 Hex: %x %x %x %x %x %x %x", wert0, wert1, wert2, wert3, wert4, wert5, wert6);
- can_id: 0x180
then:
- lambda: |-
int wert0 = int(x[0]);
int wert1 =int(x[1]);
int wert2 =int(x[2]);
int wert3 =int(x[3]);
int wert4 =int(x[4]);
int wert5 =int(x[5]);
int wert6 =int(x[6]);
ESP_LOGD("main", "Antwort von 180 Hex: %x %x %x %x %x %x %x", wert0, wert1, wert2, wert3, wert4, wert5, wert6);
- can_id: 0x301
then:
- lambda: |-
int wert0 = int(x[0]);
int wert1 =int(x[1]);
int wert2 =int(x[2]);
int wert3 =int(x[3]);
int wert4 =int(x[4]);
int wert5 =int(x[5]);
int wert6 =int(x[6]);
ESP_LOGD("main", "Antwort von 301 Hex: %x %x %x %x %x %x %x", wert0, wert1, wert2, wert3, wert4, wert5, wert6);
- can_id: 0x480
then:
- lambda: |-
int wert0 = int(x[0]);
int wert1 =int(x[1]);
int wert2 =int(x[2]);
int wert3 =int(x[3]);
int wert4 =int(x[4]);
int wert5 =int(x[5]);
int wert6 =int(x[6]);
ESP_LOGD("main", "Antwort von 480 Hex: %x %x %x %x %x %x %x", wert0, wert1, wert2, wert3, wert4, wert5, wert6);
- can_id: 0x514
then:
- lambda: |-
int wert0 = int(x[0]);
int wert1 =int(x[1]);
int wert2 =int(x[2]);
int wert3 =int(x[3]);
int wert4 =int(x[4]);
int wert5 =int(x[5]);
int wert6 =int(x[6]);
ESP_LOGD("main", "Antwort von 514 Hex: %x %x %x %x %x %x %x", wert0, wert1, wert2, wert3, wert4, wert5, wert6);
- can_id: 0x51e
then:
- lambda: |-
int wert0 = int(x[0]);
int wert1 =int(x[1]);
int wert2 =int(x[2]);
int wert3 =int(x[3]);
int wert4 =int(x[4]);
int wert5 =int(x[5]);
int wert6 =int(x[6]);
ESP_LOGI("main", "Antwort von 51e Hex: %x %x %x %x %x %x %x", wert0, wert1, wert2, wert3, wert4, wert5, wert6);
- can_id: 0x700
then:
- lambda: |-
int wert0 = int(x[0]);
int wert1 =int(x[1]);
int wert2 =int(x[2]);
int wert3 =int(x[3]);
int wert4 =int(x[4]);
int wert5 =int(x[5]);
int wert6 =int(x[6]);
ESP_LOGD("main", "Antwort von 700 Hex: %x %x %x %x %x %x %x", wert0, wert1, wert2, wert3, wert4, wert5, wert6);
[18:56:28][D][main:158]: Antwort von 700 Hex: 92 0 fa fe 4c 0 12
[18:56:30][D][canbus:032]: send extended id=0x780 size=7
[18:56:30][D][canbus:066]: received can message std can_id=0x51e size=7
[18:56:30][I][main:146]: Antwort von 51e Hex: f2 0 fa 9 31 80 0
[18:56:30][D][canbus:032]: send extended id=0x780 size=7
[18:56:30][D][canbus:066]: received can message std can_id=0x51e size=7
[18:56:30][I][main:146]: Antwort von 51e Hex: f2 0 fa 9 2d 80 0
[18:56:30][D][canbus:032]: send extended id=0x780 size=7
[18:56:30][D][canbus:066]: received can message std can_id=0x51e size=7
[18:56:30][I][main:146]: Antwort von 51e Hex: f2 0 fa 1 26 80 0
[18:56:31][D][canbus:066]: received can message std can_id=0x480 size=7
[18:56:31][D][main:122]: Antwort von 480 Hex: e0 0 fa fe 1e 0 0
[18:56:31][D][canbus:066]: received can message std can_id=0x700 size=7
[18:56:31][D][main:158]: Antwort von 700 Hex: 92 0 fa fe 1e 0 0
[18:56:33][D][canbus:066]: received can message std can_id=0x480 size=7
[18:56:33][D][main:122]: Antwort von 480 Hex: e1 0 fa fe 4c 0 0
[18:56:33][D][canbus:066]: received can message std can_id=0x480 size=7
[18:56:33][D][main:122]: Antwort von 480 Hex: e1 0 fa fd f3 0 0
[18:56:33][D][canbus:066]: received can message std can_id=0x480 size=7
[18:56:33][D][main:122]: Antwort von 480 Hex: e1 0 fa fe 7 0 0
In diesem Forum https://community.symcon.de/t/stiebel-eltron-waermepumpe-wpl13-und-canbus-abfrage/37485/7 (https://community.symcon.de/t/stiebel-eltron-waermepumpe-wpl13-und-canbus-abfrage/37485/7)
wird erklärt dass häufig auch die Adresse 180 zum Auslesen verwendet wird.
Ich konnte jetzt mit Hilfe Anpassung des obigen Codes via Anfrage an Adresse 180 (0x31, 0x00, 0xfa,0x01,0x26,0x00,0x00) die Uhrzeit-Minuten ablesen. Außerdem sind die Werte für Wärmemenge VD Heizen Summe auf die MWh genau übereinstimmend mit den Werten aus der Heizung.
Langsam komme ich der Sache näher.
Ok, dann gibt es wohl andere Versionen der Steuerung, wo man mit 0x180 statt 0x680 anfragen muss.
Zur Frage was bedeutet <<8? Die ESPHhome lib gibt den Payload der Nachricht ja als C++ Vektor mit einem Element pro Byte zurück. Den Payload muss ich ja dann zu den Signed Int 16 (=2Byte) Variablen umwandeln. Mit <<8 sagt man, dass man die Variable ab bit 8 beschreiben will.
Danke, die Erklärung hat mehr als geholfen.
Ich hab deine Config ein bisschen erweitert auf die anderen fehlenden Wärme-Ertragsdaten.
Auskommentiert hab ich darin noch u.a. die Anfragen für die Verdichter-Laufzeiten.
Da kommt bei mir von der ID 180 keine passende Antwort. Und ich konnte auch sonst keine ID finden die ein Antwortpaket sendet.
Die Luftfeuchtigkeit und Raumtemperatur brauche ich nicht aktiv von der FEK abzufragen - die kommt bei mir alle paar Minuten von der ID 301 und wird an ID 601 als Änderung gesendet.
(Paket C0 01 75 xx xx bzw. C0 01 11 xx xx)
Etwas sorgen macht mir noch, dass im Homeassistant der Aufruf des Sensor-Zustandsverlaufs - z.B. Temperaturverlauf - mehrere Minuten dauert bis alles angezeigt wird.
Ich weiß nicht woran das liegt. Hast du auch das Problem beim Zustandsverlauf?
Hier der Code:
captive_portal:
globals:
- id: el_aufnahmeleistung_ww_tag_wh_float
type: float
restore_value: yes
- id: el_aufnahmeleistung_ww_tag_wh_flag
type: bool
restore_value: yes
- id: el_aufnahmeleistung_ww_tag_kwh
type: float
restore_value: yes
- id: el_aufnahmeleistung_ww_tag_kwh_flag
type: bool
restore_value: yes
- id: el_aufnahmeleistung_heiz_tag_wh_float
type: float
restore_value: yes
- id: el_aufnahmeleistung_heiz_tag_wh_flag
type: bool
restore_value: yes
- id: el_aufnahmeleistung_heiz_tag_kwh
type: float
restore_value: yes
- id: el_aufnahmeleistung_heiz_tag_kwh_flag
type: bool
restore_value: yes
- id: el_aufnahmeleistung_ww_total_kWh_float
type: float
restore_value: yes
- id: el_aufnahmeleistung_ww_total_kWh_flag
type: bool
restore_value: yes
- id: el_aufnahmeleistung_ww_total_mWh
type: float
restore_value: yes
- id: el_aufnahmeleistung_ww_total_mWh_flag
type: bool
restore_value: yes
- id: el_aufnahmeleistung_heiz_total_kWh_float
type: float
restore_value: yes
- id: el_aufnahmeleistung_heiz_total_kWh_flag
type: bool
restore_value: yes
- id: el_aufnahmeleistung_heiz_total_mWh
type: float
restore_value: yes
- id: el_aufnahmeleistung_heiz_total_mWh_flag
type: bool
restore_value: yes
- id: waermemertrag_ww_tag_wh_float
type: float
restore_value: yes
- id: waermemertrag_ww_tag_wh_flag
type: bool
restore_value: yes
- id: waermemertrag_ww_tag_kwh
type: float
restore_value: yes
- id: waermemertrag_ww_tag_kwh_flag
type: bool
- id: waermemertrag_electr_ww_tag_wh_float
type: float
restore_value: yes
- id: waermemertrag_electr_ww_tag_wh_flag
type: bool
restore_value: yes
- id: waermemertrag_electr_ww_tag_kwh
type: float
restore_value: yes
- id: waermemertrag_electr_ww_tag_kwh_flag
type: bool
restore_value: yes
- id: waermemertrag_heiz_tag_wh_float
type: float
restore_value: yes
- id: waermemertrag_heiz_tag_wh_flag
type: bool
restore_value: yes
- id: waermemertrag_heiz_tag_kwh
type: float
restore_value: yes
- id: waermemertrag_heiz_tag_kwh_flag
type: bool
restore_value: yes
- id: waermemertrag_electr_heiz_tag_wh_float
type: float
restore_value: yes
- id: waermemertrag_electr_heiz_tag_wh_flag
type: bool
restore_value: yes
- id: waermemertrag_electr_heiz_tag_kwh
type: float
restore_value: yes
- id: waermemertrag_electr_heiz_tag_kwh_flag
type: bool
restore_value: yes
- id: waermemertrag_ww_total_kWh_float
type: float
restore_value: yes
- id: waermemertrag_ww_total_kWh_flag
type: bool
restore_value: yes
- id: waermemertrag_ww_total_mWh
type: float
restore_value: yes
- id: waermemertrag_ww_total_mWh_flag
type: bool
restore_value: yes
- id: waermemertrag_heiz_total_kWh_float
type: float
restore_value: yes
- id: waermemertrag_heiz_total_kWh_flag
type: bool
restore_value: yes
- id: waermemertrag_heiz_total_mWh
type: float
restore_value: yes
- id: waermemertrag_heiz_total_mWh_flag
type: bool
restore_value: yes
- id: waermemertrag_electr_heiz_total_kWh_float
type: float
restore_value: yes
- id: waermemertrag_electr_heiz_total_kWh_flag
type: bool
restore_value: yes
- id: waermemertrag_electr_heiz_total_mWh
type: float
restore_value: yes
- id: waermemertrag_electr_heiz_total_mWh_flag
type: bool
restore_value: yes
- id: waermemertrag_electr_ww_total_kWh_float
type: float
restore_value: yes
- id: waermemertrag_electr_ww_total_kWh_flag
type: bool
restore_value: yes
- id: waermemertrag_electr_ww_total_mWh
type: float
restore_value: yes
- id: waermemertrag_electr_ww_total_mWh_flag
type: bool
restore_value: yes
sensor:
- platform: template
name: "Außentemperatur"
id: temperature_outside
unit_of_measurement: "°C"
icon: "mdi:thermometer-lines"
device_class: "temperature"
state_class: "measurement"
accuracy_decimals: 1
- platform: template
name: "Quellentemperatur"
id: temperature_source
unit_of_measurement: "°C"
icon: "mdi:thermometer-lines"
device_class: "temperature"
state_class: "measurement"
accuracy_decimals: 1
- platform: template
name: "Warmwassertemperatur"
id: temperature_water
unit_of_measurement: "°C"
icon: "mdi:thermometer-lines"
device_class: "temperature"
state_class: "measurement"
accuracy_decimals: 1
- platform: template
name: "Vorlauftemperatur Heizung"
id: temperature_forerun
unit_of_measurement: "°C"
icon: "mdi:waves-arrow-right"
device_class: "temperature"
state_class: "measurement"
accuracy_decimals: 1
- platform: template
name: "Heizkreis Vorlauf"
id: temperature_forerun_heating
unit_of_measurement: "°C"
icon: "mdi:waves-arrow-right"
device_class: "temperature"
state_class: "measurement"
accuracy_decimals: 1
- platform: template
name: "Rücklauftemperatur Heizung"
id: temperature_return
unit_of_measurement: "°C"
icon: "mdi:waves-arrow-left"
device_class: "temperature"
state_class: "measurement"
accuracy_decimals: 1
- platform: template
name: "Luftfeuchtigkeit Wohnraum"
id: humidity_inside
unit_of_measurement: "%rH"
icon: "mdi:water-percent"
device_class: "humidity"
state_class: "measurement"
accuracy_decimals: 1
- platform: template
name: "Temperatur Wohnraum"
id: temperature_inside
unit_of_measurement: "°C"
icon: "mdi:thermometer-lines"
device_class: "temperature"
state_class: "measurement"
accuracy_decimals: 1
- platform: template
name: "Stromverbrauch Warmwasser heute"
id: daily_electric_energy_water
unit_of_measurement: "kWh"
device_class: "energy"
state_class: "measurement"
accuracy_decimals: 3
icon: "mdi:transmission-tower"
- platform: template
name: "Stromverbrauch Heizung heute"
id: daily_electric_energy_heating
unit_of_measurement: "kWh"
device_class: "energy"
state_class: "measurement"
icon: "mdi:transmission-tower"
accuracy_decimals: 3
- platform: template
name: "Stromverbrauch Warmwasser total"
id: total_electric_energy_water
unit_of_measurement: "MWh"
device_class: "energy"
state_class: "measurement"
icon: "mdi:transmission-tower"
accuracy_decimals: 3
- platform: template
name: "Stromverbrauch Heizung total"
id: total_electric_energy_heating
unit_of_measurement: "MWh"
device_class: "energy"
icon: "mdi:transmission-tower"
state_class: "measurement"
accuracy_decimals: 3
- platform: template
name: "WM Heizung heute"
id: daily_heating_energy
unit_of_measurement: "kWh"
device_class: "energy"
icon: "mdi:water-boiler"
state_class: "measurement"
accuracy_decimals: 3
- platform: template
name: "WM Heizen total"
id: total_heating_energy
unit_of_measurement: "MWh"
device_class: "energy"
icon: "mdi:water-boiler"
state_class: "measurement"
accuracy_decimals: 3
- platform: template
name: "WM Warmwasser heute"
id: daily_heating_energy_water
unit_of_measurement: "kWh"
device_class: "energy"
icon: "mdi:water-boiler"
state_class: "measurement"
accuracy_decimals: 3
- platform: template
name: "WM Warmwasser total"
id: total_heating_energy_water
unit_of_measurement: "MWh"
device_class: "energy"
icon: "mdi:water-boiler"
state_class: "measurement"
accuracy_decimals: 3
- platform: template
name: "WM elektr. Warmwasser total"
id: total_electric_heating_energy_water
unit_of_measurement: "MWh"
device_class: "energy"
icon: "mdi:water-boiler"
state_class: "measurement"
accuracy_decimals: 3
- platform: template
name: "WM elektr. heizen total"
id: total_electric_heating_energy
unit_of_measurement: "MWh"
device_class: "energy"
icon: "mdi:water-boiler"
state_class: "measurement"
accuracy_decimals: 3
binary_sensor:
- platform: template
name: "EVU Sperre"
id: "evu_lock"
time:
- platform: homeassistant
id: homeassistant_time
on_time:
- seconds: /180
then:
#WM NE WW Summe wh - ok
- canbus.send:
data: [ 0x31, 0x00, 0xfa,0x09,0x22,0x00,0x00 ]
can_id: 0x680
- delay: 200ms
#WM NE WW Summe kwh - ok
- canbus.send:
data: [ 0x31, 0x00, 0xfa,0x09,0x23,0x00,0x00 ]
can_id: 0x680
- delay: 200ms
#WM NE Heizen Summe wh - ok
- canbus.send:
data: [ 0x31, 0x00, 0xfa,0x09,0x26,0x00,0x00 ]
can_id: 0x680
- delay: 200ms
#WM NE Heizen Summe kwh - ok
- canbus.send:
data: [ 0x31, 0x00, 0xfa,0x09,0x27,0x00,0x00 ]
can_id: 0x680
- delay: 200ms
#WM WW Tag wh - ok
- canbus.send:
data: [ 0x31, 0x00, 0xfa,0x09,0x2a,0x00,0x00 ]
can_id: 0x680
- delay: 200ms
#WM WW Tag kwh - ok
- canbus.send:
data: [ 0x31, 0x00, 0xfa,0x09,0x2b,0x00,0x00 ]
can_id: 0x680
- delay: 200ms
#WM WW Summe kwh - ok
- canbus.send:
data: [ 0x31, 0x00, 0xfa,0x09,0x2c,0x00,0x00 ]
can_id: 0x680
- delay: 200ms
#WM WW Summe Mwh - ok
- canbus.send:
data: [ 0x31, 0x00, 0xfa,0x09,0x2d,0x00,0x00 ]
can_id: 0x680
- delay: 200ms
#WM Heizen Tag wh - ok
- canbus.send:
data: [ 0x31, 0x00, 0xfa,0x09,0x2e,0x00,0x00 ]
can_id: 0x680
- delay: 200ms
#WM Heizen Tag kwh - ok
- canbus.send:
data: [ 0x31, 0x00, 0xfa,0x09,0x2f,0x00,0x00 ]
can_id: 0x680
- delay: 200ms
#WM Heizen Summe kwh - ok
- canbus.send:
data: [ 0x31, 0x00, 0xfa,0x09,0x30,0x00,0x00 ]
can_id: 0x680
- delay: 200ms
#WM Heizen Summe Mwh - ok
- canbus.send:
data: [ 0x31, 0x00, 0xfa,0x09,0x31,0x00,0x00 ]
can_id: 0x680
- delay: 10s
- lambda: |-
if (id(waermemertrag_electr_ww_total_mWh_flag) and id(waermemertrag_electr_ww_total_kWh_flag)){
id(waermemertrag_electr_ww_total_mWh) += id(waermemertrag_electr_ww_total_kWh_float);
id(total_electric_heating_energy_water).publish_state(id(waermemertrag_electr_ww_total_mWh));
};
id(waermemertrag_electr_ww_total_mWh_flag)=false;
id(waermemertrag_electr_ww_total_kWh_flag)=false;
- lambda: |-
if (id(waermemertrag_electr_heiz_total_kWh_flag) and id(waermemertrag_electr_heiz_total_mWh_flag)){
id(waermemertrag_electr_heiz_total_mWh) += id(waermemertrag_electr_heiz_total_kWh_float);
id(total_electric_heating_energy).publish_state(id(waermemertrag_electr_heiz_total_mWh));
};
id(waermemertrag_electr_heiz_total_kWh_flag)=false;
id(waermemertrag_electr_heiz_total_mWh_flag)=false;
- lambda: |-
if (id(waermemertrag_ww_total_mWh_flag) and id(waermemertrag_ww_total_kWh_flag)){
id(waermemertrag_ww_total_mWh) += id(waermemertrag_ww_total_kWh_float);
id(total_heating_energy_water).publish_state(id(waermemertrag_ww_total_mWh));
};
id(waermemertrag_ww_total_mWh_flag)=false;
id(waermemertrag_ww_total_kWh_flag)=false;
- lambda: |-
if (id(waermemertrag_heiz_total_kWh_flag) and id(waermemertrag_heiz_total_mWh_flag)){
id(waermemertrag_heiz_total_mWh) += id(waermemertrag_heiz_total_kWh_float);
id(total_heating_energy).publish_state(id(waermemertrag_heiz_total_mWh));
};
id(waermemertrag_heiz_total_kWh_flag)=false;
id(waermemertrag_heiz_total_mWh_flag)=false;
- lambda: |-
if (id(waermemertrag_heiz_tag_kwh_flag) and id(waermemertrag_heiz_tag_wh_flag)){
id(waermemertrag_heiz_tag_kwh) += id(waermemertrag_heiz_tag_wh_float);
id(daily_heating_energy).publish_state(id(waermemertrag_heiz_tag_kwh));
};
id(waermemertrag_heiz_tag_kwh_flag)=false;
id(waermemertrag_heiz_tag_wh_flag)=false;
- lambda: |-
if (id(waermemertrag_ww_tag_kwh_flag) and id(waermemertrag_ww_tag_wh_flag)){
id(waermemertrag_ww_tag_kwh) += id(waermemertrag_ww_tag_wh_float);
id(daily_heating_energy_water).publish_state(id(waermemertrag_ww_tag_kwh));
};
id(waermemertrag_ww_tag_kwh_flag)=false;
id(waermemertrag_ww_tag_wh_flag)=false;
#el. Leistungsaufnahme WW Tag Wh - ok
- canbus.send:
data: [ 0x31, 0x00, 0xfa,0x09,0x1a,0x00,0x00 ]
can_id: 0x680
- delay: 200ms
#el. Leistungsaufnahme WW Tag kWh - ok
- canbus.send:
data: [ 0x31, 0x00, 0xfa,0x09,0x1b,0x00,0x00 ]
can_id: 0x680
- delay: 200ms
#el. Leistungsaufnahme WW Summe kwh - ok
- canbus.send:
data: [ 0x31, 0x00, 0xfa,0x09,0x1c,0x00,0x00 ]
can_id: 0x680
- delay: 200ms
#el. Leistungsaufnahme WW Summe Mwh - ok
- canbus.send:
data: [ 0x31, 0x00, 0xfa,0x09,0x1d,0x00,0x00 ]
can_id: 0x680
- delay: 200ms
#el. Leistungsaufnahme Heizen Tag Wh - ok
- canbus.send:
data: [ 0x31, 0x00, 0xfa,0x09,0x1e,0x00,0x00 ]
can_id: 0x680
- delay: 200ms
#el. Leistungsaufnahme Heizen Tag Wh - ok
- canbus.send:
data: [ 0x31, 0x00, 0xfa,0x09,0x1f,0x00,0x00 ]
can_id: 0x680
- delay: 200ms
#el. Leistungsaufnahme Heizen Summe kwh - ok
- canbus.send:
data: [ 0x31, 0x00, 0xfa,0x09,0x20,0x00,0x00 ]
can_id: 0x680
- delay: 200ms
#el. Leistungsaufnahme Heizen Summe Mwh - ok
- canbus.send:
data: [ 0x31, 0x00, 0xfa,0x09,0x21,0x00,0x00 ]
can_id: 0x680
- delay: 10s
- lambda: |-
if (id(el_aufnahmeleistung_ww_total_mWh_flag) and id(el_aufnahmeleistung_ww_total_kWh_flag)){
id(el_aufnahmeleistung_ww_total_mWh) += id(el_aufnahmeleistung_ww_total_kWh_float);
id(total_electric_energy_water).publish_state(id(el_aufnahmeleistung_ww_total_mWh));
};
id(el_aufnahmeleistung_ww_total_mWh_flag)=false;
id(el_aufnahmeleistung_ww_total_kWh_flag)=false;
- lambda: |-
if (id(el_aufnahmeleistung_heiz_total_mWh_flag) and id(el_aufnahmeleistung_heiz_total_kWh_flag)){
id(el_aufnahmeleistung_heiz_total_mWh) += id(el_aufnahmeleistung_heiz_total_kWh_float);
id(total_electric_energy_heating).publish_state(id(el_aufnahmeleistung_heiz_total_mWh));
};
id(el_aufnahmeleistung_heiz_total_mWh_flag)=false;
id(el_aufnahmeleistung_heiz_total_mWh_flag)=false;
- lambda: |-
if (id(el_aufnahmeleistung_ww_tag_kwh_flag) and id(el_aufnahmeleistung_ww_tag_wh_flag)){
id(el_aufnahmeleistung_ww_tag_kwh) += id(el_aufnahmeleistung_ww_tag_wh_float);
id(daily_electric_energy_water).publish_state(id(el_aufnahmeleistung_ww_tag_kwh));
};
id(el_aufnahmeleistung_ww_tag_kwh_flag)=false;
id(el_aufnahmeleistung_ww_tag_wh_flag)=false;
- lambda: |-
if (id(el_aufnahmeleistung_heiz_tag_kwh_flag) and id(el_aufnahmeleistung_heiz_tag_wh_flag)){
id(el_aufnahmeleistung_heiz_tag_kwh) += id(el_aufnahmeleistung_heiz_tag_wh_float);
id(daily_electric_energy_heating).publish_state(id(el_aufnahmeleistung_heiz_tag_kwh));
};
id(el_aufnahmeleistung_heiz_tag_kwh_flag)=false;
id(el_aufnahmeleistung_heiz_tag_wh_flag)=false;
- lambda: |-
ESP_LOGD("main", "EVU Sperre requested");
#Außentemperatur 1/10 °C et dec value - ok /10
- canbus.send:
data: [ 0x31, 0x00, 0xfa,0x00,0x0c,0x00,0x00 ]
can_id: 0x680
- delay: 200ms
#Vorlauftemperatur - ok 1/10
- canbus.send:
data: [ 0x31, 0x00, 0xfa,0x00,0x0d,0x00,0x00 ]
can_id: 0x680
- delay: 200ms
#Vorlauftemperatur Hzg - ok 1/10
- canbus.send:
data: [ 0x31, 0x00, 0xfa,0x00,0x0f,0x00,0x00 ]
can_id: 0x680
- delay: 200ms
#Rücklauftemperatur Hzg - ok 1/10
- canbus.send:
data: [ 0x31, 0x00, 0xfa,0x00,0x16,0x00,0x00 ]
can_id: 0x680
- delay: 200ms
#WW Temperatur - ok + offset
- canbus.send:
data: [ 0x31, 0x00, 0xfa,0x00,0x0e,0x00,0x00 ]
can_id: 0x680
- delay: 200ms
#Quelle IST: - ok 1/10
- canbus.send:
data: [ 0x31, 0x00, 0xfa,0x01,0xd4,0x00,0x00 ]
can_id: 0x680
- delay: 200ms
#Laufzeit VD Heizen - nok 180 - nok 301 - nok 480 - nok 500
# - canbus.send:
# data: [ 0x31, 0x00, 0xfa,0x05,0xa5,0x00,0x00 ]
# can_id: 0x680
# - delay: 200ms
#Laufzeit VD Kühlen - nok 180 - nok 301 - nok 480
# - canbus.send:
# data: [ 0xa1, 0x00, 0xfa,0x05,0xa6,0x00,0x00 ]
# can_id: 0x680
# - delay: 200ms
#Laufzeit VD WW - nok 180 - nok 301 - nok 480
# - canbus.send:
# data: [ 0xa1, 0x00, 0xfa,0x05,0xa7,0x00,0x00 ]
# can_id: 0x680
# - delay: 200ms
#Laufzeit VD NHZ WW - nok 180 - nok 301 - nok 480
# - canbus.send:
# data: [ 0xa1, 0x00, 0xfa,0x05,0xa8,0x00,0x00 ]
# can_id: 0x680
# - delay: 200ms
#Laufzeit VD NHZ Heizen - nok 180 - nok 301 - nok 480
# - canbus.send:
# data: [ 0xa1, 0x00, 0xfa,0x05,0xa9,0x00,0x00 ]
# can_id: 0x680
# - delay: 200ms
#Laufzeit VD NHZ Heizen - nok 180 - nok 301 - nok 480
# - canbus.send:
# data: [ 0xa1, 0x00, 0xfa,0x05,0xa9,0x00,0x00 ]
# can_id: 0x680
# - delay: 200ms
#Volumenstrom 1/10 l/min: - nok 180 - nok 301 - nok 480 - nok 514
# - canbus.send:
# data: [ 0xa1, 0x00, 0xfa,0x01,0xda,0x00,0x00 ]
# can_id: 0x680
# - delay: 200ms
#Heißgastemperatur 1/10 °C: - ok 1/10
# - canbus.send:
# data: [ 0xa1, 0x00, 0xfa,0x02,0x65,0x00,0x00 ]
# can_id: 0x680
# - delay: 200ms
#Volumenstrom HZK 1/10 l/min: - nok 180 - nok 301 - nok 480
# - canbus.send:
# data: [ 0xa1, 0x00, 0xfa,0x02,0xe3,0x00,0x00 ]
# can_id: 0x680
# - delay: 200ms
#Volumenstrom Pumpe WW Pri 1/10 l/min: - nok 180 - nok 301 - nok 480
# - canbus.send:
# data: [ 0xa1, 0x00, 0xfa,0x02,0xe5,0x00,0x00 ]
# can_id: 0x680
# - delay: 200ms
spi:
id: McpSpi
clk_pin: GPIO18
mosi_pin: GPIO23
miso_pin: GPIO19
canbus:
- platform: mcp2515
id: my_mcp2515
spi_id: McpSpi
cs_pin: GPIO15
can_id: 680
use_extended_id: false
bit_rate: 20kbps
on_frame:
#Warmwasser-Temperaturabfrage + Offset 3.9 °C
- can_id: 0x180
then:
- lambda: |-
if(x[0]==0xd2 and x[1]==0x00 and x[3]==0x00 and x[4] == 0x0e) {
float temperature =float((float((int((x[6])+( (x[5])<<8))))/10)+3.9);
id(temperature_water).publish_state(temperature);
ESP_LOGD("main", "Temperature received over can is %f", temperature);
}
#Quellen-Temperaturabfrage
- can_id: 0x180
then:
- lambda: |-
if(x[0]==0xd2 and x[1]==0x00 and x[3]==0x01 and x[4] == 0xd4) {
float temperature =float(float((int((x[6])+( (x[5])<<8))))/10);
id(temperature_source).publish_state(temperature);
ESP_LOGD("main", "Temperature received over can is %f", temperature);
}
#Vorlauftemperaturabfrage
- can_id: 0x180
then:
- lambda: |-
if(x[0]==0xd2 and x[1]==0x00 and x[3]==0x00 and x[4] == 0x0d) {
float temperature =float(float((int((x[6])+( (x[5])<<8))))/1000);
id(temperature_forerun).publish_state(temperature);
ESP_LOGD("main", "Temperature received over can is %f", temperature);
}
#Vorlauftemperaturabfrage Heizkreis
- can_id: 0x180
then:
- lambda: |-
if(x[0]==0xd2 and x[1]==0x00 and x[3]==0x00 and x[4] == 0x0f) {
float temperature =float(float((int((x[6])+( (x[5])<<8))))/1000);
id(temperature_forerun_heating).publish_state(temperature);
ESP_LOGD("main", "Temperature received over can is %f", temperature);
}
#Rücklauftemperaturabfrage
- can_id: 0x180
then:
- lambda: |-
if(x[0]==0xd2 and x[1]==0x00 and x[3]==0x00 and x[4] == 0x16) {
float temperature =float(float((int((x[6])+( (x[5])<<8))))/10);
id(temperature_return).publish_state(temperature);
ESP_LOGD("main", "Temperature received over can is %f", temperature);
}
#Außentemperaturabfrage
- can_id: 0x180
then:
- lambda: |-
if(x[0]==0xd2 and x[1]==0x00 and x[3]==0x00 and x[4] == 0x0c) {
float temperature =float(float((int((x[6])+( (x[5])<<8))))/10);
id(temperature_outside).publish_state(temperature);
ESP_LOGD("main", "Temperature received over can is %f", temperature);
}
#Luftfeuchtigkeit FEK mitlesen
- can_id: 0x301
then:
- lambda: |-
if(x[0]==0xc0 and x[1]==0x01 and x[2]==0x75) {
float humidity =float(float((int((x[4])+( (x[3])<<8))))/10);
id(humidity_inside).publish_state(humidity);
ESP_LOGD("main", "Humidity received over can is %f", humidity);
}
#Raumtemperatur FEK mitlesen
- can_id: 0x301
then:
- lambda: |-
if(x[0]==0xc0 and x[1]==0x01 and x[2]==0x11) {
float temperature =float(float((int((x[4])+( (x[3])<<8))))/10);
id(temperature_inside).publish_state(temperature);
ESP_LOGD("main", "Temperature received over can is %f", temperature);
}
#Elektrische Leistungsaufnahme Wh /kWh
- can_id: 0x180
then:
- lambda: |-
if(x[0]==0xd2 and x[1]==0x00 and x[2]==0xfa and x[3]==0x09) {
if (x[4]==0x1a){
id(el_aufnahmeleistung_ww_tag_wh_float) = (float((int((x[6])+( (x[5])<<8))))/1000);
id(el_aufnahmeleistung_ww_tag_wh_flag)=true;
ESP_LOGD("main", "el_aufnahmeleistung_ww_tag_kwh received over can is %f", id(el_aufnahmeleistung_ww_tag_wh_float));}
else if (x[4]==0x1e){
id(el_aufnahmeleistung_heiz_tag_wh_float) = (float((int((x[6])+( (x[5])<<8))))/1000);
id(el_aufnahmeleistung_heiz_tag_wh_flag) = true;
ESP_LOGD("main", "el_aufnahmeleistung_heiz_tag_wh received over can is %f", id(el_aufnahmeleistung_heiz_tag_wh_float));}
else if (x[4]==0x1c){
id(el_aufnahmeleistung_ww_total_kWh_float) = (float((int((x[6])+( (x[5])<<8))))/1000);
id(el_aufnahmeleistung_ww_total_kWh_flag)=true;
ESP_LOGD("main", "el_aufnahmeleistung_ww_total_kkWh received over can is %f", id(el_aufnahmeleistung_ww_total_kWh_float));}
else if (x[4]==0x20){
id(el_aufnahmeleistung_heiz_total_kWh_float) = (float((int((x[6])+( (x[5])<<8))))/1000);
id(el_aufnahmeleistung_heiz_total_kWh_flag) = true;
ESP_LOGD("main", "el_aufnahmeleistung_heiz_total_kWh received over can is %f", id(el_aufnahmeleistung_heiz_total_kWh_float));}
}
if(x[0]==0xd2 and x[1]==0x00 and x[2]==0xfa and x[3]==0x00 and x[4]==0x74){
if(x[5]==0x80 and x[6]==0x00){
id(evu_lock).publish_state(false);
}
else{
id(evu_lock).publish_state(true);
};
};
#Elektrische Leistungsaufnahme kWh / MWH
- can_id: 0x180
then:
- lambda: |-
if(x[0]==0xd2 and x[1]==0x00 and x[2]==0xfa and x[3]==0x09) {
if(x[4]==0x1b){
id(el_aufnahmeleistung_ww_tag_kwh) =float(int((x[6])+( (x[5])<<8)));
id(el_aufnahmeleistung_ww_tag_kwh_flag)=true;
ESP_LOGD("main", "el_aufnahmeleistung_ww_tag_kwh received over can is %f", id(el_aufnahmeleistung_ww_tag_kwh));}
else if(x[4]==0x1f){
id(el_aufnahmeleistung_heiz_tag_kwh) =float(int((x[6])+( (x[5])<<8)));
id(el_aufnahmeleistung_heiz_tag_kwh_flag)=true;
ESP_LOGD("main", "el_aufnahmeleistung_heiz_tag_kwh received over can is %f", id(el_aufnahmeleistung_heiz_tag_kwh));}
else if(x[4]==0x1d){
id(el_aufnahmeleistung_ww_total_mWh) =float(int((x[6])+( (x[5])<<8)));
id(el_aufnahmeleistung_ww_total_mWh_flag)=true;
ESP_LOGD("main", "el_aufnahmeleistung_ww_total_mWh received over can is %f", id(el_aufnahmeleistung_ww_total_mWh));}
else if(x[4]==0x21){
id(el_aufnahmeleistung_heiz_total_mWh) =float(int((x[6])+( (x[5])<<8)));
id(el_aufnahmeleistung_heiz_total_mWh_flag)=true;
ESP_LOGD("main", "el_aufnahmeleistung_heiz_total_mWh received over can is %f", id(el_aufnahmeleistung_heiz_total_mWh));}
}
#Wärmeertrag WW/Heizung MWh / kWH
- can_id: 0x180
then:
- lambda: |-
if(x[0]==0xd2 and x[1]==0x00 and x[2]==0xfa and x[3]==0x09) {
if(x[4]==0x23){
id(waermemertrag_electr_ww_total_mWh) =float(int((x[6])+( (x[5])<<8)));
id(waermemertrag_electr_ww_total_mWh_flag)=true;
ESP_LOGD("main", "waermemertrag_electr_ww_tag_kwh received over can is %f", id(waermemertrag_electr_ww_total_mWh));}
else if(x[4]==0x27){
id(waermemertrag_electr_heiz_total_mWh) =float(int((x[6])+( (x[5])<<8)));
id(waermemertrag_electr_heiz_total_mWh_flag)=true;
ESP_LOGD("main", "waermemertrag_electr_heiz_tag_kwh received over can is %f", id(waermemertrag_electr_heiz_total_mWh));}
else if(x[4]==0x2b){
id(waermemertrag_ww_tag_kwh) =float(int((x[6])+( (x[5])<<8)));
id(waermemertrag_ww_tag_kwh_flag)=true;
ESP_LOGD("main", "waermemertrag_ww_tag_kwh received over can is %f", id(waermemertrag_ww_tag_kwh));}
else if(x[4]==0x2d){
id(waermemertrag_ww_total_mWh) =float(int((x[6])+( (x[5])<<8)));
id(waermemertrag_ww_total_mWh_flag)=true;
ESP_LOGD("main", "waermemertrag_ww_total_mWh received over can is %f", id(waermemertrag_ww_total_mWh));}
else if(x[4]==0x2f){
id(waermemertrag_heiz_tag_kwh) =float(int((x[6])+( (x[5])<<8)));
id(waermemertrag_heiz_tag_kwh_flag)=true;
ESP_LOGD("main", "waermemertrag_heiz_tag_kwh received over can is %f", id(waermemertrag_heiz_tag_kwh));}
else if(x[4]==0x31){
id(waermemertrag_heiz_total_mWh) =float(int((x[6])+( (x[5])<<8)));
id(waermemertrag_heiz_total_mWh_flag)=true;
ESP_LOGD("main", "waermemertrag_heiz_total_kWh_float received over can is %f", id(waermemertrag_heiz_total_mWh));}
}
#Wärmeertrag WW/Heizung Wh / kWH
- can_id: 0x180
then:
- lambda: |-
if(x[0]==0xd2 and x[1]==0x00 and x[2]==0xfa and x[3]==0x09) {
if(x[4]==0x22){
id(waermemertrag_electr_ww_total_kWh_float) =float(int((x[6])+( (x[5])<<8)))/1000;
id(waermemertrag_electr_ww_total_kWh_flag)=true;
ESP_LOGD("main", "waermemertrag_electr_ww_tag_wh_float received over can is %f", id(waermemertrag_electr_ww_total_kWh_float));}
else if(x[4]==0x26){
id(waermemertrag_electr_heiz_total_kWh_float) =float(int((x[6])+( (x[5])<<8)))/1000;
id(waermemertrag_electr_heiz_total_kWh_flag)=true;
ESP_LOGD("main", "waermemertrag_electr_heiz_tag_wh_float received over can is %f", id(waermemertrag_electr_heiz_total_kWh_float));}
else if(x[4]==0x2a){
id(waermemertrag_ww_tag_wh_float) =float(int((x[6])+( (x[5])<<8)))/1000;
id(waermemertrag_ww_tag_wh_flag)=true;
ESP_LOGD("main", "waermemertrag_ww_tag_wh_float received over can is %f", id(waermemertrag_ww_tag_wh_float));}
else if(x[4]==0x2c){
id(waermemertrag_ww_total_kWh_float) =float(int((x[6])+( (x[5])<<8)))/1000;
id(waermemertrag_ww_total_kWh_flag)=true;
ESP_LOGD("main", "waermemertrag_ww_total_kWh_float received over can is %f", id(waermemertrag_ww_total_kWh_float));}
else if(x[4]==0x2e){
id(waermemertrag_heiz_tag_wh_float) =float(int((x[6])+( (x[5])<<8)))/1000;
id(waermemertrag_heiz_tag_wh_flag)=true;
ESP_LOGD("main", "waermemertrag_heiz_tag_wh_float received over can is %f", id(waermemertrag_heiz_tag_wh_float));}
else if(x[4]==0x30){
id(waermemertrag_heiz_total_kWh_float) =float(int((x[6])+( (x[5])<<8)))/1000;
id(waermemertrag_heiz_total_kWh_flag)=true;
ESP_LOGD("main", "waermemertrag_heiz_total_kWh_float received over can is %f", id(waermemertrag_heiz_total_kWh_float));}
}
- can_id: 0x100
then:
- lambda: |-
int wert0 = int(x[0]);
int wert1 =int(x[1]);
int wert2 =int(x[2]);
int wert3 =int(x[3]);
int wert4 =int(x[4]);
int wert5 =int(x[5]);
int wert6 =int(x[6]);
float wert7 = float(int((x[6])+( (x[5])<<8)));
ESP_LOGI("main", "Antwort von 100 Hex: %x %x %x %x %x %x %x", wert0, wert1, wert2, wert3, wert4, wert5, wert6);
ESP_LOGI("main", "Antwort von 100 Float: %f", wert7);
ESP_LOGI("main", "Antwort von 100 Dez.: %i %i", wert5, wert6);
- can_id: 0x500
then:
- lambda: |-
int wert0 = int(x[0]);
int wert1 =int(x[1]);
int wert2 =int(x[2]);
int wert3 =int(x[3]);
int wert4 =int(x[4]);
int wert5 =int(x[5]);
int wert6 =int(x[6]);
float wert7 = float(int((x[6])+( (x[5])<<8)));
ESP_LOGI("main", "Antwort von 500 Hex: %x %x %x %x %x %x %x", wert0, wert1, wert2, wert3, wert4, wert5, wert6);
ESP_LOGI("main", "Antwort von 500 Float: %f", wert7);
ESP_LOGI("main", "Antwort von 500 Dez.: %i %i", wert5, wert6);
- can_id: 0x514
then:
- lambda: |-
int wert0 = int(x[0]);
int wert1 =int(x[1]);
int wert2 =int(x[2]);
int wert3 =int(x[3]);
int wert4 =int(x[4]);
int wert5 =int(x[5]);
int wert6 =int(x[6]);
float wert7 = float(int((x[6])+( (x[5])<<8)));
ESP_LOGI("main", "Antwort von 514 Hex: %x %x %x %x %x %x %x", wert0, wert1, wert2, wert3, wert4, wert5, wert6);
ESP_LOGI("main", "Antwort von 514 Float: %f", wert7);
ESP_LOGI("main", "Antwort von 514 Dez.: %i %i", wert5, wert6);
- can_id: 0x700
then:
- lambda: |-
int wert0 = int(x[0]);
int wert1 =int(x[1]);
int wert2 =int(x[2]);
int wert3 =int(x[3]);
int wert4 =int(x[4]);
int wert5 =int(x[5]);
int wert6 =int(x[6]);
float wert7 = float(int((x[6])+( (x[5])<<8)));
ESP_LOGI("main", "Antwort von 700 Hex: %x %x %x %x %x %x %x", wert0, wert1, wert2, wert3, wert4, wert5, wert6);
ESP_LOGI("main", "Antwort von 700 Float: %f", wert7);
ESP_LOGI("main", "Antwort von 700 Dez.: %i %i", wert5, wert6);
- can_id: 0x402
then:
- lambda: |-
int wert0 = int(x[0]);
int wert1 =int(x[1]);
int wert2 =int(x[2]);
int wert3 =int(x[3]);
int wert4 =int(x[4]);
int wert5 =int(x[5]);
int wert6 =int(x[6]);
float wert7 = float(int((x[6])+( (x[5])<<8)));
ESP_LOGI("main", "Antwort von 402 Hex: %x %x %x %x %x %x %x", wert0, wert1, wert2, wert3, wert4, wert5, wert6);
ESP_LOGI("main", "Antwort von 402 Float: %f", wert7);
ESP_LOGI("main", "Antwort von 402 Dez.: %i %i", wert5, wert6);
- can_id: 0x401
then:
- lambda: |-
int wert0 = int(x[0]);
int wert1 =int(x[1]);
int wert2 =int(x[2]);
int wert3 =int(x[3]);
int wert4 =int(x[4]);
int wert5 =int(x[5]);
int wert6 =int(x[6]);
float wert7 = float(int((x[6])+( (x[5])<<8)));
ESP_LOGI("main", "Antwort von 401 Hex: %x %x %x %x %x %x %x", wert0, wert1, wert2, wert3, wert4, wert5, wert6);
ESP_LOGI("main", "Antwort von 401 Float: %f", wert7);
ESP_LOGI("main", "Antwort von 401 Dez.: %i %i", wert5, wert6);
- can_id: 0x69f
then:
- lambda: |-
int wert0 = int(x[0]);
int wert1 =int(x[1]);
int wert2 =int(x[2]);
int wert3 =int(x[3]);
int wert4 =int(x[4]);
int wert5 =int(x[5]);
int wert6 =int(x[6]);
float wert7 = float(int((x[6])+( (x[5])<<8)));
ESP_LOGI("main", "Antwort von 69f Hex: %x %x %x %x %x %x %x", wert0, wert1, wert2, wert3, wert4, wert5, wert6);
ESP_LOGI("main", "Antwort von 69f Float: %f", wert7);
ESP_LOGI("main", "Antwort von 69f Dez.: %i %i", wert5, wert6);
- can_id: 0x69e
then:
- lambda: |-
int wert0 = int(x[0]);
int wert1 =int(x[1]);
int wert2 =int(x[2]);
int wert3 =int(x[3]);
int wert4 =int(x[4]);
int wert5 =int(x[5]);
int wert6 =int(x[6]);
float wert7 = float(int((x[6])+( (x[5])<<8)));
ESP_LOGI("main", "Antwort von 69e Hex: %x %x %x %x %x %x %x", wert0, wert1, wert2, wert3, wert4, wert5, wert6);
ESP_LOGI("main", "Antwort von 69e Float: %f", wert7);
ESP_LOGI("main", "Antwort von 69e Dez.: %i %i", wert5, wert6);
- can_id: 0x480
then:
- lambda: |-
int wert0 = int(x[0]);
int wert1 =int(x[1]);
int wert2 =int(x[2]);
int wert3 =int(x[3]);
int wert4 =int(x[4]);
int wert5 =int(x[5]);
int wert6 =int(x[6]);
float wert7 = float(int((x[6])+( (x[5])<<8)));
ESP_LOGD("main", "Antwort von 480 Hex: %x %x %x %x %x %x %x", wert0, wert1, wert2, wert3, wert4, wert5, wert6);
ESP_LOGD("main", "Antwort von 480 Float: %f", wert7);
ESP_LOGD("main", "Antwort von 480 Dez.: %i %i", wert5, wert6);
Also das Problem, dass das Laden des Zustandsverlaufs so lange dauert, habe ich nicht.
Ich habe 2 Ideen zur Ursache:
1. Irgend etwas wird super hochfrequent aufgezeichnet. Zum Beispiel einer oder Mehrere der Werte, die ohne Anfragen am Bus liegen.
2. Die SD Karte hat Probleme. Ich arbeite mit SSD Festplatte und InfluxDB und Grafana. SD Karte ist für so einen Anwendungsfall ungeeignet.
Anleitungen wie man das macht, gibt es im Netz zu genüge.
Hallo,
Ich hab noch ein Problem gelöst.
Die Temperatur wurde bei mir teilweise falsch ausgegeben.
Bsp.: Die Außentemperatur - es hat heute Minusgrade - zeigte 6549.2 °C
Die Lösung war, den Integer-Vektor als int16_t zu deklarieren
Jetzt habe ich ein Problem:
Ich möchte von W-Lan auf Ethernet umsteigen und habe mir dazu dieses Board zugelegt: https://www.olimex.com/Products/IoT/ESP32/ESP32-POE/open-source-hardware.
Leider bekomme ich mit dem Angeschlossenen MCP 2515 keine funktionierende CAN Kommunikation hin. Folgende GPIO´s nutze ich:
spi:
id: McpSpi
clk_pin: GPIO14
mosi_pin: GPIO13
miso_pin: GPIO16
canbus:
- platform: mcp2515
id: my_mcp2515
spi_id: McpSpi
cs_pin: GPIO4
can_id: 5
bit_rate: 20kbps
use_extended_id: false
@robob hast Du vielleicht eine Idee?
Ich finde die Tatsache dass es PoE-Devices gibt cool.
Werden deine CAN-Anfragen lt. Log abgesetzt?
Wie ermittelst du, dass keine Daten empfangen werden - unten mein Codeschnipsel mit dem ich die Pakete mitlogge.
Ich nutze übrigens CAN-ID 680, aber ich glaube das hat keine echte Auswirkung.
Ich hab mit meinem ESP WROOM32 das Problem, dass nach einigen Tagen die Daten nicht aktualisiert werden. dH es sind immer die letztgültigen Temperaturen, Verbrauchswerte etc. gültig und ändern sich nicht mehr in Homeassistant. Es werden zwar lt. Log-Screen im ESP-Device CAN-Pakete abgesetzt, aber es fehlt der Hinweistext dass eine Antwort zurück kommt. Ich spiele dann die Firmware neu ein, danach gehts wieder. Obs auch ein simpler Reset tut weiß ich noch nicht - schätze aber ja.
Ausfallzeit einmal um ca. 23:00 Uhr, fünf Tage später um ca. 21:00 Uhr, vier Tage später um ca. 10:00 Uhr, zwei Tage später um ca. 20:00 Uhr.
Zuletzt habe ich die Delay-Zeit zwischen denen die CAN-Pakete abgesetzt werden auf 500 ms verdoppelt. k.A. ob dadurch die Zeit bis zum Ausfall auf zwei Tage gefallen ist.
- can_id: 0x180
then:
- lambda: |-
int wert0 = int(x[0]);
int wert1 =int(x[1]);
int wert2 =int(x[2]);
int wert3 =int(x[3]);
int wert4 =int(x[4]);
int wert5 =int(x[5]);
int wert6 =int(x[6]);
float wert7 = float(int((x[6])+( (x[5])<<8)));
ESP_LOGI("main", "Antwort von 180 Hex: %x %x %x %x %x %x %x", wert0, wert1, wert2, wert3, wert4, wert5, wert6);
ESP_LOGI("main", "Antwort von 180 Float: %f", wert7);
ESP_LOGI("main", "Antwort von 180 Dez.: %i %i", wert5, wert6);
Ich habe zwei ESP8266 mit ebenso 2 MCP2515 auf dem CANBus. Der eine sendet, der Andere empfängt ohne Probleme, das sehe ich den Logs.
Ich schwenke jetzt um auf Rasperry PI mit Waveshare CAN Hat und programmiere das komplett selbst in Python dann weiß man was man hat ;-)
Schade dass du keinen Erfolg mehr damit hattest.
Raspberry Pis sind derzeit ja leider auch Mangelware.
Ich habe inzwischen eine Automatisierung in HomeAssistant implementiert, die mein ESP-Device einmal täglich resettet.
Dadurch hatte ich seither keine Ausfälle mehr.
Mir gefällt die Lösung mit dem ESP32 ganz gut.
Ich schalte damit jetzt außerdem im Heizraum das Licht.
Ich hab aber gerade ein ähnliches Problem seit ich was an der Config geändert hab: Ich habe die Lambda-Funktionen im Code verschoben. Jetzt funktioniert der Code nicht mehr wie erwartet. Es wird nur der CAN-Befehl abgesendet und die Antworten nicht abgearbeitet.
Es ist aber gut möglich, dass sich das mit etwas anderem überschnitten hat und gar nichts mit der Änderung des Codes zu tun hat. Ein paar Stunden davor sehe ich im logging fehlerhafte Einträge.
Ich hab deshalb das ESP-Device mit neuem Namen integriert. So wie es aussieht ohne Erfolg
-Nachtrag - es war das Kabel
Ich habe das jetzt über einen Rasperry Pi in Python umgesetzt. Code werde ich dann auch noch mal teilen, wenn erfolgreich getestet.
Folgendes Problem konnte ich bisher in Esphome nämlich auch nicht zuverlässig lösen:
Jedes Mal um Mitternacht wird von der Wärmenpumpensteuerung der Tagesverbrauch in den Speicher für den Lifetimeverbrauch geschrieben. Wenn man also einen aktuellen Lifetimeverbrauch haben will, muss man den Tagesverbrauch auf den Lifetimeverbrauch addieren (so macht es auch das Display).
Mit Esphome habe ich es bisher nicht geschafft, immer die Aktualiserung des Lifetime-Verbrauchs im richtigen Moment zu machen. Oft haut das beim Warmwasser nicht hin.
Mit eigenem Code ist es da deutlich einfacher einen passenden Check einzubauen.
Was mir bisher noch an Info fehlt ist die Info, in welcher Nachricht wie die Info zu den Statusicons zu finden sind, also
Verdichter an/aus
Wamwasser an/aus
Heizen an/aus
Abtauen an/aus
Kann hier jemand helfen?
Das erklärt mir gerade warum mein COP bei der Berechnung immer den gleichen Wert ausgibt. Wenn ich den aus dem Gesamtverbrauch ermittle fehlt die Information vom Tagesverbrauch.
Aber warum ist das zeitlich ein Problem? Es gilt doch dann zu jeder Tageszeit z.B. <WW Tag> + <WW Gesamt> + <WW elektrische Nachheizung> = <WW Gesamt aktuell>
Wie überträgst du dann die Daten von deinem Raspberry in deinen Homeassistant? Via MQTT?
Helfen diese Einträge weiter?
{ "LZ_VERD_1_HEIZBETRIEB" , 0x07fc, et_mil_val},
{ "LZ_VERD_2_HEIZBETRIEB" , 0x07fd, et_mil_val},
{ "LZ_VERD_1_2_HEIZBETRIEB" , 0x07fe, et_mil_val},
{ "LZ_VERD_1_KUEHLBETRIEB" , 0x07ff, et_mil_val},
{ "LZ_VERD_2_KUEHLBETRIEB" , 0x0800, et_mil_val},
{ "LZ_VERD_1_2_KUEHLBETRIEB" , 0x0801, et_mil_val},
{ "LZ_VERD_1_WW_BETRIEB" , 0x0802, 0},
{ "LZ_VERD_2_WW_BETRIEB" , 0x0803, 0},
{ "LZ_VERD_1_2_WW_BETRIEB" , 0x0804, 0},
{ "ABTAUUNGAKTIV" , 0x0061, 0}
Helfen diese Einträge weiter?
Ja diese Einträge könnten es wohl sein. Ich habe sie nur noch nicht auf dem Bus gefunden. Eigentlich sollte man die ja nicht anfragen müssen, denn die Informationen werden ja permanent auf dem Display angezeigt und werden deshalb zyklisch oder on change gesendet. Was bedeutet "et_mil_val"?
Aber warum ist das zeitlich ein Problem?
Die machen das ja so, dass die den Wert im nichtflüchtigen Speicher nur 1x am Tag aktualisieren, weil der Speicher nicht zu viele Schreibzugriffe verträgt. Ich bin mir nicht sicher, ob Lesezugriffe auch problematisch sind. Deshalb frage ich nur 1x zu Mitternacht an. Wenn das ganze Zeitlich nicht 100%ig passt, kommt es zu fehlern. Gleiches gilt übrigens bei den Tageswerten auch, wenn man erst die stellen vor dem Komma anfragt, dann die nach dem Komma, es inzischen aber einen Übersprung bei den Vorkommastellen gab.
Solche Dinge kann man mit ESPhome sicherlich auch abfangen aber für mich gestaltete sich das in Python einfacher.
Wie überträgst du dann die Daten von deinem Raspberry in deinen Homeassistant?
Die Daten übertrage ich per MQTT an Homeassistant.
Habe gerade in Erfahrung gebracht "et_mil_val" heisst, der Umrechnungsfaktor ist 0,001. Dann ist es aber kein Status.
Zitat von: Vincent82 am 08 Februar 2022, 20:08:07
Ich bin mir nicht sicher, ob Lesezugriffe auch problematisch sind. Deshalb frage ich nur 1x zu Mitternacht an.
Aber von Stiebel Eltron gibt es ja auch ein Internet Service Gateway. Das wird die gleichen Lesezugriffe vornehmen.
Denkst du wirklich dass Lesezugriffe problematisch sind?
Hallo,
von Stiebel Eltron gibt es ja auch ein Energie Management System (EMI)
https://www.stiebel-eltron.at/content/dam/ste/de/de/home/services/Downloadlisten/Bedienungsanleitung%20EMI.pdf (https://www.stiebel-eltron.at/content/dam/ste/de/de/home/services/Downloadlisten/Bedienungsanleitung%20EMI.pdf)
Ich möchte im Grunde das gleiche über CAN-Bus und in Eigenentwicklung umsetzen.
Also Warmwasser auf erhöhte Temperatur setzen, wenn ich genug PV-Strom erzeuge und senken, wenn nicht genug verfügbar ist.
Weiß zufällig jemand, wie dieses System die erhöhte Temperatur umsetzt?
Ich könnte ja rund um die Uhr auf Komfort-Betrieb fahren und via CAN-Bus die Komfort Soll-Temperatur erhöhen sobald genug PV-Strom verfügbar ist. Und dann wieder am Abend die Komfort Soll-Temperatur auf niedrigere Temperatur senken.
Aber laufe ich da Gefahr, dass ich dem internen Speicher schade?
Die Anlage ist von 2019, also noch nicht so alt.
Hallo Also, wenn Du ein paar mal am Tag die Temperatur veränderst ist das sicherlich kein Problem.
Irgendwo abe ich auch schon mal gelesen, dass es jemand so macht wie Du es vorhast. Ich habe selbst noch keine PV aber mein Freund und bei ihm möchte ich es demnächst auch so realisieren.
Also lt. Handbuch vom EMI stellt dieses Gerät die Zeit für das Warmwasserprogramm ein.
dH wenn der Forecast sagt, dass die Sonne scheint, dann wird in dieses Zeitfenster das Warmwassprogramm gelegt.
Ich hab das jetzt gerade auch ausprobiert, weil sich so etwas gut umsetzen ließe, wenn gerade genug Strom auf der PV-Anlage ist.
Warmwasserprogramm Mo-So ist die Adresse 0x17a0
Der Tag dabei wird in 24x15 Minuten-Intervalle aufgeteilt. Der Hexwert an 6. Stelle das CAN-Pakets gibt die Startzeit des Programm-Intervalls an. Die 7. Stelle die Ende-Zeit.
Ich hab mir dazu im Excel eine Tabelle für jede Viertelstunde des Tages erstellt und die entsprechende Codierung in Dezimal bzw. Hexadezimal in eine weitere Spalte.
00:15 = 1; 00:30 = 2, ...
für ein Zeitintervall von 11:30 Uhr bis 13:30 (länger braucht die Heizung normal nicht für rd. 10-15 °C von Eco- zu Komfort-Temperatur) kommt entsprechend raus (Dezimal) 46 bis 54.
Das CAN-Paket sieht dann so aus:
0x30 0x00 0xfa 0x17 0xa0 0x2e 0x36
Mir fehlt noch der Weg, wie ich die Start- und Ende-Zeit in ein Script im Homeassistant bekomme.
Evtl. über Dezimalstunden: 0:15=0,25=1/4; 0:30=0,5=2/4; 0:45=0,75=3/4...
Vielleicht ist aber doch der Weg über die Temperaturerhöhung und -Absenkung einfacher
Ja die Frage stelle ich mir auch wieso nicht einfach die Solltemperatur dynamisch anpassen?
Zitat von: Vincent82 am 05 Dezember 2021, 21:51:53
Hallo author=momad, Dein Screenshot sieht so aus als wäre er von Home Assistant. Wenn dem so ist, könntest Du einmal beschreiben, wie Du das technisch gelöst hast?
Hallo Vincent,
Sorry ich war ewig nicht mehr hier und habe erst deine Frag hier gesehen.
Ich schulde dir hier eine Antwort und zwar ich habe bei mir die Lösung damals für Faule per mqtt von Fhem@PI3 alles Richtung Homeassitant zu schicken und dort die Sensoren und Daten zu verarbeiten.
Bei Interesse kann ich gerne meine config hier posten.
Offen ist noch bei mir das Thema :
Lässt sich eigentlich den SG Ready Modus (PV Anlage Überschuss nutzen) hier auch via CAN-BUS ansteuern?
Falls ja hat es jemanden bereits probiert und welches Wert sollte hierfür aktiviert werden?
Sind die CAN BUS Adressen für den SG-Ready Betriebsmodis bekannt?
Damit lässt sich den ISG Web Plus fast komplett ersetzen.
Ich steuer bei mir bei Bedarf einfach die Warmwasser Temperatur auf einen höheren Wert wenn PV Überschuss vorhanden.
Ich suche schon länger eine Möglichkeit die Stiebel-Eltron (WPL 13 mit WPM II) Wärmepumpe einzubinden. Eigentlich möchte ich diese Warmwasser aufbereiten lassen, wenn genügen PV-Strom da ist. Aktuell habe ich aber das Problem, dass die IWS (Steuerung in der WPL 13) zwischen durch auf Störung geht und ich nicht weiss warum. HD/ND-Fehler bis anhin nur im Sommerbetrieb und ziemlich exakt jeweils nach einem Jahr im Juli, nun aber öfters. Der Sache möchte ich auf den Grund gehen. Gefunden habe ich dazu mal folgendes:
https://www.haustechnikdialog.de/Forum/t/140804/Sammelstoerung-HD-ND-Fehler-bei-Stiebel-WPL18
Mit FHEM (läuft auf einem Standard PC mit Debian) und einem CAN Bus USB-Adapter erhoffe ich mir, zumindest den Zustand beim Eintreten des Fehlers loggen zu können. Als Adapter den hier z.B.:
https://linux-automation.com/de/products/candlelight.html
wobei ich mich bei dem Adapter Frage wie anschliessen (wo ist CAN_L, GND?). Ist die Belegung des SUB-D-Stecker «normiert»? Also so wie hier (bzgl. der beschrifteten Seite passt es):
https://www.opendcc.de/info/can/can_connector.html
Irgendwelche Tipps bzgl. Adapter usw.?
Gruss
tomix
Hallo Frank
Zitat von: intershopper am 24 März 2018, 09:40:08
Ich habe meine WPL13 um ein paar sinnvolle Usereadings erweitert. So kann Pumpen- und Verdichterstatus überwacht werden.
Wir haben auch eine WPL13 und ich versuche eine passende 50_Elster.pm zu generieren. Nun finde ich im Internet die Software ComfortSoft nirgends und wenn ich sie finden würde fehlt mir ein Windows (evtl. würde die Software aber in Wine oder so laufen).
Hast du ein 50_Elster.pm passen für eine WPL13 (dann könnte ich mir das gennerien sparen) oder weisst du wo ich ComfortSoft noch runter laden könnte.
Bis jetzt bin ich wie hier beschrieben vorgegangen:
https://forum.fhem.de/index.php/topic,128767.0.html
Gruss
tomix
Hallo tomix
ComfortSoft läuft nicht unter Wine, leider.
Viele Grüsse
Jürg
Zitat von: juerg5524 am 18 August 2022, 15:29:26
ComfortSoft läuft nicht unter Wine, leider.
Wann hast du das zum letzten mal probiert? Aber zuerst müsste man mal die Software haben. Dann würde ich nochmals einen Versuch machen und ansonsten irgend eine virtuelle Maschine nehmen und irgend ein Windows auftreiben.
Ich habe aber noch ein paar grundlegende Verständnisfragen. Das hier habe ich mal gemacht:
https://forum.fhem.de/index.php/topic,128767.0.html
Dazu noch ein:
./can_scan can0 680 180 | tee ../log_can_scan.log
Die Datei ist weiter unten als Code-Block eingebunden.
Zur 50_Elster.pm habe ich dann noch folgendes dazu gefügt:
"BETRIEBS_STATUS" => { EIdx =>"0176", ID => "180" },
"INFO_TYP" => { EIdx => "019c", ID => "180" },
was auch funktioniert.
Diverse Werte führen bei einem get zu einen «?». Ich nehme an diese stehen einfach nicht zur Verfügung bei unserer Wärmepumpe (also wird keine Antwort erfolgen). Eine automatischen Abfrage alle 10 Sekunden (Standardintervall) erfolgt ebenfalls nicht. Wie könnte ich das Intervall erhöhen? Ich vermute mal die vielen «?» brauchen da mehr Zeit, somit sollte die get Liste bereinigt werden.
Stimmt meine Annahme, dass mindestens die Werte aus der Log-Datei funktionieren? Wie kommt man zu den anderen die es noch gibt? Also z.B. "BETRIEBS_STATUS" und "INFO_TYP"?
Via Comfortsoft käme ich dann noch zu den passenden set Befehlen, oder?
Wie loggt man einfach alles, was über den Bus läuft? Z.B. könnte ich mit loggen lassen und dann via WPMII ein Reset der IWS durchführen, dann müsste ich das entsprechende Kommando dafür doch sehen.
Die Hilfe am Schluss der 50_Elster.pm wird in FHEM nicht ausgegeben/erkannt, wieso? Stimmt da noch was grundlegendes nicht?
Danke für die Grundlagenarbeit von dir. Ich dachte schon ich finde gar keine Lösung, um die WP irgendwie sinnvoll einbinden und evtl. sogar steuern zu können.
Gruss
tomix
elster-kromschroeder can-bus address scanner and test utility
copyright (c) 2014 Jürg Müller, CH-5524
{ 0x180, 0x0001, 0x0045}, // FEHLERMELDUNG: 69
{ 0x180, 0x0002, 0x0032}, // KESSELSOLLTEMP: 5.0
{ 0x180, 0x0003, 0x01a4}, // SPEICHERSOLLTEMP: 42.0
{ 0x180, 0x0004, 0x0032}, // VORLAUFSOLLTEMP: 5.0
{ 0x180, 0x0005, 0x00c8}, // RAUMSOLLTEMP_I: 20.0
{ 0x180, 0x0006, 0x00c8}, // RAUMSOLLTEMP_II: 20.0
{ 0x180, 0x0007, 0x00c8}, // RAUMSOLLTEMP_III: 20.0
{ 0x180, 0x0008, 0x0096}, // RAUMSOLLTEMP_NACHT: 15.0
{ 0x180, 0x0009, 0x0917}, // UHRZEIT: 23:09
{ 0x180, 0x000a, 0x1008}, // DATUM: 16.08.
{ 0x180, 0x000b, 0xa507}, // GERAETE_ID: 165-07
{ 0x180, 0x000c, 0x00c6}, // AUSSENTEMP: 19.8
{ 0x180, 0x000d, 0xfe70}, // SAMMLERISTTEMP: -40.0
{ 0x180, 0x000e, 0x00dc}, // SPEICHERISTTEMP: 22.0
{ 0x180, 0x000f, 0xfe70}, // VORLAUFISTTEMP: -40.0
{ 0x180, 0x0010, 0x0031}, // GERAETEKONFIGURATION: 49
{ 0x180, 0x0013, 0x01f4}, // EINSTELL_SPEICHERSOLLTEMP: 50.0
{ 0x180, 0x0016, 0x00ed}, // RUECKLAUFISTTEMP: 23.7
{ 0x180, 0x0022, 0x001e}, // HYSTERESEZEIT: 3.0
{ 0x180, 0x0023, 0x0000}, // MAX_HYSTERESE: 0
{ 0x180, 0x0026, 0x0014}, // SPERRZEIT: 20
{ 0x180, 0x0028, 0x01f4}, // MAX_TEMP_KESSEL: 50.0
{ 0x180, 0x002b, 0x6400}, // TN: 100
{ 0x180, 0x0030, 0x0100}, // ACCESS_EEPROM: 1
{ 0x180, 0x0051, 0x0000}, // MULTIFUNKTION_ISTTEMP: 0.0
{ 0x180, 0x0053, 0x0000}, // HZK_PUMPE: 0
{ 0x180, 0x0058, 0x2e00}, // MISCHER_ZU: 46
{ 0x180, 0x0059, 0x0000}, // HEIZKREIS_STATUS: 0
{ 0x180, 0x005a, 0x0200}, // SPEICHER_STATUS: 2
{ 0x180, 0x0060, 0x0000}, // SCHALTFKT_IWS: 0
{ 0x180, 0x0063, 0x0000}, // KESSELSTATUS: 0
{ 0x180, 0x0064, 0x0000}, // SAMMLER_PUMPE: 0
{ 0x180, 0x00fe, 0x0100}, // INITIALISIERUNG: 1
{ 0x180, 0x0101, 0x0000}, // ANTILEGIONELLEN: 0
{ 0x180, 0x0109, 0x0000}, // RAUMFUEHLERKORREKTUR: 0
{ 0x180, 0x010d, 0x03e8}, // CODENUMMER: 1000
{ 0x180, 0x010e, 0x0037}, // HEIZKURVE: 0.55
{ 0x180, 0x010f, 0x0500}, // RAUMEINFLUSS: 1280
{ 0x180, 0x0111, 0x001e}, // HZK_KURVENABSTAND: 3.0
{ 0x180, 0x0112, 0x0200}, // PROGRAMMSCHALTER: Automatik
{ 0x180, 0x0113, 0x0000}, // SPRACHE: 0
{ 0x180, 0x011a, 0x0000}, // ESTRICHFUNKTION: 0
{ 0x180, 0x011b, 0x0100}, // FERIENANFANG_TAG: 1
{ 0x180, 0x011c, 0x0100}, // FERIENANFANG_MONAT: 1
{ 0x180, 0x011d, 0x0500}, // FERIENANFANG_JAHR: 5
{ 0x180, 0x011e, 0x0100}, // FERIENENDE_TAG: 1
{ 0x180, 0x011f, 0x0100}, // FERIENENDE_MONAT: 1
{ 0x180, 0x0120, 0x0500}, // FERIENENDE_JAHR: 5
{ 0x180, 0x0121, 0x0200}, // WOCHENTAG: 2
{ 0x180, 0x0122, 0x1000}, // TAG: 16
{ 0x180, 0x0123, 0x0800}, // MONAT: 8
{ 0x180, 0x0124, 0x1600}, // JAHR: 22
{ 0x180, 0x0125, 0x1700}, // STUNDE: 23
{ 0x180, 0x0126, 0x0900}, // MINUTE: 9
{ 0x180, 0x0127, 0x2900}, // SEKUNDE: 41
{ 0x180, 0x0135, 0x0100}, // WARMWASSERMODE: 1
{ 0x180, 0x0137, 0x02bc}, // KESSELSOLLTEMP_2WE: 70.0
{ 0x180, 0x0181, 0x028a}, // MAX_WW_TEMP: 65.0
{ 0x180, 0x0183, 0x0000}, // FERNBEDIENUNGSZUORDNUNG: 0
{ 0x180, 0x01ac, 0xff38}, // BIVALENTPARALLELTEMPERATUR_HZG: -20.0
{ 0x180, 0x01ad, 0xffce}, // BIVALENTPARALLELTEMPERATUR_WW: -5.0
{ 0x180, 0x01ae, 0xff38}, // BIVALENZALTERNATIVTEMPERATUR_HZG: -20.0
{ 0x180, 0x01af, 0xff38}, // BIVALENZALTERNATIVTEMPERATUR_WW: -20.0
{ 0x180, 0x01b0, 0xffce}, // QUELLENSOLLTEMPERATUR: -5.0
{ 0x180, 0x01b1, 0x000b}, // SOLLTEMP_ANZEIGE_0_1: 11
{ 0x180, 0x01b2, 0x0017}, // SOLLTEMP_ANZEIGE_0_2: 23
{ 0x180, 0x01b3, 0x001f}, // SOLLTEMP_ANZEIGE_0_3: 31
{ 0x180, 0x01b4, 0x0014}, // SOLLTEMP_ANZEIGE_1_1: 20
{ 0x180, 0x01b5, 0x0018}, // SOLLTEMP_ANZEIGE_1_2: 24
{ 0x180, 0x01b6, 0x001a}, // SOLLTEMP_ANZEIGE_1_3: 26
{ 0x180, 0x01b7, 0x0032}, // AUSSENTEMPERATUR_WARMWASSER: 5.0
{ 0x180, 0x01b8, 0x001e}, // SOLARDIFFERENZ: 3.0
{ 0x180, 0x01b9, 0x0258}, // SOLARTEMP_MAX: 60.0
{ 0x180, 0x01ba, 0x0001}, // ESTRICH_STEIGUNG_PRO_TAG: 1
{ 0x180, 0x01bb, 0x00fa}, // ESTRICH_SOCKELTEMPERATUR: 25.0
{ 0x180, 0x01bc, 0x0002}, // ESTRICH_HALTEN_SOCKELTEMPERATUR: 2
{ 0x180, 0x01bd, 0x0190}, // ESTRICH_MAX_TEMPERATUR: 40.0
{ 0x180, 0x01be, 0x0000}, // ESTRICH_HALTEN_MAX_TEMPERATUR: 0
{ 0x180, 0x01bf, 0x00c8}, // SW_AUSSENTEMP: 20.0
{ 0x180, 0x01c0, 0x0000}, // FESTWERT: 0
{ 0x180, 0x01c1, 0x0000}, // GESAMTERTRAG_WATT: 0
{ 0x180, 0x01c2, 0x0000}, // GESAMTERTRAG_KWATT: 0
{ 0x180, 0x01c3, 0x0000}, // GESAMTERTRAG_MWATT: 0
{ 0x180, 0x01c4, 0x2132}, // LAUFZEIT_WP1: 8498
{ 0x180, 0x01c5, 0x0000}, // LAUFZEIT_WP2: 0
{ 0x180, 0x01c6, 0x0000}, // LAUFZEIT_WP3: 0
{ 0x180, 0x01c7, 0x0000}, // LAUFZEIT_WP4: 0
{ 0x180, 0x01c8, 0x0000}, // LAUFZEIT_WP5: 0
{ 0x180, 0x01c9, 0x0000}, // LAUFZEIT_WP6: 0
{ 0x180, 0x01ca, 0x0000}, // LAUFZEIT_SOLAR: 0
{ 0x180, 0x01cb, 0x19f1}, // LAUFZEIT_2WE: 6641
{ 0x180, 0x01d4, 0xfe70}, // QUELLE_IST: -40.0
{ 0x180, 0x01d5, 0x0032}, // PUFFERSOLL: 5.0
{ 0x180, 0x01d6, 0x00f2}, // WPVORLAUFIST: 24.2
{ 0x180, 0x01d7, 0x0050}, // HILFSKESSELSOLL: 8.0
{ 0x180, 0x01d8, 0xfe70}, // FUEHLER_1: -40.0
{ 0x180, 0x01d9, 0xfe70}, // FUEHLER_2: -40.0
{ 0x180, 0x01da, 0x0000}, // VOLUMENSTROM: 0
{ 0x180, 0x01db, 0x0000}, // ERTRAG_AKT: 0
{ 0x180, 0x01dc, 0x0000}, // ERTRAG_TAG_W: 0
{ 0x180, 0x01dd, 0x0000}, // ERTRAG_TAG_KW: 0
{ 0x180, 0x01e8, 0x023a}, // MAX_HEIZUNG_TEMP: 57.0
{ 0x180, 0x027e, 0x0001}, // WW_ECO: on
{ 0x180, 0x0a00, 0x0028}, // AUSSEN_FROSTTEMP: 4.0
{ 0x180, 0x0a06, 0x01a4}, // EINSTELL_SPEICHERSOLLTEMP2: 42.0
{ 0x180, 0x0b00, 0x0019}, // FEHLERFELD_0: 25
{ 0x180, 0x0b01, 0x0014}, // FEHLERFELD_1: 20
{ 0x180, 0x0b02, 0x0003}, // FEHLERFELD_2: 3
{ 0x180, 0x0b03, 0x0008}, // FEHLERFELD_3: 8
{ 0x180, 0x0b04, 0x0016}, // FEHLERFELD_4: 22
{ 0x180, 0x0b05, 0x0004}, // FEHLERFELD_5: 5
{ 0x180, 0x0b06, 0x0001}, // FEHLERFELD_6: ERR 1
{ 0x180, 0x0b07, 0x0003}, // FEHLERFELD_7: 3
{ 0x180, 0x0b08, 0x0009}, // FEHLERFELD_8: 9
{ 0x180, 0x0b09, 0x0004}, // FEHLERFELD_9: 4
{ 0x180, 0x0b0a, 0x0008}, // FEHLERFELD_10: 8
{ 0x180, 0x0b0b, 0x0016}, // FEHLERFELD_11: 22
{ 0x180, 0x0b0c, 0x0004}, // FEHLERFELD_12: 5
{ 0x180, 0x0b0d, 0x0001}, // FEHLERFELD_13: ERR 1
{ 0x180, 0x0b0e, 0x0004}, // FEHLERFELD_14: 4
{ 0x180, 0x0b0f, 0x0009}, // FEHLERFELD_15: 9
{ 0x180, 0x0b10, 0x0005}, // FEHLERFELD_16: 5
{ 0x180, 0x0b11, 0x0008}, // FEHLERFELD_17: 8
{ 0x180, 0x0b12, 0x0016}, // FEHLERFELD_18: 22
{ 0x180, 0x0b13, 0x0004}, // FEHLERFELD_19: 5
{ 0x180, 0x0b14, 0x0001}, // FEHLERFELD_20: ERR 1
{ 0x180, 0x0b15, 0x0025}, // FEHLERFELD_21: 37
{ 0x180, 0x0b16, 0x0009}, // FEHLERFELD_22: 9
{ 0x180, 0x0b17, 0x0005}, // FEHLERFELD_23: 5
{ 0x180, 0x0b18, 0x0008}, // FEHLERFELD_24: 8
{ 0x180, 0x0b19, 0x0016}, // FEHLERFELD_25: 22
{ 0x180, 0x0b1a, 0x0004}, // FEHLERFELD_26: 5
{ 0x180, 0x0b1b, 0x0001}, // FEHLERFELD_27: ERR 1
{ 0x180, 0x0b1c, 0x0007}, // FEHLERFELD_28: 7
{ 0x180, 0x0b1d, 0x000a}, // FEHLERFELD_29: 10
{ 0x180, 0x0b1e, 0x0005}, // FEHLERFELD_30: 5
{ 0x180, 0x0b1f, 0x0008}, // FEHLERFELD_31: 8
{ 0x180, 0x0b20, 0x0016}, // FEHLERFELD_32: 22
{ 0x180, 0x0b21, 0x0004}, // FEHLERFELD_33: 5
{ 0x180, 0x0b22, 0x0001}, // FEHLERFELD_34: ERR 1
{ 0x180, 0x0b23, 0x002a}, // FEHLERFELD_35: 42
{ 0x180, 0x0b24, 0x000a}, // FEHLERFELD_36: 10
{ 0x180, 0x0b25, 0x0005}, // FEHLERFELD_37: 5
{ 0x180, 0x0b26, 0x0008}, // FEHLERFELD_38: 8
{ 0x180, 0x0b27, 0x0016}, // FEHLERFELD_39: 22
{ 0x180, 0x0b28, 0x0004}, // FEHLERFELD_40: 5
{ 0x180, 0x0b29, 0x0001}, // FEHLERFELD_41: ERR 1
{ 0x180, 0x0b2a, 0x0003}, // FEHLERFELD_42: 3
{ 0x180, 0x0b2b, 0x0011}, // FEHLERFELD_43: 17
{ 0x180, 0x0b2c, 0x0005}, // FEHLERFELD_44: 5
{ 0x180, 0x0b2d, 0x0008}, // FEHLERFELD_45: 8
{ 0x180, 0x0b2e, 0x0016}, // FEHLERFELD_46: 22
{ 0x180, 0x0b2f, 0x0004}, // FEHLERFELD_47: 5
{ 0x180, 0x0b30, 0x0001}, // FEHLERFELD_48: ERR 1
{ 0x180, 0x0b31, 0x0006}, // FEHLERFELD_49: 6
{ 0x180, 0x0b32, 0x0009}, // FEHLERFELD_50: 9
{ 0x180, 0x0b33, 0x0006}, // FEHLERFELD_51: 6
{ 0x180, 0x0b34, 0x0008}, // FEHLERFELD_52: 8
{ 0x180, 0x0b35, 0x0016}, // FEHLERFELD_53: 22
{ 0x180, 0x0b36, 0x0004}, // FEHLERFELD_54: 5
{ 0x180, 0x0b37, 0x0001}, // FEHLERFELD_55: ERR 1
{ 0x180, 0x0b38, 0x000d}, // FEHLERFELD_56: 13
{ 0x180, 0x0b39, 0x0009}, // FEHLERFELD_57: 9
{ 0x180, 0x0b3a, 0x0007}, // FEHLERFELD_58: 7
{ 0x180, 0x0b3b, 0x0008}, // FEHLERFELD_59: 8
{ 0x180, 0x0b3c, 0x0016}, // FEHLERFELD_60: 22
{ 0x180, 0x0b3d, 0x0004}, // FEHLERFELD_61: 5
{ 0x180, 0x0b3e, 0x0001}, // FEHLERFELD_62: ERR 1
{ 0x180, 0x0b3f, 0x001b}, // FEHLERFELD_63: 27
{ 0x180, 0x0b40, 0x0010}, // FEHLERFELD_64: 16
{ 0x180, 0x0b41, 0x0007}, // FEHLERFELD_65: 7
{ 0x180, 0x0b42, 0x0008}, // FEHLERFELD_66: 8
{ 0x180, 0x0b43, 0x0016}, // FEHLERFELD_67: 22
{ 0x180, 0x0b44, 0x0004}, // FEHLERFELD_68: 5
{ 0x180, 0x0b45, 0x0001}, // FEHLERFELD_69: ERR 1
{ 0x180, 0x0b46, 0x0006}, // FEHLERFELD_70: 6
{ 0x180, 0x0b47, 0x0009}, // FEHLERFELD_71: 9
{ 0x180, 0x0b48, 0x0008}, // FEHLERFELD_72: 8
{ 0x180, 0x0b49, 0x0008}, // FEHLERFELD_73: 8
{ 0x180, 0x0b4a, 0x0016}, // FEHLERFELD_74: 22
{ 0x180, 0x0b4b, 0x0004}, // FEHLERFELD_75: 5
{ 0x180, 0x0b4c, 0x0001}, // FEHLERFELD_76: ERR 1
{ 0x180, 0x0b4d, 0x002e}, // FEHLERFELD_77: 46
{ 0x180, 0x0b4e, 0x000e}, // FEHLERFELD_78: 14
{ 0x180, 0x0b4f, 0x0008}, // FEHLERFELD_79: 8
{ 0x180, 0x0b50, 0x0008}, // FEHLERFELD_80: 8
{ 0x180, 0x0b51, 0x0016}, // FEHLERFELD_81: 22
{ 0x180, 0x0b52, 0x0004}, // FEHLERFELD_82: 5
{ 0x180, 0x0b53, 0x0001}, // FEHLERFELD_83: ERR 1
{ 0x180, 0x0b54, 0x0009}, // FEHLERFELD_84: 9
{ 0x180, 0x0b55, 0x0009}, // FEHLERFELD_85: 9
{ 0x180, 0x0b56, 0x000a}, // FEHLERFELD_86: 10
{ 0x180, 0x0b57, 0x0008}, // FEHLERFELD_87: 8
{ 0x180, 0x0b58, 0x0016}, // FEHLERFELD_88: 22
{ 0x180, 0x0b59, 0x0004}, // FEHLERFELD_89: 5
{ 0x180, 0x0b5a, 0x0001}, // FEHLERFELD_90: ERR 1
{ 0x180, 0x0b5b, 0x0016}, // FEHLERFELD_91: 22
{ 0x180, 0x0b5c, 0x0010}, // FEHLERFELD_92: 16
{ 0x180, 0x0b5d, 0x000a}, // FEHLERFELD_93: 10
{ 0x180, 0x0b5e, 0x0008}, // FEHLERFELD_94: 8
{ 0x180, 0x0b5f, 0x0016}, // FEHLERFELD_95: 22
{ 0x180, 0x0b60, 0x0004}, // FEHLERFELD_96: 5
{ 0x180, 0x0b61, 0x0001}, // FEHLERFELD_97: ERR 1
{ 0x180, 0x0b62, 0x0039}, // FEHLERFELD_98: 57
{ 0x180, 0x0b63, 0x0010}, // FEHLERFELD_99: 16
{ 0x180, 0x0b64, 0x000a}, // FEHLERFELD_100: 10
{ 0x180, 0x0b65, 0x0008}, // FEHLERFELD_101: 8
{ 0x180, 0x0b66, 0x0016}, // FEHLERFELD_102: 22
{ 0x180, 0x0b67, 0x0004}, // FEHLERFELD_103: 5
{ 0x180, 0x0b68, 0x0001}, // FEHLERFELD_104: ERR 1
{ 0x180, 0x0b69, 0x0016}, // FEHLERFELD_105: 22
{ 0x180, 0x0b6a, 0x000b}, // FEHLERFELD_106: 11
{ 0x180, 0x0b6b, 0x000b}, // FEHLERFELD_107: 11
{ 0x180, 0x0b6c, 0x0008}, // FEHLERFELD_108: 8
{ 0x180, 0x0b6d, 0x0016}, // FEHLERFELD_109: 22
{ 0x180, 0x0b6e, 0x0004}, // FEHLERFELD_110: 5
{ 0x180, 0x0b6f, 0x0001}, // FEHLERFELD_111: ERR 1
{ 0x180, 0x0b70, 0x002d}, // FEHLERFELD_112: 45
{ 0x180, 0x0b71, 0x000e}, // FEHLERFELD_113: 14
{ 0x180, 0x0b72, 0x000b}, // FEHLERFELD_114: 11
{ 0x180, 0x0b73, 0x0008}, // FEHLERFELD_115: 8
{ 0x180, 0x0b74, 0x0016}, // FEHLERFELD_116: 22
{ 0x180, 0x0b75, 0x0004}, // FEHLERFELD_117: 5
{ 0x180, 0x0b76, 0x0001}, // FEHLERFELD_118: ERR 1
{ 0x180, 0x0b77, 0x0012}, // FEHLERFELD_119: 18
{ 0x180, 0x0b78, 0x000f}, // FEHLERFELD_120: 15
{ 0x180, 0x0b79, 0x000b}, // FEHLERFELD_121: 11
{ 0x180, 0x0b7a, 0x0008}, // FEHLERFELD_122: 8
{ 0x180, 0x0b7b, 0x0016}, // FEHLERFELD_123: 22
{ 0x180, 0x0b7c, 0x0004}, // FEHLERFELD_124: 5
{ 0x180, 0x0b7d, 0x0001}, // FEHLERFELD_125: ERR 1
{ 0x180, 0x0b7e, 0x0005}, // FEHLERFELD_126: 5
{ 0x180, 0x0b7f, 0x0009}, // FEHLERFELD_127: 9
{ 0x180, 0x0b80, 0x000c}, // FEHLERFELD_128: 12
{ 0x180, 0x0b81, 0x0008}, // FEHLERFELD_129: 8
{ 0x180, 0x0b82, 0x0016}, // FEHLERFELD_130: 22
{ 0x180, 0x0b83, 0x0004}, // FEHLERFELD_131: 5
{ 0x180, 0x0b84, 0x0001}, // FEHLERFELD_132: ERR 1
{ 0x180, 0x0b85, 0x0004}, // FEHLERFELD_133: 4
{ 0x180, 0x0b86, 0x0009}, // FEHLERFELD_134: 9
{ 0x180, 0x0b87, 0x000f}, // FEHLERFELD_135: 15
{ 0x180, 0x0b88, 0x0008}, // FEHLERFELD_136: 8
{ 0x180, 0x0b89, 0x0016}, // FEHLERFELD_137: 22
{ 0x180, 0x0b8a, 0x0004}, // FEHLERFELD_138: 5
{ 0x180, 0x0b8b, 0x0001}, // FEHLERFELD_139: ERR 1
{ 0x180, 0x1410, 0x1050}, // HEIZPROG_1_MO: 04:00-20:00
{ 0x180, 0x1411, 0x8080}, // HEIZPROG_1_MO_SCHALT_2: not used time domain
{ 0x180, 0x1412, 0x8080}, // HEIZPROG_1_MO_SCHALT_3: not used time domain
{ 0x180, 0x1420, 0x1050}, // HEIZPROG_1_DI: 04:00-20:00
{ 0x180, 0x1421, 0x8080}, // HEIZPROG_1_DI_SCHALT_2: not used time domain
{ 0x180, 0x1422, 0x8080}, // HEIZPROG_1_DI_SCHALT_3: not used time domain
{ 0x180, 0x1430, 0x1050}, // HEIZPROG_1_MI: 04:00-20:00
{ 0x180, 0x1431, 0x8080}, // HEIZPROG_1_MI_SCHALT_2: not used time domain
{ 0x180, 0x1432, 0x8080}, // HEIZPROG_1_MI_SCHALT_3: not used time domain
{ 0x180, 0x1440, 0x1050}, // HEIZPROG_1_DO: 04:00-20:00
{ 0x180, 0x1441, 0x8080}, // HEIZPROG_1_DO_SCHALT_2: not used time domain
{ 0x180, 0x1442, 0x8080}, // HEIZPROG_1_DO_SCHALT_3: not used time domain
{ 0x180, 0x1450, 0x1050}, // HEIZPROG_1_FR: 04:00-20:00
{ 0x180, 0x1451, 0x8080}, // HEIZPROG_1_FR_SCHALT_2: not used time domain
{ 0x180, 0x1452, 0x8080}, // HEIZPROG_1_FR_SCHALT_3: not used time domain
{ 0x180, 0x1460, 0x1050}, // HEIZPROG_1_SA: 04:00-20:00
{ 0x180, 0x1461, 0x8080}, // HEIZPROG_1_SA_SCHALT_2: not used time domain
{ 0x180, 0x1462, 0x8080}, // HEIZPROG_1_SA_SCHALT_3: not used time domain
{ 0x180, 0x1470, 0x1050}, // HEIZPROG_1_SO: 04:00-20:00
{ 0x180, 0x1471, 0x8080}, // HEIZPROG_1_SO_SCHALT_2: not used time domain
{ 0x180, 0x1472, 0x8080}, // HEIZPROG_1_SO_SCHALT_3: not used time domain
{ 0x180, 0x1510, 0xffff}, // HEIZPROG_2_MO: not used time domain
{ 0x180, 0x1511, 0xffff}, // HEIZPROG_2_MO_SCHALT_2: not used time domain
{ 0x180, 0x1512, 0xffff}, // HEIZPROG_2_MO_SCHALT_3: not used time domain
{ 0x180, 0x1520, 0xffff}, // HEIZPROG_2_DI: not used time domain
{ 0x180, 0x1521, 0xffff}, // HEIZPROG_2_DI_SCHALT_2: not used time domain
{ 0x180, 0x1522, 0xffff}, // HEIZPROG_2_DI_SCHALT_3: not used time domain
{ 0x180, 0x1530, 0xffff}, // HEIZPROG_2_MI: not used time domain
{ 0x180, 0x1531, 0xffff}, // HEIZPROG_2_MI_SCHALT_2: not used time domain
{ 0x180, 0x1532, 0xffff}, // HEIZPROG_2_MI_SCHALT_3: not used time domain
{ 0x180, 0x1540, 0xffff}, // HEIZPROG_2_DO: not used time domain
{ 0x180, 0x1541, 0xffff}, // HEIZPROG_2_DO_SCHALT_2: not used time domain
{ 0x180, 0x1542, 0xffff}, // HEIZPROG_2_DO_SCHALT_3: not used time domain
{ 0x180, 0x1550, 0xffff}, // HEIZPROG_2_FR: not used time domain
{ 0x180, 0x1551, 0xffff}, // HEIZPROG_2_FR_SCHALT_2: not used time domain
{ 0x180, 0x1552, 0xffff}, // HEIZPROG_2_FR_SCHALT_3: not used time domain
{ 0x180, 0x1560, 0xffff}, // HEIZPROG_2_SA: not used time domain
{ 0x180, 0x1561, 0xffff}, // HEIZPROG_2_SA_SCHALT_2: not used time domain
{ 0x180, 0x1562, 0xffff}, // HEIZPROG_2_SA_SCHALT_3: not used time domain
{ 0x180, 0x1570, 0xffff}, // HEIZPROG_2_SO: not used time domain
{ 0x180, 0x1571, 0xffff}, // HEIZPROG_2_SO_SCHALT_2: not used time domain
{ 0x180, 0x1572, 0xffff}, // HEIZPROG_2_SO_SCHALT_3: not used time domain
{ 0x180, 0x1710, 0x232f}, // W_WASSERPROG_1_MO: 08:45-11:45
{ 0x180, 0x1711, 0x313e}, // W_WASSERPROG_1_MO_SCHALT_2: 12:15-15:30
{ 0x180, 0x1712, 0x414a}, // W_WASSERPROG_1_MO_SCHALT_3: 16:15-18:30
{ 0x180, 0x1720, 0x232f}, // W_WASSERPROG_1_DI: 08:45-11:45
{ 0x180, 0x1721, 0x313e}, // W_WASSERPROG_1_DI_SCHALT_2: 12:15-15:30
{ 0x180, 0x1722, 0x414a}, // W_WASSERPROG_1_DI_SCHALT_3: 16:15-18:30
{ 0x180, 0x1730, 0x232f}, // W_WASSERPROG_1_MI: 08:45-11:45
{ 0x180, 0x1731, 0x313e}, // W_WASSERPROG_1_MI_SCHALT_2: 12:15-15:30
{ 0x180, 0x1732, 0x414a}, // W_WASSERPROG_1_MI_SCHALT_3: 16:15-18:30
{ 0x180, 0x1740, 0x232f}, // W_WASSERPROG_1_DO: 08:45-11:45
{ 0x180, 0x1741, 0x313e}, // W_WASSERPROG_1_DO_SCHALT_2: 12:15-15:30
{ 0x180, 0x1742, 0x414a}, // W_WASSERPROG_1_DO_SCHALT_3: 16:15-18:30
{ 0x180, 0x1750, 0x232f}, // W_WASSERPROG_1_FR: 08:45-11:45
{ 0x180, 0x1751, 0x313e}, // W_WASSERPROG_1_FR_SCHALT_2: 12:15-15:30
{ 0x180, 0x1752, 0x414a}, // W_WASSERPROG_1_FR_SCHALT_3: 16:15-18:30
{ 0x180, 0x1760, 0x232f}, // W_WASSERPROG_1_SA: 08:45-11:45
{ 0x180, 0x1761, 0x313e}, // W_WASSERPROG_1_SA_SCHALT_2: 12:15-15:30
{ 0x180, 0x1762, 0x414a}, // W_WASSERPROG_1_SA_SCHALT_3: 16:15-18:30
{ 0x180, 0x1770, 0x232f}, // W_WASSERPROG_1_SO: 08:45-11:45
{ 0x180, 0x1771, 0x313e}, // W_WASSERPROG_1_SO_SCHALT_2: 12:15-15:30
{ 0x180, 0x1772, 0x414a}, // W_WASSERPROG_1_SO_SCHALT_3: 16:15-18:30
{ 0x180, 0xfda7, 0x0000}, // SCHNELLAUFHEIZUNG: 0
{ 0x180, 0xfda8, 0x0100}, // FEHLERANZAHL: 256
{ 0x180, 0xfdaa, 0x0000}, // BUSKONTROLLE: 0
{ 0x180, 0xfdad, 0x0000}, // WP_PUMPENSTATUS: 0
{ 0x180, 0xfdae, 0x0100}, // WP_STATUS: 1
{ 0x180, 0xfdaf, 0x0000}, // DAUERLAUF_PUFFERLADEPUMPE: 0
{ 0x180, 0xfdb0, 0x1400}, // SCHALTWERKDYNAMIKZEIT: 20
{ 0x180, 0xfdb1, 0x1e00}, // STILLSTANDZEIT: 30
{ 0x180, 0xfdb2, 0x0100}, // PUMPENZYKLEN: 1
{ 0x180, 0xfdb3, 0x0100}, // GEBAEUDEART: 1
{ 0x180, 0xfdb4, 0x0100}, // SOMMERBETRIEB: on
{ 0x180, 0xfdb6, 0x0000}, // IMPULSRATE: 0
{ 0x180, 0xfdb7, 0x0000}, // SOLARBETRIEB: 0
{ 0x180, 0xfdb8, 0x0100}, // WAERMEMENGE: 1
{ 0x180, 0xfdb9, 0x0000}, // AUTOMATIK_WARMWASSER: off
{ 0x180, 0xfdba, 0x0100}, // ZWEITER_WE_STATUS: 256
{ 0x180, 0xfdbb, 0x0000}, // WPSTUFEN_WW: 0
{ 0x180, 0xfdbc, 0x0000}, // WW_MIT_2WE: 0
{ 0x180, 0xfdbd, 0x0000}, // SPERREN_2WE: 0
{ 0x180, 0xfdbf, 0x0000}, // DYNAMIK: 0
{ 0x180, 0xfdc0, 0x0000}, // PARTYSTUNDEN: 0
@robob @HGButte setzt Ihr die Befehle zur Veränderung der Soll-Wassertermperatur auf dem Haupt- CAN, auf dem auch das Steuergerät der Wärmepumpe liegt ab oder an dem CAN für das ISG Gateway?
Ein Freund von mir hat eine Tecalor Wärmepumpe und eine Photovoltaikanlage. Für ihn möchte ich gerne das was einige User hier vorhaben mit Hilfe eines Scripts, welches im Home assistant Appdaemon läuft, umsetzen. Zusätzlich soll die Wettervorhersage einfließen, so dass der Pufferspeicher frühmorgens hochgefahren wird im Niedrigtarif wenn keine Sonne zu erwarten ist und umgekehrt damit gewartet wird bis die Sonne scheint. Das Script werde ich dann auch mal an passender Stelle publizieren.
Ich denke ich habe so weit alles zusammen. Nur bei meiner eigenen Stiebel Eltron Wärmepumpte lese ich bisher nur Daten aus. Deshalb stelle ich mir die Frage, ob ich für Befehle auf dem ISG Gateway/FE CAN bus absenden (CAN B im Handbuch des WPM, https://www.tecalor.de/content/dam/tec/cdbassets/current/bedienungs-_u_installationsanleitungen/wpm_installationmanual_doc-00060140.pdf) absenden muss?
Zitat von: Vincent82 am 29 August 2022, 15:16:37
@robob @HGButte setzt Ihr die Befehle zur Veränderung der Soll-Wassertermperatur auf dem Haupt- CAN, auf dem auch das Steuergerät der Wärmepumpe liegt ab oder an dem CAN für das ISG Gateway?
Ich blick da noch nicht durch. Aber es gibt doch nur einen Bus und jedes Gerät hat eine Nummer oder habe ich was falsch verstanden?
Was ist überhaupt was?
can0 480 [7] 96 00 FD 01 00 00 00
can0 180 [7] 36 00 FD 01 00 00 00
can0 300 [7] 66 00 FD 00 00 00 00
can0 680 [7] D6 00 FD 00 00 00 00
can0 500 [7] A6 00 FD 01 00 00 00
can0 180 [7] 66 79 FE 01 00 00 00
can0 480 [7] A6 79 FE 01 00 00 00
can0 180 [7] C6 03 FE 01 00 00 00
can0 180 [7] 60 79 23 00 00 00 00
Scan ich mit ./can_scan can0 700 680 | tee ../log_can_scan_680.log usw. folgerte ich aus den Logdateien:
180: liefert gleiche Werte wie 300 und 480???
300: dito 180???
480: dito 180???
500: liefert keine Werte
680: liefert noch mehr Werte die zugeordnet werden, aber alle haben den Wert 0, wieso?
Nach 50_Elster.pm
my $direkt = "000";
my $kessel = "180";
my $bedien_1 = "301";
my $bedien_2 = "302";
my $manager = "480";
my $heiz = "500";
my $mischer_1 = "601";
my $mischer_2 = "602";
my $sender_id = "680";
Ich hätte nur zwei «Geräte» erwartet, die Steuerung in der Wärmepumpe (IWS?) und den WPMII. Was ist nun was und was soll als «sender can id» verwendet werden? Ich habe nun mal 700 eingesetzt, um nicht zwei mal 680 zu haben. Mal gucken ob sich die Verbindung zum Bus nun nicht mehr zwischen durch «aufhängt».
Gruss
tomix
Zum zweiten CAN:
Im WPM Installationmanual ist von CAN A und B die Rede, siehe hier: https://www.stiebel-eltron.de/content/dam/ste/cdbassets/current/bedienungs-_u_installationsanleitungen/wpm_installationmanual_doc-00060432.pdf
Kann aber auch sein, dass das zwei Steckplätze für den selben CAN sind.
Zum Protokoll:
Im KNX Userforum hat jemand eine sehr gute Doku zum Protokoll gepostet: https://knx-user-forum.de/forum/%C3%B6ffentlicher-bereich/knx-eib-forum/38306-plugin-f%C3%BCr-stiebel-eltron-lwz-304-404-can-bus (dritter Beitrag). Diese Beschreibung sollte Deine Fragen beantworten.
Zitat von: Vincent82 am 04 September 2022, 09:39:20
Zum Protokoll:
Im KNX Userforum hat jemand eine sehr gute Doku zum Protokoll gepostet: https://knx-user-forum.de/forum/%C3%B6ffentlicher-bereich/knx-eib-forum/38306-plugin-f%C3%BCr-stiebel-eltron-lwz-304-404-can-bus (dritter Beitrag). Diese Beschreibung sollte Deine Fragen beantworten.
Das habe ich auch mal gefunden, aber mangels Benutzerkonto dort konnte ich es nicht runterladen. Dann muss ich mich wohl dort auch mal noch anmelden.
Gruss
tomix
Zitat von: Vincent82 am 04 September 2022, 09:39:20
Zum zweiten CAN:
Im WPM Installationmanual ist von CAN A und B die Rede, siehe hier: https://www.stiebel-eltron.de/content/dam/ste/cdbassets/current/bedienungs-_u_installationsanleitungen/wpm_installationmanual_doc-00060432.pdf
Kann aber auch sein, dass das zwei Steckplätze für den selben CAN sind.
Habe einen WPMII der hat nur einen CAN Anschluss an welchem die WP hängt. Dazwischen haben ich nun den CAN-Bus-Adapter angeschlossen. Leider kann ich zwischen durch keinen Werte mehr abrufen. Da meistens ein «shutdown restart» in FHEM reicht, vermute ich ein Problem mit der 50_Elster.pm.
Bilder von der Verdrahtung sind angehängt.
Gruss
tomix
Nach einiger Zeit (etwas 1 Tag) lande ich bei diesem Fehler:
./can_progs/can_scan can0 700 680
elster-kromschroeder can-bus address scanner and test utility
copyright (c) 2014 Jürg Müller, CH-5524
socket error (write) 105: ENOBUFS (No buffer space available)
socket error (write) 105: ENOBUFS (No buffer space available)
socket error (write) 105: ENOBUFS (No buffer space available)
socket error (write) 105: ENOBUFS (No buffer space available)
socket error (write) 105: ENOBUFS (No buffer space available)
socket error (write) 105: ENOBUFS (No buffer space available)
Aktuell bin ich etwas ratlos, wieso das so ist. Meine suche ergab, dass es evtl. damit zusammenhängt das zu viele «Verbindungen» offen sind, also irgendwelche nicht beendet werden?
Ich habe nun mal zum testen in FHEM alles mit CAN-Bus rausgenommen und logge mal mit folgendem BASH-Skript (aufruf via Cron alle 5 Minuten):
#!/bin/bash
# Format der Einträge in der Log-Datei:
# 2022-09-08_21:30:06 Stiebel SPEICHERISTTEMP: 42.8
LOGDATEI="/opt/fhem/log/Stiebel_FileLog-2022.log"
TRENNER=" "
ZEITPUNKT=$(date +%Y-%m-%d_%H:%M:%S)
GERAET="Stiebel"
WERT1=$(/usr/local/bin/can_scan can0 700 180.000e |grep value)
WERT1=${WERT1#*\(} # alles vor und mit der ( Klammer löschen
WERT1=${WERT1%\)*} # alles ab und mit der ) Klammer löschen
BEZEICHNUNG1=$WERT1
BEZEICHNUNG1=${BEZEICHNUNG1%\ *} # alles ab dem Leerzeichen löschen
BEZEICHNUNG1=${BEZEICHNUNG1%?}":" # letztes Zeichen löschen (Leerzeichen)
WERT1=${WERT1#*\ } # Alles vor und mit dem Leerzeichen löschen
echo $ZEITPUNKT $TRENNER $GERAET $TRENNER $BEZEICHNUNG1 $WERT1 >> "$LOGDATEI"
WERT2=$(/usr/local/bin/can_scan can0 700 180.000c |grep value)
WERT2=${WERT2#*\(} # alles vor und mit der ( Klammer löschen
WERT2=${WERT2%\)*} # alles ab und mit der ) Klammer löschen
BEZEICHNUNG2=$WERT2
BEZEICHNUNG2=${BEZEICHNUNG2%\ *} # alles ab dem Leerzeichen löschen
BEZEICHNUNG2=${BEZEICHNUNG2%?}":" # letztes Zeichen löschen (Leerzeichen)
WERT2=${WERT2#*\ } # Alles vor und mit dem Leerzeichen löschen
echo $ZEITPUNKT $TRENNER $GERAET $TRENNER $BEZEICHNUNG2 $WERT2 >> "$LOGDATEI"
Mal sehen ob damit länger als einen Tag Werte kommen.
Gruss
tomix
Zitat von: tomix am 08 September 2022, 21:10:09
Ich habe nun mal zum testen in FHEM alles mit CAN-Bus rausgenommen und logge mal mit folgendem BASH-Skript (aufruf via Cron alle 5 Minuten):
...
Mal sehen ob damit länger als einen Tag Werte kommen.
Scheint stabil zu laufen. Werde das nun weiter beobachten und falls dies so weiter stabil läuft, werde ich die zu loggenden Daten mal erhöhen. Falls es dann immer noch stabil ist, versuche ich dann die 50_Elster.pm zu verstehen bzw. werde eine Lösung suchen, um den Warmwasserwert ändern zu können.
Läuft leider auch nicht stabil, nur etwas länger, aber nach einiger Zeit bin ich beim selben Fehler:
/usr/local/bin/can_scan can0 700 180.000e
elster-kromschroeder can-bus address scanner and test utility
copyright (c) 2014 Jürg Müller, CH-5524
socket error (write) 105: ENOBUFS (No buffer space available)
socket error (write) 105: ENOBUFS (No buffer space available)
socket error (write) 105: ENOBUFS (No buffer space available)
no value read
dmesg meint jeweils:
usb 2-2: USB disconnect, device number 73
gs_usb 2-2:1.0 can0: Couldn't shutdown device (err=-19)
Evtl. stimmt auch etwas mit dem USB-Port nicht. Werde mal weiter nach der Ursache suchen.
Der USB-Port verabschiedet sich etwa jeden Tag wie folgt:
usb usb5-port2: disabled by hub (EMI?), re-enabling...
Anschliessen hängt vermutlich auch der CAN-Bus (erscheint mir nicht logisch, aber die Heizung will dann auch nicht mehr).
Gruss
tomix
Hallo,
ich hab mal eine Verständnisfrage zu den Adressen:
Jürg gab ja den Hinweis auf seiner Seite, dass die CAN-Adressen über die Bitmaske 8*(X0 & F0)+(0Y & 0F) definiert werden.
Wobei hierbei X den 1. Digit und Y den 4. Digit darstellt.
Das funktioniert wunderbar mit einer Adresse wie 0x180 => 180/8 = hex 30 == 8*(30&F0)+(00&0F) = 180
Jemand empfängt aber Telegramme von der Adresse 0x1C0. Hier funktioniert das nicht: 1C0/8 = hex 38 != 8*(30&F0) + (08&0F) = 188
Welche Digits müssen hier an die Stelle der Adresse im Anfrage-Telegramm?
Zitat von: tomix am 11 September 2022, 19:23:12
dmesg meint jeweils:
usb 2-2: USB disconnect, device number 73
gs_usb 2-2:1.0 can0: Couldn't shutdown device (err=-19)
Evtl. stimmt auch etwas mit dem USB-Port nicht. Werde mal weiter nach der Ursache suchen.
Inzwischen läuft es stabil. Mit einem neuen USB-Kabel (1.5 m) ohne Verlängerung wurde es noch schlimmer. Also habe ich die Leitung für den USB-Adapter aus dem Verteilkasten rausgeführt und zusätzlich verdrillt. Dann reicht das USB-Kabel ohne Verlängerung und die Verbindung läuft nun seit Ende September stabil.
Jetzt werde ich mal zurück auf die 50_Elster.pm wechseln.
Was mir bis jetzt beim manuellen setzen der Speichertemperatur (Warmwassertemperatur) aufgefallen ist, dass bei einer zu tiefen Speichertemperatur für die Nacht, am Tag dann der Speicher nicht hoch geheizt wird. Beides runter zu setzen und dann gegen Ende der Ferien hoch zu setzten, war allerdings kein Problem.
Gruss
tomix
Hallo zusammen,
hat jemanden vielleicht hier bereits ein SET Befehl via MQTT erfolgreich implementiert bzw. im Einsatz?
ich habe ein Homeassitant und Empfange dort erfolgreich alle Daten von meiner Stiebel via MQTT.
Nun möchte ich gerne aus dem Homeassitant die Temperatur setzen via "SET" und finde hierfür bisher keine Lösung.
Vielen Dank!
Guten Abend allerseits!
Wer FEK hat, sieht bitte, welche Pakete und an welche Adressen es sendet, wenn es eingeschaltet ist.
Interessiert daran, wie WPMi feststellt, dass ein FEK im Bus aufgetaucht ist.
Ich möchte eine Nachahmung machen.
Guten Mittag,
ich habe gestern meinen Raspi4 von Buster auf Bullseye upgegraded.. Lief eigentlich alles rund, bis auf das Elster Modul, das läuft leider nicht mehr. Siehe Log Eintrag.
Was könnte da die Ursache sein? Bei Tante Google kam ich irgendwie nicht weiter.
2023.01.06 11:51:28 1: reload: Error:Modul 50_Elster deactivated:
Can't load './FHEM/elster_perl.so' for module elster_perl: libperl.so.5.28: Kann die Shared-Object-Datei nicht öffnen: Datei oder Verzeichnis nicht gefunden at /usr/lib/arm-linux-gnueabihf/perl-base/DynaLoader.pm line 187, <$fh> line 1203.
at FHEM/elster_perl.pm line 11.
Compilation failed in require at ./FHEM/50_Elster.pm line 64, <$fh> line 1203.
BEGIN failed--compilation aborted at ./FHEM/50_Elster.pm line 64, <$fh> line 1203.
2023.01.06 11:51:28 0: Can't load './FHEM/elster_perl.so' for module elster_perl: libperl.so.5.28: Kann die Shared-Object-Datei nicht öffnen: Datei oder Verzeichnis nicht gefunden at /usr/lib/arm-linux-gnueabihf/perl-base/DynaLoader.pm line 187, <$fh> line 1203.
at FHEM/elster_perl.pm line 11.
Compilation failed in require at ./FHEM/50_Elster.pm line 64, <$fh> line 1203.
BEGIN failed--compilation aborted at ./FHEM/50_Elster.pm line 64, <$fh> line 1203.
Danke für Eure Hilfe.
Lg c
EDIT GELOEST: -> es lag nicht am Modul sondern an der libperl.so.5.28 Datei. .. Mit folgendem Code konnte ich es beheben
ln -s /usr/lib/arm-linux-gnueabihf/libperl.so.5.32 /usr/lib/arm-linux-gnueabihf/libperl.so.5.28
Evtl. noch ein sudo davor...
Hallo, ich versuche auch seid einiger Zeit die Stiebel WPF 13 bei Fhem einzubinden. Die Aktuelle Can-Progs habe ich herunter geladen und die Dateien nach Anleitung verschoben. Jedoch bekomme ich beim öden von den Modul immer folgenden Fehler: Can't locate elster_perl.pm in @INC (you may need to install the elster_perl module) (@INC contains: ./lib ./FHEM . /etc/perl /usr/local/lib/arm-linux-gnueabihf/perl/5.32.1 /usr/local/share/perl/5.32.1 /usr/lib/arm-linux-gnueabihf/perl5/5.32 /usr/share/perl5 /usr/lib/arm-linux-gnueabihf/perl-base /usr/lib/arm-linux-gnueabihf/perl/5.32 /usr/share/perl/5.32 /usr/local/lib/site_perl) at ./FHEM/50_Elster.pm line 64.
BEGIN failed--compilation aborted at ./FHEM/50_Elster.pm line 64.
Was muss ich hier ggf. noch anpassen? Den Raspberry habe ich mit fhem komplett neu aufgesetzt...
Vielen Dank
Gruß
Thorsten
Ich habe es jetzt hin bekommen das fhem das Modul lädt. Anfangs klappt das auch mit den Abfragen der Werte. Jedoch, nach kurzer Steig kommt als Antwor immer nur ein "?". Auch ein Neustart bringt nichts. Das einzigen was teilweise hilft ist das löschen des Moduls mit anschließenden Neustart von fhem und einen neu Anlegen des Elster Device. Dann funktioniert es wieder für kurze Zeit....
Den Raspberry habe ich schon komplett neu aufgesetzt....
In der 50_Elster.pm haben Ich für mein USBtin folgendes stehen:
# Adaptertyp hier definieren!
# Default device:
# Linux: can0 / SocketCAN
# Win: COM1 / can232
#