Neuer Artikel: MQTT Einführung Teil 3 [Diskussionsthread]

Begonnen von Rince, 01 April 2017, 20:53:38

Vorheriges Thema - Nächstes Thema

Rince

Hier ist der dritte Teil der MQTT Einführung.
Ausgehend aus einem einfachen Arduino Sketch fügen wir den nötigen Code hinzu, um MQTT zu nutzen.
Dabei wird der originale Sketch gleich noch etwas verfeinert.

https://wiki.fhem.de/wiki/MQTT_Einführung_Teil_3

Wie immer bin ich dankbar für Lob und auch Kritik.

Wichtig:
Ich habe den Code (mangels Sensor) noch nicht getestet, er sollte aber funktionieren. Wenn wer mit einem passenden Sensor sich kurz die Mühe machen würde?
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

Heiner

Hi, erst mal vielen Dank fuer die Einfuehrung, sehr informativ und gut und bei mir klappt auch fast alles auf Anhieb.

Ich habe aber noch ein Problem beim Subscribe.

MQTT.fx zeigt mir Nachrichten an, ich bekomme diese aber nicht in ein fhem Device.

Dazu gibts ja 2 Wege, entweder als zusaetzliches Reading in ein bestehendes Device oder als dediziertes MQTT2 Device.

Ich habe 4 Meldungen die ich idealerweise einlese, daher wuerde ich ein dediziertes MQTT Device vorziehen. ( statt ein dummy device und die Bridge zu benutzen. Ist aber am Ende egal, beides klappt gleichermassen nicht.

MQTT.fx zeigt Meldungen in diesem Format

Zitatwatersystem/sensor/miflora_moisture/state/  und den entsprechenden Wert
watersystem/sensor/miflora_tempreature/state/  und den entsprechenden Wert
watersystem/sensor/miflora_illuminance/state/  und den entsprechenden Wert
watersystem/sensor/miflora_soil_conductivity/state/  und den entsprechenden Wert

im mqtt2device versuche ich eines der Werte (ersteinmal) so einzuzulesen, klappt aber nicht:
mqttSubscribe state:topic=watersystem/sensor/miflora_moisture/state/

Was mach ich falsch, wie geht das richtig?

Danke fuer die Hilfe.
Heiner
--------------------------------
fhem auf Pi3+
CUL 868MHz, Signalduino 434MHz, HM-CFG-USB
HM, THZ, Kostal, Somfy, Conbee, Pytonbinding, FritzBox, FTUI, MQTT2

Beta-User

Hallo Heiner,

zwischenzeitlich gibt es zwei Modulwelten: MQTT+MQTT_.* und MQTT2.* (letzteres mit der Ergänzung, dass auch MQTT_GENERIC_BRIDGE verwendet werden kann). Das ist bei diesem MQTT-Artikel eventuell noch nicht hinreichend berücksichtigt.

Du schreibst, du hast ein mqtt2device (ich unterstelle, dass ein Device mit TYPE=MQTT2_DEVICE gemeint ist?), und willst bei dem aber ein Attribut setzen, das zu MQTT_DEVICE gehört. Das klappt so nicht, bei einem MQTT2_DEVICE muß das in der readingList stehen.

Wenn du jetzt ein Device hast, das alle 4 topics abonniert, mußt du daraus dann je ein MQTT2_DEVICE machen, das nur ein Element aus der ursprünglichen readingList enthält.

Ist zwar hier ziemlich OT, aber wenn du nicht klarkommst, kannst du mal eine RAW-Definition von dem einen Device hier einstellen, dann kann ich das gerne einmal exemplarisch zeigen, wie das geht.

Ansonsten bin ich grade dabei, die MQTT-Artikel im Wiki insgesamt zu überarbeiten. An sich dachte ich, dass dieser Teil der Reihe (und auch Teil 2) keiner Überarbeitugn bedarf, aber das werde ich aus gegebenem Anlaß nochmal bei Gelegenheit hinterfragen ;D .
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

Heiner

Hi, danke fuer die schneele Rueckmeldung.

Ich meinte wirklich nur MQTT2 Device.

Ich habe einen Mosquitto Server installiert und per MQTT2_Client eingebunden
Ich habe autocreate darin versucht, es passiert aber nix und habs dann auch gleich wieder abgeschaltet.

Ich habe ein MQTT2_Device mit dem IODev auf meinen MQTT2-Client
Dann habe ich versucht per Attribute den Status meines MQTT2_Devices zu setzen, klappt leider nicht.




define myMQTT MQTT2_CLIENT 127.0.0.1:1883

define miflora MQTT2_DEVICE
attr miflora mqttSubscribe state:topic=watersystem/sensor/miflora_moisture/state/


Dann hab ich noch eine generic bridge und ein Dummy device damit gehts aber auch nicht:

define MQTTgeneric MQTT_GENERIC_BRIDGE
attrMQTTgeneric IODev my MQTT

define watersytem dummy
attr watersystem mqttSubscribe state:topic=watersystem/sensor/miflora_moisture/state/



Heiner
--------------------------------
fhem auf Pi3+
CUL 868MHz, Signalduino 434MHz, HM-CFG-USB
HM, THZ, Kostal, Somfy, Conbee, Pytonbinding, FritzBox, FTUI, MQTT2

Beta-User

Wenn mit aktiviertem autocreate nichts passiert, ist tendenziell irgendwas anderes faul, insbesondere solltest du dann mal mit einem externen tool (mosquitto_sub, z.B.) nachsehen, was dort auf der MQTT-Seite passiert.

Für MQTT2_DEVICE mußt du readingList nutzen, um bestimmte topics zu abbonieren, das von dir verwendete klappt damit nicht bzw. das ist was, was tendenziell durch MQTT_GENERIC_BRIDGE überhaupt erst zulässig wird. Egal wie, es ist in diesem Fall besser, "Bordmittel" zu nutzen (readingList).

Was die Konfiguration der MQTT_GENERIC_BRIDGE angeht, sieht das nach einer fehlerhaften Angabe beim IO aus (ein Leerzeichen?). Aber wie gesagt, eigentlich brauchst du die nicht.

Wenn du neu bei MQTT bist: Fange nochmal von vorne an und aktiviere den MQTT2_SERVER. Das macht vieles einfacher und ist für kleinere Installationen völlig ausreichend...
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

Heiner

Hi, richtig da waren ein paar Typos im Code, die hatte ich leider nur abgeschrieben und dabei die Fehler produziert.

Ich habe den Mosquito Server und der Laueft auch schin mit ein paar PUBLISH Messages aus FHEM ueber die MQTT Bridge, daher moechte ich jetzt nicht auf den MQTT2Server schwenken.

und daher sollte autocreate ja auch aus bleiben weil sonst mein publish direkt wieder ein Device erzeugen sollte, oder?

immerhin habe ich mein dummy nun hinbekommen:

attr watersystem mqttSubscribe moisture:topic=watersystem/sensor/miflora_moisture/state

liefert mir das reading moisture und den Wert dazu.



Heiner
--------------------------------
fhem auf Pi3+
CUL 868MHz, Signalduino 434MHz, HM-CFG-USB
HM, THZ, Kostal, Somfy, Conbee, Pytonbinding, FritzBox, FTUI, MQTT2