Frage zu MQTT und MQTT2

Begonnen von moonsorrox, 12 November 2018, 15:00:24

Vorheriges Thema - Nächstes Thema

Beta-User

Vielleicht verrätst du uns, was jetzt vorhanden ist. Nennt sich "list" und wäre für alle beteiligten Devices hilfreich.

Vielleicht reicht es auch, wenn du die neusten threads in diesem Bereich hier mal intensiver studierst. Dazu die commandref zu den beteiligten Modulen lesen. Und ggf. vorhandene Beispiele im wiki.....

So ist es nicht mal Kaffeesatz, was wir begutachten können!
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

moonsorrox

OK, ich habe natürlich viel gelesen... und bin dadurch etwas schluderig gewesen mit meinen Angaben.
Möchte hier meinen Erfolg etwas kommentieren... (bringt ja nichts wen ich sage es funktioniert) andere stehen irgendwann vor dem selben Problem.. ;)

Da mir auch einige Grundkenntnisse fehlen was MQTT2 betrifft ist es mal ganz gut gewesen sich da selbst durch zu ackern  ;)
Ich habe jetzt also als erstes den MQTT2_Server eingerichtet und da auch autocreate auf 1.
Da hat er natürlich sofort mein erstes Device erstellt und somit bin ich damit auch klar gekommen, soll heißen es funktioniert  ;)
Ich habe es etwas angepasst an meine Bedürfnisse (devStateIcon, eventMap, setList, webCmd) und nun ist es OK

Ich habe meine vorher genutzte Sonoff S20 dafür genommen.
Hier das list:
Internals:
   CFGFN      ./FHEM/System.cfg
   CID        OG_S20
   DEF        OG_S20
   DEVICETOPIC MQTT2_DVES_80F6D5
   IODev      m2server
   LASTInputDev m2server
   MSGCNT     51
   NAME       OG_S20_MQTT2
   NR         1375
   STATE      Aus
   TYPE       MQTT2_DEVICE
   m2server_MSGCNT 51
   m2server_TIME 2018-11-14 01:20:04
   READINGS:
     2018-11-14 01:08:46   LWT             online
     2018-11-14 01:20:04   POWER           OFF
     2018-11-14 01:20:04   Time            2018-11-14T01:20:04
     2018-11-14 01:20:04   Uptime          0T00:24:34
     2018-11-14 01:20:04   Vcc             3.152
     2018-11-14 01:20:04   Wifi_AP         1
     2018-11-14 01:20:04   Wifi_BSSId      9C:C7:A6:11:3E:A5
     2018-11-14 01:20:04   Wifi_Channel    11
     2018-11-14 01:20:04   Wifi_RSSI       38
     2018-11-14 01:20:04   Wifi_SSId       Rammstein3399
     2018-11-14 01:17:36   state           off
Attributes:
   IODev      m2server
   alias      OG TV Zimmer - Urlaub - S20
   devStateIcon Ein:message_socket_on2@crimson Aus:message_socket_off2@lightgreen
   eventMap   on:Ein off:Aus
   icon       message_socket@#0033cc
   readingList OG_S20:tele/OG_S20/LWT:.* LWT
OG_S20:cmnd/OG_S20/POWER:.* POWER
OG_S20:tele/OG_S20/INFO1:.* { json2nameValue($EVENT) }
OG_S20:tele/OG_S20/INFO2:.* { json2nameValue($EVENT) }
OG_S20:tele/OG_S20/INFO3:.* { json2nameValue($EVENT) }
OG_S20:stat/OG_S20/RESULT:.* { json2nameValue($EVENT) }
OG_S20:stat/OG_S20/POWER:.* POWER
OG_S20:tele/OG_S20/STATE:.* { json2nameValue($EVENT) }
   room       MQTT
   setList    on cmnd/OG_S20/POWER ON
off cmnd/OG_S20/POWER OFF
   webCmd     Ein:Aus


