Was ist besser/günstiger - userreadings oder notify mit setreading

Begonnen von Loki, 22 August 2018, 12:30:37

Vorheriges Thema - Nächstes Thema

Loki

Ich möchte in einem device verschiedene readings setzte .

Diese Readings basieren auf Berechnungen mit Werten anderer Readings.

Ich kann nun das Ganze als Userreading lösen und dort in Pearl-Teil die Berechnung machen, oder ein Notify definieren, das die Berechnung macht und per setreading das Ergebnis setzt.

Beide Wege funktionieren und führen zum gewünschten Ergebnis.

Die Frage ist nun, welches die bessere/günstigere Lösung im Hinblick auf Zeit/CPU ist?

CoolTux

Also mit Pearl wird das nicht gehen.

Empfehlung: Es gubt das Userreading nicht um sonst und Du solltest es auch verwenden. Dort kannst Du dann mit Perlcode arbeiten
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Loki

Danke für Deine schnelle Antwort, jedoch hast Du meine Frage nicht verstanden.

Ich habe für beide Wege eine funktionierende Lösung.
Sowohl userreadings, als auch notify mit setreading klappt einwandfrei.

Ich möchte nur wissen, welcher der bessere Weg ist.  ;)

CoolTux

Das ist eine Philosophie Frage. Wie gesagt, das userreading hat schon seinen Sinn und ich wurde persönlich es einem notify vorziehen
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Loki

Ah, ok. Wenn sie dann technisch quasi gleichwertige Lösungen bieten, könntest du dann kurz erläutern, worin für Dich die Vor-,bzw. Nachteile liegen?

CoolTux

Du hast beim Userreading alles in einem Device statt ein weiteres zu kreieren. Mehr mag ich gerade darüber nicht nachdenken.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Otto123

Hi Loki,

kann sein das mir die Anderen jetzt ein paar klatschen: Aber mach Dir doch ein Benchmark und probier beides aus.  ;)
attr global mseclog 1 würde Dir eine höhere Zeitauflösung im Log bieten.
Und eine Schleife - Vorsicht, legt dir FHEM lahm! - testet deinen Befehl ein paar mal.
{my $i;;Log 1, "Anfang";;for($i=0;;$i<=10;;$i++) {fhem ("set Aktor01 toggle")};;Log 1, "Ende"}

Ob da etwas repräsentatives bei rauskommt weiß ich nicht. Aber ich wollte sowas schon lange mal probieren :)

Lustig ist zu sehen was FHEM tut, wenn man VOR dem set noch ein sleep einbaut  ;)

Je länger ich drüber nachdenke, da bekommt man wahrscheinlich nur in speziellen Fällen sinnvolle Werte...
Aber vielleicht beantwortet man damit die Philosophie Frage :)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Pfriemler

Abgesehen davon, ob die Gretchenfrage "was ist effizienter" wohl nur bei täglich tausenden umzusetzenden Ereignissen überhaupt relevant sein dürfte, wenn FHEM nicht gerade auf einem Raspi Zero läuft, bleibt natürlich anzumerken, dass ein Userreading nur getriggert wird, wenn sich ein ein Event in diesem Device ergibt, währenddessen man mit setreading jederzeit in beliebige andere Devices schreiben kann.
Handelt es sich aber nur um automatische Umformungen und Zusatzinfos für dieses Device, bin ich ganz bei CoolTux. Jede externe Def weniger ist ein Gewinn für die Übersichtlichkeit. Finde ich.
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

gotocu

Habe gerade diesen Thread von Loki entdetckt. Genau das Selbe hab ich mich auch schon seit längerem gefragt.

Warum und wann "userreading" und warum und wann "notify" bzw. was ist mit "watchdog"?

Christoph Morrison

Zitat von: gotocu am 05 November 2018, 09:24:22
Warum und wann "userreading" und warum und wann "notify" bzw. was ist mit "watchdog"?


  • userReading werden nur berechnet, wenn es ein Event im Device des userReading gibt, nicht bei anderen Events anderer Devices / des Systems.
  • notify reagiert auf Events, auf die das definierte Muster passt, also (auch) auf Events anderer Devices.
  • watchdog reagiert auf das Ausbleiben von Events, notify nicht.



gotocu

Zitat von: Christoph Morrison am 06 November 2018, 19:35:16

  • userReading werden nur berechnet, wenn es ein Event im Device des userReading gibt, nicht bei anderen Events anderer Devices / des Systems.
  • notify reagiert auf Events, auf die das definierte Muster passt, also (auch) auf Events anderer Devices.

Super vielen Dank für die Auflistung - d.h. im Schluß, dass es keinen Vorteil (bzw. keinen zwingenden) Grund für den Einsatz von userReadings gibt da alles auch (gleich performant) mittels notify gelöst werden kann ...?

Christoph Morrison

Zitat von: gotocu am 07 November 2018, 09:00:19
Super vielen Dank für die Auflistung - d.h. im Schluß, dass es keinen Vorteil (bzw. keinen zwingenden) Grund für den Einsatz von userReadings gibt da alles auch (gleich performant) mittels notify gelöst werden kann ...?

Über Performance habe ich ja nichts geschrieben, Benchmarks habe ich keine gemacht. Aber: notify und userReading sind ja nicht identisch. Es gibt also schon einen zwingenden Grund, notify zu verwenden, nämlich wenn ein Device auf den Event eines anderen reagieren soll - mit userReading funktioniert das nicht, eine Alternative wäre zu notify eher DOIF, das auch (in Teilen?) die Aufgaben von userReading übernehmen kann.

frank

so wie ich es verstanden habe, muss/soll man userreadings nutzen, wenn man durch events eines devices in diesem device readings erzeugen/manipulieren will.

notify versucht das zu unterbinden, um schleifen/loops zu verhindern. wenn es mit notify trotzdem funktioniert, hat man entweder glück gehabt, oder pech, falls es irgendwann nicht mehr geht.

den vorteil eines notify sehe ich hauptsächlich darin, dass man generisch mehrere devices "erschlagen" kann, die dieselbe funktion erhalten sollen. userreadings muss man in dem fall in jedes device einbauen.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

Christoph Morrison

Zitat von: frank am 07 November 2018, 11:53:33
den vorteil eines notify sehe ich hauptsächlich darin, dass man generisch mehrere devices "erschlagen" kann, die dieselbe funktion erhalten sollen. userreadings muss man in dem fall in jedes device einbauen.

Ich benutze userReadings vor allem dort, wo ich abgeleitete Daten eines Devices benötige, z.B. um einen Wert umzurechnen (Wh in kWh, mA in A, etc.) oder ich Werte fortführen muss (z.B. gesamter Traffic meiner WAN-FritzBox).

notify praktisch gar nicht mehr, die habe ich alle nach und nach durch DOIF ersetzt.