FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: -user- am 18 Dezember 2019, 21:15:16

Titel: Reading
Beitrag von: -user- am 18 Dezember 2019, 21:15:16
edit...
Titel: Antw:Reading auswerten / Dummy-Variable ändern
Beitrag von: Otto123 am 18 Dezember 2019, 21:23:32
Hi,

Du machst den Eventmonitor  (https://wiki.fhem.de/wiki/Event_monitor)auf
Setzt den Filter auf MQTT2_sonoffRF.*
wartest auf den Event mit 9B42A9 und erzeugst wie im Wiki beschrieben ein notify.

Den leeren Ausführungsteil {} in der DEF ersetzt Du mit dem Befehl Deiner Wahl, z.B. set dummy willi

Gruß Otto
Titel: Antw:Reading auswerten / Dummy-Variable ändern
Beitrag von: Otto123 am 18 Dezember 2019, 22:15:20
Ich verstehe deine Frage nicht ganz. Es gibt den (Beispiel)
$EVENT 1 zwei 3 vier 5 sechs sieben
Dann ist
$EVTPART0 1
$EVTPART1 zwei
$EVTPART2 3
$EVTPART3 vier
$EVTPART4 5
$EVTPART5 sechs
$EVTPART6 sieben

Du hast jetzt irgendwie Raw Def Code in die DEF kopiert, mach mal die DEF auf und streich die \ und ; raus. Die sind zuviel :)
Titel: Antw:Reading auswerten / Dummy-Variable ändern
Beitrag von: xenos1984 am 18 Dezember 2019, 22:43:01
Wenn nur auf einen bestimmten Wert getriggert werden soll, sollte das dann nicht auch einfacher gehen?

defmod ntest notify MQTT2_sonoffRF:RfReceived_Data:9B42A9 set MQTT2_DVES_531C04 on-for-timer 10

(Ungetestet.)
Titel: Antw:Reading auswerten / Dummy-Variable ändern
Beitrag von: Otto123 am 18 Dezember 2019, 22:46:50
Steht in der Doku:
Zitatin the command section you can access the event:
The variable $EVENT will contain the complete event, e.g. measured-temp: 21.7 (Celsius)
$EVTPART0,$EVTPART1,$EVTPART2,etc contain the space separated event parts (e.g. $EVTPART0="measured-temp:", $EVTPART1="21.7", $EVTPART2="(Celsius)". This data is available as a local variable in perl, as environment variable for shell scripts, and will be textually replaced for FHEM commands.
@xenos1984 Das war eigentlich auch mein Ansatz, da ist bestimmt zwischen dem Reading und dem Wert noch ein Leerzeichen: ;)
defmod ntest notify MQTT2_sonoffRF:RfReceived_Data:.9B42A9 set MQTT2_DVES_531C04 on-for-timer 10
Aber so wie fhempi es hat, kann man mehrere Geräte mit einem notify triggern
Titel: Antw:Reading auswerten / Dummy-Variable ändern
Beitrag von: Beta-User am 19 Dezember 2019, 07:33:53
Vielleicht noch ein paar Anmerkungen:

Da das "Eingangsdevice" ein MQTT2_DEVICE ist, kann man auch die Auswertung doppeln.
Du nimmst also einfach die Zeile aus der readingList, die automatisch erstellt wurde mit dem Ende "{json2nameValue($EVENT)}", kopierst die in eine weitere Zeile und rufst dann statt json2nameValue() eine eigene Funktion als myUtils-Routine auf (z.B. myRFanalyse($EVENT), siehe im Wiki "99_myUtils..."). Spart das notify, und (vor allem) man muß nicht die Konfiguration ändern, wenn man neue "Data"-Elemente hinzufügen will, sondern kann das in den myUtils-Code auslagern. (Es gibt dazu noch Ausbaustufen, um z.B. die betroffenen Geräte dann über dortige userAttr zu identifizieren...)

In der myUtils kannst du dann jedenfalls wieder  $EVENT analysieren und völlig beliebige Aktionen auslösen. Bein Interesse bitte melden, ist für Anfänger erst mal "nebulös", aber an sich recht einfach umzusetzen, wenn man mal verstanden hat, wie der Ablauf ist.

Will man nur bestimmte Data-Elemente als "on" bzw. "off" auswerten, kann man das auch direkt an einem eigenen MQTT2_DEVICE machen (aus dem OpenMQTTGateway-Code, geht aber für Tasmota genauso):
  BASE_ID/DEVNAME/433toMQTT:.* { $EVENT =~ m,..value..(ONCOMMANDREGEX)..protocol..\d..length..\d+..delay..\d+.,? {"state"=>"on"} : $EVENT =~ m,..value..(OFFCOMMANDREGEX)..protocol..\d..length..\d+..delay..\d+., ? {"state"=>"off"}:undef }
Für Tasmota teilweise (nur on) angepasst:
  TELETOPIC/RESULT:.* { $EVENT =~ m,..RfReceived....Sync..([A-Za-z0-9]+)..Low..([\d]+)..High..([\d]+)..Data...(9B42A9)...RfKey...([^"]+)..., ? {"state"=>"on"} : undef }
Titel: Antw:Reading auswerten / Dummy-Variable ändern
Beitrag von: Beta-User am 19 Dezember 2019, 10:49:27
Du solltest $EVENT mit übergeben, dann kannst du das später auf die von mir vorgeschlagene Variante direkt im MQTT2_DEVICE ändern; denn die Readings, die du abfragen willst, gibt es dann/zu dem Zeitpunkt uU. (noch) gar nicht...
Ansonsten würde ich fehlende Klammern als Problem ansehen (sollte auch im log stehen ;) ):

####################################
# notify - SonoffBridge            #
####################################
sub SonoffBridge($){
   my $tmp = shift @_; ;
   if ($tmp =~ /ED2EFE/) {fhem('set MQTT2_DVES_531C04 on-for-timer 10')};
}
Titel: Antw:Reading auswerten / Dummy-Variable ändern
Beitrag von: Beta-User am 19 Dezember 2019, 13:15:55
Zitat von: fhempi am 19 Dezember 2019, 10:35:13
EDIT:
Der Funktionsaufruf hatte einen Fehler gem. Log, so gehts jetzt:

defmod ntest notify MQTT2_sonoffRF:RfReceived_Data:.* IF (1) ({SonoffBridge()})
Sorry, wenn du was änderst, während jemand anders tippt, bekommt der das nicht mit...

Das IF ist Unsinn. So sollte es auch gehen:
defmod ntest notify MQTT2_sonoffRF:RfReceived_Data:.* {SonoffBridge()}
Aber wie gesagt: letztendlich fährst du m.E. besser, wenn du das direkt in MQTT2_DEVICE (mit $EVENT) aufrufst ohne Umweg über das notify.

[OT]
Lass bitte die "Leichenfledderei (https://forum.fhem.de/index.php/topic,19408.msg1003419.html#msg1003419)" sein, es macht in der Regel keinen Sinn, uralt-Threads wiederzubeleben
[/OT]