Engelmann HCAe2 support in WMBUS/TechemHKV?

Begonnen von chri.jaes, 16 August 2024, 23:18:58

Vorheriges Thema - Nächstes Thema

chri.jaes

Hallo,

ich hoffe das Thema ist hier richtig aufgehoben.

Nachdem ich eine Reihe Engelmann HCAe2 in meine FHEM installation initial einbinden konnte (WMode_T, Kurztelegramm,
kein AES key), musste ich festgestellen, dass es mit WMBUS/TechemHKV nicht korrekt/unvollstaendig dekodiert wird. Das
Internet schweigt sich zum Format leider ebenfalls aus. Daraufhin habe ich Zeit investiert und das Telegramm
systematisch untersucht. Gluecklicherweise konnte ich ueber den IR-Adapter per "Device Monitor SW" die HCAe2 auslesen
und konfigurieren. Nun bin ich zumindest fuer das Kurztelegramm soweit fertig, dass ich die fuer mich wichtigen
Werte (haendisch) extrahieren kann.

         Akt/Sti   44/46  ID       49/8  ????   7A ?? 0000?? 2F2F  F# 6D A-TM A-DT  F# 6E A0????A1A2  F# 6C S-DT  F# 6E S0S1S2  F# 7F ERR F# 6D E-TM E-DT  0000
                 LLLLLLLLLLLLLLLLLLLLLLLLLLLL   AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   ???? ??
                   ||                    Counter?--\\
                   **---beinflusst-------\\\\-------------\\             aktuelle         aktueller         Stichtags   Stichtags     Error     Error
                   ||                    ||||      ||     ||             Zeit/Datum       Wert              Datum       Wert          Code      Zeit/Datum
                   ||                    vvvv      vv     vv
Wohn 65: x200/x10B (Vermutlich nicht im Telegramm: R 24,605, H 24,605, VLmax x2A, B x10F d, halbM x11, DAend x2, A x5F9, B x0)
                 2D44C514 65790132 3108  DEC4   7A EF 000020 2F2F  04 6D 2528 1038  03 6E 007A1D0200  42 6C FF2C  43 6E 0B0100  31 7F 00  34 6D 2BD7 0020  0000   F899 80
2024-08-16 10:30 2D44C514 65790132 3108  DEC4   7A FA 000020 2F2F  04 6D 1E2A 1038  03 6E 00B3F80200  42 6C FF2C  43 6E 0B0100  31 7F 00  34 6D 2BD7 0020  0000   F899 80
2024-08-16 11:42 2D44C514 65790132 3108  DEC4   7A 01 000020 2F2F  04 6D 2A2B 1038  03 6E 00BF660200  42 6C FF2C  43 6E 0B0100  31 7F 00  34 6D 2BD7 0020  0000   F899 81
2024-08-16 15:27 2D44C514 65790132 3108  DEC4   7A 17 000020 2F2F  04 6D 1B2F 1038  03 6E 0050A90200  42 6C FF2C  43 6E 0B0100  31 7F 00  34 6D 2BD7 0020  0000   F899 80

Schl 66: x196/x082 (Vermutlich nicht im Telegramm: R 23,289, H 23,421, VLmax x3F, B x110 d, halbM x12, DAend x2, A xB6, B xB0)
                 2D46C514 66790132 3108  BDFC   7A 98 000000 2F2F  04 6D 3928 1038  03 6E 9603790100  42 6C FF2C  43 6E 820000  31 7F 00  34 6D D774 0020  0000   F899 81
2024-08-16 10:44 2D44C514 66790132 3108  A139   7A 9F 000020 2F2F  04 6D 2C2A 1038  03 6E 9637280100  42 6C FF2C  43 6E 820000  31 7F 00  34 6D D774 0020  0000   F899 82
2024-08-16 15:22 2D44C514 66790132 3108  A139   7A BB 000020 2F2F  04 6D 162F 1038  03 6E 9666320100  42 6C FF2C  43 6E 820000  31 7F 00  34 6D D774 0020  0000   F899 80

Kell 67: x000/x000 (Vermutlich nicht im Telegramm: R 22,368, H 21,315, VLmax x15, B xDA d, halbM x0F, DAend x2, A x0, B x0)
                 2D46C514 67790132 3108  7C74   7A FA 000000 2F2F  04 6D 2328 1038  03 6E 00738E0000  42 6C 0000  43 6E 000000  31 7F 00  34 6D A43B 0020  0000   F899 A8
2024-08-16 09:08 2D46C514 67790132 3108  7C74   7A FA 000000 2F2F  04 6D 0829 1038  03 6E 0035ED0000  42 6C 0000  43 6E 000000  31 7F 00  34 6D A43B 0020  0000   F899 8F
2024-08-16 09:16 2D46C514 67790132 3108  7C74   7A FA 000000 2F2F  04 6D 1029 1038  03 6E 0051A80000  42 6C 0000  43 6E 000000  31 7F 00  34 6D A43B 0020  0000   F899 8D
2024-08-16 10:27 2D44C514 67790132 3108  60B1   7A 01 000020 2F2F  04 6D 1B2A 1038  03 6E 00445B0000  42 6C 0000  43 6E 000000  31 7F 00  34 6D A43B 0020  0000   F899 92
2024-08-16 15:24 2D44C514 67790132 3108  60B1   7A 1E 000020 2F2F  04 6D 182F 1038  03 6E 0092B50000  42 6C 0000  43 6E 000000  31 7F 00  34 6D A43B 0020  0000   F899 8F

