IPCop-Forum.de

www.ipcop-forum.de


IPCop-Community
CL-Systems
Home Home   Doku Doku   Links Links   Downloads Downloads
UnIPCop Der (Un)IPCop   IFS IPCop-ForumSpy
CopTime CopTime   Galerie IPCop-Galerie   IPCop Userkarte Userkarte
Aktuelle Zeit: 23.05.2018, 05:14

Alle Zeiten sind UTC+02:00




Ein neues Thema erstellen  Auf das Thema antworten  [ 224 Beiträge ]  Gehe zu Seite Vorherige 1 2 3 4 515 Nächste
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: 12.09.2005, 16:23 
Offline
Inspector
Inspector

Registriert: 11.10.2003
Beiträge: 81
Wohnort: Saarland
Noch eine kleine Frage an die RRD-Kundigen.
Ich habe mit meinen Veränderungen alle paar Stunden einen kleinen Aussetzer im Graph. Um Überschneidungen zwischen makegraphs und der digitemp.cron zu vermeiden (die werden bei mir Zeitgleich ausgeführt), habe ich in die digitemp.cron schon ein sleep 15 eingebaut aber die Lücken sind immer noch im Graph.

Liegt es an meinem RRD-Code oder hat jemand einen anderen Lösungsvorschlag?

Hier mal ein Beispiel:

Bild


Zuletzt geändert von miip am 12.09.2005, 21:53, insgesamt 1-mal geändert.

Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 12.09.2005, 17:02 
Offline
Deputy Superintendent
Themenstarter
Deputy Superintendent
Benutzeravatar

Registriert: 05.05.2005
Beiträge: 275
Wohnort: München
Hallo miip,
ich finde es super, dass du dir die Mühe gemacht hasst eine RRD-Ergänzung für das Addon geschrieben hasst. Wenn du es geschaffst , dass die Graphen variabel sind, bau ich das ganze mit in das Addon ein (sofern du damiauch t einverstanden bist). Mit dem Lücken Problem kann ich dir auf Anhieb nicht helfen.

Gruß
Michi


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 12.09.2005, 17:41 
Offline
Inspector
Inspector

Registriert: 11.10.2003
Beiträge: 81
Wohnort: Saarland
Klar bin ich damit einverstanden.
Ich bin mir aber nicht sicher, ob rrdtool das nachträgliche Anpassen der Datenbanken unterstützt. Evtl. wäre es für den Anfang einfacher, wenn dein Installskript die Anzahl der Sensoren erkennt und die passenden Änderungen an makegraphs vornimmt.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 12.09.2005, 21:04 
Offline
Deputy Superintendent
Themenstarter
Deputy Superintendent
Benutzeravatar

Registriert: 05.05.2005
Beiträge: 275
Wohnort: München
ööhm , ja das könnte ich schon machen. Ich kann die Anzahl der Sensorzeilen aus der digitemprc lesen, und anschließend alle Änderungen vornehmen. Es wäre sehr nett von dir wenn du mir sagen kannst was genau ich pro Sensor anpassen muss.

Danke
Michi


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 12.09.2005, 21:22 
Offline
Inspector
Inspector

Registriert: 11.10.2003
Beiträge: 81
Wohnort: Saarland
Kein Problem. Ich werde gleich mal den Code im anderen Post kommentieren.

Nachtrag: Ok ich poste doch hier den kommentierten Code. Er ist mit dem aten bis auf die Formatierung identisch.

Nachtrag2: Leider übernimmt das Forum die Tabulatoren nicht richtig, ich denke es ist aber trotzdem lesbar.

Code:
########
### BEGIN DIGITEMP
########

