ReadingsGroup mit Listenfeld

Begonnen von HaWe68, 23 Oktober 2023, 12:20:04

Vorheriges Thema - Nächstes Thema

HaWe68

Wie kann ich in einer readingsGroup ein Listenfeld erzeugen, in welchem ein Wert verändert und ein passender Befehl zum Setzen gesendet wird ?




TomLee

Zu readingsGroup hab ich bisher nur wenig Erfahrung gesammelt, ich hab das aber mal versucht nachzuvollziehen was mMn. (wie ich es verstehe) gewünscht ist.

Erstelle (wenn noch nicht vorhanden) in dem MQTT2_ebusd_470 einen setter für die Heizkurve.

Beispiel:
attr MQTT2_ebusd_470 setList Hc1HeatCurve:selectnumbers,0.5,0.05,2.0,2,lin ebusd/470/Hc1HeatCurve/set $EVTPART1
Optional (der Optik wegen), kannst Du, musst aber nicht, den Namen des Reading Hc1HeatCurve_curve_value anpassen und den wahrscheinlich auch bei Dir nutzlosen Readingnamen Hc1HeatCurve_curve_name verhindern lassen das er überhaupt angelegt wird.
Das geht mit dem Attribut jsonMap in dem MQTT2_ebusd_470-Device.
Beispiel:
attr MQTT2_ebusd_470 jsonMap Hc1HeatCurve_curve_name:0 Hc1HeatCurve_curve_value:Hc1HeatCurve
Dann könnte die readingsGroup-Definition so aussehen:

defmod rg_MQTT2_ebusd_470 readingsGroup MQTT2_ebusd_470:Hc1HeatCurve!?Hc1HeatCurve<%time_graph>,<Heizkurve>,Hc1HeatCurve,<HK>
attr rg_testheatcurve commands { Hc1HeatCurve => "Hc1HeatCurve:" }

TomLee

Der Eintrag in setList sollte aber trotzdem in dem MQTT2_Device MQTT2_ebusd_470 vorgenommen werden.

HaWe68

SetList habe ich doch eingetragen,  siehe List Device Attri Ute, habe ich doch angehangen-oder was habe ich falsch gemacht  ?

TomLee

Du hast ein List der readingsGroup-Definition "angehangen", in der Du den Eintrag setList-Eintrag vorgenommen hast, mehr seh ich nicht.

Nochmal (der setList-Eintrag kann da nicht klappen), du musst ihn in dem MQTT2_Device MQTT2_ebusd_470 vornehmen, zumindest nach meinem Vorschlag, ob man das anders lösen kann weiß ich nicht und hab ich mich nicht weiter mit beschäftigt.

TomLee

#5
Du hast das Reading nicht mit angegeben auf welches zurückgegriffen werden soll.

Mein Beispiel war aber wie ich gerade nochmal nachgelesen habe auch nicht richtig (was die Syntax angeht), obwohl das korrekt dargestellt wurde und auch ausgeführt wurde.

So wird der Wert aus dem MQTT2_ebusd_x-Device bei mir ausgelesen, allerdings bezweile ich irgendwie das auch diese Syntax richtig ist, es klappt aber bei mir:

ZitatMQTT2_ebusd_470:Hc1HeatCurve_curve_value<%time_graph>,<Heizkurve>,Hc1HeatCurve_curve_value

TomLee

ZitatProblem ist nun, dass wenn das Browserfenster aktualisiert wird oder zwichenzeitlich den Raum wechselt, dass das Listenfeld auf den letzten Eintrag der Liste springt und nicht den vorher eingestellten Wert behält.

Hab ich jetzt versucht nachzuvollziehen warum ?

Wenn in commands das Reading nicht genauso heißt wie der setter kommt es auch bei mir zu so einem Verhalten, ich verstehe aber nicht warum das so ist.

Heute klappt es auch mit einem Komma nach der Angabe des Devicenamen, was gestern irgendwie nicht wollte und mein Syntaxproblem war.
ZitatMQTT2_ebusd_470:,<%time_graph>,<Heizkurve>,Hc1HeatCurve_curve_value



