Ich habe ein Verständnisproblem. Ich habe ein Gerät, dass selbst zwei Relais schaltet (Papa Romeos Eltako ist das):
Internals:
CFGFN
IODev Mosquitto
NAME Eltako
NR 282
STATE subscription acknowledged
TYPE MQTT_DEVICE
READINGS:
2019-02-05 21:34:00 switch1 off
2019-02-05 21:34:00 switch2 on
2019-02-05 21:43:33 transmission-state subscription acknowledged
message_ids:
publishSets:
switch1:
topic eltako/cmnd_1
values:
on
off
switch2:
topic eltako/cmnd_2
values:
on
off
sets:
switch1 on,off
switch2 on,off
subscribe:
eltako/switch_1
eltako/switch_2
subscribeExpr:
^eltako\/switch_1$
^eltako\/switch_2$
subscribeQos:
eltako/switch_1 0
eltako/switch_2 0
subscribeReadings:
eltako/switch_1:
cmd
name switch1
eltako/switch_2:
cmd
name switch2
Attributes:
IODev Mosquitto
publishSet_switch1 on off eltako/cmnd_1
publishSet_switch2 on off eltako/cmnd_2
stateFormat transmission-state
subscribeReading_switch1 eltako/switch_1
subscribeReading_switch2 eltako/switch_2
Das Gerät funktioniert und gibt in den Readings switch1 und switch2 auch den Zustand der Relais wieder.
Jetzt möchte ich zusätzlich über einen dummy den ersten switch noch einmal darstellen und steuern lassen. Dazu habe ich mir folgenden dummy definiert
Internals:
CFGFN
NAME FlurOben
NR 3403
STATE off
TYPE dummy
READINGS:
2019-02-05 21:34:00 state on
Attributes:
setList on off
stateFormat [Eltako:switch2]
webCmd on:off
der selbst über folgendes notify mit dem Eltako verbunden wird
Internals:
CFGFN
DEF FlurOben set Eltako switch2 $EVENT
NAME FlurOben_notify
NR 3402
NTFY_ORDER 50-FlurOben_notify
REGEXP FlurOben
STATE 2019-02-05 21:34:00
TRIGGERTIME 1549398840.78802
TYPE notify
READINGS:
2019-01-28 20:58:30 state active
Wie kann es sein, dass im dummy STATE und state unterschiedliche Werte aufweisen? Ich dachte stateFormat regelt, dass beide States geschaltet werden? Ist das nicht so?
könnte es sein, dass das cmd in devStateIcon sich am Internal STATE orientiert, der set-Befehl aber das Reading beeinflusst? Wieso sind beide nicht synchron?
stateFormat schreibt in STATE, beeinflusst aber nicht das reading state. Und ja, das devStateIcon orientiert sich an STATE. Aktualusiert werden beide bei einem Event am dummy.
Kurz, weil mobil
Für solche Anwendungsfälle vielleicht noch ein paar Anmerkungen:
- Entweder statt der Dummy's ReadingsProxy verwenden; damit kann man beliebige Readings als einzelnes Gerät darstellen, ohne groß weitere notify etc. drumrum bauen zu müssen.
- Oder eben gleich beide Kanäle als eigenes (MQTT)-Gerät anlegen; wer eine logische Verknüpfung zwischen diesen beiden Teilgeräten braucht (die dann auch bei "Probably associated with" angezeigt wird bzw. im Rahmen eines erweiterten list berücksichtigt), kann das Reading "associatedWith" entsprechend befüllen (das hat Rudi neulich im Zusammenhang mit MQTT2 eingeführt und wird z.B. auch beim Umbenennen aktualisiert).
Vielen Dank für die Hinweise, leider zieht das neue Fragen nach sich. Ich habe jetzt die notify und dummy herausgeworfen und versucht, durch ReadingsProxy zu ersetzen. Ich hatte auch mal den Wikipedia-Eintrag bearbeitet, aber Details noch nicht verstanden.
Das parent device ist MQTT und hat zwei set-Befehle
set Eltako switch1 on [oder off]
set Eltako switch2 on [oder off]
Mein ReadingsProxy für switch2 würde ich nun so definieren
Internals:
CFGFN
DEF Eltako:switch2
DEVICE Eltako
NAME FlurOben
NOTIFYDEV Eltako,global
NR 147381
NTFY_ORDER 50-FlurOben
READING switch2
STATE off
TYPE readingsProxy
CONTENT:
Eltako 1
READINGS:
2019-02-07 12:47:31 lastCmd on
2019-02-07 12:42:08 state off
Attributes:
devStateIcon on:ios-off-green:off off:ios-on:on offline:ios-setoff-fill:
setFn switch2 $CMD
setList on off
webCmd on:off
und das klappt aber nicht. Ich erhalte beim Drücken auf on die Fehlermeldung
ZitatUnknown argument on, choose one of switch1:on,off switch2:on,off
und die Icons erscheinen nicht.
Offensichtlich verstehe ich setFn nicht, ich finde dazu auch nichts nachvollziehbares in der commandref. Könnt Ihr nochmal drüberschauen?
Hmm,
ohne jetzt näher in der cref rumgelesen zu haben mal ein Beispiel, das bei mir funktioniert (MYSENSORS scheint (derzeit) keine setExtensions zu unterstützen, deswegen ist das statt mit toggle so gelöst; status_Pumpe ist eines von mehreren Schalter-Readings, das man an- und ausschalten kann):
defmod Pumpe_Zisterne readingsProxy MYSENSOR_95:status_Pumpe
attr Pumpe_Zisterne cmdIcon on:sani_sprinkling off:sani_water_tap
attr Pumpe_Zisterne devStateIcon on:sani_sprinkling off:sani_water_tap
attr Pumpe_Zisterne group Schalter
attr Pumpe_Zisterne icon sani_domestic_waterworks
attr Pumpe_Zisterne room Garten
attr Pumpe_Zisterne setFn {($CMD eq "on")?"status_Pumpe on":"status_Pumpe off"}
attr Pumpe_Zisterne setList on off
So, geklärt. Ich habe jetzt auch das Wiki (https://wiki.fhem.de/wiki/ReadingsProxy (https://wiki.fhem.de/wiki/ReadingsProxy)) angepasst, da ist das halbwegs schön erläutert.
Weiß jemand von Euch, ob man bei readingsproxy Wildcards verwenden kann? Und was $ARGS genau bedeutet? Sind das die Argumente des Befehls?
Hmm, ich hatte bisher ReadingsProxy eher als "Durchreiche-Device" verstanden, bei dem nur 1:1 irgendwas geht, nicht für mehrere andere Geräte. Oder was soll "wildcard" bedeuten?
Andererseits werden die Argumente (Schaltbefehle) eigentlich nur so durchgereicht, vermutlich ginge es auch, da Regex-Anweisungen reinzuschreiben. Aber das würde nach meinem Verständnis irgendwie gegen den Sinn des Ganzen laufen.
Möglicherweise habe ich die Optionen des ReadingsProxy aber auch noch nicht ganz durschaut.
Zu $ARGS kann ich nichts beitragen.
Vielleicht aber noch eine Anmerkung zu dieser Sache im Rahmen von MQTT(2): Hier macht m.E. das Anlegen eines nur durch das Reading verknüpften weiteren Devices (und das Löschen des Kanals im Schwester-Device) mehr Sinn; das ist einfach der direktere Weg und bietet mehr Flexibilität, da auch mehrere Readings "abgezweigt" werden können.
Zitat von: andies am 07 Februar 2019, 20:08:45
Und was $ARGS genau bedeutet? Sind das die Argumente des Befehls?
Ja.