Hatte natürlich vergessen im Sonoff noch die MQTT-Einstellungen für den "Host" einzutragen der stand noch auf meinem aktuell genutzten System (geht natürlich dann nicht)  :-\
Habe auch die "client" Einstellung angepasst.
Jetzt habe ich ein Gerät erst einmal und kann alle anderen so langsam nachziehen, da ich doch einige Sonoffs habe
Ich hoffe andere haben ebenso Erfolg.

Eine Frage habe ich denoch, die anderen Sonoff Geräte arbeiten ja noch mit meinem "mosquitto" auf meinem Produktivsystem Intel-Nuc mit Fhem, dort kann ich doch ebenso einen MQTT" Server einrichten, oder..?



Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Beta-User

Wenn du auf dem Produktivsystem mosquitto am laufen hast, kannst du das auch - vorerst oder dauerhaft - so lassen.

Empfehlen würde ich aber, den mosquitto AUCH mit MQTT2_CLIENT an fhem anzubinden. Dann kannst du neue Devices als mqtt2-devices erstellen (autocreate funktioniert dann aber nicht/nicht so komfortabel) und bei Bedarf bestehende Devices auf mqtt2-device umstellen. Ob es dann noch Sinn macht, den mosquitto abzuschalten, musst du wissen bzw. kann später entscheiden werden; der Schritt, dann als IO für die mqtt2-devices statt mqtt2-client mqtt2-server zu nutzen ist recht klein....

Zur Klarstellung: Mqtt (das Modul) und mqtt2-client können gleichzeitig auf den mosquitto zugreifen.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

rudolfkoenig

#18
ZitatFür wäre wichtig zu wissen, was lege ich zuerst an und wie kann ich mein Gerät dazu bekommen das es auch schaltet.
Hier eine kurzes HOWTO aus meiner Sicht:

- MQTT2_SERVER anlegen (vmtl. mit Argument global)
- Attribut autocreate setzen
- MQTT-Sensor/Aktor anpassen (IP+Port), damit es mit der FHEM-MQTT2_SERVER Instanz Verbindung aufnimmt. Evtl. ClientId anpassen.
- FHEM legt eine MQTT2_DEVICE Instanz an, deren readingsList Attribut bei jedem Eintreffen einer unbekannten Nachricht erweitert wird. Je nach empfagenen Topic-Message wird entweder ein Reading angelegt, oder (wenn es JSON ist) eine Liste von Readings. Der Name der Instanz wird aus der gemeldeten clientId abgeleitet.
- wenn man Geraete hat, die ueber eine MQTT-Bridge (wie zigbee2mqtt) angebunden sind, dann setzt man in der angelegten MQTT2_DEVICE bridgeRegexp, daraufhin werden fuer die angebundenen Geraete neue MQTT2_DEVICE Instanzen angelegt, wenn eine Nachricht von diesen Geraeten ankommt.
- die Schaltbefehle muss man in der MQTT2_DEVICE Instanz per setList manuell angeben, dafuer muss man die Doku des Geraetes studieren, oder hier im Forum/Wiki suchen.

Vermutlich wird das noch vereinfacht:
- autocreate Attribut setzen entfaellt (da die Voreinstellung geaendert wird)
- in MQTT2_DEVICE wird man per "set device model XXX" Attribute wie setList und webCmd/etc setzen koennen, wenn das Geraet in der (zu erstellenden) template "Datenbank" vorhanden ist.

Wenn man statt MQTT2_SERVER mosquitto einsetzt, dann kann man MQTT2_CLIENT verwenden. In diesem Fall ist das vorgehen identisch zu MQTT2_SERVER, bis auf autocreate: MQTT2_CLIENT legt fuer direkt (nicht per bridge) angebundenen Geraete nur ein einziges MQTT2_DEVICE an, d.h. die Readings _aller_ MQTT-Geraete landet hier, und man muss die "richtigen" Instanzen samt readingsList selbst anlegen, und diese danach aus der readingsList der gemeinsamen MQTT2_DEVICE entfernen. Oder man setzt autocreate nicht, dann entfaellt dieses "Sammelgeraet".

