Reading schreiben mit Referenz auf $hash, Reading lesen mit Referenz auf $name

Begonnen von mb201, 19 Januar 2024, 22:29:10

Vorheriges Thema - Nächstes Thema

mb201

Hallo miteinander,

Gibt es einen Grund wieso in der Readings-API zum Schreiben und Lesen von Readings eine unterschiedliche Referenz verwendet wird?
Mir ist diese FHEM-Eigenheit beim Schreiben eines eigenen Perl-Moduls aufgefallen, nachdem es mich schon viel Zeit beim Debuggen gekostet hatte. Bisher habe ich dazu keine Antwort im Forum gefunden.

# aus Wiki-DevelopmentModuleAPI
$rv = readingsSingleUpdate($hash, $reading, $value, $do_trigger);
$value = ReadingsVal($name, $reading, $default);

Wenn man fälschlicherweise bei ReadingsVal($hash,..) verwendet wird nur der $default geladen, weil das Reading wohl nicht gefunden wird, auch wenn man es gerade zuvor mit $hash geschrieben hat.

Viele Grüße
michaelba

betateilchen

readingsSingleUpdate() ist eine Funktion, die für Entwicklungszwecke und eigentlich nur für Entwickler vorgesehen ist. An den Stellen, an denen damit gearbeitet werden soll, steht ein device-hash normalerweise immer zur Verfügung.

ReadingsVal()/ReadingsNum()/ReadingsTimestamp()/ReadingsAge() sind Funktionen, die auch für den Anwender eingebaut wurden. Der "normale" Anwender hat in der Regel zu wenig Hintergrundwissen, was der device-hash eigentlich ist. Deshalb gibt es  für ihn als Gegenstück auch "setreading" um Werte in ein reading zu schreiben. Auch dabei wird mit dem Namen des devices gearbeitet, nicht mit dem hash.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

mb201

Hallo betateilchen,

danke für deine Antwort.
Ich versuche, mir den Unterschied, einfach zu merken.
Als Entwickler kann ich mir ja auch eine eigene Funktion zum Lesen erstellen, die dann über ReadingsVal($hash->{NAME},..) liest.

Viele Grüße
mb201


betateilchen

Zitat von: mb201 am 20 Januar 2024, 12:29:28Als Entwickler kann ich mir ja auch eine eigene Funktion zum Lesen erstellen,

Kann man machen, wird dann halt Kacke.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Torxgewinde

@mb201: Bitte nicht von dem Forumsteilnehmer irritieren lassen, hier sind auch nettere Menschen unterwegs.

betateilchen

Ich kann auch nett, bringt halt nur meistens nix.

Es ist für mich halt grober Unfug, um eine Funktion wie ReadingsVal(), die nix anderes ist, als ein Wrapper um möglichst einfach (!) an einen Wert aus dem hash zu kommen, nochmal einen Wrapper bauen zu wollen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Torxgewinde

Inhaltlich ist OK was du sagst, da hast du auch oft gute Einblicke und bist ja auch schon ewig dabei.

Es geht um den Ton.

mb201

Hallo Torxgewinde und betateilchen,

So neu bin ich nicht, ich lese hier schon manchmal und brauchte bisher noch nicht viel zu fragen.
Bei meinem Einstieg in die FHEM-Modulprogrammierung fand ich es nur fehleranfällig, das die Schreib und Lesefunktion (für Reading/Attr/etc) unterschiedliche Referenzen nutzen. Ich dachte da gibt es eine andere Umkehrfunktion in der API die ich nicht kenne. Aber jetzt ist es klar, das soll nicht so sein. Ein bisschen Herrschaftswissen gehört auch dazu. Eventuell ist die Einstiegshürde extra etwas höher gelegt, damit man erst mal die vorhanden Module nutzt.
Ich schreibe trotzdem meinen eigenen Quatsch und level mich hoch.

Danke Euch beiden
Viele Grüße
mb201