FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: tomspatz am 24 April 2021, 10:32:23

Titel: userReadings Beispiel mit dummy
Beitrag von: tomspatz am 24 April 2021, 10:32:23
defmod WerteTest dummy
attr WerteTest alias WerteTest
attr WerteTest group Heizung & Temperatur
attr WerteTest icon sani_heating_manual
attr WerteTest room System,Wohnzimmer
attr WerteTest setList state:8.00,8.50,9.00,9.50,10.00,10.50,11.00,11.50,12.00,12.50,13.00,13.50,14.00,14.50,15.00,15.50,16.00,16.50,17.00,17.50,18.00,18.50,19.00,19.50,20.00,20.50,21.00,21.50,22.00,22.50,23.00,23.50,24.00,24.50,25.00,25.50,26.00,26.50,27.00,27.50,28.00
attr WerteTest stateFormat {sprintf(" %.1f °C",(ReadingsNum("HeizungReglerWohnzimmer","state",0)))}
attr WerteTest userReadings temperature:state.* { ReadingsVal("WerteTest","state",0) }
attr WerteTest webCmd state

Mit diesem Konstrukt gibt es ja ein "dropDown" mit den Werten. in der WEB kann man es bedienen und dementsprechend wird state aktualisiert. Soweit OK.
Aber das userReading NICHT. Das tut nur wenn man unterhalb im WEB auf "set Werte Test state WERT" klickt.
Dann wird aus state Wert -> state state Wert
Erst adann wird das userreadings erstellt allerdings mit state Wert.

Was stimmt denn da nicht ?
Titel: Antw:userReadings Beispiel mit dummy
Beitrag von: Jamo am 24 April 2021, 11:01:56
Du versuchst hier mit einer setlist fuer state ein userreading fuer temperature zu erzeugen.
Mache doch direkt alles für temperature, also

attr WerteTest setList temperature: 8.00 ...
attr WerteTest readingList temperature
attr WerteTest webCmd temperature


Ich glaube man muss auch noch das attr readingList setzen.

Wenn ich mich richtig erinnere, müsste im userReadings auch ein Doppelpunkt nach dem state, da hat Rudi mal was geändert, also: attr WerteTest userreadings temperature:state:.* ....

