FHEM Forum

FHEM => Automatisierung => Thema gestartet von: newby am 14 April 2016, 09:53:33

Titel: Userreadings wird bei jedem Event getriggert
Beitrag von: newby am 14 April 2016, 09:53:33
Hallo,
ich habe eine UserReadings das nur auf "appCountsPerHour" geändert werden soll.
Leider wird es aber bei jedem Event des Devices getriggert.
Auszug cfg

define CN.Gasverbrauch HourCounter GPIOGaszaehler:on GPIOGaszaehler:off
attr CN.Gasverbrauch group Gas
attr CN.Gasverbrauch room Energie
attr CN.Gasverbrauch userReadings HourskWh:appCountsPerHour {ReadingsVal("CN.Gasverbrauch","appCountsPerHour",0) /100*9.8116}


hier die Readings
HourskWh                3.728408       2016-04-14 09:43:39
appCountsPerDay         597            2016-04-14 00:00:16
appCountsPerHour        38             2016-04-14 09:00:12
appCountsPerHourTemp    32             2016-04-14 09:43:39
appCountsPerMonth       32003          2016-04-01 00:00:00
appCountsPerMonthTemp   8370           2016-04-14 09:43:39
appCountsPerWeek        4327           2016-04-10 00:00:22
appCountsPerWeekTemp    2424           2016-04-14 09:43:39

Wie man sieht wird "HourskWh" auch getriggert wenn z.B. appCountsPerHourTemp 32   ein Event auslöst.
Was mache ich falsch?


Danke und Gruß
Sven
Titel: Antw:Userreadings wird bei jedem Event getriggert
Beitrag von: justme1968 am 14 April 2016, 10:03:15
der trigger teil wird als regex verwendet und die regex appCountsPerHour matched auch auf appCountsPerHourTemp.

versuch malattr CN.Gasverbrauch userReadings HourskWh:appCountsPerHour$ {ReadingsVal("CN.Gasverbrauch","appCountsPerHour",0) /100*9.8116}

gruss
  andre
Titel: Antw:Userreadings wird bei jedem Event getriggert
Beitrag von: newby am 14 April 2016, 11:06:27
attr CN.Gasverbrauch userReadings HourskWh:appCountsPerHour$ {ReadingsVal("CN.Gasverbrauch","appCountsPerHour",0) /100*9.8116}

leider wird das Userreading so jetzt gar nicht mehr getriggert. :'(

gruss
Sven
Titel: Antw:Userreadings wird bei jedem Event getriggert
Beitrag von: justme1968 am 14 April 2016, 11:11:47
hab gerade gesehen das das $ an dieser stelle nicht erlaubt ist weil es kein erlaubtes ziehen in reading namen ist.

nimm statt des user readings ein notify und setze das reading von dort aus mit setreading. da bist du flexibler was die regex und auch die bedingungen angeht.

gruss
  andre
Titel: Antw:Userreadings wird bei jedem Event getriggert
Beitrag von: newby am 14 April 2016, 12:53:01
Habe jetzt das Reading tickHour dafür genommen.
Das ist zwar nicht die saubere Lösung aber es funktioniert ohne weiteres zutun.#

Danke für die schnelle Unterstützung.

Gruss
Sven
Titel: Antw:Userreadings wird bei jedem Event getriggert
Beitrag von: rudolfkoenig am 15 April 2016, 18:37:22
Zitatder trigger teil wird als regex verwendet und die regex appCountsPerHour matched auch auf appCountsPerHourTemp.
@Boris: gibt es einen Grund, warum der userreadings Trigger nur mit einem ^ ergaenzt wird, und nicht mit ^$, so wie bei notify? Ich wuerde es sonst auf ^$ aendern.
Titel: Antw:Userreadings wird bei jedem Event getriggert
Beitrag von: justme1968 am 15 April 2016, 18:40:28
ich glaube der patch für die trigger war von mir. ich weiß aber nicht warum das $ fehlt.

ich würde ja sagen das $ sollte mit rein. es ist aber nicht wirklich rückwärts kompatibel.
Titel: Antw:Userreadings wird bei jedem Event getriggert
Beitrag von: rudolfkoenig am 15 April 2016, 19:03:33
Zitatich würde ja sagen das $ sollte mit rein.
Habs reingenommen.