moonsorrox

#19
Vielen Dank euch beiden, ich werde es jetzt so langsam angehen meine ganzen anderen Sonoffs in MQTT2 zu Switchen, da ich jetzt weiß wie es geht  ;)

ZitatIn diesem Fall ist das vorgehen identisch zu MQTT2_SERVER, bis auf autocreate: MQTT2_CLIENT legt fuer direkt (nicht per bridge) angebundenen Geraete nur ein einziges MQTT2_DEVICE an, d.h. die Readings _aller_ MQTT-Geraete landet hier, und man muss die "richtigen" Instanzen samt readingsList selbst anlegen, und diese danach aus der readingsList der gemeinsamen MQTT2_DEVICE entfernen.

genau diesen Fall hatte ich auch und war darüber etwas verwirrt, dass alle Geräte dort auftauchten, nur eben mein Gerät welches ich aktuell umstellen wollte, aber wie schon oben geschrieben hatte ich die IP schon geändert  :-\
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

moonsorrox

#20
Ein paar Fragen bleiben noch für mich...!
- Wenn ich in meinem alten FHEM ein MQTT2_Device anlege und ich trage den Broker von meinem alten FHEM (myBroker) ein, schaltet das Gerät nicht.
- den neuen MQTT2_Server (bei mir "m2server) im neuen Fhem kann ich von der alten Fhem Instanz nicht ansprechen, oder würde das gehen?
- einen weiteren MQTT2_Server kann ich im alten Fhem nicht anlegen da startet Fhem nicht mehr ist das normal?

das habe ich mit stateformat POWER gelöst
- und zu guter letzt eine Frage zum "devStatIcon" mit MQTT2, welches sich ändert wenn ich ein Gerät von der Weboberfläche schalte, aber wenn das Gerät automatisch oder am Gerät schaltet bekommt es die Anzeige in der Weboberfläche nicht mit, dass ging bei meinem MQTT vorher. Aber hier ist ja die Readinglist eine andere, dass habe ich noch nicht hinbekommen.

hier noch das aktuelle list, ich hatte die userattr aus meinem MQTT Gerät genommen aber das geht nicht
Internals:
   CFGFN      ./FHEM/System.cfg
   CID        DVES_80F6D5
   DEF        DVES_80F6D5
   DEVICETOPIC OG_S20_MQTT2
   IODev      m2server
   LASTInputDev m2server
   MSGCNT     79
   NAME       OG_S20_MQTT2
   NR         1379
   STATE      Aus
   TYPE       MQTT2_DEVICE
   m2server_MSGCNT 79
   m2server_TIME 2018-11-14 16:38:13
   READINGS:
     2018-11-14 12:18:29   Command         Unknown
     2018-11-14 11:10:19   FallbackTopic   OG_S20
     2018-11-14 11:10:19   GroupTopic      sonoffs
     2018-11-14 11:10:19   Hostname        OG_S20-5845
     2018-11-14 11:10:19   IPAddress       10.0.0.153
     2018-11-14 14:43:14   LWT             online
     2018-11-14 11:10:19   Module          Sonoff S2X
     2018-11-14 16:38:13   POWER           OFF
     2018-11-14 11:10:19   RestartReason   Power on
     2018-11-14 16:38:13   Time            2018-11-14T16:38:12
     2018-11-14 16:38:13   Uptime          0T03:15:37
     2018-11-14 16:38:13   Vcc             3.152
     2018-11-14 11:10:19   Version         6.3.0
     2018-11-14 11:10:19   WebServerMode   Admin
     2018-11-14 16:38:13   Wifi_AP         1
     2018-11-14 16:38:13   Wifi_BSSId      9C:C7:A6:11:3E:A5
     2018-11-14 16:38:13   Wifi_Channel    11
     2018-11-14 16:38:13   Wifi_RSSI       40
     2018-11-14 16:38:13   Wifi_SSId       Rammstein3399
     2018-11-14 16:35:06   state           off
Attributes:
   IODev      m2server
   alias      OG TV Zimmer - Urlaub - S20
   devStateIcon Ein:message_socket_on2@crimson Aus:message_socket_off2@#009933
   eventMap   on:Ein off:Aus
   icon       message_socket@#0033cc
   readingList DVES_80F6D5:tele/OG_S20/LWT:.* LWT
DVES_80F6D5:cmnd/OG_S20/POWER:.* POWER
DVES_80F6D5:tele/OG_S20/INFO1:.* { json2nameValue($EVENT) }
DVES_80F6D5:tele/OG_S20/INFO2:.* { json2nameValue($EVENT) }
DVES_80F6D5:tele/OG_S20/INFO3:.* { json2nameValue($EVENT) }
DVES_80F6D5:stat/OG_S20/RESULT:.* { json2nameValue($EVENT) }
DVES_80F6D5:stat/OG_S20/POWER:.* POWER
DVES_80F6D5:tele/OG_S20/STATE:.* { json2nameValue($EVENT) }
DVES_80F6D5:tele/OG_S20/LWT:.* LWT
DVES_80F6D5:tele/OG_S20/UPTIME:.* { json2nameValue($EVENT) }
   room       MQTT
   setList    on cmnd/OG_S20/POWER ON
off cmnd/OG_S20/POWER OFF
   subscribeReading_state DVES_80F6D5:stat/OG_S20/POWER
   subscribeReading_status DVES_80F6D5:tele/OG_S20/STATUS
   userattr   subscribeReading_state subscribeReading_status
   webCmd     Ein:Aus
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

mark79

>>- einen weiteren MQTT2_Server kann ich im alten Fhem nicht anlegen da startet Fhem nicht mehr ist das normal?

Hast du einen anderen Port genommen? MQTT läuft auf 1883 und wenn der schon von mosquitto-server belegt ist, dann kann es schon sein, das Fhem nicht startet.
Nimm einfach einen anderen Port. Ich hatte auch schon beide Zeitgleich laufen, also einmal den normalen mosquitto-server und MQTT2_Server mit einem anderen Port.
Rock64 4GB mit Debian Strech, FHEM im LXC, Sonoff Switches/Touch, HM Thermostate, HMUART/Zigbee2MQTT@MapleCUN, ESP RGBWW Wifi Controller, ESP8266 Door Sensor/Briefkastenwächter, BT CSL Stick, BT iTags, Alexa, FireTV, RPi2 mit Kodi, Xiaomi Vacuum v1/Smarthome Komponenten

hexenmeister

 Zwei MQTT Server machen im allgemeinen gar keinen Sinn.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

betateilchen

Zitat von: hexenmeister am 14 November 2018, 17:21:24
Zwei MQTT Server machen im allgemeinen gar keinen Sinn.

Zumindest nicht, wenn sie innerhalb einer einzigen FHEM Installation instanziiert werden.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Beta-User

ZitatEin paar Fragen bleiben noch für mich...!
- Wenn ich in meinem alten FHEM ein MQTT2_Device anlege und ich trage den Broker von meinem alten FHEM (myBroker) ein, schaltet das Gerät nicht
Wie trägst du einen Broker ein? Für ein 2-er Devices braucht man ein 2-er IO. Also mqtt2_Server oder mqtt2_client! Vermutlich steht das aber bereits hier im thread.

Bitte tue uns den Gefallen und schreibe zukünftig präziser, was du gemacht hast. Einfachste Möglichkeit: lists der beteiligten Geräte....
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

moonsorrox

Zitat von: hexenmeister am 14 November 2018, 17:21:24
Zwei MQTT Server machen im allgemeinen gar keinen Sinn.
normaler weise auch nicht, da ich aber gerade meine ganzen Geräte umstelle wollte ich den MQTT2_Server für die MQTT2_DEVIVE nutzen...

Zitat von: betateilchen am 14 November 2018, 17:40:09
Zumindest nicht, wenn sie innerhalb einer einzigen FHEM Installation instanziiert werden.
eben drum, ich kann ja von meinem alten Fhem aus den MQTT2_Server in meinem neuen Fhem nicht nutzen, zumindest habe ich es nicht hinbekommen

Zitat von: Beta-User am 14 November 2018, 17:50:53
Wie trägst du einen Broker ein? Für ein 2-er Devices braucht man ein 2-er IO. Also mqtt2_Server oder mqtt2_client! Vermutlich steht das aber bereits hier im thread.

Bitte tue uns den Gefallen und schreibe zukünftig präziser, was du gemacht hast. Einfachste Möglichkeit: lists der beteiligten Geräte....
ich hatte den alten (also mosquitto, heißt bei mir myBroker) eingetragen, aber das geht eben nicht (hast du mir ja schon beantwortet)  ;) und den neuen wie gesagt erreiche ich nicht, geht wohl auch nicht.
Welches list möchtest du, ich habe es doch eben angehangen.