Und ReadingsVal auf ReadingsNum ändern.
Titel: Antw:userReadings Beispiel mit dummy
Beitrag von: TomLee am 24 April 2021, 11:19:37
und mit dem selectnumbers-Widget (https://wiki.fhem.de/wiki/FHEMWEB/Widgets) wirds nochmal um etwas kürzer, übersichtlicher:

temperature:selectnumbers,8.00,0.5,28.00,2,lin
Titel: Antw:userReadings Beispiel mit dummy
Beitrag von: Otto123 am 24 April 2021, 11:45:02
Zitat von: tomspatz am 24 April 2021, 10:32:23
Was stimmt denn da nicht ?
Es gibt keinen Event mit state - eine "Besonderheit" in FHEM.
ZitataddStateEvent
Das mit dem state Reading verknüpfte Event ist speziell, da das dazugehörige Prefix "state: " entfernt wird, d.h. $EVENT ist nicht "state: on", sondern nur "on". In manchen Fällen ist es aber erwünscht das unmodifizierte Event zu bekommen, d.h. wo "state: " nicht entfernt ist. Für diese Fälle sollte addStateEvent auf 1 gesetzt werden, die Voreinstellung ist 0 (deaktiviert).
Achtung:
dieses Attribut muss beim Empfänger (notify, FileLog, etc) gesetzt werden.
dieses Attribut zeigt nur für solche Geräte-Events eine Wirkung, die readingFnAttributes unterstützen.
Ich meine aber, das gibt es bei Dummy und userReadings nicht.
Titel: Antw:userReadings Beispiel mit dummy
Beitrag von: TomLee am 24 April 2021, 12:45:34
ZitatEs gibt keinen Event mit state - eine "Besonderheit" in FHEM.

Es gibt doch einen Event bei Änderung mit dem setter state, das Reading wird rot und im Eventmonitor taucht es auch auf.

Ich mein das geht schon, der trigger muss bloss richtig gesetzt werden.

Zum nachvollziehen, das userReadings temperature reagiert nur bei Änderung in state:


[s]defmod WerteTest dummy
attr WerteTest alias WerteTest
attr WerteTest group Heizung & Temperatur
attr WerteTest icon sani_heating_manual
attr WerteTest readingList state bla
attr WerteTest room Test
attr WerteTest setList state:selectnumbers,8.00,0.5,28.00,2,lin bla:1,2,3
attr WerteTest stateFormat {sprintf(" %.1f °C",(ReadingsNum("HeizungReglerWohnzimmer","state",0)))}
attr WerteTest userReadings temperature::.* { ReadingsVal("WerteTest","state",0) }
attr WerteTest webCmd state[/s]


Edit: Offensichtlich Käse mit dem richtigen trigger k.A. was da beim testen schief lief
Titel: Antw:userReadings Beispiel mit dummy
Beitrag von: tomspatz am 24 April 2021, 13:33:47
Vielen dank an Jamo, der Anstoss für temperature statt state war goldig.

Ach dankeschön an TomLee, das widgek kannte ich noch nicht.

SO, ist es wie ich es haben wollte:
defmod WerteTest dummy
attr WerteTest alias WerteTest
attr WerteTest group Heizung & Temperatur
attr WerteTest icon sani_heating_manual
attr WerteTest readingList temperature
attr WerteTest room Test
attr WerteTest setList temperature:selectnumbers,8.0,0.5,28.0,1,lin
attr WerteTest stateFormat {sprintf(" %.1f °C",(ReadingsNum("$name","temperature",0)))}
attr WerteTest webCmd temperature
Titel: Antw:userReadings Beispiel mit dummy
Beitrag von: TomLee am 24 April 2021, 16:41:13
Mir war nach dem zeigen des selectnumbers-Beispiel noch aufgefallen das die Angabe der Nachkommastellen im Widget unnötig sind, man gibt die Anzahl anzuzeigenden Nachkommastellen ja in einem Parameter an.

Also dann einfach :
temperature:selectnumbers,8,0.5,28,1,lin

wenns jetzt nur noch eine sein soll.
Titel: Antw:userReadings Beispiel mit dummy
Beitrag von: Jamo am 24 April 2021, 17:19:27
attr WerteTest stateFormat {sprintf(" %.1f °C",(ReadingsNum("$name","temperature",0)))}

So wäre es noch einfacher, temperature hat eh nur 1 Nachkommastelle, muss also nicht nochmal formatiert werden, ein einfaches concatenation geht auch: attr WerteTest stateFormat {return ReadingsNum($name,"temperature",0) . " °C"}
Titel: Antw:userReadings Beispiel mit dummy
Beitrag von: TomLee am 24 April 2021, 17:31:02
Nochmal zu dem trigger bei state, auch wenn das jetzt nicht mehr das Thema ist.

Wie erwähnt ein Event gibts doch mit dem setter state ein Event.
Auch beim dummy trifft doch auch zu dass das dazugehörige Prefix "state: " entfernt wird, sieht man doch im Event-Monitor.

Wenn man es so definiert:

temperature:.*
oder so:
temperature:.+
dann reagiert man immer auf alle Readings.

Wenn man aber mit einem regexp genau spezifiziert auf welchen Wert man in state reagieren möchte (hier eine Zahl mit Nachkommastellen), dann klappt das doch nur auf state zu reagieren.

defmod WerteTest dummy
attr WerteTest alias WerteTest
attr WerteTest group Heizung & Temperatur
attr WerteTest icon sani_heating_manual
attr WerteTest readingList state bla
attr WerteTest room Test
attr WerteTest setList state:selectnumbers,8,0.5,28,2,lin bla:1.1,2.8,3.6
attr WerteTest stateFormat {sprintf(" %.1f °C",(ReadingsNum("HeizungReglerWohnzimmer","state",0)))}
attr WerteTest userReadings temperature:.(\d+\.\d+) { ReadingsVal("WerteTest","state",0) }
attr WerteTest webCmd state


Versteh ich was falsch oder macht mans doch anders, wie macht mans denn korrekt wenn man auf irgendwas in state reagieren wollte ?
Titel: Antw:userReadings Beispiel mit dummy
Beitrag von: Otto123 am 24 April 2021, 17:32:57
Zitat von: TomLee am 24 April 2021, 12:45:34
Es gibt doch einen Event bei Änderung mit dem setter state, das Reading wird rot und im Eventmonitor taucht es auch auf.
naja wenn man set WerteTest state schnulli absetzt gibt es den Begriff state im Event. und im state steht dann: state schnulli - das wollte ja keiner ;)
Hat aber nichts damit zu tun, dass man beim userReadings normal nicht
userReadings temperature:state.*
schreiben kann.
Nicht mehr und nicht weniger wollte ich damit sagen. Und addStateEvent gibt es an der Stelle glaube ich nicht.

Wobei: bei einem Dummy auf alle readings zu reagieren ist auch egal. Es gibt doch nur das eine :)
Titel: Antw:userReadings Beispiel mit dummy
Beitrag von: TomLee am 24 April 2021, 17:38:53
ZitatWobei: bei einem Dummy auf alle readings zu reagieren ist auch egal. Es gibt doch nur das eine

Deswegen hab ich in dem gerade gezeigten Beispiel bla noch zusätzlich dazugenommen zum nachvollziehen auf was ich hinaus bin.

Bei mir gibts übrigens ausser Test-Dummys keine weiteren, mir gehts nur um das Verständnis.