Zitates ist aber nicht wirklich rückwärts kompatibel.
Stimmt, aber da sollten wir jetzt  (aka lieber frueher als spaeter) durch
Titel: Antw:Userreadings wird bei jedem Event getriggert
Beitrag von: dev0 am 17 April 2016, 10:53:06
Durch diese Änderung werden userReadings mit einem Trigger nicht mehr ausgelöst:

inform timer D1
define D1 dummy
2016-04-17 10:45:42.642 Global global DEFINED D1

attr D1 userReadings new:orig {(ReadingsVal($name,"orig","0")>0?1:0)}
2016-04-17 10:46:06.224 Global global ATTR D1 userReadings new:orig {(ReadingsVal($name,"orig","0")>0?1:0)}
setreading D1 orig 1
2016-04-17 10:46:17.213 dummy D1 orig: 1

attr D1 userReadings new:orig.* {(ReadingsVal($name,"orig","0")>0?1:0)}
2016-04-17 10:46:27.335 Global global ATTR D1 userReadings new:orig.* {(ReadingsVal($name,"orig","0")>0?1:0)}
setreading D1 orig 1
2016-04-17 10:46:32.734 dummy D1 orig: 1
2016-04-17 10:46:32.734 dummy D1 new: 1
Titel: Antw:Userreadings wird bei jedem Event getriggert
Beitrag von: rudolfkoenig am 17 April 2016, 11:48:20
Verstehe ich nicht: du demonstierst es gerade, dass es geht.
Titel: Antw:Userreadings wird bei jedem Event getriggert
Beitrag von: dev0 am 17 April 2016, 12:09:54
In meinem Beispiel ist der Trigger der vollständige Readingname. Wird aber erst ausgelöst, wenn man den Readingnamen um ein .* ergänzt.

Command ref:
Zitat
Falls <trigger> spezifiziert ist, dann findet diese Ausführung nur dann statt, falls einer der aktualisierten Readings dem regexp <trigger> entspricht (matched).
Daraus lese ich, dass als Trigger der Readingname reicht. Habe ich das falsch verstanden?
Titel: Antw:Userreadings wird bei jedem Event getriggert
Beitrag von: rudolfkoenig am 17 April 2016, 12:37:18
Weiss nicht, weder der urspruengliche Code noch die Doku stammt von mir.

Tatsache ist, dass es sich hier um Events handelt, und man muss (seit der Aenderung) das komplette Event (Name _und_ Wert) per Regexp spezifizieren, genauso wie in notify/watchdog/etc. Vor der Aenderung reichte es den vorderen Teil des Events zu spezifizieren, was je nach Glueck mit dem Namen des gewuenschten Readings identisch war.
Titel: Antw:Userreadings wird bei jedem Event getriggert
Beitrag von: justme1968 am 17 April 2016, 13:01:25
wie gesagt es ist von mir und war einer meiner aller ersten vorschläge.

und jetzt weiss ich auch wieder warum das $ im ursprünglichen patch nicht mit drin war. aktuell ist es so tatsächlich zu keinem bisherigen userreading das das trigger feature verwendet mehr kompatibel da ich vermute das fast alle anwender hier nur den reading namen verwenden.

wie wäre es : zu ergänzen statt $ dann würde man immer auf den reading namen eingrenzen und nicht auf das event. es wäre anders als notify aber rückwärtskompatibel.

Titel: Antw:Userreadings wird bei jedem Event getriggert
Beitrag von: rudolfkoenig am 17 April 2016, 13:09:25
Ich bin fuer lieber mehr Konformitaet als Kompatibilitaet.
Lass mich aber ueberstimmen.
Titel: Antw:Userreadings wird bei jedem Event getriggert
Beitrag von: stromer-12 am 17 April 2016, 13:29:20
Ich hatte bei mir das vorher mit einer Klammer um das Reading hinbekommen. Damit wurden andere Readings mit gleichen Namen beginnend nicht berücksichtigt.
Titel: Antw:Userreadings wird bei jedem Event getriggert
Beitrag von: Mihca am 18 April 2016, 13:31:44
sorry, ich bin etwas verloren, was nun zu ändern ist. Ich hatte bisher folgendes userreading:

attr Temp.Feuchte.Norden userReadings TDach:temperature {ReadingsVal("Temp.Dach","temperature",0);;}

und der Trigger hat funktioniert. Nun habe ich es auf folgendes umgestellt:

