Reading text1 und text2 abgeschnitten bei HM-ES-TX-WM

Begonnen von gichtl, 08 Juni 2021, 21:31:31

Vorheriges Thema - Nächstes Thema

gichtl

In den beiden Channels vom HM-ES-TX-WM sind die Readings text1 und text2 (für die OBIS-Kennzahlen) abgeschnitten.

text1 hatte ich auf 16.7.0 eingestellt, angezeigt wird für den Stromzähler (firmware 2.5 fir ES-IEC) jedoch nur:
text1  16.7.
text2  1.8.0


Und beim Gaszähler (firmware 1.2) anstatt 1.7.0 und 1.8.0
text1  1-0:1.7
text2  1-0:1.8


Vermutlich ist die hinterlegte Feldlänge zu kurz?

DeeSPe

Ich würde gern hier auf diese Problematik noch einmal hinweisen.
Wie hier beschrieben habe ich auch das Problem die richtigen Text-Daten zu übergeben.
Gibt es evtl. eine alternative Lösung um das zu setzen?

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

tndx

Guten Abend,

gibt es hierfür mittlerweile eine Lösung? Ich habe nämlich das gleiche Problem.

noansi

#3
Hallo Zusammen,

ZitatHM-ES-TX-WM sind die Readings text1 und text2 (für die OBIS-Kennzahlen) abgeschnitten.

in 10_CUL_HM.pm unter "text"
    my $maxLineLen = $md =~ /^HM-(?:DIS-WM55|DIS-EP-WM55|PB-4DIS-WM|RC-DIS-H-X-EU)/s ? 12 : 16;
    my $s = 0x36;
    $l1 = '' if (!defined($l1));
    $l1 =~ s/\\_/ /g;
    $l1 = substr($l1."\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 0, $maxLineLen);
    $l1 =~ s/(.)/sprintf(" %02X:%02X",$s++,ord($1))/ge;
    if (defined($l2)) {
      $s = 0x46;
      $l2 =~ s/\\_/ /g;
      $l2 = substr($l2."\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 0, $maxLineLen); #HM-DIS-EP-WM55 Fw 1.2 has bug at character 9, it is set as the same as character 8 in channels 04 to 08 for text2
      $l2 =~ s/(.)/sprintf(" %02X:%02X",$s++,ord($1))/ge;
    }
    else {
      $l2 = '';
    }
würde die unterschiedlichen Längen der Textfelder beim Setzen berücksichtigen.

und
sub CUL_HM_4DisText($) {      # convert text for 4dis
  #text1: start at 54 (0x36) length 12 (0x0c)
  #text2: start at 70 (0x46) length 12 (0x0c)
  my ($hash)=@_;
  my $name = $hash->{NAME};
  my $devName = InternalVal($name,'device',$name);
  my $md      = defined $defs{$devName}{helper}{mId} ? $culHmModel->{$defs{$devName}{helper}{mId}}{name} : AttrVal($devName, 'model'  , '');
  my $maxLineLen = $md =~ /^HM-(?:DIS-WM55|DIS-EP-WM55|PB-4DIS-WM|RC-DIS-H-X-EU)/s ? 12 : 16;
  my $regPre = ($hash->{helper}{expert}{raw}?'':'.');
  my $reg1 = ReadingsVal($name,$regPre.'RegL_01.' ,'');
  my $pref = '';
  if ($hash->{helper}{shadowReg}{'RegL_01.'}){
    $pref = 'set_';
    $reg1 = $hash->{helper}{shadowReg}{'RegL_01.'};
  }
  my %txt;
  for my $sAddr (54,70){
    my $txtHex = $reg1;  #one row
    my $sStr = sprintf('%02X:',$sAddr);
    $txtHex =~ s/.* $sStr//;       #remove reg prior to string
    $sStr = sprintf('%02X:',$sAddr+11);
    $txtHex =~ s/$sStr(..).*/,$1/; #remove reg after string
    $txtHex =~ s/ ..:/,/g;         #remove addr
    $txtHex =~ s/ //g;             #remove space
    $txtHex =~ s/,00.*//;          #remove trailing string
    $txt{$sAddr} = '';
    my @ch = split(/,/,$txtHex,$maxLineLen);
    for (@ch){$txt{$sAddr}.=chr(hex($_)) if (length($_)==2)};
  }
  CUL_HM_UpdtReadBulk($hash,1,'text1:'.$pref.$txt{54},
                              'text2:'.$pref.$txt{70});
  return 'text1:'.$txt{54}."\n".
         'text2:'.$txt{70}."\n";
}
beim Lesen.

Eventuell zu verfeinern, weil ich selbst nur mit HM-DIS-EP-WM55 testen kann.

Gruß, Ansgar.

tndx

Hi Ansgar,

danke für die Änderungsvorschläge. Leider konnte ich sie noch nicht ausprobieren, da ich gerade damit kämpfe, mein FHEM samt aller Abhängigkeiten auf den aktuellen Stand zu bringen, erst dann würde ich an den Bestandteilen rumpatchen.

Aber mittlerweile habe ich wohl auch ganz ohne dieser Änderungen den HM-ES-TX-WM ans Laufen gekriegt, inkl. Leistungsanzeige. Scheint also nur ein kosmetisches Problem zu sein? Kann das jemand noch bestätigen?