Ich habe einen IRBlaster und diesen wie folgt definiert:
defmod IRBlaster MQTT2_DEVICE DVES_xxxxxx
attr IRBlaster IODev mqttServer
attr IRBlaster autocreate 0
attr IRBlaster readingList DVES_xxxxxx:tele/IRBlaster/LWT:.* state\
DVES_xxxxxx:tele/IRBlaster/STATE:.* { json2nameValue($EVENT, 'STATE_', $JSONMAP) }\
DVES_xxxxxx:tele/IRBlaster/RESULT:.* {IrReceived=>$EVENT}
attr IRBlaster room MQTT2_DEVICE
setstate IRBlaster 2019-03-18 17:24:58 IrReceived {"IrReceived":{"Protocol":"SONY","Bits":15,"Data":"542A"}}
In dem Reading "IrReceived" möchte ich nun nur den "inneren Teil" stehen haben.
{"Protocol":"SONY","Bits":15,"Data":"542A"}
Wie muss ich das im Attribut readingList definieren?
Ich wuerde den Ausdruck mit json2nameValue parsen und die readings mit jsonMap umbenennen oder ausblenden.
Es gibt aber bestimmt noch viele Alternativen.
json2nameValue bricht das ganze zu weit auf, dann muss ich es wieder zusammensetzen.
Habe mir nun mit
DVES_xxxxxx:tele/IRBlaster/RESULT:.* {IrReceived=>encode_json(decode_json($EVENT)->{IrReceived})}
beholfen.
Moin zusammen,
dank igami und TomLee "lebt" jetzt also mein erstes Tasmota-Device ;) .
Hier mal meine RAW-Definition, soweit hier interessant:
defmod MQTT2_DVES_8BABA9 MQTT2_DEVICE DVES_8BABA9
attr MQTT2_DVES_8BABA9 IODev MQTT2_FHEM_Server
attr MQTT2_DVES_8BABA9 readingList tele/tasm_8BABA9/LWT:.* LWT\
cmnd/tasm_8BABA9/POWER:.* POWER\
tele/tasm_8BABA9/INFO1:.* { json2nameValue($EVENT) }\
tele/tasm_8BABA9/INFO2:.* { json2nameValue($EVENT) }\
tele/tasm_8BABA9/INFO3:.* { json2nameValue($EVENT) }\
stat/tasm_8BABA9/RESULT:.* { json2nameValue($EVENT) }\
stat/tasm_8BABA9/POWER:.* POWER\
tele/tasm_8BABA9/STATE:.* { json2nameValue($EVENT) }\
tele/tasm_8BABA9/RESULT:.* { $EVENT =~ m,..IrReceived....Protocol...([A-Za-z0-9]+)...Bits..([\d]+)..Data...([A-Za-z0-9]+)..., ? {"$1_$2"=>$3} : json2nameValue($EVENT) }\
tele/tasm_8BABA9/UPTIME:.* { json2nameValue($EVENT) }
attr MQTT2_DVES_8BABA9 room MQTT2_DEVICE
attr MQTT2_DVES_8BABA9 setList irsend:textField cmnd/tasm_8BABA9/irsend {"Protocol":"$EVTPART1","Bits":$EVTPART2,"Data":"0x$EVTPART3"}
Was macht das:
Alle "IrReceived"-JSON-Blobs werden nicht über json2nameValue() ausgewertet, sondern landen jeweils in einem eigenen Reading, dessen Name aus dem Protokoll und der Anzahl der Bits zusammengesetzt ist. So bekommt (fast) jedes Gerät ein eigenes Reading.
Man kann damit direkt beliebige Codes senden, indem man einfach sowas wie
set <device> irsend NEC 32 5EA1B847
verwendet. (Evtl. wäre die Anzahl der Wiederholungen optional noch eine gute Sache).
Damit sollte es dann wieder relativ einfach in das remotecontrol-Format zu übersetzen sein, ohne jedesmal die "Langform" in JSON verwenden zu müssen.
Hoffe, das hilft weiter :) .
(Das wiki aktualisiere ich bei Gelegenheit entsprechend, die Tasmota-Geschichte gefällt mir besser als meine gemoddete firmware).