Zitat von: mark79 am 14 November 2018, 17:18:57
Hast du einen anderen Port genommen?
das probiere ich jetzt mal...
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

hexenmeister

#26
Ich würde den mosquitto belassen und mit mqtt2_client darauf zugreifen.
Oder mit dem alten mqtt Modul auf den neuen Server zugreifen (und mosquitto entfernen).
Oder eben den mosquitto in bridge Modus mit dem MQTT2_SERVER verbinden.
Aber zwei Server parallel ohne Verbindung... Dann hast du auch zwei voneinander getrennte mqtt Netze. Ist das so gewollt?
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

moonsorrox

Zitat von: hexenmeister am 14 November 2018, 18:39:11
Ich würde den mosquitto belassen und mit mqtt2_client darauf zugreifen.
Oder mit dem alten mqtt Modul auf den neuen Server zugreifen (und mosquitto entfernen).
Oder eben den mosquitto in bridge Modus mit dem MQTT2_SERVER verbinden.
Aber zwei Server parallel ohne Verbindung... Dann hast du auch zwei voneinander getrennte mqtt Netze. Ist das so gewollt?
das hat ja eben nicht funktioniert, ich habe den myBroker (mosquitto) eingetragen in das MQTT2_DEVICE

Zitat von: hexenmeister am 14 November 2018, 18:39:11
Oder mit dem alten mqtt Modul auf den neuen Server zugreifen (und mosquitto entfernen).
Aber zwei Server parallel ohne Verbindung... Dann hast du auch zwei voneinander getrennte mqtt Netze. Ist das so gewollt?
nein keine 2 Server, das ist nur für den Moment damit die noch nicht umgeänderten Geräte weiterhin funktionieren.

Dann werde ich mal versuchen mit den alten Geräten auf den neuen MQTT2_Server zuzugreifen, dass hatte ich noch nicht probiert, aber wird der denn gefunden von den alten Geräten

Im neuen Fhem habe ich bisher keinen mosquitto drauf weil ich ja den MQTT2_Server habe  ;)
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

hexenmeister

Nein, nein, nein. Nicht devices mischen. Das geht nicht. Stattdessen temporär mit der mqtt io auf MQTT2_SERVER zugreifen. Ist keine performante Lösung, aber für die Umstellung reicht es.

Zitat
Im neuen Fhem habe ich bisher keinen mosquitto drauf weil ich ja den MQTT2_Server habe
Und was bewegt dich eine funktionierende Lösung durch eine weniger performante zu ersetzen?
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

moonsorrox

ZitatStattdessen temporär mit der mqtt io auf MQTT2_SERVER zugreifen. Ist keine performante Lösung, aber für die Umstellung reicht es.
ja genau mehr möchte ich ja nicht.

Welche ist denn die weniger performante Lösund.?
Ich dachte die MQTT2 Lösungen sind die neuen besseren.
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM