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

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

Vorheriges Thema - Nächstes Thema

gbr

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

Ratzefummel

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

juerg5524

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

chris128

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

chris128

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

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

labe

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

chris128

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
Schau dir erst mal den letzten Eintrag an und dann ggf weiter zurück.

Gruß
Christian

choetzu

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
Raspi3, EnOcean, Zwave, Homematic

gbr

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

choetzu

#129
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.
Raspi3, EnOcean, Zwave, Homematic

Damu

Hallo

Suche ein PICAN Modul das Galvanisch getrennt ist.
Habe nur ein Dual Modul gefunden:
https://buyzero.de/products/pican2-duo-isolated
Finde kein Fertiges Modul so wie es Juerg5524 beschreibt.




LDSign

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


intershopper

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

LDSign

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

intershopper

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