Userreadings wird bei jedem Event getriggert

Begonnen von newby, 14 April 2016, 09:53:33

Vorheriges Thema - Nächstes Thema

newby

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

justme1968

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
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

newby

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

justme1968

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
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

newby

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

rudolfkoenig

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.

justme1968

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.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

rudolfkoenig

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

dev0

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

rudolfkoenig

Verstehe ich nicht: du demonstierst es gerade, dass es geht.

dev0

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?

rudolfkoenig

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.

justme1968

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.

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

rudolfkoenig

Ich bin fuer lieber mehr Konformitaet als Kompatibilitaet.
Lass mich aber ueberstimmen.

stromer-12

Ich hatte bei mir das vorher mit einer Klammer um das Reading hinbekommen. Damit wurden andere Readings mit gleichen Namen beginnend nicht berücksichtigt.
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL