Hallo zusammen,
Mit meiner derzeitigen Lösung über die beiden userattr bin ich nicht sehr glücklich, da bei der Attribut Änderung immer ein save benötigt wird und ich nicht in der Lage bin, das notwendige notify (zum starten der Sub in myUtils) zu definieren.
Danke,
Gernot
Der Dummy (Achtung: die userattr stehen ganz unten):
Internals:
CFGFN
NAME nc_00_1C_42_06_05_35
NR 1817
STATE <table style="table-layout:fixed"><tr>
<td style='text-align: left'>192.168.1.5</td>
<td style='width: 30px'><img src="./fhem/images/default/10px-kreis-gruen.png" alt="up"></td>
<td align=Left style='white-space: nowrap'>Parallels, Inc.</td>
<td style='text-align: right'>2017-05-29 18:38:19</td></tr></table>
TYPE dummy
Helper:
Dblog:
Hostname:
Mydblog:
TIME 1496075696.55173
VALUE n/a
Ip:
Mydblog:
TIME 1496075696.4963
VALUE 192.168.1.5
Mac:
Mydblog:
TIME 1496075696.50611
VALUE 00:1C:42:06:05:35
Nr:
Mydblog:
TIME 1496075696.52747
VALUE 005
Vendor:
Mydblog:
TIME 1496075696.56031
VALUE Parallels, Inc.
State:
Mydblog:
TIME 1496075899.45868
VALUE up
Readings:
2017-05-29 18:34:56 HOSTNAME n/a
2017-05-29 18:34:56 IP 192.168.1.5
2017-05-29 18:34:56 MAC 00:1C:42:06:05:35
2017-05-29 18:34:56 NR 005
2017-05-29 18:34:56 VENDOR Parallels, Inc.
2017-05-29 18:38:19 state up
Attributes:
Interval 60
alias SERVERFHEM
event-on-change-reading .*
group NetClients
room Netz
scan off
sortby 005
stateFormat { if (ReadingsVal("nc_00_1C_42_06_05_35","state","") eq "up"){
return "<table style=\"table-layout:fixed\"><tr>
<td style='text-align: left'>".ReadingsVal("nc_00_1C_42_06_05_35","IP","")."</td>
<td style='width: 30px'><img src=\"./fhem/images/default/10px-kreis-gruen.png\" alt=\"up\"></td>
<td align=Left style='white-space: nowrap'>".ReadingsVal("nc_00_1C_42_06_05_35","VENDOR","")."</td>
<td style='text-align: right'>".ReadingsTimestamp("nc_00_1C_42_06_05_35","state","")."</td></tr></table>"
}
elsif (ReadingsVal("nc_00_1C_42_06_05_35","state","") eq "down") {
return "<table style=\"table-layout:fixed\"><tr>
<td style='text-align: left'>".ReadingsVal("nc_00_1C_42_06_05_35","IP","")."</td>
<td style='width: 30px'><img src=\"./fhem/images/default/10px-kreis-rot.png\" alt=\"up\"></td>
<td align=Left style='white-space: nowrap'>".ReadingsVal("nc_00_1C_42_06_05_35","VENDOR","")."</td>
<td style='text-align: right'>".ReadingsTimestamp("nc_00_1C_42_06_05_35","state","")."</td></tr></table>"
}
else {
return "<table style=\"table-layout:fixed\"><tr>
<td style='text-align: left'>".ReadingsVal("nc_00_1C_42_06_05_35","IP","")."</td>
<td style='width: 30px'><img src=\"./fhem/images/default/10px-kreis-rot.png\" alt=\"up\"></td>
<td align=Left style='white-space: nowrap'>".ReadingsVal("nc_00_1C_42_06_05_35","VENDOR","")."</td>
<td style='text-align: right'>".ReadingsTimestamp("nc_00_1C_42_06_05_35","state","")."</td></tr></table>"
}}
userattr scan:off,Quick&Dirty,DeepThought Interval
Eintrag bei Änderung des userattr Interval im Event montior:
2017-05-29 19:12:42 Global global ATTR nc_00_1C_42_06_05_35 Interval 60
myUtils Sub (noch ungetestet, da ich das notify nicht hinkriege):
################### Notify eines NetClient Dummy's ################
sub
nccntf($)
{
my ($MACDEF) = @_;
my $fhembefehl = '';
my $rc = '';
my $Zeit = 0;
$Zeit = AttrVal($MACDEF,"Interval",0);
my $Sekunden = $Zeit % 60;
$Zeit = ($Zeit - $Sekunden) / 60;
my $Minuten = $Zeit % 60;
$Zeit = ($Zeit - $Minuten) / 60;
my $Stunden = $Zeit % 60;
# Interval - Attribut ungleich 0 und Scan - Atrribut ungleich off => prüfen ob at - korrekt definiert
if (AttrVal($MACDEF,'Interval',0) != 0) {
if (AttrVal($MACDEF,"scan","off") eq 'Quick&Dirty') {
$fhembefehl = 'defmod '.$MACDEF.'_ncc_at at +*'.$Stunden.':'.$Minuten.':'.$Sekunden.' { fingQD("'.$MACDEF.'", "'.ReadingsVal($MACDEF,"IP","").'")}';
$rc = fhem($fhembefehl);
}
elsif (AttrVal($MACDEF,"scan","off") eq 'DeepThought') {
$fhembefehl = 'defmod '.$MACDEF.'_ncc_at at +*'.$Stunden.':'.$Minuten.':'.$Sekunden.' { nmapDT("'.$MACDEF.'", "'.ReadingsVal($MACDEF,"IP","").'")}';
$rc = fhem($fhembefehl);
}
else {
if (defined($MACDEF.'_ncc_at')) {
$fhembefehl = 'delete '.$MACDEF.'_ncc_at';
$rc = fhem($fhembefehl);
}
}
}
else {
$fhembefehl = 'attr '.$MACDEF.' scan off';
$rc = fhem($fhembefehl);
$fhembefehl = 'delete '.$MACDEF.'_ncc_at';
$rc = fhem($fhembefehl);
$rc = fhem('save');
}
$rc = fhem('save');
}
Irgendwie sehe ich weder bei Deiner Erklärung noch bei Deinem Ansatz durch!
Wo ist denn beim dummy die setList?
Gruß
Dan
Die setlist hatte ich definiert, hat aber aus irgendeinem Grund nicht funktioniert.
attr nc_00_1C_42_06_05_35 setList :up,down scan:off,Quick&Dirty,DeepThought Interval
Habe ich etwas falsch gemacht?
LG
Gernot
Mit:
attr nc_00_1C_42_06_05_35 setList up down scan:off,quick,deep interval
attr nc_00_1C_42_06_05_35 readingList scan interval
sollte es gehen.
Das Sonderzeichen & würde ich nicht in einem set/get verwenden.
Gruß
Dan
Hallo Dan,
Vielen Dank, hat funktioniert.
Event Monitor:
2017-05-29 20:56:10 dummy nc_00_1C_42_06_05_35 scan: off
Jetzt müßte auch mein notify etwas angepasst funktionieren ...
Danke,
Gernot
Na bitte.
Wenn bei up/down nichts gesetzt werden muss dann machst Du es so perfekt:
attr nc_00_1C_42_06_05_35 setList up:noArg down:noArg scan:off,quick,deep interval
Gruß
Dan
Hast recht, Up down habe ich weggelassen. Es war nur zum testen der Anzeige, die ich im stateFormat definiert habe.
Ganz anderes Thema, weißt du auch, warum sich bei meinem stateFormat die Schrift ändert, wenn die Readings des Dummy aktualisiert werden?
Ist aber nicht ganz so wichtig.
LG
Gernot
Pack mal Dein HTML aus stateFormat in <html></html>.
Gruß
Dan
Hallo Dan,
Nur ein <html><table> .... </table></html> nimmt die Attr Defintion nicht an. Ich probiere es morgen früh mit den Entwickler Tools von Chrome. Ich hab zur Zeit nur das iPad.
Ich muss sowieso den Code für die automatische Anlage der dummies noch auf deine Lösung anpassen.
Vielen Dank,
Gernot