Guten Tag,
ich möchte gerne möglichst simpel einen Zähler realisieren, der hochzählt, wie oft ein sensor ausgelöst hat.
Dazu habe ich ein dummy "Zaehler" angelegt und auf 0 gesetzt.
Wie kann ich jetzt im notify den Zaehler um 1 inkrementieren?
define Inkrement notify Melder:on.* set Value("Zaehler")+1
geht nicht. Wie muss ich da bitte klammern und aufrufen?
Danke für jeden Tip
Gruß
Frank
Hallo Frank,
hierzu kann ich dir empfehlen, das Beispiel "Berechnung im Ausführungsteil" der DOIF Funktion in der Commandref anzuschauen.
Ich glaube, das müsste bei dir am Ende so ähnlich aussehen:
define Zaehler_Hochzaehlen DOIF ([Melder:?on]) (set Zaehler {[Zaehler]+1})
attr Zaehler_Hochzaehlen do always
Ich kann den Code leider gerade nicht ausprobieren, also kann ich keine Garantie darauf geben.
Was aber passieren soll: die definierte "Zaehler_Hochzaehlen" DOIF Funktion löst immer aus wenn das device "Melder" ein Event "on" generiert. Daraufhin wird auf den Status des device "Zaehler" der Wert 1 addiert. Ich glaube du musst das attribut "do always" der DOIF Funktion setzen, damit die Funktion jedes mal ausgeführt wird, wenn der Melder on sendet. Kann aber auch sein, dass es ohne das Attribut funktioniert.
Probier mal aus, ob die Funktion so geht.
Gruß,
Mathea
Zitat von: Mathea am 16 Juli 2015, 10:37:48
Hallo Frank,
hierzu kann ich dir empfehlen, das Beispiel "Berechnung im Ausführungsteil" der DOIF Funktion in der Commandref anzuschauen.
Ich glaube, das müsste bei dir am Ende so ähnlich aussehen:
define Zaehler_Hochzaehlen DOIF ([Melder:?on]) (set Zaehler {[Zaehler]+1})
attr Zaehler_Hochzaehlen do always
Ich kann den Code leider gerade nicht ausprobieren, also kann ich keine Garantie darauf geben.
Was aber passieren soll: die definierte "Zaehler_Hochzaehlen" DOIF Funktion löst immer aus wenn das device "Melder" ein Event "on" generiert. Daraufhin wird auf den Status des device "Zaehler" der Wert 1 addiert. Ich glaube du musst das attribut "do always" der DOIF Funktion setzen, damit die Funktion jedes mal ausgeführt wird, wenn der Melder on sendet. Kann aber auch sein, dass es ohne das Attribut funktioniert.
Probier mal aus, ob die Funktion so geht.
Gruß,
Mathea
Aus Kompatibilitätsgründen müssen Berechnungen innerhalb eines FHEM-Befehls mit {( beginnen, hier also:
define Zaehler_Hochzaehlen DOIF ([Melder:?on]) (set Zaehler {([Zaehler]+1)})
Gruß
Damian
Oder einfach "Device Melder" mit dem userReadings Attribut ergänzen:
attr Melder userReadings Zaehler:on {ReadingsVal("Melder","Zaehler",0)+1}
Vorteil: kein notify oder DOIF nötig.
Gruss
flurin
Danke für diese letzten beiden Beiträge - genau das habe ich gesucht!
Einen lieben Gruß
Jürgen
Hallo
habe nun versucht das nachzubauen.
Komme aber mit dem Trigger nicht klar.
habe folgendes Scenario:
Readings am Device: p_counter
POWER1
POWER2
bekomme aber den Trigger nicht definiert für das Reading POWER*
nur für state geht es.
0_P2_C:p_counter.POWER2:*ON.* {ReadingsVal("p_counter","0_P2_C",0)+1}, -> geht nicht
0_p_c_on:on {ReadingsVal("p_counter","0_p_c_on",0)+1},
0_p_c_off:off {ReadingsVal("p_counter","0_p_c_off",0)+1}
Wie müsste ich den Trigger bauen?
Kann ich einen beliebigen Trigger oder nur state nehmen?
Wie müsste ein Trigger von einem anderen Device aussehen?
https://fhem.de/commandref_DE.html (https://fhem.de/commandref_DE.html)
sagt: <reading>[:<trigger>] [<modifier>] { <perl code> }
somit müsste doch sowas gehen.
attrib pcounter userreadings 0_P1_C:TA_ESP0114.POWER1.*ON.* {ReadingsVal("p_counter","0_P1_C",0)+1},
triggert aber userreadings nicht wenn TA_ESP0114.POWER1.*ON.* triggert.
Was übersehe ich hier?
Danke T
Zitat von: riker1 am 01 Oktober 2020, 17:25:49
Was übersehe ich hier?
Hi,
ein userreading kann nur vom eigenen Device getriggert werden.
Gruß Otto
ah ok danke Otto.
das erklärt das eine Problem.
Das andere aber nicht richtig.
devicename: p_counter
0_P2_C:p_counter.POWER2.*ON.* {ReadingsVal("p_counter","0_P2_C",0)+1}
,
-> geht aber nicht nicht
Scheinbar muss/darf der Trigger nur das Reading enthalten
0_P2_C:POWER2.*ON.* {ReadingsVal("p_counter","0_P2_C",0)+1}
,
Ja! ;)
ZitatuserReadings
A comma-separated list of definitions of user-defined readings. Each definition has the form:
<reading>[:<trigger>] [<modifier>] { <perl code> }
After a single or bulk readings update, the user-defined readings are set by evaluating the perl code { <perl code> } for all definitions and setting the value of the respective user-defined reading <reading> to the result. If <trigger> is given, then all processing for this specific user reading is only done if one of the just updated "reading: value" combinations matches <trigger>, which is treated as a regexp.
Und Du darfst {ReadingsVal($name,"0_P2_C",0)+1} schreiben :)
Das 0_P2_C: verstehe ich immer noch nicht. :'(