*gelöst* Arduino PubSubClient Sketch kann nicht von FHEM MQTT empfangen

Begonnen von lynckmeister, 14 September 2022, 22:15:51

Vorheriges Thema - Nächstes Thema

lynckmeister

Hallo,
ich habe einen Sketch mit der PubSubClient Lib gebaut. Über die Callback Methode will ich eine Nachricht von Fhem empfangen.
Ich habe dazu auch mit Subscribe das Topic entsprechend aboniert...

In Fhem verwende ich den MQTT2_Server ein MQTT2_Device wurde durch das Senden von Nachrichten automatisch angelegt:


mqttclient.setCallback(callback);
mqttclient.subscribe("cmnd");
mqttclient.publish("esp/MOINSEN", "Hello from ESP8266");



In meinem MQTT2_DEVICE habe ich mir eine setlist zum Testen mit den cmds on und off angelegt..
wenn ich im Server auf traffic anzeigen klicke sehe ich auch dass bei einem Klick auf den Webbutton wie erwartet ein cmd gesendet wird:


SENT: cmnd/esp/aus off\
SENT: cmnd/esp/an on






Internals:
   CFGFN     
   CID        ESP8266Client
   DEF        ESP8266Client
   FUUID      6320e44-f3f-c4df-52b-4e8d468aaf8cf70b
   IODev      MQTT2_FHEM_Server
   LASTInputDev MQTT2_FHEM_Server
   MQTT2_FHEM_Server_CONN MQTT2_FHEM_Server_192.168.x.xxx_62899
   MQTT2_FHEM_Server_MSGCNT 8
   MQTT2_FHEM_Server_TIME 2022-09-14 22:09:07
   MSGCNT     8
   NAME       MQTT2_ESP8266Client
   NR         231807
   STATE      on
   TYPE       MQTT2_DEVICE
   READINGS:
     2022-09-14 21:11:25   IODev           MQTT2_FHEM_Server
     2022-09-14 22:09:07   MOINSEN         Hello from ESP8266
     2022-09-14 22:09:47   state           on
     2019-10-21 12:57:00   temperature     22
Attributes:
   IODev      MQTT2_FHEM_Server
   readingList ESP8266Client:esp/MOINSEN:.* MOINSEN
   room       MQTT2_DEVICE
   setList    off:noArg cmnd/esp/aus off\
on:noArg cmnd/esp/an on



trotzdem wird meine Callback nie angesprungen, dh der ESP empfängt nix vom Arduino.. hab ich das falsch aboniert?! Ich komm hier nicht weiter...

Papa Romeo

Hatte mal ein ähnliches Problem, weil ich eine falsche PubSubClient Librarie Version nutzte.
...die richtige Lötspitzentemperatur prüft man zwischen Daumen und Zeigefinger.
...überlasse niemals etwas einer Software, das du hardwaremässig erreichen kannst.
...unvorsichtige Elektriker werden schnell zu leitenden Angestellten.
und...never change a running System...no Updates if not necessary

LuckyDay

setList    off:noArg cmnd/esp/aus off\
on:noArg cmnd/esp/an on

der \ hat in der setList nichts  zu suchen.
normale return reicht

ob das schon hilft k.A

lynckmeister

ahja stimmt ... habs korrigiert, hat aber nix gebracht ... man sah ja auch im Vorfeld, dass etwas gesendet wurde..

lynckmeister

#4
Zitat von: Papa Romeo am 14 September 2022, 22:36:46
Hatte mal ein ähnliches Problem, weil ich eine falsche PubSubClient Librarie Version nutzte.

ich habe die neuste Lib über die IDE installiert... werde mal ne ältere probieren ...


so habe mal die letzten zwei älteren probiert , aktuell ist ja 2.8.0 ... 2.7.0 und 2.6.0 bewirken keine Änderung... schätze es ist doch eher ein logischer Fehler in meiner Steuerung ...

lynckmeister

Hat denn keiner eine Idee warum ich keine Nachrichten von meinem FHEM empfangen kann ?

Beta-User

Vielleicht würde es helfen, wenn du den Sketch zeigen würdest. Nach dem, was du gezeigt hattest, ist "cmnd" der Topic, unter dem du was erwartest.
Abgesehen davon, dass das etwas wenig unterscheidungskräftig ist, machst du von FHEM aus auf diesen Topic halt kein publish, sondern auf was längeres...

An einen Fehler in der Arduino-lib glaube ich eher nicht, zumindest funktioniert die aktuelle Version mit meinem aktuellen Projekt.
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

Icinger

Du subscribest das Topic
cmnd

sendest aber auf das Topic
cmnd/esp/aus

Das ist ja nicht das selbe, also wird die Lib auch nicht darauf reagieren.

Du kannst allerdings mit einem Wildcard subsriben
cmnd/#
Dann bekommst du den Callback und musst es selbst auswerten.

Andere Möglichkeit wäre, direkt das ganze Topic zu subscriben, dann brauchst du die Auswertuing nicht. Das setzt aber halt voraus, dass du nur ein einzelnes Topic brauchst.

lg, Stefan
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

lynckmeister

sehr gut ... das werde ich nachher mal testen... an eine Wildcard hatte ich schon gedacht, ich war mir nicht sicher, ob man die bei MQTT braucht... kann man auch auf "alles" reagieren in dem man einfach nur "#" subscibed? Wie kann ich "das ganze topic" subcriben? Mir geht es erstmal einfach darum, dass ich wenigstens irgendwas empfange um zu sehen, dass die Verbindung klappt...

Beta-User

z.B.:
mqttclient.subscribe("cmnd/esp/aus");
Stellt sich die Frage, ob der branch "aus" sinnvoll ist, letztlich doppelst du halt die (ein/aus-) Aussage, die man auch einfach im payload finden könnte...
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

lynckmeister

so etwas blödes, ich habe in der Doku einfach übesehen, dass ich für den mqttclient auch noch die loop methode in loop() ausführen muss.... hrmpf.. jetzt gehts.. vielen dank für eure Hilfe!!


void loop() {
...
...

mqttclient.loop();
..
..
}