Ändere mal zum Test den Namen des setter Hc1HeatCurve zu Hc1HeatCurve_curve_value und passe deine readingsGroup-Definition entsprechend an.
Wird dann nach einem Browserrefresh oder einem Raumwechsel der richtige Wert angezeigt ?


TomLee

#7
Zitat... dieser wird NICHT mit "Hc1HeatCurve_curve_value" sondern mit "Hc1HeatCurve" aufgerufen, sonst funktioniert das nicht

Nein, das was vor dem : steht ist in diesem Fall einfach ein beliebiger setter-Name.
Der hintere Teil, der Topic + das $EVTPART1 wird gepuplisht und ist dafür zuständig dass der setter funkioniert.

Einfach mal zum Test den setter-Namen Hc1HeatCurve in HeatCurve_curve_value ändern.
HeatCurve_curve_value:selectnumbers,0.20,0.05,0.60,2,lin ebusd/470/Hc1HeatCurve/set $EVTPART1

TomLee


TomLee

Ich sehe die Anpassungen die ich vorgeschlagen habe nicht ?

Führe einfach oben in der Kommandozeile mal zuerst das aus:

attr MQTT2_ebusd_470 setList HeatCurve_curve_value:selectnumbers,0.20,0.05,0.60,2,lin ebusd/470/Hc1HeatCurve/set $EVTPART1und dann das:
attr Heizungskurve commands { Hc1HeatCurve_curve_value => "Hc1HeatCurve_curve_value:" }

TomLee

Nebenbei OT, kannst du mal bitte einfach ein mal Raw-List (ganz unten im Device "Raw-definition") von dem MQTT2_ebusd_470-Device hier posten.

TomLee

#11
Hier mal meine zwei Test-Definitionen wie ich es nachvollzogen habe (nur halt mit meinem Topic).
Nach einem Browserrefresh oder Raumwechsel steht bei mir der richtige Wert in dem Kombinationsfeld.

defmod MQTT2_ebusd_470 MQTT2_DEVICE ebusd_470
attr MQTT2_ebusd_470 IODev MQTT2_Server
attr MQTT2_ebusd_470 readingList ebusd/700/Hc1HeatCurve:.* { json2nameValue($EVENT, 'Hc1HeatCurve_', $JSONMAP) }
attr MQTT2_ebusd_470 room Ebus,MQTT2_DEVICE
attr MQTT2_ebusd_470 setList Hc1HeatCurve_0_value:selectnumbers,0.5,0.05,2.9,2,lin ebusd/700/Hc1HeatCurve/set $EVTPART1

setstate MQTT2_ebusd_470 Hc1HeatCurve_0_value
setstate MQTT2_ebusd_470 2023-10-24 17:09:18 Hc1HeatCurve_0_name
setstate MQTT2_ebusd_470 2023-10-24 17:09:18 Hc1HeatCurve_0_value 1.9
setstate MQTT2_ebusd_470 2023-10-24 17:09:15 state Hc1HeatCurve_0_value

defmod rg_MQTT2_ebusd_470 readingsGroup MQTT2_ebusd_470:,<%time_graph>,<Heizkurve>,Hc1HeatCurve_0_value
attr rg_MQTT2_ebusd_470 commands { Hc1HeatCurve_0_value => "Hc1HeatCurve_0_value:" }



Frage allgemein: Warum gibt es bei der 470-Definition nicht die x_x_name-Readings ?
Schickt die 470 einen anderen Json wie eine 700, kann doch nicht seine wenn es einen ..._value-Wert gibt muss es doch auch einen ..._name-Wert geben ?

HaWe68

#12
@TomLee: ich bin raus !!!

Bedanke dich bei @betateichen !!!

::)  ::)  ::)  ::)  ::)  ::)  ::)  ::)

https://forum.fhem.de/index.php?topic=135465.0