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
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.
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
Übrigens, Beiträge komplett verändern ist gemein
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.
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
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
in dem Beispiel triggerst Du auf jede Änderung denn Du hast :temperature ja nun weggelassen.
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
ja, das kommt von state.
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
auf state kannst Du nicht wahllos triggern, das solltest Du inzwischen aber wissen ;)
Gib einfach gar keine regexp an.
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