Hallo,
ich habe gerade bei meinen 1wire Temperatur-Sensoren das Attribut stateFormat eingesetzt. Damit formatiere ich den State so, dass nur noch die Temperatur dort steht und das Grad-Zeichen mit einem C dahinter.
Das funktioniert soweit prima. Danke für dieses Feature.
Allerdings ist mir aufgefallen, dass nach einem Neustart von FHEM, zwar die Temperatur neu eingelesen wird (Zumindest ist der Zeitstempel frisch), allerdings in meinem State dann wieder die Originalformatierung (mit Temperature und Alarm) steht.
Erst wenn die Temperatur nach dem eingestellten Interval aktualisiert wird, stimmt die Anzeige wieder...
Das Feature scheint also beim ersten Mal nicht richtig zu greifen... Hat das noch jemand so beobachten können?
Grüße Reinerlein
stateFormat wird nur im readingsEndUpdate ausgewertet, und das passiert nur, falls das Modul ein Reading (auf Grund von Hardware-Meldung) aendert. STATE sollte aber in fhem.state gespeichert sein, und anhand dessen beim Start wieder gesetzt sein. Koennte ich eine genauere Beschreibung bzw. ein Beispiel (_minimales_ fhem.cfg+fhem.state) zum reproduzieren haben?
Hi Rudi,
also, die Definition der 1wire Devices:
define OWServer OWServer localhost:4304
define hwr_Temperatur OWDevice 28.B42472040000 15
attr hwr_Temperatur model DS18B20
attr hwr_Temperatur stateFormat temperature °C
und hier mal der Auszug aus dem Statefile dazu:
setstate hwr_Temperatur 21.6875 °C
setstate hwr_Temperatur 2013-01-18 11:46:13 alarm 1
setstate hwr_Temperatur 2013-01-18 11:46:13 state temperature: 21.6875 alarm: 1
setstate hwr_Temperatur 2013-01-18 11:46:13 temperature 21.6875
Ist das mit diesen mehrfachen setstate-Anweisungen normal?
Hier mal das Listing, bevor es aktualisiert wurde:
Internals:
DEF 28.B42472040000 15
IODev OWServer
NAME hwr_Temperatur
NR 11
STATE temperature: 21.5 alarm: 1
TYPE OWDevice
Readings:
2013-01-18 17:27:57 alarm 1
2013-01-18 17:27:57 state temperature: 21.5 alarm: 1
2013-01-18 17:27:57 temperature 21.5
Fhem:
address 28.B42472040000
alerting 1
bus bus.0
interfaces temperature
interval 15
getters:
address
crc8
family
fasttemp
id
locator
r_address
r_id
r_locator
temperature
temperature10
temperature11
temperature12
temperature9
temphigh
templow
type
polls:
temperature
setters:
temphigh
templow
state:
temperature
Attributes:
model DS18B20
stateFormat temperature °C
und hier ein Listing des Geräts, wenn es dann aktualisiert wurde:
Internals:
DEF 28.B42472040000 15
IODev OWServer
NAME hwr_Temperatur
NR 11
STATE 21.125 °C
TYPE OWDevice
Readings:
2013-01-18 17:24:58 alarm 1
2013-01-18 17:24:58 state temperature: 21.125 alarm: 1
2013-01-18 17:24:58 temperature 21.125
Fhem:
address 28.B42472040000
alerting 1
bus bus.0
interfaces temperature
interval 15
getters:
address
crc8
family
fasttemp
id
locator
r_address
r_id
r_locator
temperature
temperature10
temperature11
temperature12
temperature9
temphigh
templow
type
polls:
temperature
setters:
temphigh
templow
state:
temperature
Attributes:
model DS18B20
stateFormat temperature °C
Warum sind hier eigentlich das Reading "state" und der "STATE" selbst denn unterschiedlich?
Die Zeitstempel nicht beachten, ich habe die Datenabzüge kreuz und quer gemacht. Das Problem tritt ja immer auf...
Grüße Reinerlein
Ist wohl ein Bug:
- fhem.pl liest die Definition (fhem.cfg, erst define, dann attr mit stateFormat)
- DefineFn in OWServer setzt den Status, aber zu diesem Zeitpunkt ist stateFromat noch nicht bekannt
- setState (beim lesen der Statefile) traut sich nicht STATE mit dem alten Wert zu ueberschreiben, da ein neueres schon existiert
Habs gefixed: stateFormat wird auch beim setzen ausgewertet, nicht erst beim ersten Event.
Ab morgen per update verfuegbar.
Sonst:
> Ist das mit diesen mehrfachen setstate-Anweisungen normal?
Ja, die Zeile ohne Zeitstempel setzt STATE, die anderen die einzelnen Readings samt Zeitstempel.
> Warum sind hier eigentlich das Reading "state" und der "STATE" selbst denn unterschiedlich?
Reading state ist das, was der Modulauthor vorschlaegt, STATE ist das, was man in FHEMWEB/XmlList/list/etc sieht.
STATE = Readings->{state}, falls kein stateFomrat gesetzt wurde.