Funktion Value() ändern

Begonnen von betateilchen, 22 Juli 2020, 10:30:10

Vorheriges Thema - Nächstes Thema

betateilchen

@Rudi: könnte man die Funktion Value() durch InternalVal(<device>,'STATE','') ersetzen und eine Logmeldung ausgeben, dass Value() zu hinterfragen ist?

Immer wieder fallen Anwender darauf rein, mit Value() und einem internal zu arbeiten, obwohl sie eigentlich ein reading abfragen wollen. Da im Internal und im reading nicht immer das gleiche stehen muss, kommt es regelmäßig zu Irritationen und Problemen durch unerwartete Ergebnisse und FHEM-Verhalten.

Man könnte mit der Logmeldung die Aufmerksamkeit des Anwenders wecken, darüber nachzudenken, ob er an der Verwendungsstelle von Value() wirklich das Richtige tut.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

Ich habe nicht das Gefuehl, dass das Problem so schwerwiegend ist, dass es diese Anpassung (was etliche Installationen und 20+ Module betrifft) gerechtfertigt. Bin auch nicht sicher, dass der Vorschlag solche Probleme loest: wer den Unterschied zwischen Internal und Reading noch nicht verstanden hat, der wird nicht instinktiv die richtige Funktion verwenden.

Bin aber bereit, wenn "viele" das anders sehen, die Funktion umzustellen.

betateilchen

Zitat von: rudolfkoenig am 22 Juli 2020, 11:08:43
Ich habe nicht das Gefuehl, dass das Problem so schwerwiegend ist,

Es ist nicht schwerwiegend, tritt aber häufig auf.

Die Funktion Value() muss ja nicht komplett entfallen, insofern wären die Auswirkungen auf die bestehenden Installationen und die Module m.E. überschaubar.

Meinetwegen kann die Logmeldung auch in die bestehende Funktion Value() eingebaut werden, z.B. im Loglevel 4.
Anwender, die Probleme mit ihrem FHEM haben, kommen zumindest meistens noch auf die Idee, den verbose Level zu erhöhen und können dann zumindest den Hinweis finden.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Christoph Morrison

Klassischerweise würde man sowas jetzt ankündigen und Value() mit einer entsprechenden Log-Ausgabe versehen. In einem nächsten Major Release (neue FHEM-Version / Feature-Set) würde dann die Funktion tatsächlich angepasst werden.

Dann könnten sich die Maintainer und User entsprechend vorbereiten ohne durch eine abprubte Umstellung nach einem update überrascht zu werden.

Beta-User

Es geht mir zwar auch so, dass ich Value() verdächtige, regelmäßig für Verwirrung zu sorgen, aber den radikalen Schritt, es auszubauen, den finde ich ehrlich gesagt sehr weitgehend.

Wer weiß, was er tut, kann die Funktion gerne nutzen. Vielleicht sollte man als erstes anfangen, die Doku zu durchforsten, ob sich da irgendwas mißverständliches bzw. erläuterungsbedürftiges findet? Es ist halt so, dass viele alte Beispiele ausgiebig Value() zu nutzen scheinen, das wird etwas dauern, bis die Botschaft in der Breite angekommen ist, dass Value() zweischneidig ist...

(Im Hinterkopf stelle ich mir die Frage, wie das mit set magic ist. Ich nutze das praktisch nicht, aber vermutlich ist "[device]" auch so ein "schillernder Kandidat"...?)
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

betateilchen

Zitat von: Beta-User am 22 Juli 2020, 12:03:36
Es geht mir zwar auch so, dass ich Value() verdächtige, regelmäßig für Verwirrung zu sorgen, aber den radikalen Schritt, es auszubauen, den finde ich ehrlich gesagt sehr weitgehend.

Um ein offenbar bestehendes Mißverständnis auszuräumen: Das mit dem "abschaffen" im Titel war nicht so radikal gemeint, wie es geschrieben stand (ich habe den Titel gerade geändert).


  • Primär ging es mir um den Einbau einer Logmeldung bei Verwendung der Funktion.
  • Beim Betrachten der Funktion in der fhem.pl fiel mir dann auf, dass diese intern mit InternalVal() arbeiten könnte.

Einen kompletten Wegfall der Funktion halte ich aus Kompatibilitätsgründen auch nicht für sinnvoll.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!