RasPi - Fatal Error: Allowed memory size ...?

@ paresy:

Habe folgenden Fehler in der aktuellen Version nach meinem Probeumzug meines kompletten Systems auf Raspi2 :

Brauchst DU weitere Angaben?

Gruß
lueralba

Dein PHP Skript darf maximal 32MB Ram verwenden. Du benötigst anscheinend mehr. Schau dir mal dein Skript an, ob es evtl. optimieren kannst :slight_smile:

paresy

Hallo paresy.

Im Script wird rege Gebrauch hiervon gemacht
(Hole mir Temp. von vor 30, 60 120 Minuten):

<?

$archiveID = 29926 /*[Archive Handler]*/ ;
$objectID = 45347 /*[VM\Aussentemperatur]*/ ;
$limit = 1; // kein Limit

// 30Min 
$endtime = time()-(30*60);    // for 30 minutes ago
$starttime = time()-(30*60);  // for 30 minutes ago
$buffer = AC_GetLoggedValuesCompatibility($archiveID, $objectID, $starttime, $endtime, $limit);
$wert1 = 0;
foreach ($buffer as $werte){
    $wert1 = $werte["Value"];
}

//JETZT 
$endtime = time();   // time() for "now"
$starttime = time();
$limit = 0; // kein Limit
$buffer = AC_GetLoggedValuesCompatibility($archiveID, $objectID, $starttime, $endtime, $limit);
$wert2 = 0;
foreach ($buffer as $werte){
    $wert2 = $werte["Value"];
}

//Test der Werte wegen keine Werte aus Datenbank
IPS_SetName(46248 /*[SONNENSCHUTZ\Diff30  W1:8.2 W2:8.1]*/  ,"Diff30  W1:".$wert1." W2:".$wert2);

SetValue(46248 /*[SONNENSCHUTZ\Diff30  W1:8.2 W2:8.1]*/  ,$wert2-$wert1);


// 60Min 
$endtime = time()-(60*60);    // for 60 minutes ago
$starttime = time()-(60*60);  // for 60 minutes ago
$buffer = AC_GetLoggedValuesCompatibility($archiveID, $objectID, $starttime, $endtime, $limit);
//print_r ($buffer);
$wert1 = 0;
foreach ($buffer as $werte){
    $wert1 = $werte["Value"];
}

// JETZT 
$endtime = time();   // time() for "now"
$starttime = time();
$limit = 0; // kein Limit
$buffer = AC_GetLoggedValuesCompatibility($archiveID, $objectID, $starttime, $endtime, $limit);
//print_r ($buffer);
$wert2 = 0;
foreach ($buffer as $werte){
    $wert2 = $werte["Value"];
}

//Test der Werte wegen keine Werte aus Datenbank
IPS_SetName(25707 /*[SONNENSCHUTZ\Diff60  W1:8.4 W2:8.1]*/  ,"Diff60  W1:".$wert1." W2:".$wert2);

SetValue(25707 /*[SONNENSCHUTZ\Diff60  W1:8.4 W2:8.1]*/ ,$wert2-$wert1);



// 120Min 
$endtime = time()-(120*60);    // for 120 minutes ago
$starttime = time()-(120*60);
$buffer = AC_GetLoggedValuesCompatibility($archiveID, $objectID, $starttime, $endtime, $limit);
$wert1 = 0;
foreach ($buffer as $werte){
    $wert1 = $werte["Value"];
}
//JETZT 
$endtime = time();   // time() for "now"
$starttime = time(); // time() for "now"
$limit = 0; // kein Limit
$buffer = AC_GetLoggedValuesCompatibility($archiveID, $objectID, $starttime, $endtime, $limit);
$wert2 = 0;
foreach ($buffer as $werte){
    $wert2 = $werte["Value"];

}


//Test der Werte wegen keine Werte aus Datenbank
IPS_SetName(35767 /*[SONNENSCHUTZ\Diff120  W1:8 W2:8.1]*/  ,"Diff120  W1:".$wert1." W2:".$wert2);

SetValue(35767 /*[SONNENSCHUTZ\Diff120  W1:8 W2:8.1]*/  ,$wert2-$wert1);



function AC_GetLoggedValuesCompatibility($instanceID, $variableID, $startTime, $endTime, $limit) {
    $values = AC_GetLoggedValues($instanceID, $variableID, $startTime, $endTime, $limit );
    if((sizeof($values) == 0) || (end($values)['TimeStamp'] > $startTime)) {
        $previousRow = AC_GetLoggedValues($instanceID, $variableID, 0, $startTime - 1, 1 );
        $values = array_merge($values, $previousRow);
    }
    return $values;
}
?>

Im Windows IPS habe ich keine Fehlermeldungen !
Kann es mit der DB Konvertierung zu tun haben ?
Oder geht die Methode (noch) nicht ?

P.S.: Das Script (unter Raspi) braucht sehr lange und kommt dann mit der Fehlermeldung wieder.
Unter Windows 154ms !

Gruß
lueralba

Magst du mal herausfinden welcher Teil des Skriptes das Problem darstellt? Wahrscheinlich holst du irgendwo zu viel Daten aus der DB auf einmal. Das Limit bei Windows ist auf maximal 64MB einstellbar.

paresy

Es ist schwierig aber ich hab mal experimentiert :

Meine Aussentemperaturvariable erhält seit Umzug keine Loggingwerte, da ich die serielle Schnittstelle der Heizung im Pi noch abgeschaltet habe.
Ich habe daher jetzt eine andere Variable (die weiterhin Loggingwerte bekommt) genommen.
Hier kommt nach 240ms ein Ergebnis. Aber scheinbar wird das Limit nicht mehr beachtet.
Es kommen sehr viele Werte im Echo. Egal auf welchen Wert ich das Limit einstelle.

Ich habe in Windows das gleiche Script erzeugt und erhalte dort mit der anderen Variable nur einen Wert (Limit=1).
Mit der ursprünglichen Aussentemperaturvariable sind es sogar immer nur ein Wert im Echo.
Dort passt es wie gewohnt.

Die DB Datei (März 2015) der Aussentemperatur im Pi (konvertiert und keinen neuen Wert dazu geschrieben) ist nur 181kB gross, also Meilen von der 32MB Grenze weg. Und ich gucke ja nur JETZT-30min weit zurück.
Allerdings gibt es für den gesuchten Zeitraum keine Einträge. Der letzte ist ja vom 15.3.
Anders bei der neuen Variable. Dort ist der letzte Eintrag von heute 6:55. Allerdings auch weiter als JETZT-30Min.

Bin etwas ratlos wie ich die Suche nach dem Fehler für Dich weiter eingrenzen könnte.
Aber gerne dazu bereit.
Gruss
lueralba

Noch ein Bild zu dem Limit 0:

Und Limit auf 1:

@paresy:
Kann ich hier noch etwas zu arbeiten ?
Meine DB-csv für diese Variable zum testen o.ä. ?

Gruß
lueralba

Der Limit Parameter wurde nicht ausgewertet :stuck_out_tongue:

Fix im nächsten Update.

paresy