Register in Readings anzeigen mit Asksin++

Begonnen von Loctotex, 13 Dezember 2020, 17:04:12

Vorheriges Thema - Nächstes Thema

Loctotex

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

papa

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.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

Loctotex

Ja da habe ich es auch her. Aber Vielleicht kann Martin mir ja helfen?

martinp876

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

Loctotex

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.

frank

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.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

Loctotex

Das war es, danke. Hab ich total übersehen.


Loctotex

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?

martinp876

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