attr Temp.Feuchte.Norden userReadings TDach:temperature$ {ReadingsVal("Temp.Dach","temperature",0);;}

und es funktioniert nicht mehr. Was mache ich falsch?

Vielen Dank vorab
Achim
Titel: Antw:Userreadings wird bei jedem Event getriggert
Beitrag von: newby am 18 April 2016, 13:38:32

Versuchs mal damit

attr Temp.Feuchte.Norden userReadings TDach:temperature.* {ReadingsVal("Temp.Dach","temperature",0);;}


das hat bei mir funktioniert.
Gruß
Sven
Titel: Antw:Userreadings wird bei jedem Event getriggert
Beitrag von: rudolfkoenig am 18 April 2016, 13:58:36
Merkregel: Regexp genauso wie in notify/FileLog/watchdog/etc.
Der Regexp muss das komplette Event erwischen, d.h. mit dem dazugehoerigen Wert.
Titel: Antw:Userreadings wird bei jedem Event getriggert
Beitrag von: Mihca am 18 April 2016, 15:05:35
so geht es!!!  :) Vielen Dank!

Gruß
Achim
Titel: Antw:Userreadings wird bei jedem Event getriggert
Beitrag von: Mihca am 18 April 2016, 16:08:59
... fast alles geht jetzt, außer Folgendem:

attr Stromzaehler userReadings power:energy.* differential {ReadingsVal("Stromzaehler","energy",0)*3600;;}

"power" wird bei dem Triggerevent nicht berechnet. Hat jemand eine Idee?

Vielen Dank für Hilefe vorab.

Gruß Achim
Titel: Antw:Userreadings wird bei jedem Event getriggert
Beitrag von: FunkOdyssey am 18 April 2016, 16:59:37
Ich habe bei meinem HM-Sen-DB-PCB ein userreading wie folgt hinzugefügt:

lastAction:trigger {ReadingsTimestamp("$name","trigger","")}

Es sieht danach aus, als hätte ich bei diesem Commit (https://sourceforge.net/p/fhem/code/11243/) einfach Pech, weil ich auf das Reading "trigger" gesetzt habe, oder?

Schaue ich mir meine anderen Geräte (BM) an, so funktioniert es nämlich grundsätzlich:

lastAction:motion {ReadingsTimestamp("$name","motion","")}

Ich suche mir mal ein neues Readings aus, welches ich dafür benutzen kann. Hoffentlich liegt es daran. :-)




Nachtrag: Ich glaube, dass ich es jetzt verstanden habe. Ich habe nun auch die Schreibweise geändert und warte mal ab.


lastAction:state.* {ReadingsTimestamp("$name","state","")}
Titel: Antw:Userreadings wird bei jedem Event getriggert
Beitrag von: scooty am 18 April 2016, 17:35:32
Zitat von: Mihca am 18 April 2016, 16:08:59
... fast alles geht jetzt, außer Folgendem:

attr Stromzaehler userReadings power:energy.* differential {ReadingsVal("Stromzaehler","energy",0)*3600;;}

"power" wird bei dem Triggerevent nicht berechnet. Hat jemand eine Idee?

Vielen Dank für Hilefe vorab.

Gruß Achim

Kann es sein, dass das Reading "energy" einen Wert mit Einheit enthält, z.B. "5 kWh"?
Probiere 'mal:
attr Stromzaehler userReadings power:energy.* differential {ReadingsNum("Stromzaehler","energy",0)*3600;;}

Andreas
Titel: Antw:Userreadings wird bei jedem Event getriggert
Beitrag von: Mihca am 18 April 2016, 18:03:47
Hallo Scooty,
vielen Dank. Nein, das reading "energy" hat keine Einheit. Es funktioniert nun ohne weitere Änderungen doch.
Grüße Achim
Titel: Antw:Userreadings wird bei jedem Event getriggert
Beitrag von: Dr. Boris Neubert am 18 April 2016, 20:28:45
Hallo,

Zitat von: rudolfkoenig am 15 April 2016, 18:37:22
@Boris: gibt es einen Grund, warum der userreadings Trigger nur mit einem ^ ergaenzt wird, und nicht mit ^$, so wie bei notify? Ich wuerde es sonst auf ^$ aendern.

sorry, bin erst jetzt auf dieses Thema aufmerksam geworden - lese dieses Board nicht.

Ich finde es richtig, dass sich Regexe durchgehend gleich verhalten.

