FHEM Forum

FHEM - Hausautomations-Systeme => Homematic => Thema gestartet von: Loctotex am 13 Dezember 2020, 17:04:12

Titel: Register in Readings anzeigen mit Asksin++
Beitrag von: Loctotex am 13 Dezember 2020, 17:04:12
Hallo,

ich versuche bei Asksin++ Geräten mir diverse Register in den Readings anzuzeigen. Dazu habe ich z.b. bei "invertDisplayEP42" "d" auf "1" gesetzt:
$HMConfig::culHmRegDefine{"invertDisplayEP42"}          = {a=>6.0,   s=>0.1, l=>0,  min=>0,  max=>1,    c=>'',    p=>'n', f=>'',  u=>'',    d=>1,  t=>"invert Display"};
Im Code steht dazu: "    # d: if '1' the register will appear in Readings"

"get <name> regVal invertDisplayEP42" funktioniert und liefert mir richtige Werte, nur ich bekomme kein passendes Reading dazu. Habe ich etwas übersehen?

Meine komplette Konfiguration steht hier:
https://forum.fhem.de/index.php/topic,112912.msg1099121.html#msg1099121
Titel: Antw:Register in Readings anzeigen mit Asksin++
Beitrag von: papa am 14 Dezember 2020, 20:34:19
Hm - im Prinzip sieht das alles gut aus. Aber ich kenne mich da auch nicht wirklich tiefgreifend aus. Habe die meisten Sachen aus der HMConfig.pm abgeschrieben.
Titel: Antw:Register in Readings anzeigen mit Asksin++
Beitrag von: Loctotex am 15 Dezember 2020, 16:48:51
Ja da habe ich es auch her. Aber Vielleicht kann Martin mir ja helfen?
Titel: Antw:Register in Readings anzeigen mit Asksin++
Beitrag von: martinp876 am 28 Dezember 2020, 12:49:32
ich habe es simuliert - es funktioniert bei mir. Somit unklar, was bei dir anders ist.

Ich brauche ein full list:
get <entity> list full
=> das Kommando steht nach update zu Verfügung
Titel: Antw:Register in Readings anzeigen mit Asksin++
Beitrag von: Loctotex am 28 Dezember 2020, 14:31:56
Hier das list Full:
Internals:
   .triggerUsed 1
   DEF        F3430001
   FUUID      5f0f3110-f33f-bffa-d2c6-efe1f93651e5123c
   NAME       HM_F34300_Dis_01
   NOTIFYDEV  global
   NR         719
   NTFY_ORDER 50-HM_F34300_Dis_01
   STATE      textEP42
   TYPE       CUL_HM
   chanNo     01
   device     HM_F34300
   .attraggr:
   .attrminint:
   CL:
     Authenticated 1
     AuthenticatedBy allowed_WEBphone
     AuthenticatedUser nico
     BUF       
     FD         49
     FW_ID      947
     LASTACCESS 1609162205
     NAME       WEBphone_192.168.0.100_60428
     NR         927
     PEER       192.168.0.100
     PORT       60428
     SNAME      WEBphone
     SSL       
     STATE      Connected
     TEMPORARY  1
     TYPE       FHEMWEB
     canAsyncOutput 1
     .attraggr:
     .attrminint:
     READINGS:
       2020-12-28 14:26:17   state           Connected
   OLDREADINGS:
   READINGS:
     2020-12-28 14:26:17   .R-alignmentEP42 set_undef lit:3
     2020-12-28 14:29:08   .R-showLineEP42 set_0
     2020-12-28 14:21:48   .R-sign         off
     2020-12-28 14:21:48   RegL_01.          04:10 08:00 09:00 36:31 37:32 38:33 39:34 3A:35 3B:36 3C:37 3D:38 3E:39 3F:30 40:61 41:62 42:63 43:64 44:65 45:66 46:78 47:78 48:20 49:20 4A:20 4B:20 4C:20 4D:20 4E:20 4F:20 50:20 51:20 52:20 53:20 54:20 55:20 90:01 91:01
     2020-12-28 14:29:38   cfgState        updating
     2020-12-28 14:29:08   text1           set_1234567890ab
     2020-12-28 14:29:08   text2           set_xx         
   helper:
     cfgChkResult No regs found for:-ret--ret-HM_F34300_Dis_01 type:display42 - -ret-list:peer register         :value-ret-   1:      alignmentEP42    :set_undef lit:3-ret-   1:      showLineEP42     :set_0-ret-   1:      sign             :off-ret-text1:1234567890ab-ret-text2:xx          -ret-                       -ret-                       -ret-
     getCfgListNo
     peerFriend
     peerOpt    -:display42
     regLst     1
     cfgChk:
       idRc02     RegL_01.
     cmds:
       TmplKey    :no:1609161300.4188
       TmplTs     1609161300.4188
       cmdKey     1:0:0::HM_F34300:F343:01:
       cmdLst:
         clear      [(readings|trigger|register|oldRegs|rssi|msgEvents|{msgErrors}|attack|all)]
         getConfig  noArg
         getRegRaw  (List0|List1|List2|List3|List4|List5|List6) [-peerChn-]
         peerBulk   -peer1,peer2,...- [({set}|unset)]
         peerChan   -btnNumber- -actChn- ... single [set|unset] [actor|remote|both]
         regBulk    -list-.-peerChn- -addr1:data1- -addr2:data2-...
         regSet     [(prep|{exec})] -regName- -value- [-peerChn-]
         sign       [(on|{off})]
         textEP42   -txt1- -txt2-...
         tplDel     -tplDel-
         tplSet_0   -tplChan-
       lst:
         condition  slider,0,1,255
         peer       
         peerOpt   
         tplChan   
         tplDel     
         tplPeer   
       rtrvLst:
         cmdList    [({short}|long)]
         deviceInfo [({short}|long)]
         list       [({normal}|full)]
         param      -param-
         reg        -addr- -list- [-peerChn-]
         regList    noArg
         regTable   noArg
         regVal     -addr- -list- [-peerChn-]
         saveConfig [-filename-]
         tplInfo    noArg
     expert:
       def        0
       det        0
       raw        1
       tpl        0
     regCollect:
     role:
       chn        1
     shadowReg:
       RegL_01.    00:00 04:10 08:00 09:00 36:31 37:32 38:33 39:34 3A:35 3B:36 3C:37 3D:38 3E:39 3F:30 40:61 41:62 42:63 43:64 44:65 45:66 46:78 47:78 48:20 49:20 4A:20 4B:20 4C:20 4D:20 4E:20 4F:20 50:20 51:20 52:20 53:20 54:20 55:20 90:00 91:03
     tmpl:
   nb:
     cnt        3
