Knoten im Hirn!

Ich habe es mal zusammengeschrieben

<?php
$ODO  = 46366;

$MeterDiff = $_IPS['VALUE'] - $_IPS['OLDVALUE'];    // Wenn die ESP Variable sich ändert, die differenz zwischen altem und neuen wert berrechnen 
$MeterAlt = IPS_GetObject($ODO)['ObjectInfo']; // Die bisher gefahrenen Meter aus dem Infobereich der Variablen lesen

If ($diff > 0)
{
    $MeterNeu = $MeterDiff + $MeterAlt;  // wenn der Wert der Meterzahl ansteigt
}
else
{
    $MeterNeu = $_IPS['VALUE'] + $MeterAlt; // wenn der Wert der Meterzahl zurückgesetzt wurde
}

IPS_SetInfo($ODO, $MeterNeu);           // Die aktuell errechtente Meterzahl im Infobereich der Variablen zwischenspeichern 
SetValue($ODO,(int)$MeterNeu/1000);     // Den aktuellen Wert in km umrechen und in die Variable schreiben

Guten Morgen :slight_smile:
vielen Dank für das Script. Den Infobereich der Variable als Zwischenspeicher zu benutzen ist genial :slight_smile:
Ich habe mal alles eingefügt und mache nachher die Testfahrt.

Bis später

Moin,
Berichte mal. Die -1 Abweichung dürfte vom ESP kommen. Du meintest er überträgt auch mal -1 als ersten Wert den müßte man dann noch extra abfangen.

Ralf

Moin,

da mache ich auf jeden Fall.
Ja, nach dem Reset schickt der ESP erstmal „-1“ für „noch keinen Wert gesetzt“
Wenn das Auto dann wieder fährt, zählen die Meter wieder schön hoch.

soooo, eben von der Testfahrt zurück.

Also Ralf sein Script zählt sauber hoch, man müsste eben nur noch das „-1“ abfangen.
Ralf, ich kann mir das versuchen heraus zu tüfteln, bin aber für Lösungsvorschläge offen :slight_smile:

Bei Attain habe ich einen Faktor 100 zu hoch…komischerweise nicht 1000 zu hoch.
Also 23 Kilometer gefahren und es wurden 2348 km in der ODO Variable geloggt.

mit Faktor 1000 hätte ich den Fahler eventuell gefunden, aber Faktor 100 macht mich ratlos…

Hast du da eine Idee Attain ?

Und an euch beiden:
Vielen Dank für eure Geduld ! Ich bin da sehr dankbar !

Ralf Script:

<?php

$current_value = GetValue(23395)/1000; // von ESP
$last_value = GetValue(50944); // Zwischenspeicher
$summe = GetValue(10681); 

if ($current_value < $last_value){
    $summe += $current_value;
}
else{
    $summe += ($current_value - $last_value);

}
SetValue(10681, (int)$summe);
SetValue(50944, (int)$current_value);

Attain Script:

<?php
$ODO  = 46366;

$MeterDiff = $_IPS['VALUE'] - $_IPS['OLDVALUE'];    // Wenn die ESP Variable sich ändert, die differenz zwischen altem und neuen wert berrechnen 
$MeterAlt = IPS_GetObject($ODO)['ObjectInfo']; // Die bisher gefahrenen Meter aus dem Infobereich der Variablen lesen

If ($diff > 0)
{
    $MeterNeu = $MeterDiff + $MeterAlt;  // wenn der Wert der Meterzahl ansteigt
}
else
{
    $MeterNeu = $_IPS['VALUE'] + $MeterAlt; // wenn der Wert der Meterzahl zurückgesetzt wurde
}

IPS_SetInfo($ODO, $MeterNeu);           // Die aktuell errechtente Meterzahl im Infobereich der Variablen zwischenspeichern 
SetValue($ODO,(int)$MeterNeu/1000);     // Den aktuellen Wert in km umrechen und in die Variable schreiben

Liebe Grüße
Sascha

Leider weiß ich nicht was die Ursache ist.
Was steht im Infobereich dazu?
Wie wir das Script getriggert? Änderung auf ESP Variable?
Loggst Du die ESP Variable? Irgendwelche Aussreisser da zu sehen?

Guten Morgen,

Momentan steht im Infobreich: 2324890

Das Script wird auf Änderung der ODO vom ESP getriggert.

Die logge ich auch gerade Testhalber mit:
Screenshot 2021-09-17 083231

Ausreißer sind hier keine zu sehen…
Aber eben sehe ich, dass im Infobereich Faktor 100 zu viel steht, oder ?

Liebe Grüße

Hi,
-1 ignorieren sollt einfach sein.

if ($current_value < $last_value){
    if ($current_value >= 0) $summe += $current_value;
}
else{
    $summe += ($current_value - $last_value);

}

btw. zum Testen musst Du nicht unbedingt Sprit verbrauchen. Ich habe mir Variablen angelegt und ändere sie wie ich will einfach in der Console.

Ralf

Moin Ralf,

ja, ich hatte die Tests immer mit sinnvollen Fahrten (Einkaufen etc. ) verbunden.
Ich musste auch den ESP testen, da am Anfang da auch nicht immer saubere Werte kamen.
Aber der ESP ist jetzt in Ordnung. Heute Nachmittag düse ich wieder los :slight_smile:

Deine Änderung ist drin, vielen Dank dafür :slight_smile:

Hi,
kleine Korrektur. So würde es eine Abweichung beim nächsten Wert geben.

`if ($current_value >= 0) $current_value = 0;
$summe += $current_value;`

Sollte verhindern das die -1 irgendwo berücksichtig wird.

Ralf

hi,

also so nun ?

if ($current_value < $last_value){
    if ($current_value >= 0) $current_value = 0;
    $summe += $current_value;
}
else{
    $summe += ($current_value - $last_value);

}

Hi,
müsste so gehen. Fahr mal einkaufen und berichte :slightly_smiling_face:

Ralf

Hallo zusammen :),

Beide Scripte scheinen nun zu funktionieren, allerdings habe ich 2 km Differenz. (Ralf 44km, Attain 46km)
Ich habe den ESP bei 23.828 Metern resettet und bin dann nochmal 22.232 Meter gefahren.

Das zusammengezählt ergibt 46.060 Meter.
Von der Seite her, würde ich sagen, bei Ralf fehlen mir 2km.
Rundungsfehler ?

Bei Attain habe ich den Fehler gefunden:
(Hab ich kommentiert)

<?php
$ODO  = 46366;

$MeterDiff = $_IPS['VALUE'] - $_IPS['OLDVALUE'];    // Wenn die ESP Variable sich ändert, die differenz zwischen altem und neuen wert berrechnen 
$MeterAlt = IPS_GetObject($ODO)['ObjectInfo']; // Die bisher gefahrenen Meter aus dem Infobereich der Variablen lesen

If ($MeterDiff > 0) // Hier stand "($diff > 0)", ich denke, es müsste aber "$MeterDiff" sein
{
    $MeterNeu = $MeterDiff + $MeterAlt;  // wenn der Wert der Meterzahl ansteigt
}
else
{
    $MeterNeu = $_IPS['VALUE'] + $MeterAlt; // wenn der Wert der Meterzahl zurückgesetzt wurde
}

IPS_SetInfo($ODO, $MeterNeu);           // Die aktuell errechtente Meterzahl im Infobereich der Variablen zwischenspeichern 
SetValue($ODO,(int)$MeterNeu/1000);     // Den aktuellen Wert in km umrechen und in die Variable schreiben
1 „Gefällt mir“