Ankündigung

Einklappen
Keine Ankündigung bisher.

Status eines Netzwerkgerätes ermitteln

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [WireGate-Plugin] Status eines Netzwerkgerätes ermitteln

    Dieses Mini-Plugin ermöglich den Status (Ein/Aus) von Netzwerkgeräten oder einer Interntverbindung z. B. in einer Visu anzuzeigen und ist als eine Ergänzung zu dem WireGate-Plugin Ein-/Ausschalter von Netzwerkgeräten entstanden.

    Dieses Plugin prüft mit einem Ping ob ein Netzwerkgerät eingeschaltet ist und sendet den Status über eine GA auf den EIB/KNX-Bus. Die Überwachung kann zyklisch erfolgen und/oder durch eine weitere GA angestoßen werden.

    Die Konfiguration geschieht wie üblich im Definitionsbereich und ist durch die Kommentare selbsterklärend.

    Das Plugin ist zwar sehr einfach gestrickt, aber vielleicht für den einen oder anderen doch ganz interessant.

    Code:
    # Zum Anzeigen des Status eines Netzwerkgerätes oder der Internetverbindung
    #
    # Diese Plugin nutzt einen Ping zum Ermitteln des Zustandes (Ein/Aus)
    
    ### Definitionen
    my $start_ga = "1/1/2"; 	     # Gruppenadresse um den Test auszulösen
    my $return_ga = "1/1/1";             # Gruppenadresse zur Rückmeldung
    my $ip_address = "192.168.0.1";      # IP-Adresse des zu testenden PCs
    my $auto_test = "60";		     # Wert für automatischen Test in Sekunden, nicht zu kurz einstellen
    ### Ende Definitionen
    
    # Plugin an Gruppenadresse "anmelden"
    $plugin_subscribe{$start_ga}{$plugname} = 1;
    
    # Eigenen Aufruf-Zyklus auf x Sekunden setzen
    # der Aufrufzyklus ist unabhängig von der Taktzeit und muss kürzer sein!
    $plugin_info{$plugname.'_cycle'} = $auto_test; 
    
    # Status des Netzwerkgerätes durch einen Ping testen
    my $on_off = ping_test($ip_address);
    
    # Je nach Ergebnis eine Rückmeldung geben
    if ( $on_off == 1 || $on_off == 0 ) {
    	knx_write($return_ga,$on_off,1);
    } 
    
    return "Status: ".$on_off;
    
    sub ping_test {
    	(my $ip_adr) = @_;
            my $command = "ping -c 2 -w 1 ".$ip_adr;
    	my $status = `$command`;
    	if($status =~ /bytes from/) { return 1; }
    	elsif($status =~ /0 received/) { return 0; }
    	return "Ein Fehler ist beim Testen der IP $ip_adr aufgetreten";
    }

    #2
    Zitat von panzaeron Beitrag anzeigen
    Das Plugin ist zwar sehr einfach gestrickt, aber vielleicht für den einen oder anderen doch ganz interessant.
    Ich denke schon -> Weitermachen!
    Alleine weil es mal wieder zeigt, das man mit einem offenen System eben auch relativ einfach alles was man will/mag/kann, dann auch machen kann
    Ausserdem denke ich das jedes Beispiel fürs Verständnis hilft, die Doku ist ja immernoch dünn

    Einzig das "use strict;" ist echt redundant, das steht gefühlt bereits in Zeile 3 des ausführenden daemon (zur laufzeit zufällig definierte spassvariablen fand ich schon in den ersten Tagen von VB ziemlich dämlich und das lasse ich auch in Perl nicht gelten, ob erlaubt oder nicht ..)
    Und den timeout würde ich persönlich etwas runterdrehen (1s - wer dann nicht auf nen Ping..)
    Aber ansonsten: sehr schöner Anwendungsfall! (wer hat das noch gleich im HS [nicht] hinbekommen )

    Makki
    EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
    -> Bitte KEINE PNs!

    Kommentar


      #3
      Hallo allerseits:

      Ich habe vorher dieses Post entdeckt
      Ich suche auch Möglichkeiten den Status meiner IP Geräte zu erfassen.

      Kann ich dieses Mini Plugin auch in den Homeserver integrieren, oder muss das von aussen irgendwie gestartet werden?

      Wäre cool
      many thx
      maxxmobile

      Kommentar


        #4
        da gibt es einen Baustein von Nils - suchfunktion in den Downloads benutzen...
        EPIX
        ...und möge der Saft mit euch sein...
        Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

        Kommentar


          #5
          Für den HS gibt es einen Baustein von NilsS:

          https://knx-user-forum.de/downloads.php?do=file&id=284
          Gruß Matthias
          EIB übersetzt meine Frau mit "Ehepaar Ist Beschäftigt"
          - PN nur für PERSÖNLICHES!

          Kommentar


            #6
            @Matthias:
            Ein bischen "arbeiten" sollte schon drinnen sein, du nimmst MaxxMobile ja das Erfolgserlebnis...
            (dass DU die Forensuche benutzen kannst wissen wir ja *grins*)

            LG aus Ö!
            EPIX
            ...und möge der Saft mit euch sein...
            Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

            Kommentar


              #7
              Ja, aber in dem Fall ist es schwierig. Hostcheck ist nicht so sehr naheliegend
              Gruß Matthias
              EIB übersetzt meine Frau mit "Ehepaar Ist Beschäftigt"
              - PN nur für PERSÖNLICHES!

              Kommentar


                #8
                yuhu erfolgserlebnis ist da!
                und der "Human"Index hier ist besser als bei google

                Vielen Dank
                maxxmobile

                Kommentar


                  #9
                  Zitat von panzaeron Beitrag anzeigen
                  ... Status (Ein/Aus) von Netzwerkgeräten


                  Die Konfiguration geschieht wie üblich im Definitionsbereich und ist durch die Kommentare selbsterklärend.

                  ### Definitionen
                  my $start_ga = "1/1/2"; # Gruppenadresse um den Test auszulösen
                  my $return_ga = "1/1/1"; # Gruppenadresse zur Rückmeldung
                  my $ip_address = "192.168.0.1"; # IP-Adresse des zu testenden PCs
                  my $auto_test = "60"; # Wert für automatischen Test in Sekunden, nicht zu kurz einstellen
                  ### Ende Definitionen

                  da ich mit wiregate plugins bzw. perl noch keine Erfahrung habe eine kurze Frage:
                  um mehrere Geräte anzupingen brauch ich einfach die Zeilen start_ga return_ga und ip_adress mehrfach eintragen oder ???

                  ich mach es dzt. am HS mit Hostcheck habe aber den Eindruck das bei 20 Geräten der HS ein bisserl gebremst wird

                  Das WG könnte das übernehmen da es mit Temperaturmessen alleine etwas unterfordert ist
                  LG

                  Josef

                  Kommentar


                    #10
                    Hallo Jowag,

                    so einfach geht es leider nicht, aber ich habe Dir das Plugin etwas erweitert, du kannst jetzt mehrere IPs und Gruppenadressen angeben.
                    Damit sind ca. 4 bis 5 IPs möglich, benötigst du noch mehr Tests einfach das Plugin zweimal einfügen.

                    Wenn nur eine "Start_GA" angegeben wird, dann werden immer alle aufgeführt IPs getestet, gleiches gilt für den "automatischen" Test. Das bedeutet, nur wenn $auto_test = "0" ist und mehrere "Start_GA"s angegeben sind, werden einzelne IPs getestet.

                    Ich habe die Erweiterung nicht getestet, aber sollte funktionieren...

                    Code:
                    # Zum Anzeigen des Status mehrerer Netzwerkgeräte oder der Internetverbindung
                    #    Aufgrund der Laufzeitbeschränkung der Plugins nicht mehr als 4-5 IPs testen 
                    #
                    # Diese Plugin nutzt einen Ping zum Test
                    
                    ### Definitionen
                    my @start_ga   = ( "1/1/2", "1/1/4" ); 	             # Gruppenadressen um den Test auszulösen, 
                                                                           # wenn nur eine GA angegeben wird, werden alle IPs geprüft
                    my @return_ga  = ( "1/1/1", "1/1/3" );               # Gruppenadressen zur Rückmeldung, 
                                                                           # die Anzahl muss mit der Anzahl der IP-Adressen übereinstimmen)
                    my @ip_address = ( "192.168.0.1", "192.168.0.2" );   # IP-Adressen der zu testenden PCs/Geräte
                    my $auto_test = "60";		                         # Wert für automatischen Test in Sekunden, leer lassen für keinen auto test,
                                                                           # wenn ein Wert eingetragen wurde, werden immer IPs alle getestet
                    ### Ende Definitionen
                    
                    # Plugin an Gruppenadresse(n) "anmelden"
                    foreach(@start_ga)
                    {
                       $plugin_subscribe{$start_ga[$_]}{$plugname} = 1;
                    }
                    
                    # Eigenen Aufruf-Zyklus auf x Sekunden setzen
                    # der Aufrufzyklus ist unabhängig von der Taktzeit und muss kürzer sein!
                    if ( $auto_test > 0 ) {
                       $plugin_info{$plugname.'_cycle'} = $auto_test; 
                    } else {
                       $plugin_info{$plugname.'_cycle'} = 86400; # Aufruf alle 24 Stunden
                    }
                    
                    
                    my $on_off;
                    if ( @start_ga == 1 || $auto_test > 0 ) {
                       # Alle Geräte/PCs testen
                      test_all();
                    } else {
                       # Nur den aufgerufenden PCs testen
                       if (%msg) { 
                          if ($msg{'apci'} eq "A_GroupValue_Write") { 
                             foreach(@start_ga) {
                                if ($msg{'dst'} eq $start_ga[$_]) {
                                   $on_off = ping_test($ip_address[$_]);
                                   if ( $on_off == 1 || $on_off == 0 ) {
                    	              knx_write($return_ga[$_],$on_off,1);
                                   }
                                }
                             }
                          }
                       }
                    }
                    
                    return;
                    
                    sub test_all {
                       foreach(@return_ga) {
                          # Status des Netzwerkgerätes durch einen Ping testen
                          $on_off = ping_test($ip_address[$_]);
                          # Je nach Ergebnis eine Rückmeldung geben
                          if ( $on_off == 1 || $on_off == 0 ) {
                    	     knx_write($return_ga[$_],$on_off,1);
                          } 
                       }
                       return;
                    }
                    
                    sub ping_test {
                    	(my $ip_adr) = @_;
                            my $command = "ping -c 2 -w 2 ".$ip_adr;
                    	my $status = `$command`;
                    	if($status =~ /bytes from/) { return 1; }
                    	elsif($status =~ /0 received/) { return 0; }
                    	return "Ein Fehler ist beim Testen der IP $ip_adr aufgetreten";
                    }
                    Edit:
                    OK, makki war schneller, dies ist die umgeschriebene Version

                    Kommentar


                      #11
                      Das Plugin einfach mehrmals - mit unterschiedlichen Namen einfügen und dort die jew. IP/GA reinsetzen.
                      (man könnte es natürlich aucch für mehrere Hosts umschreiben)

                      Makki
                      EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
                      -> Bitte KEINE PNs!

                      Kommentar


                        #12
                        Hallo,

                        Wer Frys Logikprozessor nutzt, kann dies auch in einer Config-Zeile erledigen:

                        Code:
                        	pingMediacenter => { transmit=>'1/1/9', timer=>{ time=>'00:00+5m' }, translate => sub { 
                        		my $command = "ping -c 2 -w 1 <IP/hostname>";
                        		my $status = `$command`;
                        		return ($status =~ /bytes from/) ? 1 : 0 }, debug=>1},
                        Der Wert in "time=>" entspricht der Aufrufzeit. +5m resultiert in einem Aufruf alle 5min.

                        Im Log sieht das dann wie folgt aus:
                        Code:
                        2014-01-13 08:00:27.393,Logikprozessor,Naechster Aufruf der Timer-Logik 'pingMediacenter' um 08:05.
                        2014-01-13 08:00:27.509,Logikprozessor,$logic{pingMediacenter}{transmit}(Logik) -> 1/1/9:1 gesendet (Timer);  ,1.5s,
                        Zu beachten ist die Pluginlaufzeit von >1,5s. Man sollte den Aufrufzyklus also nicht allzu klein wählen, sonst erhöht sich die Gefahr dass der Ping gerade in dem Moment läuft in dem eigentlich eine zeitkritische Lichtlogik (zB nachträgliches Dimmen) ausgeführt werden soll...

                        VG
                        Micha

                        Kommentar


                          #13
                          Servus,

                          ich hol den Thread hier mal wieder aus der Versenkung.


                          Kann man denn ein solches WG-Plugin auch irgendwie ummodeln das man es auf einem Raspi mit cometvisu zum laufen bekommt?
                          z.B. indem man es dann zyklisch alle Minute per cron aufruft? ...oder gibt es sowas schon und ich habs nur nicht gefunden?


                          beste Grüße


                          Michael

                          Kommentar

                          Lädt...
                          X