sub updatedigitempdata {
   my ($sensor0, $sensor1, $sensor2);
   if ( ! -e "$rrdlog/digitemp.rrd") {
      RRDs::create ("$rrdlog/digitemp.rrd", "--step=300",
         "DS:sensor0:GAUGE:500:-60:110",   # Datenbank für Sensor0 erzeugen
         "DS:sensor1:GAUGE:500:-60:110",   # Datenbank für Sensor1 erzeugen, kann einfach entfernt werden
         "DS:sensor2:GAUGE:500:-60:110",   # Datenbank für Sensor2 erzeugen, dito
         "RRA:AVERAGE:0.5:1:576",
         "RRA:AVERAGE:0.5:6:672",
         "RRA:AVERAGE:0.5:24:732",
         "RRA:AVERAGE:0.5:144:1460");
      $ERROR = RRDs::error;
      print "Error in RRD::create for digitemp: $ERROR\n" if $ERROR;
   }

   open DTEMP, "/var/log/digitemp.log";
   while(<DTEMP>) {
      chomp;
   if ($_ =~ /Sensor\s0/) {      # Anfang
    my @temp = split (/\s+/, $_);      # Werte für Sensor0 auslesen
    $sensor0 = $temp[6];
   }               # Ende
   elsif ($_ =~ /Sensor\s1/) {      # Anfang,
    my @temp = split (/\s+/, $_);      # Werte für Sensor0 auslesen
    $sensor1 = $temp[6];
   }               # Ende
   elsif ($_ =~ /Sensor\s2/) {      # Anfang
    my @temp = split (/\s+/, $_);      # Werte für Sensor0 auslesen
    $sensor2 = $temp[6];         
   }               # Ende
   }
   close (DTEMP);
   
   if ($sensor0 || $sensor1 || $sensor2) {   #Überprüfen ob Daten vorhanden. Einfach "|| $sensorx" anhängen oder entfernen.
      RRDs::update ("$rrdlog/digitemp.rrd",
         "-t", "sensor0:sensor1:sensor2",   #Datenbank den jeweiligen Werten zuweise. ":sensorx" anhängen oder entfernen.
         "N:$sensor0:$sensor1:$sensor2");   #Werte eintragen. ":sensorx" anhängen oder entfernen.
      $ERROR = RRDs::error;
      print "Error in RRD::update for digitemp: $ERROR\n" if $ERROR;
   } else {
      print "Error in RRD::update for digitemp: no data available\n";
   }
}

### Jetzt kommt der Graph. Hier können Zeilen einfach entfernt oder hinzugefügt werden.
### Beim Hinzufügen, auf unterschiedliche Farbcodes achten.

sub updatedigitempgraph {
   my $period    = $_[0];

   RRDs::graph ("$graphs/digitemp-$period.png",
      "--start", "-1$period", "-aPNG", "-i", "-z",
      "--alt-y-grid", "-w 600", "-h 100", "-l 0", "-r",
      "--color", "SHADEA#EAE9EE",
      "--color", "SHADEB#EAE9EE",
      "--color", "BACK#EAE9EE",
      "-t Temperatur je $tr{$period}",
      "-v °Celsius",
      "DEF:sensor0=$rrdlog/digitemp.rrd:sensor0:AVERAGE",      #Graph für Sensor0
      "DEF:sensor1=$rrdlog/digitemp.rrd:sensor1:AVERAGE",      #Graph für Sensor1
      "DEF:sensor2=$rrdlog/digitemp.rrd:sensor2:AVERAGE",      #Graph für Sensor2
      "LINE2:sensor0#0000FF: Sensor 0\\j",            #Graph für Sensor0, Farbcode -> #0000FF
      "LINE2:sensor1#FF0000: Sensor 1\\j",            #Graph für Sensor1, Farbcode -> #FF0000
      "LINE2:sensor2#000000: Sensor 2\\j",            #Graph für Sensor2, Farbcode -> #000000
      "GPRINT:sensor0:MAX:Sensor 0\\: $tr{'maximal'}\\: %3.2lf °C",   #Graph für Sensor0
      "GPRINT:sensor0:MIN:Minimal\\: %3.2lf °C",         #Graph für Sensor0
      "GPRINT:sensor0:AVERAGE:$tr{'average'}\\: %3.2lf °C",      #Graph für Sensor0
      "GPRINT:sensor0:LAST:$tr{'current'}\\: %3.2lf °C\\j",      #Graph für Sensor0
      "GPRINT:sensor1:MAX:Sensor 1\\: $tr{'maximal'}\\: %3.2lf °C",   #Graph für Sensor1
      "GPRINT:sensor1:MIN:Minimal\\: %3.2lf °C",         #Graph für Sensor1
      "GPRINT:sensor1:AVERAGE:$tr{'average'}\\: %3.2lf °C",      #Graph für Sensor1
      "GPRINT:sensor1:LAST:$tr{'current'}\\: %3.2lf °C\\j",      #Graph für Sensor1
      "GPRINT:sensor2:MAX:Sensor 2\\: $tr{'maximal'}\\: %3.2lf °C",   #Graph für Sensor2
      "GPRINT:sensor2:MIN:Minimal\\: %3.2lf °C",         #Graph für Sensor2
      "GPRINT:sensor2:AVERAGE:$tr{'average'}\\: %3.2lf °C",      #Graph für Sensor2
      "GPRINT:sensor2:LAST:$tr{'current'}\\: %3.2lf °C\\j");      #Graph für Sensor2 - wenn diese Zeile entfernt wird;, ");" statt "," beim neuen Ende nicht vergessen.
   $ERROR = RRDs::error;
   print "Error in RRD::graph for digitemp: $ERROR\n" if $ERROR;
}

