Autor Thema: readingsGroup filtern  (Gelesen 841 mal)

Offline uwirt

  • Full Member
  • ***
  • Beiträge: 215
  • "I'm sorry, Dave. I'm afraid I can't do that."
readingsGroup filtern
« am: 28 Dezember 2020, 11:22:15 »
Hallo Ihr. Ich habe mir aus den Informationen hier eine RG erstellt, welche mir eine Liste der aktiven und inaktiven IP-Adressen im Netzwerk darstellt.

Nun möchte ich nur die aktiven haben - weiss aber leider nicht wo ich den Filter ansetzen muss. Ich konnte hier in der commandref und im Forum noch keinen schlüsssigen Hinweis finden:

defmod NetzwerkListe readingsGroup <>,<Nr>,<IP-Adresse>,<Status>,<Name> \Netzwerk:@4,#1_ip,<#1>,#1_state,(.*)_alias
attr NetzwerkListe cellStyle { "c:1" => 'style="text-align:right"',"c:3" => 'style="text-align:center"',"c:4" => 'style="text-align:left"' }
attr NetzwerkListe icon it_network
attr NetzwerkListe room Network
attr NetzwerkListe sortColumn 1
attr NetzwerkListe sortFn rgSortIP
attr NetzwerkListe valueFormat { my $ipAddr = substr($READING,0,index($READING,"_"));;;; return("<img src='/fhem/images/default/10px-kreis-rot.png' alt='absent'>") if($VALUE eq "absent");;;; return("<img src='/fhem/images/default/10px-kreis-gruen.png' alt='present'>") if($VALUE eq "present");;;; return(substr($VALUE,rindex($VALUE,".")+1)) if(substr($READING,rindex($READING,"_")) eq "_ip");;;; return("<a url='http://".$ipAddr."' onclick='window.open(\"http://".$ipAddr."\");;;; return false;;;;'>".$VALUE."</a>") if(substr(ReadingsVal($DEVICE,$READING,""),rindex(ReadingsVal($DEVICE,$READING,""),"-")+1) eq "80");;;; return("<a url='https://".$ipAddr."' onclick='window.open(\"https://".$ipAddr."\");;;; return false;;;;'>".$VALUE."</a>") if(substr(ReadingsVal($DEVICE,$READING,""),rindex(ReadingsVal($DEVICE,$READING,""),"-")+1) eq "443");;;; return("");;;; }
attr NetzwerkListe valueIcon { return 'it_network@red' if ($VALUE eq 'absent');;;; return 'it_network@green' if( $VALUE eq 'present' );;;; return $VALUE;;;; }

Vielleicht kann mir jemand mit einer kreativen Idee hier weiterhelfen.

FHEM / Ubuntu / fitlet2
HomeMatic: CCU3|HmIP-STHD|HmIP-PCBS|HmIP-PCBS2|HmIP-PCBS-BAT|HM-WDC7000|HM-WDS100-C6-O|HM-WDS40|HM-LC-Sw1-FM|HM-LC-RGBW-WM|HM-ES-PMSw1-Pl|HM-ES-TX-WM
NAS: DS218+|DS209j|DS216+II|DS412+
Devices: Panasonic Webcams|Withings|Gardena Smart

Offline xenos1984

  • Developer
  • Full Member
  • ****
  • Beiträge: 410
Antw:readingsGroup filtern
« Antwort #1 am: 28 Dezember 2020, 12:19:56 »
Indem du in dem Perl-Ausdruck für valueFormat für die inaktiven Adressen undef zurückgibst:

http://wiki.fhem.de/wiki/ReadingsGroup#Inhalte_filtern

Auf 'absent' testest du ja schon, also muss die Abfrage dort so lauten:

return undef if ($VALUE eq 'absent')

Offline uwirt

  • Full Member
  • ***
  • Beiträge: 215
  • "I'm sorry, Dave. I'm afraid I can't do that."
Antw:readingsGroup filtern
« Antwort #2 am: 31 Dezember 2020, 13:53:29 »
Ich habe es so versucht - nur leider sieht es nicht aus wie ich es gerne hätte. Die abwesenden verbleiben weiterhin in der Liste.

{ my $ipAddr = substr($READING,0,index($READING,"_")); return undef if($VALUE eq "absent"); return("<img src='/fhem/images/default/10px-kreis-gruen.png' alt='present'>") if($VALUE eq "present"); return(substr($VALUE,rindex($VALUE,".")+1)) if(substr($READING,rindex($READING,"_")) eq "_ip"); return("<a url='http://".$ipAddr."' onclick='window.open(\"http://".$ipAddr."\"); return false;'>".$VALUE."</a>") if(substr(ReadingsVal($DEVICE,$READING,""),rindex(ReadingsVal($DEVICE,$READING,""),"-")+1) eq "80"); return("<a url='https://".$ipAddr."' onclick='window.open(\"https://".$ipAddr."\"); return false;'>".$VALUE."</a>") if(substr(ReadingsVal($DEVICE,$READING,""),rindex(ReadingsVal($DEVICE,$READING,""),"-")+1) eq "443"); return(""); }
« Letzte Änderung: 31 Dezember 2020, 13:56:04 von uwirt »
FHEM / Ubuntu / fitlet2
HomeMatic: CCU3|HmIP-STHD|HmIP-PCBS|HmIP-PCBS2|HmIP-PCBS-BAT|HM-WDC7000|HM-WDS100-C6-O|HM-WDS40|HM-LC-Sw1-FM|HM-LC-RGBW-WM|HM-ES-PMSw1-Pl|HM-ES-TX-WM
NAS: DS218+|DS209j|DS216+II|DS412+
Devices: Panasonic Webcams|Withings|Gardena Smart

Offline xenos1984

  • Developer
  • Full Member
  • ****
  • Beiträge: 410
Antw:readingsGroup filtern
« Antwort #3 am: 31 Dezember 2020, 15:37:28 »
Das scheint nur für einzelne Readings zu greifen. Eine andere Möglichkeit, wäre in der Definition der readingsGroup die Geräte auszufiltern, die angezeigt werden sollen:

http://fhem.de/commandref.html#readingsGroup

Zitat
<device> can be a devspec (see devspec) with at least one FILTER expression.

Offline uwirt

  • Full Member
  • ***
  • Beiträge: 215
  • "I'm sorry, Dave. I'm afraid I can't do that."
Antw:readingsGroup filtern
« Antwort #4 am: 31 Dezember 2020, 17:44:26 »
Du hast wohl recht - nur kenne ich mich da nicht sehr gut aus. Was ich bisher versucht habe war ohne Erfolg.

Das zu Grunde liegende device ist Netzwerk und basiert auf nmap.

Mit:   
<>,<Nr>,<IP-Adresse>,<Status>,<Name> \Netzwerk:@4,#1_ip,<#1>,#1_state,(.*)_alias.:FILTER=#1_state=.*:presentbleibt die Liste leer.
« Letzte Änderung: 31 Dezember 2020, 17:51:35 von uwirt »
FHEM / Ubuntu / fitlet2
HomeMatic: CCU3|HmIP-STHD|HmIP-PCBS|HmIP-PCBS2|HmIP-PCBS-BAT|HM-WDC7000|HM-WDS100-C6-O|HM-WDS40|HM-LC-Sw1-FM|HM-LC-RGBW-WM|HM-ES-PMSw1-Pl|HM-ES-TX-WM
NAS: DS218+|DS209j|DS216+II|DS412+
Devices: Panasonic Webcams|Withings|Gardena Smart

Offline xenos1984

  • Developer
  • Full Member
  • ****
  • Beiträge: 410
Antw:readingsGroup filtern
« Antwort #5 am: 31 Dezember 2020, 22:55:00 »
Also ist es nur ein Device mit Namen Netzwerk, und die Liste enthält die Readings dieses eines Device? Dann funktioniert meine Idee mit devspec + FILTER in der Tat nicht, weil die nur verschiedene Devices filtern kann, d.h. wenn jede Zeile von einem eigenen Device käme.

Der Fall ist mir noch nicht begegnet - vielleicht hat einer der readingsGroup-Experten eine Idee.