userreadings - $EVTPART0,$EVTPART1,$EVTPART2

Begonnen von dulan_menace, 17 März 2022, 16:04:55

Vorheriges Thema - Nächstes Thema

dulan_menace

Hallo liebes FHEM Forum,

wäre es möglich das man die Variablen $EVTPART0,$EVTPART1,$EVTPART2 auch nutzt?

es hat wohl zu den Thema schon mal eine Anfrage im Forum gegeben...
wo von rudolfkoenig ein kommentar geschrieben wurde
https://forum.fhem.de/index.php/topic,55500.msg471128.html#msg471128

mir persönlich würde es helfen wenn es $EVTPART0,$EVTPART1,$EVTPART2 geben würde...

mein Anwendungsfall wäre folgender

COUNTER:TRIGGER.*
{
     $s_TriggerDevice = ReadingsVal($name, 'TRIGGER', 'check'};
     .....
     .....
}


so in der Art nutze ich mehre UserReading's und wenn es die $EVTPART0,$EVTPART1,$EVTPART2 geben würde
müsste ich nicht jedesmal ein ReadingsVal usw. schreiben...

LG.
Erwin

rudolfkoenig

Danke fuer den Link.
Ich finde meine Begruendung von damals immer noch stichhaltig.

dulan_menace

hmm
das würde aber dann bedeuten das ich für jedes Reading was ich so brauche ein notify benötige

das wäre dann doch unübersichtlich?
bei den userReadings hätte ich alles beieinander

oder seh ich das jetzt falsch?

rudolfkoenig

Zitatdas würde aber dann bedeuten das ich für jedes Reading was ich so brauche ein notify benötige
Mir ist noch unklar, was die eigentliche Aufgabe ist.
Ich kann mir aber nicht vorstellen, dass eine mehrfach notify-Loesung einfacher ist, als im userreadings mehrere Readings abzufragen.

dulan_menace

also eigentlich würde ich es gerne genau so nutzen wie beim notify
das heißt ich will den Wert der das UserReading auslöst in diesen userReading weiter verarbeiten
und nicht extra über ReadingsVal($name, Parameter, default) den Wert erst auslesen und dann weiter verarbeiten

in den Beispiel unten wird der Parameter TRIGGER von extern getriggert
nun muss ich über ReadingsVal den wert den Parameters auslesen das ich den Weiter nutzen kann, obwohl das System beim triggern den Wert ja schon im Speicher hat, oder gibt es dazu eine andere Lösung welche ich bis dato nicht gefunden habe?

rudolfkoenig

Zitatalso eigentlich würde ich es gerne genau so nutzen wie beim notify
Diesen Teil habe ich verstanden.
Der Haken ist: es geht nicht ohne die Schnittstelle zu aendern, und ich habe bisher keine Begruendung gehoert, was das rechtfertigen wuerde.
Der Grund:
- Events werden in "Paketen" getriggert, z.Bsp. Temperatur zusammen mit Feuchte oder Stromstaerke,Spannung und Verbrauch.
- notify macht eine Schleife ueber alle Events in einem Paket, bei jedem Event, was dem Regexp entspricht, wird $EVENT, etc gesetzt und der Befehl ausgefuehrt.
- userReadings wird einmal pro Paket aufgerufen, es gibt keine Schleife, d.h. FHEM weiss nicht, auf was $EVENT gesetzt werden soll: das erste Event im Paket oder das Zweite, im Zweifel muesste man gleichzeitig auf beide setzen.

Zitatnun muss ich über ReadingsVal den wert den Parameters auslesen das ich den Weiter nutzen kann, obwohl das System beim triggern den Wert ja schon im Speicher hat [...]
FHEM hat  in beiden Faellen die Werte im Speicher. Statt mit ReadingsVal koennte man im userReadings auf die Events im Paket via $hash->{CHANGED}[$index] zugreifen. Die Zeit was man hier gegenueber ReadingsVal spart, ist unerheblich, und es gibt keine Garantie, dass diese Variable nicht umbenannt oder komplett ersetzt wird.

dulan_menace

ok, ich glaub im groben hab ich verstanden was du meinst
bezüglich Performance gehts mir da gar nicht
mir gehts da eher um's Programmieren des Codes bzw. um das einfachere Ändern des Codes

das mit den Speicher bzw. $EVENT hast du vl. nicht so verstanden wie ich das gemeint habe, ich seh das vl auch bisschen durch eine Rosa Brille, ich versuchs nochmal ansonsten is für mich ok dann bleib ich bei meinen Workflow

über
COUNTER:TRIGGER.*
definiere ich das das UserReading COUNTER neuberechnet wird wenn sich der Parameter Trigger ändert
nun kann ich zusätzlich sagen wenn TRIGGER den Wert 'x' hat soll sich der COUNTER neu berechnen

somit würde ich mir vorstellen das du zu den Zeitpunkt den Wert von TRIGGER (zb. 'x') kennst und somit einfach als Variable zur Verfügung stellst (der Namen der Variable wäre mir egal), und ich nicht extra das ReadingsVal schreiben muss, falls sich der Parameter ändern würde wäre das dann nur eine Zeile zum ändern und nicht zwei

oder war das mit den Packet gemeint? was du geschrieben hast? dann hab ich das überhaupt net gecheckt

DANKE für deine Mühen mir das näher zu bringen

ein zweiter Punkt welcher ähnlich wäre, wäre wenn es eine einfache Möglichkeit gibt sich selbst auszulesen, also ich möchte den COUNTER +1 rechnen, das Bedeutet aktuell ReadingsVal($name, 'COUNTER', 0) + 1
ändert man den ReadingsNamen muss man es an zwei Positionen ändern