########
### END DIGITEMP
########


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 13.09.2005, 16:13 
Offline
Deputy Superintendent
Themenstarter
Deputy Superintendent
Benutzeravatar

Registriert: 05.05.2005
Beiträge: 275
Wohnort: München
Wäre es nich sinnvoller für jeden Sensor einen extra Graphen zu erstellen ?
Es würde mir außerdem ne Menge Arbeit ersparen.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 13.09.2005, 18:38 
Offline
Inspector
Inspector

Registriert: 11.10.2003
Beiträge: 81
Wohnort: Saarland
Naja für sinnvoller halte ich es nicht aber einfacher wäre es sicher. ;)
Mit ein paar Schleifen sollten sich die Änderungen für einen Graphen aber auch relativ einfach in makegraphs einfügen lassen.

Einzelne Graphen hätten den Nachteil, dass wesentlich mehr Dateien erzeugt werden müssen, was auf langsamen Rechnern zu Problemen führen könnte. (Ich glaube das war auch der Grund für die Lücken in meinem Graph...)


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 13.09.2005, 21:27 
Offline
Deputy Superintendent
Themenstarter
Deputy Superintendent
Benutzeravatar

Registriert: 05.05.2005
Beiträge: 275
Wohnort: München
hm okay , ich schau dass ich es in einem Graphen bekomm. Dazu muss ich mich aber erst wieder in Sed einarbeiten.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 17.09.2005, 15:35 
Offline
Deputy Superintendent
Themenstarter
Deputy Superintendent
Benutzeravatar

Registriert: 05.05.2005
Beiträge: 275
Wohnort: München
Die Ursache für die Lücken in den Graphen scheint nicht an deinem Rechner zu liegen, sondern irgenwo in dem Perl Script.

Bei mir sieht das ganze folgendermaßen aus:

Bild
Bild

Code:
#!/usr/bin/perl

use strict;
use RRDs;

        my $datei;
                $datei="/var/log/digitemp.log";
                open(FILE, $datei);
                my @current = <FILE>;
        close (FILE);

        my %hash = ();

        foreach my $line (@current) {
                $line =~ /^(\w\w\w \d\d \d\d:\d\d:\d\d) Sensor (\d+) C: (\d+.?\d*) F: (\d+.?\d*)/;
                $hash{$2}{'celsius'} = $3;
                $hash{$2}{'fahrenheit'} = $4;
        }
        my $sensor0=$hash{0}{'celsius'};
        my $sensor1=$hash{1}{'celsius'};
        my $rrdlog="/home/michi";
        my $ERROR;
        my $graphs="/var/www/intern.wohnsturm.lan/htdocs/digitemp/";

