[MQTT2_Device] Autocreate - Splittung der Devices

Begonnen von Kermit20, 08 Januar 2020, 00:28:29

Vorheriges Thema - Nächstes Thema

Kermit20

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

RPi1: FHEM mit HMLAN und CUL Eigenbau: diverse Homematic Geräte; Technoline Temp/Feuchte 868 MHz // Schalsteckdosen 433 MHz
RPi2: FHEM mit Viessmann(optolink) mit VControl und 1W Sensoren
RPi3: Apache / Owncloud 9

OdfFhem

@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

Kermit20

#2
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
RPi1: FHEM mit HMLAN und CUL Eigenbau: diverse Homematic Geräte; Technoline Temp/Feuchte 868 MHz // Schalsteckdosen 433 MHz
RPi2: FHEM mit Viessmann(optolink) mit VControl und 1W Sensoren
RPi3: Apache / Owncloud 9

Kermit20

Lösung für alle nachlesenden:

([A-Za-z0-9]...*)

hat das Problem mit den _ in den Devicenamen gelöst.
RPi1: FHEM mit HMLAN und CUL Eigenbau: diverse Homematic Geräte; Technoline Temp/Feuchte 868 MHz // Schalsteckdosen 433 MHz
RPi2: FHEM mit Viessmann(optolink) mit VControl und 1W Sensoren
RPi3: Apache / Owncloud 9

Beta-User

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

OdfFhem

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

Beta-User

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

OdfFhem

@Beta-User

+ statt * könnte eine sinnvolle Optimierung sein.

Bin mir aber nicht sicher, ob es leere Topics geben kann ...

Beta-User

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