Jetzt muss ich doch mal hier um Hilfe bitten, da ich aus der Commandref nicht ganz schlau werde:
Ich habe ein ReadingsProxy für einen Temperatur Offset angelegt, es kann positive, negative Werte oder Null annehmen. In der Commandref stehen einige Beispiele wie man bei einem Switch den Wert übergeben kann mit setFn oder valueFn. Wie würde ich jetzt einen beliebigen Wert an das Original Device übergeben?
attr proxy valueFn {($VALUE eq "on")?"off":"on"}
So funktioniert das ja nicht wirklich. Geht hier ein Platzhalter für den Wert, den man übergeben will?
Hm,
was ist den das originale Device. Am Besten mit List. Und an welches set im originalen Device soll denn ein Wert übergeben werden.
Grüße Jörg
Das Original Device ist ein Reading meiner Heizung, die per Modbus ausgelesen wird. Der List würde hier den Rahmen sprengen, da es doch recht viele Werte sind. Hier die betreffenden Zeilen:
obj-h213-reading Kinderzimmer_Offset
obj-h213-set 1
obj-h213-unpack s>
Der ReadingsProxy verweist dann eben auf Kinderzimmer_Offset bsher ohne Attribute (außer room).
Hier ein Bsp vor, wobei ich den Status anzeigen lasse und schalten kann, zusätzlich kann ich auch mittels Slider die percetage setzen.
defmod Beregnung_vorne readingsProxy MYSENSOR_2:status
attr Beregnung_vorne comment MySensor_2 (Brunnenschacht) Relais 1
attr Beregnung_vorne group Bewaesserung
attr Beregnung_vorne room Garten
attr Beregnung_vorne setFn {($CMD eq "percentage")?"$CMD $ARGS":($CMD eq "on")?"status on":"status off"}
attr Beregnung_vorne setList on off percentage:slider,0,1,100
attr Beregnung_vorne sortby 2
attr Beregnung_vorne valueFn {($VALUE eq "on")?"on":"off"}
attr Beregnung_vorne webCmd on:off:percentage
Anstelle slider kannst du alle widgetOverride nutzen.
Danke für das Beispiel, so richtig werde ich allerdings nicht schlau daraus, weil ich eben kein On oder Off habe:
defmod Kinderzimmer_Offset readingsProxy Heizung:Kinderzimmer_Offset
attr Kinderzimmer_Offset room Kinderzimmer
attr Kinderzimmer_Offset setFn {($CMD eq "setting")?"$CMD $ARGS":($CMD eq "on")?"status on":"status off"}
attr Kinderzimmer_Offset setList setting:slider,-3,1,3
attr Kinderzimmer_Offset valueFn {($VALUE eq "on")?"on":"off"}
attr Kinderzimmer_Offset webCmd setting
Jetzt bekomme ich einen Slider von -3 bis 3 hin, der aber weder den aktuellen Wert anzeigt, noch ans Original Device übergibt.
Laut deinem ersten Post möchtest du nur das Offset sehen uns setzen.
Funktioniert das setzen im Originaldevice und mit welchem Reading?
In der DEF beziehst du dich auf dieses. Dann solltest du den Offset schon einmal sehen.
valueFN brauchst bei Werten nicht.
Bei setFN sollte $ARGS alleine reichen.
Das was bei mir drin steht ist eine if elsif else Abfrage, damit ich Status und percetage setzen kann.
Bsp
defmod Kinderzimmer_Offset readingsProxy Heizung:setting
attr Kinderzimmer_Offset room Kinderzimmer
attr Kinderzimmer_Offset setFn $ARGS
attr Kinderzimmer_Offset setList setting:slider,-3,1,3
attr Kinderzimmer_Offset webCmd setting
Im Originaldevice funktioniert es mit z.B.:
set Kinderzimmer_Offset -2
Jetzt funktioniert es, vielen Dank!
Das $ARGS hatte mir gefehlt. Nochmal das gesamte ReadingsProxy:
defmod Kinderzimmer_Offset readingsProxy Heizung:Kinderzimmer_Offset
attr Kinderzimmer_Offset room Kinderzimmer
attr Kinderzimmer_Offset setFn $ARGS
attr Kinderzimmer_Offset setList Kinderzimmer_Offset:slider,-3,1,3
Der Slider zeigt jetzt nach Änderungen nicht den aktuellen Wert an, aber das ist eigentlich auch egal, der Offset an sich wird richtig gesetzt.
Kannst mal testen mit
attr Kinderzimmer_Offset valueFn $VALUE
ob sich der Slider aktualisiert.
Zitat von: frober am 24 Februar 2023, 15:50:44
Kannst mal testen mit
attr Kinderzimmer_Offset valueFn $VALUE
ob sich der Slider aktualisiert.
Das bringt nichts, aber mit einem
webCmd Kinderzimmer_Offset
siehst du den aktualisierten Slider im FHEMWEB.
Funktioniert so halbwegs, jetzt habe ich oben bei Device Overview einen Slider der sich aktualisiert und darunter einen zweiten, der immer wieder auf -3 springt, egal was man eingegeben hat.
Allerdings ist jetzt der Befehl den ich im ReadingsProxy Device setzen muss set Kinderzimmer_Offset Kinderzimmer_Offset -1
es wird also der Device Name / Readings Name gedoppelt...
Bei mir funktioniert das ohne Verdoppelung
defmod Test123 readingsProxy MYSENSOR_2:percentage
attr Test123 setFn $ARGS
attr Test123 setList percentage:slider,0,1,100
attr Test123 sortby 2
attr Test123 webCmd percentage
Der Slider hinter Set springt zurück, das hängt am readingsProxy. In meinem Originaldevice wird dieser auch aktualisiert.
Den Slider kannst du im FHEMWEB, nicht im Device, direkt setzen. Das Set wird auto. ausgeführt.
Okay, aber du musst auch "set Test123 percentage 15" ausführen, also ein Kommando mehr als im originalen Device, dort wäre es nur "set percentage 15"?
Nein, ist immer 'set Device Kommando Wert'
Einmal set Originaldevice Kommando
Einmal set readingsProxy Kommando
Im readingsProxy wird das dann intern auf das Original umgesetzt.