Entenzähler im WebFront

Wer kennt es nicht: Man hat eine Ente im Regal stehen und möchte nun den Lagerstand an Enten im WebFront erfassen.
Mit dem original IP-Symcon-Entenzähler ist dies bequem möglich.

Die Einrichtung ist kinderleicht:

1. Man erstellt ein neues Skript, kopiert den folgenden PHP-Code hinein, speichert ab und führt es aus.

<?php
/*
Lagerbestandsverwaltung

Zur Installation das Skript einmal ausführen und nach belieben
Integer-Variablen mit Variablenprofil 'StockManagement' und
diesem Skript als Aktionsskript erstellen.
*/

$ProfileName = 'StockManagement';

if ($IPS_SENDER === 'WebFront')
{
    $profile = IPS_GetVariableProfile($ProfileName);
    $minValue = (int)$profile['Associations'][0]['Value'];
    $maxValue = (int)$profile['Associations'][2]['Value'];
    
    $value = GetValue($IPS_VARIABLE);
    if ($IPS_VALUE == $minValue)
    {
        $value--;
    }
    else if ($IPS_VALUE == $maxValue)
    {
        $value++;
    }
    
    SetValue($IPS_VARIABLE, max($minValue + 1, min($maxValue - 1, $value)));
}
else
{
    IPS_SetHidden($IPS_SELF, true);
    
    if (@IPS_GetVariableProfile($ProfileName) === false && IPS_CreateVariableProfile($ProfileName, 1))
    {
        if (floatval(IPS_GetKernelVersion()) >= 2.4)
        {
            IPS_SetVariableProfileAssociation($ProfileName, -1, '<', '', -1);
            IPS_SetVariableProfileAssociation($ProfileName, 0, '%d', '', -1);
            IPS_SetVariableProfileAssociation($ProfileName, 101, '>', '', -1);
        }
        else
        {
            IPS_SetVariableProfileAssociation($ProfileName, -1, '<', '');
            IPS_SetVariableProfileAssociation($ProfileName, 0, '%d', '');
            IPS_SetVariableProfileAssociation($ProfileName, 101, '>', '');
        }
    }
}
?>

2. Man erstellt eine Integer-Variable, weist ihr das Variablenprofil ‚StockManagement‘ und das zuvor erstellte Skript als Aktionsskript zu.

3. Man zählt nach Herzenslust Enten im WebFront.

Das beste an diesem Skript: Auch Kühe, Arbeiter und Gurken sind zählbar. Sogar die beliebten 99 Flaschen Bier lassen sich erfassen.
Standardmäßig ist das Profil auf einen Maximalwert von 100 Einheiten eingestellt. Um diesen zu ändern, braucht man nur die Assoziationen im Variablenprofil anzupassen.

Wir wünschen Euch viel Spaß mit diesem nützlichen Skript und verabschieden uns mit einem herzlichen
Ente gut, alles Gut!

Lagerbestand.png

Der Entenzähler ist echt super!
Ich hatte ihn schon einmal ma laufen, allerdings bekomme ich gerade immer eine Fehlermeldung wenn ich erhöhe bzw. reduziere.

Im Webfrontend erscheint nach jedem Klick dann die Meldung „x Fehler“ am rechten Rand.

Zum Fantastillionsmal (habe aufgehört zu zählen :wink: )
http://www.ip-symcon.de/forum/showthread.php?t=24292
Michael

Allerdings ist das Skript seit Verion 2.7 (?) nur noch für kleinere Gurkensammlungen und Kuhherden geeignet da IPS maximal nur noch 32 Assoziationen erlaubt.

(habe aufgehört zu zählen )

Das wäre doch mal eine Aufgabe… :slight_smile:

Danke euch beiden.

Wenn ich das aber richtig deute, dann sollte der Fehler nicht auftreten, da ich vor dem einleitendem „<?“ und nach dem abschliessendem „?>“ keine weiteren Zeichen habe.

Das ist korrekt.

d.h. der Fehler taucht auf obwohl alles richtig ist.