Attributes:
   model      HB-DIS-EP-42BW
   peerIDs    ,




Hier erscheinen die Readings, allerdings mit Punkt davor. Im Webinterface kann ich sie nicht sehen.
Titel: Antw:Register in Readings anzeigen mit Asksin++
Beitrag von: frank am 28 Dezember 2020, 14:43:51
die anzeige wird immer mit attr expert gesteuert.
wenn nur im hauptdevice existent, dann gilt die einstellung dort auch für channel.
also zb mal erweitern mit allReg.
Titel: Antw:Register in Readings anzeigen mit Asksin++
Beitrag von: Loctotex am 28 Dezember 2020, 14:58:17
Das war es, danke. Hab ich total übersehen.

Titel: Antw:Register in Readings anzeigen mit Asksin++
Beitrag von: Loctotex am 28 Dezember 2020, 15:05:11
Unabhängig davon habe ich noch ein Problem mit den text1 und text2 Readings. Die werden aus der CUL_HM_4DisText erzeugt. Allerdings werden nur 12 Zeichen beachtet. Ich benötige aber 16 Zeichen. Ich hab versucht die CUL_HM_4DisText  in der HMConfig_HBdis zu überschreiben:


sub CUL_HM_4DisText42($) {
Log 1,"----------CUL_HM_4DisText42----------";
my ($hash)=@_;
my $md      = CUL_HM_getAliasModel($hash);
if($md eq 'HB-DIS-EP-42BW'){
my $name = $hash->{NAME};
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;
foreach 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+15);
$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,16);
foreach (@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";
}else{
return $CUL_HM_4DisTextOrig->(@_);
}
}

sub HMConfig_HBdis_Initialize{
  $CUL_HM_4DisTextOrig = \&main::CUL_HM_4DisText;
  *main::CUL_HM_4DisText = \&CUL_HM_4DisText42;
}



Das funktioniert leider nur beim Reload, beim Neustart leider nicht. Hat evtl Jemand noch eine Idee?
Titel: Antw:Register in Readings anzeigen mit Asksin++
Beitrag von: martinp876 am 29 Dezember 2020, 17:20:59
nun, mal so ins Blaue hinein geraten: Es liegt an der Reihenfolge der Definitionen.
Du überschreibst die Fuktion
CUL_HM_4DisText
und scheinbar wird das ""orginal" nach deiner re-definition eingestellt.
baue einen Test in deine Sub ein
sub CUL_HM_4DisText42($) {
Log 1,"----------CUL_HM_4DisText42----------";
my ($hash)=@_;
       return "I am new" if ($hash eq "test");
      ....


dann führe nach FHEM init dies aus


{if( CUL_HM_4DisText42("test") ne "I am new"){HMConfig_HBdis_Initialize()}}


Diesen Code
-kannst du erst einmal manuell testen, wenn die Subs "falsch" sind.
- baust du ein, wenn es erfolgreich ist in das "user.cfg".

So: User.cfg - ein File was meiner Ansicht nach jeder haben sollte:
erstelle ein Notify welches nach dem Init aufgerufen wird und das c_User.cfg ausführt
define userCfg notify global:INITIALIZED include c_User.cfg
So ein File ist m.E. nützlich und unabdingbar.
In das file schreibst du die If Abfrage