sub updatedigitempdata {
        if ( ! -e "$rrdlog/digitemp.rrd") {
                RRDs::create ("$rrdlog/digitemp.rrd", "--step=300",
                "DS:sensor0:GAUGE:500:-60:110",   # Datenbank für Sensor0 erzeugen
                "DS:sensor1:GAUGE:500:-60:110",   # Datenbank für Sensor1 erzeugen, kann einfach entfernt werden
                "RRA:AVERAGE:0.5:1:576",
                "RRA:AVERAGE:0.5:6:672",
                "RRA:AVERAGE:0.5:24:732",
                "RRA:AVERAGE:0.5:144:1460");
                        $ERROR = RRDs::error;
                        print "Error in RRD::create for digitemp: $ERROR\n" if $ERROR;
        }

        if ($sensor0 || $sensor1) {   #Überprüfen ob Daten vorhanden. Einfach "|| $sensorx" anhängen oder entfernen.
                RRDs::update ("$rrdlog/digitemp.rrd",
                              "-t", "sensor0:sensor1",   #Datenbank den jeweiligen Werten zuweise. ":sensorx" anhängen oder entfernen.
                              "N:$sensor0:$sensor1");   #Werte eintragen. ":sensorx" anhängen oder entfernen.

                $ERROR = RRDs::error;

                print "Error in RRD::update for digitemp: $ERROR\n" if $ERROR;
        } else {
                print "Error in RRD::update for digitemp: no data available\n";
        }
}

sub updatedigitempgraph {
        my $period    = $_[0];

        RRDs::graph ("$graphs/digitemp-$period.png",
                "--start", "-1$period", "-aPNG", "-i", "-z",
                "--alt-y-grid", "-w 400", "-h 70", "-l 0", "-r",
#               "--color", "SHADEA#EAE9EE",
#               "--color", "SHADEB#EAE9EE",
#               "--color", "BACK#ffffff",
                "-t Digitemp",
                "-v °Celsius",
                "DEF:sensor0=$rrdlog/digitemp.rrd:sensor0:AVERAGE",      #Graph für Sensor0
                "DEF:sensor1=$rrdlog/digitemp.rrd:sensor1:AVERAGE",      #Graph für Sensor1
                "LINE2:sensor0#0000FF: Sensor 0\\j",            #Graph für Sensor0, Farbcode -> #0000FF
                "LINE2:sensor1#FF0000: Sensor 1\\j",            #Graph für Sensor1, Farbcode -> #FF0000
                "GPRINT:sensor0:LAST:Sensor 0\\: \\: %3.2lf °C",   #Graph für Sensor0
                "GPRINT:sensor0:MIN:mi\\: %3.2lf °C",         #Graph für Sensor0
                "GPRINT:sensor0:AVERAGE:av\\: %3.2lf °C",      #Graph für Sensor0
                "GPRINT:sensor0:MAX:max\\: %3.2lf °C\\j",      #Graph für Sensor0
                "GPRINT:sensor1:LAST:Sensor 1\\: \\: %3.2lf °C",   #Graph für Sensor1
                "GPRINT:sensor1:MIN:mi\\: %3.2lf °C",         #Graph für Sensor1
                "GPRINT:sensor1:AVERAGE:av\\: %3.2lf °C",      #Graph für Sensor1
                "GPRINT:sensor1:MAX:max\\: %3.2lf °C\\j");      #Graph für Sensor1

   $ERROR = RRDs::error;
   print "Error in RRD::graph for digitemp: $ERROR\n" if $ERROR;
}

updatedigitempdata();
updatedigitempgraph("hour");
updatedigitempgraph("day");


Wie man sieht ist die Lücke ziemlich groß. Somit kann man davon ausgehen dass sich digitemp und das rrd Script sich nicht überschneiden.

Gruß
Michi


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 17.09.2005, 22:41 
Offline
Inspector
Inspector

Registriert: 11.10.2003
Beiträge: 81
Wohnort: Saarland
Also bei mir hat ein "sleep 30" in der digitemp.cron das Problem jetzt völlig behoben. Auf noch langsameren Rechnern kann die Zeit auch länger gewählt werden (sollte nur unter 4 Minuten bleiben).
Das Problem trat auf, wenn makegraphs die Monats- und Jahresgraphen erzeugt hat. Zur gleichen Zeit wurden die Sensordaten ausgelesen (das dauert hier bis zu 10 Sekunden).

Code:
#!/bin/bash
sleep 30
/usr/bin/digitemp -a -q -c /etc/digitemp/digitemprc > /var/log/digitemp.log


Nach oben
   
 Betreff des Beitrags: DS1820 parallel schalten
BeitragVerfasst: 27.10.2005, 22:48 
Offline
Apprentice
Apprentice

Registriert: 24.08.2003
Beiträge: 15
hab das mal mit dem DS1820 getestet , mit 2 sensoren ,klappt auch gut, hab da die Idee meine Heizung mit zusteuern (der ipcop langweilt sich ja sowieso), hat jemand erfahrung wieviel Sensoren an eine serielle Schnittstelle parallel geschalten werden können oder braucht man dazu eine bessere Versorgungsspannung , ich benötige mindestens 8 Sensoren.

:idea:


Nach oben
   
 Betreff des Beitrags: Re: DS1820 parallel schalten
BeitragVerfasst: 28.10.2005, 07:59 
Offline
IPCop-Entwickler, Site-Moderator
IPCop-Entwickler, Site-Moderator
Benutzeravatar

Registriert: 26.09.2003
Beiträge: 7810
Wohnort: Südhessen
rzimmer hat geschrieben:
... hab da die Idee meine Heizung mit zusteuern (der ipcop langweilt sich ja sowieso), ...

:shock:

_________________
Sledgehammer engineering, if it doesnt work, hit it damn hard Bild

// Mein Cop, meine Signatur ^, meine Vorstellung
Most popular BOT FAQ: #5


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 28.10.2005, 11:05 
Offline
Inspector
Inspector

Registriert: 11.10.2003
Beiträge: 81
Wohnort: Saarland
Zitat:
hat jemand erfahrung wieviel Sensoren an eine serielle Schnittstelle parallel geschalten werden können oder braucht man dazu eine bessere Versorgungsspannung , ich benötige mindestens 8 Sensoren.


Das weiß ich zwar nicht aber ich habe mit der Orginalschaltung schon bei relativ kurzen Kabellängen Probleme bekommen. Mit dieserSchaltung funktioniert es jetzt auch mit langen Kabeln sehr gut. Du solltest bei 8 Sensoren Cat5 Kabel verwenden.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 28.10.2005, 14:02 
Offline
Deputy Superintendent
Themenstarter
Deputy Superintendent
Benutzeravatar

Registriert: 05.05.2005
Beiträge: 275
Wohnort: München
miip hat geschrieben:
Zitat:
hat jemand erfahrung wieviel Sensoren an eine serielle Schnittstelle parallel geschalten werden können oder braucht man dazu eine bessere Versorgungsspannung , ich benötige mindestens 8 Sensoren.


Das weiß ich zwar nicht aber ich habe mit der Orginalschaltung schon bei relativ kurzen Kabellängen Probleme bekommen. Mit dieserSchaltung funktioniert es jetzt auch mit langen Kabeln sehr gut. Du solltest bei 8 Sensoren Cat5 Kabel verwenden.


denselben Schaltplan verwende ich auch. Funktioniert einwandfrei.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 01.11.2005, 11:34 
Offline
Apprentice
Apprentice

Registriert: 28.07.2005
Beiträge: 15
marcedi hat geschrieben:
So, habe mich mal daran gemacht, das Addon und das Binary zu installieren - jedoch ohne Erfolg. Die beiden Archive enthalten jedesmall das Gleiche ! Ist das so richtig ?

Ich habe mein System auf einer 256MB Flash Disk. Muß ich da irgendetwas beachten ?

Wenn ich das Addon-Archiv entpacke erhalte ich folgende Dateien :

Code:
digitemp/
digitemp/digitemp.cgi
digitemp/digitemp.header
digitemp/install
digitemp/digitemp.cron
digitemp/README


Und wenn ich dann im Unterverzeichnis "digitemp" die Datei install starte kommt :

Code:
./install
install: cannot stat `digitemp': No such file or directory
serial port (0,1 or higher) :
0
interval for reading the sensors (1-59) :
10
temperature label (fahrenheit, celsius) :
ce
./install: line 27: digitemp: command not found
cat: ./.digitemprc: No such file or directory
ERROR! check your entries


Vielleicht kann einer damit etwas anfangen. Ich bin dafür wohl doch noch zu stark Anfänger.

Gruß
marcedi



hi,
habe den gleichen Fehler und komme irgendwie nicht weiter, trotz update...
Woran kann es liegen, bin für jeden Tipp dankbar.
Bin auch Anfänger, bitte berücksichtigen...

Grüße Eric


Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 224 Beiträge ]  Gehe zu Seite Vorherige 1 2 3 4 515 Nächste

Alle Zeiten sind UTC+02:00


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu Forum:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Deutsche Übersetzung durch phpBB.de