Integerwert per Tastatur eingeben

Hallo allerseits.
Ich hab hier ein Projekt, in dem ein Wasserzähler per Reedkontakt ausgelesen wird.
Nun hat der Zähler einen Stand von sagen wir 1000 Kubikmeter der Impulszähler ist aber noch bei 0, da gerade frisch installiert. Also dachte ich mir, ich machs gleich richtig und ermögliche dem Kunden, den Wert manuell zu ändern, das hilft auch falls mal der Zähler ersetzt wird und wieder auf null steht.

Nun hab ich aber erstmal nicht die Möglichkeit, den Wert zu ändern, da das Profil min=0 und max=0 hat (der Zählerwert kann hier theoretisch mehrere 100000m³ in 100l-Impulsen erreichen). Wenn ich also max. auf einen Wert einstelle, der vom Zähler nicht mehr erreicht werden kann, kann ich auch die Variable ändern. Dummerweise kommt im Webfront dann eine Auswahl, die sich nicht genau genug Bedienen lässt. Die „Drehscheibe“ springt dann gleich um Mehrere hundert Kubikmeter.

Gibt es eine Möglichkeit, den Integerwert direkt per Tastatur zu ändern oder vielleicht eine Art Popup, ohne den Umweg über eine Textvariable zu nehmen, die ich dann ja auf Falscheingaben auswerten muss (Buchstaben)?

Achso: Nein ich werde dem Kunden nicht zumuten, in der Konsole rumzuklicken :slight_smile:

Gruß Alex

Hast du es schon mal ohne zugeordnetem Profil versucht?

Ich habe mal ein kleines Profil/Script für Kilometerstände gebastelt - das könnte man entsprechend anpassen.

Gruß Heiko

PS: Also z.B. +/- 100 | 1000 | 10000 usw.

Ohne Profil lässt sich die Variable im Webfront und der App nicht ändern.

Das sieht gar nicht so schlecht aus… ich wusste nicht, dass man das so machen kann.
Wäre auf jeden Fall besser als jetzt.
Wie geht das denn?

Vom Profil (Integer) her sieht das so aus …

und der Ausschnitt aus dem dazugehörigen Script

$min_mileage    = 0;        // 0 km 
$max_mileage    = 1000000;  // 1.000.0000 km


// WEBFRONT
if($_IPS['SENDER'] == "WebFront") {
    $name = IPS_GetName($_IPS['VARIABLE']);
    switch ($name) {
        // Kilometerstand konfortabel zusammenklicken
        case 'Kilometerstand':
            $_IPS['VALUE'] = CalcValue($_IPS['VARIABLE'], $_IPS['VALUE'], $min_mileage, $max_mileage);
            break;

    }
    // Speichern
    SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
}

// Berechnet entsprechend der Auswahl den neuen Wert
function CalcValue($variable, $value, $min, $max)
{
    $oldValue = GetValue($variable);
    // Sonderfall (direktes Anklicken)
    if($value == $min) return $oldValue;
    // Schrittweise rauf oder runterzählen
    if($value < $min) $value = $oldValue - abs(abs($min)-abs($value));
    if($value > $max) $value = $oldValue + ($value-$max);
    // Überlauf verhindern
    if($value < $min) $value = $min;
    if($value > $max) $value = $max;
    // Ergebnis zurückliefern
    return $value;
}

Nur so auf die Schnelle

Gruß Heiko

1 „Gefällt mir“

Ach sooo ich verstehe…
das %d ist der Knackpunkt.

Vielen Dank :+1: damit kann ich was anfangen

1 „Gefällt mir“