Nmap readingsGroup

Begonnen von igami, 03 April 2017, 17:07:36

Vorheriges Thema - Nächstes Thema

supernova1963

Leider nicht, da ich es nicht schaffe den Value des readings #1_state.absent durch das icon rc_RED und den Value #1_state.present durch das Icon rc_GREEN zu ersetzen.

Die sonst funktionierenden Ersetzungen greifen nicht.

Gernot

justme1968

nimm die perl code version von value format und ordne sie dem default '' zu.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

supernova1963

Hallo andre,

Danke für den Hinweis. Mit valueFormat funktioniert die Ersetzung. Was muss ich ändern, damit des Textes "rc_GREEN" und "rc_RED" das jeweiligen Icon angezeigt wird?

Danke,

Gernot


defmod nmapListe readingsGroup <>,<Nr>,<IP-Adresse>,<Rechner-Name>,<MAC>,<Status>,<Hersteller> \
nmap:@3,#1_ip,<#1>,(.*)_alias,#1_macAddress,#1_state,#1_macVendor
attr nmapListe cellStyle { "c:1" => 'style="text-align:right"' }
attr nmapListe icon it_network
attr nmapListe room 92 Informationen
attr nmapListe sortColumn 2
attr nmapListe valueFormat { ($VALUE eq 'absent')?"rc_RED":($VALUE eq 'present')?"rc_GREEN":NmapNr($VALUE)}
attr nmapListe valueStyle {$READING =~ m/(.+)_/;;\
my $state = ReadingsVal($DEVICE, $1."_state", "NA");;\
my $style = "";;\
\
return('style="text-align: right;; '.$style.'"') if($state eq "present" && $READING =~ m/_uptime/);;\
return('style="color: #FF0000;; text-align: right;; '.$style.'"') if($state eq "absent" && $READING =~ m/_uptime/);;\
\
return('style="'.$style.'"') if($state eq "present");;\
return('style="color: #FF0000;; '.$style.'"') if($state eq "absent");;\
}

supernova1963

#18
Ich hab's dank andre und igami geschafft.
Meine readingsGroup (jetzt ohne die Nutzung von 99_myUtils):
defmod nmapListe readingsGroup <>,<Nr>,<IP-Adresse>,<onl>,<RechnerName>,<MAC>,<Hersteller> \
nmap:@4,#1_ip,<#1>,#1_state,(.*)_alias,#1_macAddress,#1_macVendor
attr nmapListe cellStyle { "c:1" => 'style="text-align:right"',"c:3" => 'style="text-align:center"',"c:4" => 'style="text-align:left"' }
attr nmapListe icon it_network
attr nmapListe room 92 Informationen
attr nmapListe sortColumn 2
attr nmapListe valueFormat { if ($VALUE eq 'absent') {\
     "<img src='./fhem/images/default/10px-kreis-rot.png' alt='absent'>"\
     }\
  elsif ($VALUE eq 'present') {\
     "<img src='./fhem/images/default/10px-kreis-gruen.png' alt='present'>"\
     }\
  elsif (substr($READING,rindex($READING,"_")) eq "_ip") {\
     substr($VALUE,rindex($VALUE,".")+1)\
     } \
  else {\
    ""\
    }\
}
attr nmapListe valueStyle {$READING =~ m/(.+)_/;;\
my $state = ReadingsVal($DEVICE, $1."_state", "NA");;\
my $style = "";;\
\
return('style="text-align: right;; '.$style.'"') if($state eq "present" && $READING =~ m/_uptime/);;\
return('style="color: #FF0000;; text-align: right;; '.$style.'"') if($state eq "absent" && $READING =~ m/_uptime/);;\
\
return('style="'.$style.'"') if($state eq "present");;\
return('style="color: #FF0000;; '.$style.'"') if($state eq "absent");;\
}


Anregungen für zu Optimierung des Codes nehme ich gerne an.

Danke noch einmal an andre und igami,

Gernot

igami

Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

supernova1963

