Hi @all,
Ich stelle nun seid einiger Zeit mein FHEM um und habe es nun um Tasmota, Shellys und Zigbee Devies [MQTT2_Server auf der FHEM Hauptinstanz] sowie einen MQTT_Client sowie mit MQTT_Generic_Bridge auf meiner zweiten FHEM Instanz erweitert. Nach Konfiguration der Devices (Tasmota etc.) bekomme ich durch den MQTT Server der Hauptinstanz klar definierte Devices angelegt, welche durch die Templates dann komplettiert werden können.
Meine Idee war nun nach den ersten Gehversuchen mit MQTT meine zweite FHEM Instanz mit MQTT und entsprechenden Publish's Daten (vorrangig Heizungsmesswerte) an die FHEM Hauptinstanz senden zu lassen. So habe ich mir weniger Aufwand gegenüber FHEM2FHEM erhofft.
Nach der Einrichtung des MQTT Clients sowie der Bridge, erhalte ich auch Daten welche ich konfiguriert habe auf meinem MQTT Server.
Mein Problem ist es nun, dass lediglich ein Device angelegt wird und ich das Splitting in einzelne Devices nicht hinbekomme.
Mein Ansatz war ... die Trennung der Devices von Hand zu erledigen indem ich sie anlege und die Readings zuweise... aber das bedingt das alle Readings einmal gesendet wurden zudem läuft der Autocreateprozesss weiter und ich hätte die Daten doppelt vorliegen.
Ich habe zur Veranschaulichung ein List meines Sammeldevices angehangen sowie meine Konfiguration.
Im Sammeldevice werden meine 1 Wire Temperatursensoren immer wieder überschrieben, das das selbe Reading - State und zusammen mit meinem Brenner sowie anderen Daten zusammengeworfen.
MQTT Client: Internals:
BUF
DEF 192.168.178.xx:1883
DeviceName 192.168.178.xx:1883
FD 5
FUUID 5e1e-149d-d2a8b77fa40933b6
NAME MQTT_CLINET2
NR 73
PARTIAL
STATE opened
TYPE MQTT2_CLIENT
WBCallback
clientId FHEMslaveRPi
lastMsgTime 1578438624.13153
nextOpenDelay 5
READINGS:
2020-01-06 13:47:04 state opened
Attributes:
DbLogExclude .*
clientId FHEMslaveRPi
mqttForward none
MQTT Bridge:
Internals:
FUUID 5e125488720a-cf14a70c2ee2b6af
IODev MQTT_CLINET2
NAME Bridge_FHEMmqttGeneric
NR 74
NTFY_ORDER 50-Bridge_FHEMmqttGeneric
STATE dev: 2 in: 61398 out: 6251
TYPE MQTT_GENERIC_BRIDGE
devspec .*
prefix mqtt
CHANGED:
incoming-count: 61397
incoming-count: 61398
READINGS:
2020-01-06 13:46:47 device-count 2
2020-01-08 00:14:10 incoming-count 61398
2020-01-08 00:13:56 outgoing-count 6251
2020-01-08 00:13:56 transmission-state outgoing publish sent
2020-01-06 13:46:47 updated-reading-count 0
2020-01-06 13:46:47 updated-set-count 0
devices:
:global:
:defaults:
pub:qos 0
pub:retain 1
sub:qos 2
sub:retain 1
TMP1W_Vitocell_int:
:publish:
*:
mode R
topic {"$device/$reading"}
Vitodens200:
:publish:
*:
mode R
topic {"$device/$reading"}
globalDeviceExcludes:
globalReadingExcludes:
globalTypeExcludes:
pub:
FHEMWEB *
Global *
MQTT transmission-state
MQTT_BRIDGE transmission-state
MQTT_DEVICE transmission-state
MQTT_GENERIC_BRIDGE *
telnet *
sub:
FHEMWEB *
Global *
MQTT transmission-state
MQTT_BRIDGE transmission-state
MQTT_DEVICE transmission-state
MQTT_GENERIC_BRIDGE *
telnet *
Attributes:
DbLogExclude .*
IODev MQTT_CLINET2
globalDefaults sub:qos=2 pub:qos=0 retain=1
stateFormat dev: device-count in: incoming-count out: outgoing-count
Autocreate Device:
Internals:
CFGFN
CID FHEMslaveRPi
DEF FHEMslaveRPi
DEVICETOPIC MQTT2_FHEMslaveRPi
FUUID 5e125e
IODev IODev_MQTT2_Server
IODev_MQTT2_Server_MSGCNT 8927
IODev_MQTT2_Server_TIME 2020-01-08 00:22:50
LASTInputDev IODev_MQTT2_Server
MSGCNT 8927
NAME MQTT2_FHEMslaveRPi
NR 51889
STATE T: 44.937
TYPE MQTT2_DEVICE
READINGS:
2020-01-08 00:18:56 Brenner off
2020-01-07 21:36:37 BrennerLeistung 0
2020-01-07 21:24:32 BrennerStarts 14013
2020-01-08 00:00:53 BrennerStartsDayStart 14013.00
2020-01-08 00:00:53 BrennerStartsLastDay 10.00
2020-01-08 00:03:38 BrennerStartsToday 0.00
2020-01-07 21:33:35 BrennerStunden 8247.93
2020-01-08 00:00:56 BrennerStundenDayStart 8247.93
2020-01-08 00:00:56 BrennerStundenLastDay 9.00
2020-01-08 00:03:39 BrennerStundenToday 0.00
2020-01-07 21:36:58 Speicherladepumpe off
2020-01-08 00:15:13 Temp-Abgas 49.5
2020-01-08 00:21:07 Temp-Aussen 9.2
2020-01-07 22:00:04 Temp-Aussen-gedaempft 8.7
2020-01-08 00:18:23 Temp-Kessel-Ist 43
2020-01-08 00:21:25 Temp-Kessel-Soll 22.8
2020-01-08 00:21:16 Temp-WarmWasser-Ist 45.1
2020-01-08 00:22:50 UpdateTime 2020-01-08_00:22:49
2020-01-07 22:01:09 Urlaub-Betrieb off
2020-01-07 22:00:54 Zirkulationspumpe_2 off
2020-01-08 00:22:45 state T: 44.937
2020-01-05 23:25:55 subscriptions #
Attributes:
DbLogExclude .*
IODev IODev_MQTT2_Server
readingList FHEMslaveRPi:FHEMslave/Vitodens200/UpdateTime:.* UpdateTime
FHEMslaveRPi:FHEMslave/Vitodens200/Temp-Abgas:.* Temp-Abgas
FHEMslaveRPi:FHEMslave/Vitodens200/Temp-WarmWasser-Ist:.* Temp-WarmWasser-Ist
FHEMslaveRPi:FHEMslave/Vitodens200/Temp-Kessel-Ist:.* Temp-Kessel-Ist
FHEMslaveRPi:FHEMslave/Vitodens200/Temp-Kessel-Soll:.* Temp-Kessel-Soll
FHEMslaveRPi:FHEMslave/Vitodens200/Temp-Aussen:.* Temp-Aussen
FHEMslaveRPi:FHEMslave/Vitodens200/Brenner:.* Brenner
FHEMslaveRPi:Vitodens200/Temp-Abgas:.* Temp-Abgas
FHEMslaveRPi:Vitodens200/Temp-Kessel-Ist:.* Temp-Kessel-Ist
FHEMslaveRPi:Vitodens200/Temp-Kessel-Soll:.* Temp-Kessel-Soll
FHEMslaveRPi:Vitodens200/UpdateTime:.* UpdateTime
FHEMslaveRPi:Vitodens200/Temp-Aussen:.* Temp-Aussen
FHEMslaveRPi:Vitodens200/Temp-WarmWasser-Ist:.* Temp-WarmWasser-Ist
FHEMslaveRPi:TMP1W_Vitocell_int/state:.* state
FHEMslaveRPi:Vitodens200/BrennerLeistung:.* BrennerLeistung
FHEMslaveRPi:Vitodens200/BrennerStarts:.* BrennerStarts
FHEMslaveRPi:Vitodens200/BrennerStartsToday:.* BrennerStartsToday
FHEMslaveRPi:Vitodens200/Brenner:.* Brenner
FHEMslaveRPi:Vitodens200/Speicherladepumpe:.* Speicherladepumpe
FHEMslaveRPi:Vitodens200/BrennerStunden:.* BrennerStunden
FHEMslaveRPi:Vitodens200/BrennerStundenToday:.* BrennerStundenToday
FHEMslaveRPi:Vitodens200/Temp-Aussen-gedaempft:.* Temp-Aussen-gedaempft
FHEMslaveRPi:Vitodens200/BrennerStundenLastDay:.* BrennerStundenLastDay
FHEMslaveRPi:Vitodens200/BrennerStundenDayStart:.* BrennerStundenDayStart
FHEMslaveRPi:Vitodens200/BrennerStartsLastDay:.* BrennerStartsLastDay
FHEMslaveRPi:Vitodens200/BrennerStartsDayStart:.* BrennerStartsDayStart
FHEMslaveRPi:Vitodens200/Zirkulationspumpe_2:.* Zirkulationspumpe_2
FHEMslaveRPi:Vitodens200/Urlaub-Betrieb:.* Urlaub-Betrieb
room MQTT2_DEVICE
MQTT SERVER:
Internals:
CONNECTS 29
DEF 1883 global
FD 10
FUUID 5de65-f775-178fbabaee7eaa19
NAME IODev_MQTT2_Server
NR 67
PORT 1883
STATE Initialized
TYPE MQTT2_SERVER
READINGS:
2020-01-08 00:16:40 RETAIN {gekürzt 0 2123161","FHEMslave/sysmonRPiSlave/stat_cpu0_diff":"201 0 26 5508 2 0 30","FHEMslave/sysmonRPiSlave/stat_cpu0_percent":"3.49 0.00 0.45 95.51 0.03 0.00 0.52","FHEMslave/sysmonRPiSlave/stat_cpu0_text":"user: 3.49 %, nice: 0.00 %, sys: 0.45 %, idle: 95.51 %, io: 0.03 %, irq: 0.00 %, sirq: 0.52 %","FHEMslave/sysmonRPiSlave/stat_cpu1":"1145717 0 2555036 594556366 56957 0 2387","FHEMslave/sysmonRPiSlave/stat_cpu1_diff":"70 0 37 5951 0 0 0","FHEMslave/sysmonRPiSlave/stat_cpu1_percent":"1.16 0.00 0.61 98.23 0.00 0.00 0.00","FHEMslave/sysmonRPiSlave/stat_cpu1_text":"user: 1.16 %, nice: 0.00 %, sys: 0.61 %, idle: 98.23 %, io: 0.00 %, irq: 0.00 %, sirq: 0.00 %","FHEMslave/sysmonRPiSlave/stat_cpu2":"1055376 0 5614177 589764045 62688 0 602","FHEMslave/sysmonRPiSlave/stat_cpu2_diff":"9 0 71 5973 0 0 0","FHEMslave/sysmonRPiSlave/stat_cpu2_percent":"0.15 0.00 1.17 98.68 0.00 0.00 0.00","FHEMslave/sysmonRPiSlave/stat_cpu2_text":"user: 0.15 %, nice: 0.00 %, sys: 1.17 %, idle: 98.68 %, io: 0.00 %, irq: 0.00 %, sirq: 0.00 %","FHEMslave/sysmonRPiSlave/stat_cpu3":"955617 0 2202828 595318406 35640 0 525","FHEMslave/sysmonRPiSlave/stat_cpu3_diff":"11 0 9 6056 0 0 0","FHEMslave/sysmonRPiSlave/stat_cpu3_percent":"0.18 0.00 0.15 99.67 0.00 0.00 0.00","FHEMslave/sysmonRPiSlave/stat_cpu3_text":"user: 0.18 %, nice: 0.00 %, sys: 0.15 %, idle: 99.67 %, io: 0.00 %, irq: 0.00 %, sirq: 0.00 %","FHEMslave/sysmonRPiSlave/stat_cpu_diff":"291 0 143 23488 2 0 30","FHEMslave/sysmonRPiSlave/stat_cpu_percent":"1.21 0.00 0.60 98.05 0.01 0.00 0.13","FHEMslave/sysmonRPiSlave/stat_cpu_text":"user: 1.21 %, nice: 0.00 %, sys: 0.60 %, idle: 98.05 %, io: 0.01 %, irq: 0.00 %, sirq: 0.13 %","FHEMslave/sysmonRPiSlave/uptime":"5992163","FHEMslave/sysmonRPiSlave/uptime_text":"69 days, 08 hours, 29 minutes","TMP1W_Vitocell_int/state":"T: 45.312","Vitodens200/Brenner":"off","Vitodens200/BrennerLeistung":"0","Vitodens200/BrennerStarts":"14013","Vitodens200/BrennerStartsDayStart":"14013.00","Vitodens200/BrennerStartsLastDay":"10.00","Vitodens200/BrennerStartsToday":"0.00","Vitodens200/BrennerStunden":"8247.93","Vitodens200/BrennerStundenDayStart":"8247.93","Vitodens200/BrennerStundenLastDay":"9.00","Vitodens200/BrennerStundenToday":"0.00","Vitodens200/Speicherladepumpe":"off","Vitodens200/Temp-Abgas":"49.5","Vitodens200/Temp-Aussen":"9","Vitodens200/Temp-Aussen-gedaempft":"8.7","Vitodens200/Temp-Kessel-Ist":"43.5","Vitodens200/Temp-Kessel-Soll":"23.4","Vitodens200/Temp-WarmWasser-Ist":"45.5","Vitodens200/UpdateTime":"2020-01-08_00:13:56","Vitodens200/Urlaub-Betrieb":"off","Vitodens200/Zirkulationspumpe_2":"off","tele/sonoff/LWT":"Online","zigbee2mqtt/bridge/config":"{\u0022version\u0022:\u00221.8.0\u0022,\u0022commit\u0022:\u0022da4d26a\u0022,\u0022coordinator\u0022:{\u0022type\u0022:\u0022zStack12\u0022,\u0022meta\u0022:{\u0022transportrev\u0022:2,\u0022product\u0022:0,\u0022majorrel\u0022:2,\u0022minorrel\u0022:6,\u0022maintrel\u0022:3,\u0022revision\u0022:20190608}},\u0022log_level\u0022:\u0022info\u0022,\u0022permit_join\u0022:false}","zigbee2mqtt/bridge/state":"online"}
2020-01-06 13:47:04 nrclients 11
2020-01-04 01:23:04 state Initialized
clients:
#####gekürzt ######
retain:
#### gekürzt #####
FHEMslave/sysmonRPiSlave/stat_cpu0_text:
ts 1578260428.71915
val user: 3.49 %, nice: 0.00 %, sys: 0.45 %, idle: 95.51 %, io: 0.03 %, irq: 0.00 %, sirq: 0.52 %
FHEMslave/sysmonRPiSlave/stat_cpu1:
ts 1578260428.70513
val 1145717 0 2555036 594556366 56957 0 2387
FHEMslave/sysmonRPiSlave/stat_cpu1_diff:
ts 1578260428.72256
val 70 0 37 5951 0 0 0
FHEMslave/sysmonRPiSlave/stat_cpu1_percent:
ts 1578260428.7434
val 1.16 0.00 0.61 98.23 0.00 0.00 0.00
FHEMslave/sysmonRPiSlave/stat_cpu1_text:
ts 1578260428.73988
val user: 1.16 %, nice: 0.00 %, sys: 0.61 %, idle: 98.23 %, io: 0.00 %, irq: 0.00 %, sirq: 0.00 %
####gekürzt######
val 45.5
Vitodens200/UpdateTime:
ts 1578438836.31054
val 2020-01-08_00:13:56
Vitodens200/Urlaub-Betrieb:
ts 1578430869.5688
val off
Vitodens200/Zirkulationspumpe_2:
ts 1578430854.47438
val off
tele/sonoff/LWT:
ts 1578097388.12678
val Online
zigbee2mqtt/bridge/config:
ts 1578097385.07326
val {"version":"1.8.0","commit":"da4d26a","coordinator":{"type":"zStack12","meta":{"transportrev":2,"product":0,"majorrel":2,"minorrel":6,"maintrel":3,"revision":20190608}},"log_level":"info","permit_join":false}
zigbee2mqtt/bridge/state:
ts 1578097385.89309
val online
Attributes:
DbLogExclude .*
autocreate complex
icon mqtt_broker
room MQTT2_DEVICE
@Kermit20
Ich nutze ebenfalls MQTT_GENERIC_BRIDGE zum "Weiterbefördern" relevanter Informationen von den Nebensystemen zum Hauptsystem.
Das Trennen der vom Nebensystem angelieferten Informationen übernimmt dabei das Attribut bridgeRegexp eines allgemeinen MQTT2_DEVICEs auf dem Hauptsystem.
Im aufgeführten Beispiel wird dabei aus einem Nebensystem2-SYSMON-Device RaspberrySysMon ein Hauptsystem-MQTT2_DEVICE MQTT2_mgb2_RaspberrySysMon.
"Nebensystem" / MQTT_GENERIC_BRIDGE (manuell angelegt)
attr <MQTT_GENERIC_BRIDGE> globalDefaults base=SmartHome/MqttGenericBridge2
"Nebensystem" / SYSMON (manuell angelegt)
attr RaspberrySysMon mqttPublish fhemstarttime|fhemuptime_text|fs_root|ram|starttime|swap:topic={"$base/$device/$name"}
"Hauptsystem" / allgemeines MQTT2_DEVICE (manuell angelegt)
attr MQTT2_myMqttServer bridgeRegexp \
SmartHome/MqttGenericBridge2/([A-Za-z0-9]*)/.*:.* "mgb2_$1"\
"Hauptsystem" / SYSMON vom Nebensystem (automatisch angelegt)
defmod MQTT2_mgb2_RaspberrySysMon MQTT2_DEVICE mgb2_RaspberrySysMon
attr MQTT2_mgb2_RaspberrySysMon IODev myMqttServer
attr MQTT2_mgb2_RaspberrySysMon readingList \
SmartHome/MqttGenericBridge2/Raspberry8SysMon/ram:.* ram\
SmartHome/MqttGenericBridge2/Raspberry8SysMon/fhemuptime_text:.* fhemuptime_text\
SmartHome/MqttGenericBridge2/Raspberry8SysMon/fhemstarttime:.* fhemstarttime\
SmartHome/MqttGenericBridge2/Raspberry8SysMon/starttime:.* starttime\
SmartHome/MqttGenericBridge2/Raspberry8SysMon/swap:.* swap\
SmartHome/MqttGenericBridge2/Raspberry8SysMon/fs_root:.* fs_root
attr MQTT2_mgb2_RaspberrySysMon room MQTT2_DEVICE
Danke für deine ausführliche Hilfe. Was bei mir gefehlt hat war die "base" Definition sowie eine Bridge mit dem entsprechenden Filter bridgeRegexp \
SmartHome/MqttGenericBridge2/([A-Za-z0-9]*)/.*:.* "mgb2_$1"\
Das Autocreate hat nach den Anpassungen dann auch funktioniert. Die letzte Herausforderung ist nun, dass ich auf dem Slavesystem Namen mit einem Underscore habe und diese abgeschnitten werden. Experimente mit der RegEx Definition hatten bisher noch keinen Erfolg.
Da dieser Matchingparameter [([A-Za-z0-9]*)] bei den Underscores aufhört bei der Deviceerstellung, habe ich eine Wildcard [.*] genutz... ist aber nicht effektiv, da alle Radings in einem Device landen
Lösung für alle nachlesenden:
([A-Za-z0-9]...*)
hat das Problem mit den _ in den Devicenamen gelöst.
Du kannst das evtl. einfacher haben:
([^/]+)
(Will heißen: "alles was mindestens ein Zeichen ist, solange das kein Schrägstrich ist").
(Es werden ja sowieso nur gültige Namensbestandteile geliefert, da die Namen aus FHEM kommen, dann sollte das auch kein Problem geben).
[OT] Interessanter Thread übrigens, denke, er wäre ein Link aus den "Praxisbeispielen" oder einem anderen der MQTT-Artikel im Wiki Wert...
@Kermit20
Deine Lösung hebelt eigentlich alle Einschränkungen aus; nur das erste Zeichen unterliegt dem begrenzen Zeichenvorrat.
([A-Za-z0-9]...*)
Die Punkte dürften übrigens dazu führen, dass ein kurzer Device-Name wie WC Probleme macht ...
Die naheliegendste Lösung wäre sicherlich die Erweiterung des Zeichenvorrats um das fehlende Zeichen:
([A-Za-z0-9_]*)
Als Freund einer Positivliste würde ich auch diese Variante bevorzugen, da sie u.a. als Kopiervorlage für das Behandeln von MQTT-Nachrichten aus Nicht-FHEM-Quellen verwendet werden kann.
Im Spezialfall FHEM-Quelle wäre die Negativliste von @Beta-User aber natürlich trotzdem eine zielführende Lösung - halt Geschmackssache.
Die Positivliste wäre auch ok, würde das aber "wenigstens" mit mind. einem Zeichen machen:
([A-Za-z0-9_]+)
Die Einschränkung der Negativliste mit den gültigen Namen (da Datenquelle=FHEM) hatte ich ja erwähnt; soweit ich das im Kopf habe, macht MQTT2_DEVICE aber auch aus an sich ungültigen Bestandteilen irgendwas verwertbares, sollte jemand eine andere Datenquelle verwenden, die die Einschränkungen so nicht kennt...
@Beta-User
+ statt * könnte eine sinnvolle Optimierung sein.
Bin mir aber nicht sicher, ob es leere Topics geben kann ...
Zitat von: OdfFhem am 09 Januar 2020, 17:26:50
Bin mir aber nicht sicher, ob es leere Topics geben kann ...
Da bin ich mir auch nicht sicher, aber es gibt soviele Clients, die man verwenden kann, dass ich sicher bin, dass es auch einen user gibt, der das "falsch" macht, wenn es irgendwie mit irgendeinem von denen möglich ist... ::) ;D ;D ;D