[gelöst] Reading state u Internal STATE liefern verschiedene Werte dummy

Begonnen von andies, 05 Februar 2019, 21:50:13

Vorheriges Thema - Nächstes Thema

andies

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?
FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

andies

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?
FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

KernSani

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
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Beta-User

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).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

andies

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?
FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Beta-User

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
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

andies

So, geklärt. Ich habe jetzt auch das Wiki (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?
FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Beta-User

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.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

krikan