FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: mb201 am 19 Januar 2024, 22:29:10

Titel: Reading schreiben mit Referenz auf $hash, Reading lesen mit Referenz auf $name
Beitrag von: mb201 am 19 Januar 2024, 22:29:10
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
Titel: Aw: Reading schreiben mit Referenz auf $hash, Reading lesen mit Referenz auf $name
Beitrag von: betateilchen am 20 Januar 2024, 06:32:23
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.
Titel: Aw: Reading schreiben mit Referenz auf $hash, Reading lesen mit Referenz auf $name
Beitrag von: mb201 am 20 Januar 2024, 12:29:28
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

Titel: Aw: Reading schreiben mit Referenz auf $hash, Reading lesen mit Referenz auf $name
Beitrag von: betateilchen am 20 Januar 2024, 12:47:26
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.
Titel: Aw: Reading schreiben mit Referenz auf $hash, Reading lesen mit Referenz auf $name
Beitrag von: Torxgewinde am 20 Januar 2024, 13:26:45
@mb201: Bitte nicht von dem Forumsteilnehmer irritieren lassen, hier sind auch nettere Menschen unterwegs.
Titel: Aw: Reading schreiben mit Referenz auf $hash, Reading lesen mit Referenz auf $name
Beitrag von: betateilchen am 20 Januar 2024, 13:44:31
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.
Titel: Aw: Reading schreiben mit Referenz auf $hash, Reading lesen mit Referenz auf $name
Beitrag von: Torxgewinde am 20 Januar 2024, 14:06:29
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.
Titel: Aw: Reading schreiben mit Referenz auf $hash, Reading lesen mit Referenz auf $name
Beitrag von: mb201 am 21 Januar 2024, 14:37:10
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