Habt ihr vielleicht noch eine Idee, an was es liegen könnte?
Ich forsche heute Abend auch mal weiter.

Dein Script ist genauso wie oben ?
Vielleicht ein „echo“ irgendwo?

Ist genauso wie von horst gepostet.

Das mit dem Echo ist eine guter Vorschlag, habe ich gestern bereits geprüft.
Ein Echo ist nicht drinnen.

Eine Zusatzinfo wäre, ich weiß nicht inwiefern das mitreinspielt,
ich nutze die aktuelle Beta-Version.

Mal so am Rande … wenn man ein neues Skript anlegt ist immer eine zusätzliche Zeile vorhanden.
d.h. ich muss bei jedem Skript selbst daran denken diese zu löschen :confused:

Bild Script.png

@rene
Hmmm?
Wo muss man was löschen und was hat es mit dem Entenzähler zu tun?

Rene meint, das wenn man ein neue Skript anlegt (siehe Screenshot von ihm) automatisch ein Absatz nach dem „?>“ angelegt wird.

Das führt unter anderem zu dem Fehler, der bei mir auftaucht, da nach dem „?>“ nichts mehr stehen darf, wenn man den Entenzähler verwendet.

Aber ich gebe Heidewinkler recht im ersten Augenblick hört sich das so an, also ob es nicht um den Entenzähler geht und es eine allgemeine Frage ist.

Bei mir ist die zusaetzliche Zeile ( im Beispiel Zeile 6 ) auch immer da.
Wenn mann sie loescht , speichert und Script wieder laedt ist sie wieder da.
Hab das Script mal bei mir installiert und laeuft ohne Fehlermeldung im Webfront,
trotz dieser zusaetzlichen Zeile.
Bei 2 zusaetzlichen Zeilen kommt der Fehler.

Puh, da ist guter Rat teuer.

Ich poste heute Abend gerne mal ein paar Sceenshots, vielleicht sieht man darauf einen Fehler,
der mir ganz unbewussst nicht auffält.

Allgemein darf in der Zeile hinter dem ?> nichts mehr stehen. Darunter können aber noch weitere Zeilen stehen. Z.B. andere Anweisungen die nicht PHP sind. Bei Kopie/Paste schleichen sich gerne weitere Zeichen hinter dem ?> ein. Je nach Editor werden z.B. ein, normalerweise nicht sichtbares cr/lf in ein Space gewandelt. Hat aber alles nichts mit der Ente zu tun.

Ich habe den Fehler gefunden.

Bevor ich eben auch den Beitrag von Heidewinkler gelesen habe, habe ich noch einmal das komplette Skript bis auf die Anfangszeile mit <?php und die Endzeile mit ?> kopiert. Hier war der Fehler versteckt.

Vor dem oberen <?php ist ein Leerzeichen, dieses Leerzeichen verursacht den Fehler.

Das hat dir doch Nall Chan in Post 3# geschrieben !

Fantastillion und eins :wink:
Das mit 32 Assoziation trifft übrigends nicht zu. Es gibt ja nur 3 (-1,0,1).
Michael

Leute… Genau darum sollt ihr eure fehlerhaften Skripte posten und nicht tagelang irgendwelche Symptome beschreiben. Ja, man ist einfach manchmal blind, auch wenn man schon 3 mal die richtige Lösung vorgeschlagen bekommen hat. Das geht auch Profis manchmal so.

Das hier wäre eine Sache von 5 Minuten gewesen… :rolleyes:

Toni

Da geb ich euch recht, aber wie Tonic schon sagt, sieht man manchmal echt vor lauter Bäumen den Wald nicht mehr. Es scheint manchmal so schwer und man sieht seinen Fehler nicht, obwohl es einfach auf den ersten Blick zu sehen sein sollte.

Abgesehen davon sind wir hier eine Community, die für genau so etwas da ist. Auch wenn es manchmal zum wiederholten mal gefragt wird.

An dieser Stelle, danke an alle beteiligten. :slight_smile: