Ungültiger Variablenwert / Fehlerzustand

Ich denke mal wieder darüber nach, wie ich meine IPS-Installation weiter „professionalisieren“ kann. Was mich in letzter Zeit häufig stört ist, dass ich keinen so richtig definierten Weg kenne, einen Variablenwert als ungültig bzw. fehlerhaft zu markieren. Ich kenne nur folgende Workarounds:

[ul]
[li]„Magische Zahl“ (definiert und deutlich außerhalb des sinnvollen Wertebereichs). Vorteil: Lässt sich per Association gut im Webfront darstellen, mehrere definierte Fehlerwerte sind dabei möglich, einfacher Check im Code möglich per > oder <. Nachteil: Nicht direkt anwendbar auf Messwerte von einem Sensor, da hier Fehlerzustände meist über separate Variablen kommuniziert werden. Sieht im Graphen total doof aus, wenn der im Fehlerfall nach oben oder unten „abhaut“.
[/li][li]Hilfsvariable, welche Aufschluss geben ob der Wert gültig ist oder ein Fehler vorliegt. Vorteil: Greift nicht so sehr in Berechnungen mit dem Wert selbst ein, ist irgendwie „sauberer“ getrennt. Es ist auch in Fehlerfall überhaupt noch ein Wert vorhanden (kann aber alles auch von Nachteil sein). Ist z.B. bei HomeMatic schon von Haus aus so gelöst. Nachteil: Kostet Variablen und ist nicht direkt (vor allem nicht platzsparend) im Webfront darstellbar. Bei neueren HomeMatic-Geräten muss zudem bspw. jeder Fehlerfall einzeln geprüft werden (ERROR_OVERLOAD, ERROR_REDUCED, ERROR_…).
[/li][/ul]

Was ich eigentlich am liebsten hätte wäre eine Art zusätzliche „Eigenschaft“ für Variablen, welche ungültige/Fehlerzustände kennzeichnen kann und in den Visualisierungen integrierbar ist. Liegt ein Fehlerzustand vor, so wirft er idealerweise auch eine Exception wenn man mit dem Wert herum zu rechnen versucht. Klar würde das auch potentiell nerven, aber andererseits zu einem sauberen und vorausschauenden Programmierstil zwingen. Wäre jedenfalls eine Lösung für das Problem, dass ein Sensor ausfällt und Quatsch meldet, aber vergessen wurde, die Fehlervariablen alle zu prüfen, so dass einfach treudoof mit den fehlerhaften Messwerten weiter gerechnet wird.

Na ja, bin gespannt auf Meinungen und Ideen zu diesem Thema :slight_smile:

Hallo,

aus meiner Sicht wäre es das sinnvollste, wenn man den Wert NULL verwenden könnte. Das gibt es ja grundsätzlich auch in php, kann aber von IPS nach meinen Tests nicht verarbeitet werden.
NULL heisst für mich sinngemäß: zu dem Wert gibt es keine Information. Und NULL gubt es für jeden Datentyp, was besonders bei Strings relevant ist - NULL ist halt nicht das Gleiche wie „“ (Leerstring).

Da es das (noch?) nicht gibt benutze ich - wo es geht - einen fiktiven Wert (dein Vorschlag 1)

Gruß
demel

NULL wäre zumindest eine saubere Art, darzustellen, dass es keinen gültigen Wert gibt. Das könnte ja auch unabhängig von „Error Flags“ sein.

Ich befürchte aber, dass so eine Änderung nicht möglich ist, weil man die Instanzen der Module auch dazu bringen müsste, sich entsprechend zu verhalten. Das ist aber gar nicht unbedingt gewollt, dass die Module die Hardware repräsentieren, noch irgendwelche interne Logik haben, um z.B. Werte auf NULL zu setzen wenn irgendwo ein Fehlerstatus erkannt wurde. Um mal beim Beispiel HM zu bleiben, ich glaube die einzelnen Instanzen sind gewollt strohdoof und bilden einfach nur empfangene Datenpunkte ab. Eine weitere Logik darin gibt es nicht und wäre sicherlich auch nicht gewollt.

Insofern bleibt das wohl ein Gedankenspiel und etwas, das sich jeder selbst hinfrickeln muss. Es ist ja Fluch und Segen zugleich, einerseits kann man sich alles basteln, andererseits sieht’s dadurch bei jedem völlig anders aus und funktioniert auch anders. Selten ist es so solide umgesetzt, dass Fehlerzustände korrekt berücksichtigt werden.