Hallo an alle,
ich verzweifle gerade an einem simplen Codestück. Ein Script bei mir speichert zyklisch die Daten in verschiedene RRD-Datenbanken. Hat einwandfrei funktioniert bis ich vor ein paar Tagen wieder eine neue Datenbank hinzugefügt habe. Seither spinnt das ganze.
Ich habe jetzt testweise den Code drastisch reduziert und im Prinzip kommt heraus: Eine For-Schleife mit 2 Durchgängen. In jedem Durchgang wird über eine 2.Schleife 13x die gleiche Variable ausgelesen und der Inhalt an einen String angehängt. Danach wird der String an die RRD-Datenbank zum Speichern übergeben.
Im 1. Durchgang geht alles ok und RRD bringt keine Fehler, im 2. Durchgang funktioniert GetValue() nicht mehr richtig. Es werden einfach Doppelpunkte irgendwo im Text hinzugefügt. Ich komme einfach da nicht weiter. Habs auf 2 Systemem probiert. Wichtig ist scheinbar auch der Variableninhalt. Eine Float-Var mit 390.0
Bitte hinterfragt nicht den Sinn des Codes. Wie gesagt: In Wirklichkeit sieht das ganz anders und komplizierter aus. Funktioniert aber trotzdem nicht.
Hier mal der Code zum Anlegen der RRD-DB
$startzeit = mktime(0,0,0,date("m"),date("d"),date("Y"));
$para1 = "create Anspeisung.rrd --start ".$startzeit." --step 300 ";
$para = "DS:EB_SUM:GAUGE:600:0:200000 ";
$para .= "DS:EL_SUM:GAUGE:600:0:200000 ";
$para .= "DS:I_L1:GAUGE:600:-100:100 ";
$para .= "DS:I_L2:GAUGE:600:-100:100 ";
$para .= "DS:I_L3:GAUGE:600:-100:100 ";
$para .= "DS:I_SUM:GAUGE:600:-100:100 ";
$para .= "DS:P_L1:GAUGE:600:-20000:20000 ";
$para .= "DS:P_L2:GAUGE:600:-20000:20000 ";
$para .= "DS:P_L3:GAUGE:600:-20000:20000 ";
$para .= "DS:P_SUM:GAUGE:600:-20000:20000 ";
$para .= "DS:U_L1:GAUGE:600:0:1000 ";
$para .= "DS:U_L2:GAUGE:600:0:1000 ";
$para .= "DS:U_L3:GAUGE:600:0:1000 ";
$para .= "RRA:AVERAGE:0.5:1:8640 "; //30 Tage alle Werte
$para .= "RRA:AVERAGE:0.5:288:1825 "; //5 Jahre Tages-Mittelwert
$para .= "RRA:MAX:0.5:288:1825 "; //5 Jahre Tages-Maxwert
//Database anlegen
echo RRD_Execute($para1.$para);
Und hier mein Testskript
For ($x=1; $x <3;$x++)
{
echo "Durchlauf ".$x." Start
";
$para = "update "."rrd_data/Anspeisung.rrd N";
for ($y=1;$y < 14;$y++)
{
//Wert hinzufügen
$value = GetValue(15943 /*[System\Dummy]*/); //Float-Variable mit Inhalt 390.00
echo $value."
";
$para .= ":".$value;
}
echo $para."
";
//Schreibe in Datenbank
echo RRD_Execute($para);
echo "Durchlauf ".$x." Ende
";
}
Und hier die Ausgabe des Skrip:
Durchlauf 1 Start
390
390
390
390
390
390
390
390
390
390
390
390
390
update rrd_data/Anspeisung.rrd N:390:390:390:390:390:390:390:390:390:390:390:390:390
Durchlauf 1 Ende
Durchlauf 2 Start
38:
38:
38:
38:
38:
38:
38:
38:
38:
38:
38:
38:
38:
update rrd_data/Anspeisung.rrd N:38::38::38::38::38::38::38::38::38::38::38::38::38:
ERROR: expected 13 data source readings (got 26) from N:38::38::38::38::38::38::38::38::38::38::38::38::38:
Durchlauf 2 Ende
wie man sieht, wird im 2. Durchlauf nicht 390 aus der Var ausgelesen sondern 38:
Wenn das noch wer anders reproduzieren kann, bin ich zumindest sicher, dass mein IPS nicht irgendwo inkonsistent ist.
Wäre echt dankbar für Tipps
Rubberduck