Ankündigung

Einklappen
Keine Ankündigung bisher.

Graph mailen lassen ?

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • makki
    antwortet
    Also nachfolgend mal ein Quickhack, bitte testen..
    Das nimmt den "Weg des geringsten Widerstands" (PNG banal von der lokalen grph.pl holen->hochschieben)
    Ein paar Kleinigkeiten hab ich angepasst, ansonsten das mit dem FTP ungeprüft übernommen.

    Sauber aber evtl. unübersichtlicher wäre die Grafik mit RRDs::graph direkt zu erstellen, wird evtl. noch nachgeliefert aber im Ergebniss sieht nur der Code und die Anpassungsmöglichkeit anders aus

    Code:
    ### Plugin zum erstellen von Grafiken aus RRD's und FTP-Upload (SMTP-Versand, ...)
    # v0.1
    # 2012-01-04
    # Kann aktuell nur einen Wert pro Grafik!
    # Hinweise: Die Grafikerstellung ist sehr resourcenintensiv -
    # stark abhängig von der Groesse der Grafik - und sollte nicht zu haeufig laufen!
    # Dringend empfohlen: nicht mehr als 10 Werte pro Plugin!
    
    ###################
    ### DEFINITION           ###
    ###################
    
    $plugin_info{$plugname . '_cycle'} = 3600; # Aufrufzyklus
    
    # FTP Zugangsdaten
    my $host = 'mein.ftpserver.de';
    my $user = 'meinuser';
    my $password = 'meinpasswort';
    my $path = '/public_html/graph'; # Pfad auf dem FTP-Server
    
    my $datasource = 'AVERAGE'; # MIN,AVERAGE,MAX
    
    my %graphics; 
    # hash fuer RRD / Grafik-Name
    $graphics{'28.2C0E66010000_temp'} = 'WP_HGL-VL.png';
    $graphics{'28.5F1966010000_temp'} = 'WP_VL.png';
    $graphics{'28.480266010000_temp'} = 'WP_RL.png';
    
    # kann bis auf diesen Teil direkt aus der graph-URL uebernommen werden: 
    # DEF:ds0=28.2C0E66010000_temp.rrd:value:AVERAGE;
    # (DEF:ds0.. bis ;)
    # kann man anpassen
    my $url1 = 'http://[COLOR="Red"]localhost[/COLOR]/graph.pl?--start=-24h;--end=now;-X=0;-W=WireGate;--slope-mode;--lazy;-h=200;-w=650;--full-size-mode;--vertical-label=%B0%20Celsius;';
    my $url2 = 'LINE1:ds0%23ff0000:Wert;VDEF:ds0_LAST=ds0,LAST;GPRINT:ds0_LAST:%2.2lf%B0C;;VDEF:ds0_MIN=ds0,MINIMUM;GPRINT:ds0_MIN:Min\:%20%8.2lf%B0C;VDEF:ds0_AVERAGE=ds0,AVERAGE;GPRINT:ds0_AVERAGE:Mittel\:%20%8.2lf%B0C;VDEF:ds0_MAX=ds0,MAXIMUM;GPRINT:ds0_MAX:Max\:%20%8.2lf%B0C\n;';
    
    ########################
    ### Ende DEFINITION  ###
    ########################
    
    use Net::FTP;
    my $rrd_ret;
    
    my $ftp = Net::FTP->new($host, Debug => 0, Passive => 1, Timeout => 10)
      or return "Cannot connect to host $!";
    # Kein Timeout > 10s! nach 30sek wird das Plugin sonst ohnehin abgeschossen!
    $ftp->login($user,$password)
      or return "Cannot login " . $ftp->message . "$!";
    $ftp->cwd($path)
      or return "Cannot change working directory: " . $ftp->message . "$!";
    $ftp->binary;
    
    # durch den Hash gehen und senden
    while ( my ($rrd,$filename) = each(%graphics) ) {
        my $url = $url1 . "DEF:ds0=$rrd.rrd:value:$datasource;" . $url2;
        $rrd_ret .= `wget "$url" -O /tmp/$filename -o /tmp/wget.log`;
        $ftp->put("/tmp/$filename",$filename) 
          or return "Cannot send $filename: $!";
    
        # oder hier z.B. eMails verschicken oder...
    } 
    
    $ftp->quit;
    
    #return; # ohne Logeintrag
    return "FTP said " . $ftp->message;
    Makki

    P.S.: eMail-Versand gibts im kürzlich diskutierten SMTP-eMail Plugin im SVN, Anhänge sollten damit auch ein leichtes sein statt dem FTP-Upload..

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    So überzeugt...wäre ja alles nicht so schlimm wenn dieser blöde 3G Router bzw. mein 3G Stick nicht hinter einem NAT sitzen würde.

    Folgende Lösung:

    Script sendet mit alle 3 Stunden via Net::Ftp meine 6 wichtigen rrd-files auf einen externen Webserver. Dort hab ich nun (nach langem Kampf mit den Pfadangaben) drraw.cgi laufen.
    Nun hab ich wenigsten 3h aktuelle Daten zur Einsicht, besser als nix ;-) !

    Da ich keine Ahnung von Arrays hab ist die Konfiguration etwas lästig aber immerhin das Script läuft:

    Code:
    # Simple-FTP-Upload
    # Lädt im Beispiel alle 3 Stunden die rrd-files auf einen externen Server via FTP
    
    # A C H T U N G !!! Da ich noch keine Ahnung von Arrays habe gibt es zwei Definitionsbereiche.
    
    ####################
    ### DEFINITION 1 ###
    ####################
    
    ### filename11 = Dateiname auf WireGate
    ### filename12 = Dateiname auf FTP-Server
    ### Ohne ein rename einfach die Zeilen "my $filenamex2 = …;" löschen. 
    ### Bei weniger oder mehr Dateien einfach entsprechende Zeilen ergänzen
    ### oder löschen und 2. Definitionsbereich beachten.
    
    
    my $host = "FTP-Server";
    my $user = "Benutzername-username";
    my $password = "Password";
    my $path = "Zielpfad auf FTP-Server";
    my $filename11 = "/var/www/rrd/28.D02F23030000_temp.rrd";
    my $filename12 = "Estrich_01.rrd";
    my $filename21 = "/var/www/rrd/28.2A2723030000_temp.rrd";
    my $filename22 = "Estrich_02.rrd";
    my $filename31 = "/var/www/rrd/28.EC5E23030000_temp.rrd";
    my $filename32 = "Heizung_VL.rrd";
    my $filename41 = "/var/www/rrd/28.BA2A23030000_temp.rrd";
    my $filename42 = "Heizung_RL.rrd";
    my $filename51 = "/var/www/rrd/28.A1F622030000_temp.rrd";
    my $filename52 = "Sole_VL.rrd";
    my $filename61 = "/var/www/rrd/28.F44323030000_temp.rrd";
    my $filename62 = "Sole_RL.rrd";
    
    
    $plugin_info{$plugname.'_cycle'} = 10800;
    
    #########################
    ### ENDE DEFINITION 1 ###
    #########################
    
    
    use Net::FTP;
    
        my $ftp = Net::FTP->new($host, Debug => 0)
          or die "Cannot connect to host";
    
        $ftp->login($user,$password)
          or die "Cannot login ", $ftp->message;
    
        $ftp->cwd($path)
          or die "Cannot change working directory ", $ftp->message;
    
    
    ####################
    ### DEFINITION 2 ###
    ####################
    
    ### Ohne ein rename einfach ",filenamex2" löschen.
    ### Bei weniger oder mehr Dateien einfach entsprechende Zeilen ergänzen oder löschen
    
        $ftp->put($filename11,$filename12);
        $ftp->put($filename21,$filename22);
        $ftp->put($filename31,$filename32);
        $ftp->put($filename41,$filename42);
        $ftp->put($filename51,$filename52);
        $ftp->put($filename61,$filename62);
    
    #########################
    ### ENDE DEFINITION 2 ###
    #########################
    
        $ftp->quit;
    
    return;	# keine Logausgabe
    Manchmal ist der erstmal schwere Weg doch garnicht so schlecht, wobei der Traffic für eine fertige Grafik jede Stunde sicherlich kleiner ist als alle 3 Stunden die 6 rrd-files rüber zu schieben. Daher wäre ich an der anderen Lösung immer noch interessiert.

    Einen Kommentar schreiben:


  • makki
    antwortet
    Klar geht das, die URL-Parameter der graph.pl sind z.B. 1:1 dieselben Parameter, die man auch "rrdtool graph .." zum erstellen eines PNG übergeben könnte.

    Ich will ja nur das man auch versteht, warum manches so ist, wie es ist

    Makki

    Einen Kommentar schreiben:


  • greentux
    antwortet
    Das WG idled doch eh vor sich hin.
    Ich habe ihm direkt erklärt, wie er die Graphen bauen lassen kann und denke, das er das nun entweder auf dem WG oder auf dem Webserver hinbekommt.

    Einen Kommentar schreiben:


  • makki
    antwortet
    Vielleicht noch zur Erklärung:
    - Die *.rrd sind nur die Datenarchive, die werden ständig aktualisiert.
    - Die Grafiken werden nur "on-the-fly" beim Abruf durch einen Browser erstellt, weil das sehr resourcenintensiv ist und ja auch völliger Quatsch wäre ständig 1000 Grafiken zu erstellen, die sich in diesem Moment evtl. keiner ansieht.

    Der Klebstoff dazwischen ist ein Webserver+ genanntes CGI (Perl,PHP,C,whatever-Programm) oder wie in der CometVisu eben der Browser am Client (dort werden nur die Werte übertragen und mit flot am Client gemalt)

    Für weiterführendes müsste man also wissen was auf dem Server möglich ist (Perl,PHP,.... es gibt für wirklich alles mind. 10 verschiedene Tools/Frontends um aus RRD's Grafiken zu machen..)

    Der andere Ansatz, die Grafiken auf dem WG zu erstellen und zu übertragen ginge zwar technisch auch sehr leicht, ist aber eben o.g. mumpitz: man erstellt 99% dicke Grafikdateien, die sich evtl. nie jemand ansieht..

    Makki

    Einen Kommentar schreiben:


  • greentux
    antwortet
    drraw ist ein simples cgi script. das kann auf deinem webserver laufen...

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    Ich versteh wohl noch echt zu wenig von diesem ganzen RRD-Kram. Wo müsste denn ddraw laufen? Aufm Webserver kann es jedenfalls nicht laufen, auf meinem Client soll es nicht laufen...

    Einen Kommentar schreiben:


  • greentux
    antwortet
    Soweit ich sehe, sind die 3 Plattformen Netzwerktauglich
    Wenn Dein Internethub nun also nen Webserver mit drraw hat, kannste das von allen abrufen

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    Ich wollte das ganze eigentlich einfach universell verfügbar haben.
    @home: MacBook + iPad
    @büro: Windows XP
    @mobil: Android
    Außerdem ist meine Estrich, Heizkreis VL, Heizkreis RL, Sole VL, Sole RL Grafik so schön bunt

    Einen Kommentar schreiben:


  • greentux
    antwortet
    Du kannst doch auch die RRD weiterverwenden. Musst Du ggf noch drraw installieren auf der Kiste

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    ftp kopieren klappt schon ... jetzt müsste ich nur noch wissen wie ich an die grafik vom graphen komme ;-)

    kann man irgendwie die fertige grafik vom wiregate kopieren ???

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    ja klar FTP-Zugang ist vorhanden, mehr würde ich erst mal nicht voraussetzen ;-)

    Einen Kommentar schreiben:


  • lbau
    antwortet
    :-) Du musst doch aber irgendwie Daten hochladen können?

    Ftp oder so.

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    es scheitert wohl am ssh-Zugang ... schade aber ist eben bloß Webspace und kein Server ... ist jetzt auch nicht soo wichtig ...

    Trotzdem Danke!

    Einen Kommentar schreiben:


  • greentux
    antwortet
    Auf Deinem Remote Server sollte shh laufen.
    Dann müsste es erstmal gehen, per
    Code:
    scp /var/www/rrd/* login@server:
    die Daten zu übertragen.
    Davon ausgehend kannst Du das nun in /etc/cron.daily (oder auch hourly) eine Datein ablegen, die diesen scp Befehl enthält.
    Es liegen da ein paar Beispiele rum.

    Wichtig:
    der ssh Schlüssel vom wg (/root/.ssh/id_rsa.pub) muss auf dem remote server in der Datein .ssh/authorized_keys landen.
    Also im einfachsten Falle (es gibt keine weiteren Keys) vom WG ein
    Code:
    scp /root/.ssh/id_rsa.pub login@server:.ssh/authorized_keys
    machen und anschliessend braucht es kein Passwort mehr fürs kopieren der rrds.

    Gruß

    Einen Kommentar schreiben:

Lädt...
X