Ich habe noch etwas aufgeräumt, die Farbe der abwesenden geändert und einen Link hintern den Namen gelegt, wenn der #1_alias mit -80 bzw. -443 endet.
Es öffnet sich ein neues Fenster (wer das nicht mag, kann target='_blank' entfernen oder durch target='_self' ersetzen) mit der URL aus der IP-Adresse (http://[#1_ip] bei 80 bzw. https://[#1_ip]:443)

Einen schönen Feiertag,

Gernot

defmod nmapListe readingsGroup <>,<Nr>,<IP-Adresse>,<onl>,<RechnerName>,<MAC>,<Hersteller> \
nmap:@4,#1_ip,<#1>,#1_state,(.*)_alias,#1_macAddress,#1_macVendor
attr nmapListe cellStyle { "c:1" => 'style="text-align:right"',"c:3" => 'style="text-align:center"',"c:4" => 'style="text-align:left"' }
attr nmapListe icon it_network
attr nmapListe room 92 Informationen
attr nmapListe sortColumn 2
attr nmapListe valueFormat { my $ipAddr = substr($READING,0,index($READING,"_"));;\
  #Icon für #1_state.absent Spalte 'onl' \
  return("<img src='./fhem/images/default/10px-kreis-rot.png' alt='absent'>") if($VALUE eq "absent");;\
  #Icon für #1_state.present Spalte 'onl' \
  return("<img src='./fhem/images/default/10px-kreis-gruen.png' alt='present'>") if($VALUE eq "present");;\
  #Spalte 'Nr' zur Sortierung aus der IP extrahieren    \
  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");;\
  #Anderenfalls soll das valueFormat leer bleiben bzw. nachstehenden Inhalt verwenden\
  return("");;\
}
attr nmapListe valueStyle {$READING =~ m/(.+)_/;;\
my $state = ReadingsVal($DEVICE, $1."_state", "NA");;\
my $style = "";;\
\
return('style="text-align: right;; '.$style.'"') if($state eq "present" && $READING =~ m/_uptime/);;\
return('style="color: #bfbfbf;; text-align: right;; '.$style.'"') if($state eq "absent" && $READING =~ m/_uptime/);;\
\
return('style="'.$style.'"') if($state eq "present");;\
return('style="color: #bfbfbf;; '.$style.'"') if($state eq "absent");;\
}




choetzu

Hallo Supernova1963

wow, das sieht sehr schön aus... Woher hast du das FHEM-Template? Danke fürs Feedback.

Lg C
Raspi3, EnOcean, Zwave, Homematic

supernova1963


choetzu

Danke für deine Antwort, werde ich gleich mal ausprobieren ;)

Zitat von: supernova1963 am 01 Mai 2017, 21:52:21
Funktioniert dein nmap jetzt?

Nein, leider nicht. Ich konnte aber den Fehler etwas einkreisen. Am device nmap liegt es m.E. nicht. Denn ohne readingsGroup geht es problemlos, also ohne Fehlermeldung.

Wenn ich es gemäss der Anleitung von igami mache (https://forum.fhem.de/index.php/topic,70041.msg625079.html#msg625079) dann klappt die readingsGroup solange, bis ich folgendes Attribut setze

attr Nmap_readingsGroup valueStyle {$READING =~ m/(.+)_/;;\
my $state = ReadingsVal($DEVICE, $1."_state", "NA");;\
my $style = "font-family: monospace;;";;\
\
return('style="color: #61CE3C;; text-align: right;; '.$style.'"') if($state eq "present" && $READING =~ m/_uptime/);;\
return('style="color: #FF0000;; text-align: right;; '.$style.'"') if($state eq "absent" && $READING =~ m/_uptime/);;\
\
return('style="color: #61CE3C;; '.$style.'"') if($state eq "present");;\
return('style="color: #FF0000;; '.$style.'"') if($state eq "absent");;\
}


sobald ich dies mache, kommen die Fehlermeldungen wieder. Meine perl-Kenntnisse sind gleich 0, so dass ich auch nach xmal durchlesen, keine Ahnung habe, woran es liegen könnte...

hmm, ich habe jetzt mal die readingsGroup deaktiviert.
Raspi3, EnOcean, Zwave, Homematic

igami

Wie gibts du das Attribut ein? Das ist die Raw definition.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

supernova1963

#25
Meine Perl Kenntnisse sind ebenfalls mehr als bescheiden. Das valueStyle Attribut habe ich, - bis auf Anpassungen des Farb Codes -, unverändert von igami übernommen.

Nur sicherheitshalber, den defmod Code trägst du doch in der "Raw definition" ein und führst ihn mit "Execute commands" aus, oder?
Insbesondere dieser Code funktioniert nämlich nicht mit dem "bösen, bösen, bösen" direkt editieren der fhem.conf.

Anderenfalls hilft den Experten ein list Nmap_readingsGroup bei der Fehleranalyse oft weiter.

Gernot

@igami: du warst schneller


choetzu

Hallo, was ist genau mit raw Definition gemeint? Ich mache es wie folgt. Im Device nmap_readingGroup klicke ich auch attr und wähle dann valueStyle in der Liste aus. Danach gebe ich den Code ein.. Save und fertig..

Ist das falsch?
Raspi3, EnOcean, Zwave, Homematic

supernova1963

Daran liegt es, nimm den Link Raw definition in der letzten Zeile der Anzeige der Definition des Devices und ersetze den Code  ganz oder teilweise.
Es funktioniert sogar in der Raw Definition eines beliebigen Devices. Ich habe mir ein defmodEdit als einfachen Dummy angelegt, den ich für diese Code-Erfassung verwende.

Vergleich Attribut und Raw Definition:

Attribut Editor valueStyle:

{$READING =~ m/(.+)_/;
my $state = ReadingsVal($DEVICE, $1."_state", "NA");
my $style = "";

return('style="text-align: right; '.$style.'"') if($state eq "present" && $READING =~ m/_uptime/);
return('style="color: #bfbfbf; text-align: right; '.$style.'"') if($state eq "absent" && $READING =~ m/_uptime/);

return('style="'.$style.'"') if($state eq "present");
return('style="color: #bfbfbf; '.$style.'"') if($state eq "absent");
}

Aus der Raw Definition:

attr nmapListe valueStyle {$READING =~ m/(.+)_/;;\
my $state = ReadingsVal($DEVICE, $1."_state", "NA");;\
my $style = "";;\
\
return('style="text-align: right;; '.$style.'"') if($state eq "present" && $READING =~ m/_uptime/);;\
return('style="color: #bfbfbf;; text-align: right;; '.$style.'"') if($state eq "absent" && $READING =~ m/_uptime/);;\
\
return('style="'.$style.'"') if($state eq "present");;\
return('style="color: #bfbfbf;; '.$style.'"') if($state eq "absent");;\


Probier's aus, und es klappt!

Gernot


TWART016

Vielen Dank. Sieht super aus.

Bei mir wird der farbige Punkt für Online/Offline links angezeigt. Wie kann ich das zentrieren?

supernova1963

Hier wird es festgelegt (c:1 = Spalte 1, ...)

....
attr nmapListe cellStyle { "c:1" => 'style="text-align:right"',"c:3" => 'style="text-align:center"',"c:4" => 'style="text-align:left"' }
...