Viele Grüße
Boris
Titel: Antw:Userreadings wird bei jedem Event getriggert
Beitrag von: sw586 am 23 April 2016, 11:31:54
Hallo,

wenn ich es richtig verstanden habe muss jetzt immer ein ".*" angehängt werden.
Damit funktioniert es bei mir jedenfalls wieder.

Sollte dann nicht auch die Dokumentation geändert werden?

z.B. hier: http://fhem.de/commandref.html#userReadings (http://fhem.de/commandref.html#userReadings)

Gruß
Stefan
Titel: Antw:Userreadings wird bei jedem Event getriggert
Beitrag von: rudolfkoenig am 24 April 2016, 18:55:15
Danke fuer den Hinweis, habs angepasst.
Titel: Antw:Userreadings wird bei jedem Event getriggert
Beitrag von: MEitelwein am 30 April 2016, 11:54:18
Ein kleiner Tip, wenn man Readings mit gleichem Wortanfang hat, z.B. die Readings

rain
rain_min
rain_max

Ein userReading mit rain als Trigger kann dann über die Wortgrenze eindeutig identifiziert werden, die im Regex über \b definiert wird:

... userReading rain_1h:rain\b.* {myDiff(   60*60, "logDB", "out_Wetterstation:rain_total")}
Titel: Antw:Userreadings wird bei jedem Event getriggert
Beitrag von: dev0 am 30 April 2016, 12:24:59
Ein Doppelpunkt statt einer regexp erscheint mir lesbarer/sinnvoller...
Titel: Antw:Userreadings wird bei jedem Event getriggert
Beitrag von: drdownload am 02 Juni 2016, 20:23:40
sorry, verlesen, gelöscht.
Titel: Antw:Userreadings wird bei jedem Event getriggert
Beitrag von: unimatrix am 05 Februar 2017, 21:01:42
habe ich es richtig verstanden, dass man die userReadings nicht von ausserhalb eines Moduls triggern kann? Hintergrund: In einer HTTPMOD Definition berechne ich auch eine verbleibende Zeit in Minuten. Die soll minuetlich neu gerechnet werden (um eben immer zu stimmen), aber das Modul soll nicht alle 60 Sekunden auch die URL abfragen.
Titel: Antw:Userreadings wird bei jedem Event getriggert
Beitrag von: justme1968 am 05 Februar 2017, 21:07:12
userReadings werden nur durch readings änderungen im selben device getriggert.

wenn du readings von hand setzen willst nimm setreading.
Titel: Antw:Userreadings wird bei jedem Event getriggert
Beitrag von: Tueftler1983 am 19 Oktober 2017, 22:12:12
Darf ich hier nochmal einharken??

Habe ein Userreading
result_01_consumptionS {ReadingsVal("Discovergy2","result_1_consumption",0) / 1000}

Das reading: "result_01_consumption" gibt es 12 mal wo sich halt nur die Zahl ändert.
Gibt es eine Möglichkeit das userreading flexibel zu machen?
So in etwa
result_$_consumptionS {ReadingsVal("Discovergy2","result_$_consumption",0) / 1000}
Titel: Antw:Userreadings wird bei jedem Event getriggert
Beitrag von: dev0 am 20 Oktober 2017, 07:21:55
Nimm 1 notify und benutze setreading. Wenn Du die Events der neuen Readings benötigst, dann setreading mit einem 'sleep 0.1' davor.
Titel: Antw:Userreadings wird bei jedem Event getriggert
Beitrag von: Tueftler1983 am 20 Oktober 2017, 15:45:18
Aber muss ich das dann im notify für jedes reading machen?
Habe 12 mal Start zeit
12 mal endlich Zeit
Und 12 mal Zählerstand
Oder gibt es ne Möglichkeit das mit 3 notifys zu machen wo die Zahl zwischen den _ _ variabel ist?
Titel: Antw:Userreadings wird bei jedem Event getriggert
Beitrag von: Tueftler1983 am 21 Oktober 2017, 14:38:39
Es geht sich ja darum das ich da nicht 36 userreadings oder spalten im notify schreiben muss. Also ob man in den RedingNamen die Zahl zwischen _ _ als automatisch erkennende Variable beschreiben kann über ein regex oder so?
Titel: Antw:Userreadings wird bei jedem Event getriggert
Beitrag von: dev0 am 21 Oktober 2017, 18:11:33
Ja, ist hier aber offtopic.