DG-B 68: x019/x000 (Vermutlich nicht im Telegramm: R 28,690, H 28,452, VLmax x1E, B xDA d, halbM x0F, DAend x2, A x2C9, B x0)
2024-08-16 12:41 2D46C514 68790132 3108  C118   7A 58 000000 2F2F  04 6D 292C 1038  03 6E 190F270000  42 6C 0000  43 6E 000000  31 7F 00  34 6D A43B 0020  0000   F899 87

DG-Z 69: x00F/x000 (Vermutlich nicht im Telegramm: R 28,690, H 28,452, VLmax x1E, B xDA d, halbM x0F, DAend x2, A x228, B x0)
2024-08-16 12:56 2D46C514 69790132 3108  0090   7A 54 000000 2F2F  04 6D 382C 1038  03 6E 0F281F0000  42 6C 0000  43 6E 000000  31 7F 00  34 6D A43B0020  0000   F899 AB

Bad  70: x05A/x04B (Vermutlich nicht im Telegramm: R 24,868, H 24,605, VLmax x44, B x110 d, halbM x0F, DAend x2, A x921, B x192)
2024-08-16 13:29 2D46C514 70790132 3108  795F   7A 17 000000 2F2F  04 6D 1D2D 1038  03 6E 5A50FC0000  42 6C FF2C  43 6E 4B0000  31 7F 00  34 6D 9C040020  0000   F899 80

Das sieht ersteinmal wild aus :-), ich hoffe jedoch es sollte eine ausreichende Datenlage fuer jemanden sein, der den
WMBUS/TechemHKV Code gut kennt.  Mindestens die Entscheidung, wo der Support am besten reinwandern sollte (WMBUS oder
sowas wie EngelmannHKV aus TechemHKV abgeleitet) koennte ich nur schwerlich treffen. Ich erklaere aber gerne die Tabelle
oben. Eine Tabelle fuer das Langtelegramm plane ich spaeter ebenfalls zu erstellen. Meine Hoffnung ist, dass sich in
diesem dann die Raumtemperatur befindet. Im Kurztelgramm konnte ich diese noch nicht entdecken.

VG Christoph

chri.jaes

Gerade in WMBUS.pm gesehen, dass 2F2F wohl "filler bytes" sind.
Macht Sinn!

chri.jaes

Dann gibt es wohl mind. einen Bug in WMBUS.pm ~ line 1660:

    } elsif ($dataBlock->{dataField} == DIF_INT24) {
      my @bytes = unpack('CCC', substr($payload, $offset, 3));
      $offset += 3;
      $value = $bytes[0] + $bytes[1] << 8 + $bytes[2] << 16;
in der letzten Zeile fehlen die Klammern, so ist es richtig:
      $value = $bytes[0] + ($bytes[1] << 8) + ($bytes[2] << 16);
danach wird ein

      # two's complement
      $value = ~$value + 1;
gemacht. Leider kenne ich mich mit Perl Datentypen nicht richtig aus.
Macht das wirklich Sinn? Die Perl-Profis wissen da sicher mehr.
Zumindest fuer den HCA Datentypen wird der Wert an dieser Stelle abermals zerstoert.


Ich debugge weiter, komme der Loesung schon naeher :-)


chri.jaes

Dies sollte der korrekte Fix fuer die Berechnung der DIF_INT24 und DIF_INT48 Formate in WMBUS.pm sein.
Zumindest werden die Werte in FHEM fuer meine HCAe2 nun richtig angezeigt.

Kann das jemand einchecken?

    } elsif ($dataBlock->{dataField} == DIF_INT24) {
      my @bytes = unpack('CCC', substr($payload, $offset, 3));
      $offset += 3;
      $value = $bytes[0] + ($bytes[1] << 8) + ($bytes[2] << 16);
      if ($bytes[2] & 0x80) {
        # two's complement
        $value -= (1 << 24);
      }
    } elsif ($dataBlock->{dataField} == DIF_INT32) {
      $value = unpack('l<', substr($payload, $offset, 4));
      $offset += 4;
    } elsif ($dataBlock->{dataField} == DIF_INT48) {
      my @words = unpack('vvv', substr($payload, $offset, 6));
      $value = $words[0] + ($words[1] << 16) + ($words[2] << 32);
      if ($words[2] & 0x8000) {
        # two's complement
        $value -= (1 << 48);
      }
      $offset += 6;
    } elsif ($dataBlock->{dataField} == DIF_INT64) {

chri.jaes

Das Langtelegramm habe ich soweit nun auch verstanden. Dort sehe ich leider ebenfalls keine Temperatur.
Zusaetzlich zu den Infos aus dem Kurztelegramm befinden sich hier nur noch die Halbmonatswerte.
Wichtig zur Interpretation: Es werden nur die Differenzen gesendet. Der jeweilge Wert muss daher ueber eine Summation gebildet werden.
Ueber den Stichtag (neue Abrechnungsperiode) hinweg ist diese Differenz negativ, weil zum Stichtag der Zaehler auf 0 gesetzt wird.

VG Christoph