Wert in Dummy inkrementieren

Begonnen von fstefan1960, 16 Juli 2015, 09:30:00

Vorheriges Thema - Nächstes Thema

fstefan1960

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
FHEM auf PC: CUL868, CUL 443, HM_LAN, JeeLink
FHEM auf Raspi: CUL868
div. LaCrosse Temp/Hum-Sensoren, HM-Heizkörperventile, Schaltaktoren, etc.

Mathea

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

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

flurin

#3
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

ujaudio

Danke für diese letzten beiden Beiträge - genau das habe ich gesucht!

Einen lieben Gruß
Jürgen
Einen lieben Gruß
Jürgen

riker1

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
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



FHEM    5.26.1 Ubuntu 18, FHEM    5.26.1 RPI 3 , Actoren: IT ,Tasmota, ESPEasy,
MAX CUBE, MAX HT, MAX WT, Selbstbau nanoCULs, FS 20,Tasmota, Homematic, FTK, SW. DIM, Smoke,KODI,Squeezebox

Otto123

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
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

riker1

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}
FHEM    5.26.1 Ubuntu 18, FHEM    5.26.1 RPI 3 , Actoren: IT ,Tasmota, ESPEasy,
MAX CUBE, MAX HT, MAX WT, Selbstbau nanoCULs, FS 20,Tasmota, Homematic, FTK, SW. DIM, Smoke,KODI,Squeezebox

Otto123

#8
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.  :'(
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