userReadings trigger funktioniert nicht

Begonnen von Joachim, 09 April 2014, 20:54:02

Vorheriges Thema - Nächstes Thema

Joachim

Moin @ all,

Beim Versuch, die Events zu reduzieren, bin ich darüber gestolpert, dass das Setzen eines triggers im userReading bei aktivierten event-on-change-reading nicht funktioniert.
Auszug fhem.cfg:

define TS_Bad OWTHERM DS18B20 2118BA030000 30
attr TS_Bad IODev LinkUSBi
attr TS_Bad event-min-interval Temperatur:600
attr TS_Bad event-on-change-reading Temperatur
attr TS_Bad model DS1822
attr TS_Bad room Bad
attr TS_Bad stateFormat {( int (ReadingsVal("TS_Bad","temperature",0) * 10 + 0.5 ) / 10)." °C"}
attr TS_Bad tempHigh 25
attr TS_Bad tempLow 0
attr TS_Bad tempOffset 0.0
attr TS_Bad userReadings Temperatur:temperature {(ReadingsVal("TS_Bad","Temperatur",0) eq "0") ? ( int (ReadingsVal("TS_Bad","temperature",0) * 10 + 0.5 ) / 10):( int (((ReadingsVal("TS_Bad","temperature",0) + ReadingsVal("TS_Bad","Temperatur",0)) / 2 ) * 10 + 0.5 ) / 10)}

Das reading Temperatur wird nicht angelegt.
Wie löse ich das, ausser das ich im event-on-change-reading auch noch temperature freigebe?

Gruß Joachim
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

betateilchen

Das userReading wird nur dann aktualisiert, wenn ein event einen Trigger auslöst. In Deinem Fall hast Du das uR abhängig von temperature gemacht. Das wäre ok. Du kannst aber nicht das userReading aus sich selbst triggern, wie Du das bisher versucht.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Joachim

Moin Betateilchen,
dass war Plan A, der gefiel mir aber nicht, da das erste Reading dann 0 ist, wenn es keine fhem.save gibt. Ja,ja ich weiß, ist nur einmal, hatte aber auf eine saubere Lösung gehofft.

2014-04-09 21:05:30 OWTHERM TS_Bad Temperatur: 0
2014-04-09 21:05:31 OWTHERM TS_Bad Temperatur: 18.1

ZitatDas userReading wird nur dann aktualisiert, wenn ein event einen Trigger auslöst. In Deinem Fall hast Du das uR abhängig von temperature gemacht. Das wäre ok. Du kannst aber nicht das userReading aus sich selbst triggern, wie Du das bisher versucht.
Den verstehe ich jetzt nicht.

Gruß Joachim
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

Joachim

Übrigens, Beiträge komplett verändern ist gemein
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

betateilchen

ja, ich weiss, aber nachdem Deinen Eingangsbeitrag dreimal gelesen hatte, musste ich auch drei verschiedene Antworten schreiben, bis ich endlich da war, wohin ich wollte.

Der einzige Event, der in deinem Device überhaupt einen event auslöst, ist nach Deiner Liste

attr TS_Bad event-on-change-reading Temperatur

das userReading Temperatur.

Das kann aber keinen Event auslösen, weil es keinen Event gibt, der dafür sorgt, dass das userReading verändert wird.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Joachim

Ich habe es befürchtet, hatte aber gehofft, dass das userReading auf readingsBulkUpdate triggert, denn das Reading temperature wird ja aktualisiert, es wird nur kein Event ausgelöst,was ja auch gewünscht ist, da ich diesen Wert nicht als Event haben möchte.

Gruß Joachim
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

Joachim

Dieser Eintrag funktioniert übrigens, obwohl auch hier nur auf Temperatur getriggert wird.
define TS_Bue OWTHERM DS18B20 8B49BA030000 300
attr TS_Bue IODev LinkUSBi
attr TS_Bue event-min-interval Temperatur:600
attr TS_Bue event-on-change-reading Temperatur
attr TS_Bue icon icoKLIMA
attr TS_Bue model DS1822
attr TS_Bue room Buero
attr TS_Bue stateFormat {sprintf("%.1f",ReadingsVal("TS_Bue","temperature",0))." °C"}
attr TS_Bue tempHigh 25
attr TS_Bue tempLow 15
attr TS_Bue userReadings Temperatur {(ReadingsVal("TS_Bue","Temperatur",0) eq "0") ? ( int (ReadingsVal("TS_Bue","temperature",0) * 10 + 0.5 ) / 10):( int (((ReadingsVal("TS_Bue","temperature",0) + ReadingsVal("TS_Bue","Temperatur",0)) / 2 ) * 10 + 0.5 ) / 10)}

Nach Diener Erklärung:
ZitatDer einzige Event, der in deinem Device überhaupt einen event auslöst, ist nach Deiner Liste
attr TS_Bad event-on-change-reading Temperatur
das userReading Temperatur.
Das kann aber keinen Event auslösen, weil es keinen Event gibt, der dafür sorgt, dass das userReading verändert wird.
dürfte das aber nicht gehen.

Gruß Joachim
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

betateilchen

in dem Beispiel triggerst Du auf jede Änderung denn Du hast :temperature ja nun weggelassen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Joachim

ZitatDu hast :temperature ja nun weggelassen.
Das ist richtig, aber Temperatur selbst löst keine Änderung aus, wenn sich temperature ändert, gibt es aber keinen Event, der eine Abarbeitung des userReadings Temperatur auslösen könnte?
Oder har hier der state seine Finger im Spiel?
Ist mir irgendwie zu hoch.

Gruß Joachim
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

betateilchen

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Joachim


attr TS_Bad userReadings Temperatur:state {(ReadingsVal("TS_Bad","Temperatur",0) eq "0") ? ( int (ReadingsVal("TS_Bad","temperature",0) * 10 + 0.5 ) / 10):( int (((ReadingsVal("TS_Bad","temperature",0) + ReadingsVal("TS_Bad","Temperatur",0)) / 2 ) * 10 + 0.5 ) / 10)}

klappt leider auch nicht.
Dnn werde ich wohl mit dem ersten 0 Eintrag leben müssen.
2014-04-09 21:05:30 OWTHERM TS_Bad Temperatur: 0
2014-04-09 21:05:31 OWTHERM TS_Bad Temperatur: 18.1


Gruß Joachim
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

betateilchen

auf state kannst Du nicht wahllos triggern, das solltest Du inzwischen aber wissen ;)

Gib einfach gar keine regexp an.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Joachim

Deshalb habe ich das auch erst versucht, als Du gesagt hast, es kommt vom state.

Mir wird also nichts anderes übrig bleiben.
Ich hatte halt gehofft, damit mein userReading deutlich kürzen zu können.
attr TS_Bad userReadings Temperatur {(int(((ReadingsVal("TS_Bad","temperature",0)+ReadingsVal("TS_Bad","Temperatur",0))/2)*10+0.5)/10)}
hier muss allerdings sichergestellt sein, dass es nur greift, wenn temperature einen Wert hat.
Oder gibt es noch eine andere Möglichkeit, 0 Readings zu filtern.

Gruß Joachim
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232