[gelöst]Eingabe am Dummy soll Sub starten, die ein at anlegt, ändert, löscht ...

Begonnen von supernova1963, 29 Mai 2017, 20:00:01

Vorheriges Thema - Nächstes Thema

supernova1963

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');
}



DeeSPe

Irgendwie sehe ich weder bei Deiner Erklärung noch bei Deinem Ansatz durch!
Wo ist denn beim dummy die setList?

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

supernova1963

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

DeeSPe

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
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

supernova1963

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

DeeSPe

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
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

supernova1963

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

DeeSPe

MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

supernova1963

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