Hauptmenü

Reading

Begonnen von -user-, 18 Dezember 2019, 21:15:16

Vorheriges Thema - Nächstes Thema

-user-

edit...

Otto123

Hi,

Du machst den Eventmonitor 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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Otto123

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 :)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

xenos1984

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.)

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Beta-User

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 }
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

Beta-User

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')};
}
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

Beta-User

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" sein, es macht in der Regel keinen Sinn, uralt-Threads wiederzubeleben
[/OT]
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