FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: fstefan1960 am 16 Juli 2015, 09:30:00

Titel: Wert in Dummy inkrementieren
Beitrag von: fstefan1960 am 16 Juli 2015, 09:30:00
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
Titel: Antw:Wert in Dummy inkrementieren
Beitrag 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
Titel: Antw:Wert in Dummy inkrementieren
Beitrag von: Damian am 16 Juli 2015, 12:39:54
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
Titel: Antw:Wert in Dummy inkrementieren
Beitrag von: flurin am 16 Juli 2015, 14:21:14
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
Titel: Antw:Wert in Dummy inkrementieren
Beitrag von: ujaudio am 03 September 2019, 13:10:36
Danke für diese letzten beiden Beiträge - genau das habe ich gesucht!

Einen lieben Gruß
Jürgen
Titel: Antw:Wert in Dummy inkrementieren
Beitrag von: riker1 am 01 Oktober 2020, 17:25:49
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



Titel: Antw:Wert in Dummy inkrementieren
Beitrag von: Otto123 am 01 Oktober 2020, 17:29:30
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
Titel: Antw:Wert in Dummy inkrementieren
Beitrag von: riker1 am 01 Oktober 2020, 18:17:28
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}
Titel: Antw:Wert in Dummy inkrementieren
Beitrag von: Otto123 am 01 Oktober 2020, 20:53:14
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.  :'(