Hallo,
ich habe bei einem OWDevice ein userReading angelegt, was die Differenz zwischen zwei Temperaturen bestimmt. Bei einem anderen (nicht offiziellen Modul) habe ich im Prinzip ein identisches userReading angelegt, was aber nicht funktioniert. Sind im Modul noch besondere, programmiertechnische Voraussetzungen zu schaffen???
Geht:
attr DS18B20_15AB2B040000 userReadings differenz { (ReadingsVal("DS18B20_15AB2B040000","temperature",0)-ReadingsVal("DS18B20_688A41040000","temperature",0));; }
Geht nicht:
attr MyVBUSDevice userReadings differenz { (ReadingsVal("MyVBUSDevice","temp08",0)-ReadingsVal("MyVBUSDevice","temp09",0));; }
In der Telnetconsole liefern die Ausdücke folgendes, korrektes Ergebnis:
{ (ReadingsVal("MyVBUSDevice","temp08",0)-ReadingsVal("MyVBUSDevice","temp09",0))}
-4
Ich bin etwas ratlos... wo werden, in welchem Modul werden denn die Userreading bearbeitet?
Ich könnte das natürlich im Modul direkt programmieren, aber das ist ja nicht Sinn der Übung, oder? ;-)
Ich wollte das VBUS-Modul evtl. etwas generischer gestalten....
Hier nochmal die Devices:
list MyVBUSDevice
Internals:
CFGFN
DEF 192.168.2.223 7053 60
Host 192.168.2.223
NAME MyVBUSDevice
NR 585
Port 7053
STATE T1: 0 T2: 32.4 T3: 32.1 T7: 37.4 T8: 31.8 T9: 37.2 R1: 0 R3: 0 R5: 0 R6: 0 R7: 0 T10: 37.4
TYPE VBUS
Readings:
2013-02-08 09:07:30 relay1 0
2013-02-08 09:07:30 relay2 0
2013-02-08 09:07:30 relay3 0
2013-02-08 09:07:30 relay4 0
2013-02-08 09:07:30 relay5 0
2013-02-08 09:07:30 relay6 0
2013-02-08 09:07:30 relay7 0
2013-02-08 09:07:30 state T1: 0 T2: 32.4 T3: 32.1 T7: 37.4 T8: 31.8 T9: 37.2 R1: 0 R3: 0 R5: 0 R6: 0 R7: 0 T10: 37.4
2013-02-08 09:07:30 temp01 0
2013-02-08 09:07:30 temp02 32.4
2013-02-08 09:07:30 temp03 32.1
2013-02-08 09:07:30 temp04 888.8
2013-02-08 09:07:30 temp05 888.8
2013-02-08 09:07:30 temp06 888.8
2013-02-08 09:07:30 temp07 37.4
2013-02-08 09:07:30 temp08 31.8
2013-02-08 09:07:30 temp09 37.2
2013-02-08 09:07:30 temp10 37.4
Devtype:
TIME 2013-02-08 09:07:30
VAL
Fhem:
Attributes:
delay 60
icon icoGraph
room xHeizung
userReadings differenz { (ReadingsVal("MyVBUSDevice","temp08",0)-ReadingsVal("MyVBUSDevice","temp09",0)); }
list DS18B20_15AB2B040000
Internals:
CHANGED
DEF 28.15AB2B040000 60
IODev MyRemoteOWServer
NAME DS18B20_15AB2B040000
NR 523
STATE T 22.1
TYPE OWDevice
Readings:
2013-02-08 09:08:10 alarm 0
2013-02-08 09:08:10 differenz 0.1875
2013-02-08 09:08:10 state temperature: 22.125 alarm: 0
2013-02-08 09:08:10 temperature 22.125
2013-02-06 14:15:57 temphigh 30
2013-02-06 14:15:49 templow 15
Fhem:
address 28.15AB2B040000
alerting 1
bus bus.1
interfaces temperature
interval 60
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:
alias tKamin.O
event-on-change-reading temperature
model DS18B20
polls temperature
room Heizung.FBH
stateFormat {sprintf("T %.1f",ReadingsVal("DS18B20_15AB2B040000","temperature",0))}
userReadings differenz { (ReadingsVal("DS18B20_15AB2B040000","temperature",0)-ReadingsVal("DS18B20_688A41040000","temperature",0)); }
Danke und Gruß
Holger
Damit userReadings/stateFormat/etc funktionieren, muessen im Modul die readings*Update Funktionen verwendet werden.
Vielen Dank, das war der richtige Schubser... Danke!