NEWS
MQTT überträgt Wert nicht zum ESP32
-
Ich habe eine Verbindung zwischen ioBroker und einem ESP32 hergestellt.
Beim ioBroker läuft dei MQTT-Instanz.
Beim ESP32 greife ich per "EspMQTTClient client" darauf zu.
So weit so Gut.
Alles wurde bis Dato einwandfrei übertragen, bis auf eine Neue Sache die ich eingefügt habe.Per Blockly habe ich den Datenpunkt des MQTT gefüllt und hoffte das das an den ESp32 übertragen würde.
Das passiert aber irgendwie nicht.Ich habe beim Blockly folgenden Eintrag geschrieben :
Ich beschreibe also die Beiden Datenpunkte "ESP32_TFT ....." mit Den Inhalten und habe am Schluss noch ein CR eingefügt (Sonst hatte ich Probleme das zu übertragen an Anderer Stelle).
Hier sind die zugehörigen Datenpunkte:
Die beiden Datenpunkte sind schon mit Inhalt gefüllt der aber nicht übertragen wird.
Wenn ich diese Inhalte Händisch (Über den Schreibstift) eintrage und mit einem CR abschließe so wird der Inhalt sofort zum ESP32 übertragen.
Wo liegt da der Fehler ?
Was habe ich im Blockly vergessen oder wo muss ich noch etwas konfigutieren? -
@berges01 woher kommt der Datenpunkt? hast du den selbst angelegt? Wenn ja, wie?
-
Der Datenpunkt wurde Automatisch angelegt nach dem ich diesen im ESP32 aufgerufen habe.
//------------------- Daten vom MQTT abholen und zuordnen --------------------- //----------------------------------------------------------------------------- void onConnectionEstablished() { // Für Werte Display //................... client.subscribe("ESP32_TFT_Display/intopic/Innentemperatur", [](const String & payload) {Innentemperatur = payload;}); client.subscribe("ESP32_TFT_Display/intopic/Aussentemperatur", [](const String & payload) {Aussentemperatur = payload;}); client.subscribe("ESP32_TFT_Display/intopic/InnenFeuchte", [](const String & payload) {InnenFeuchte = payload;}); client.subscribe("ESP32_TFT_Display/intopic/AussenFeuchte", [](const String & payload) {AussenFeuchte = payload;}); client.subscribe("ESP32_TFT_Display/intopic/Regenmenge", [](const String & payload) {Regenmenge = payload;}); client.subscribe("ESP32_TFT_Display/intopic/Regenmenge_24", [](const String & payload) {Regenmenge_24 = payload;}); client.subscribe("ESP32_TFT_Display/intopic/Windgeschwindigkeit", [](const String & payload) {Windgeschw = payload;}); client.subscribe("ESP32_TFT_Display/intopic/Windboeen", [](const String & payload) {Windboe = payload;}); client.subscribe("ESP32_TFT_Display/intopic/CO2Innen", [](const String & payload) {CO2Innen = payload;}); // Für Störungs Display //..................... client.subscribe("ESP32_TFT_Display/intopic/Stoermeldung_Zeile1", [](const String & payload) {Stoermeldung_Z1 = payload;}); client.subscribe("ESP32_TFT_Display/intopic/Stoermeldung_Zeile2", [](const String & payload) {Stoermeldung_Z2 = payload;}); client.subscribe("ESP32_TFT_Display/intopic/Stoermeldung_Zeile3", [](const String & payload) {Stoermeldung_Z3 = payload;}); client.subscribe("ESP32_TFT_Display/intopic/Stoermeldung_Zeile4", [](const String & payload) {Stoermeldung_Z4 = payload;}); // Für Batterie Display //...................... client.subscribe("ESP32_TFT_Display/intopic/Batterie_ID", [](const String & payload) {Batterie_ID = payload;}); client.subscribe("ESP32_TFT_Display/intopic/Batterie_Restladung", [](const String & payload) {Batterie_Restladung = payload;}); // Publish a message to "mytopic/test" client.publish("ESP32_TFT_Display/outtopic/Reaktion",Reaktions_Flag ); // You can activate the retain flag by setting the third parameter to true } //-----------------------------------------------------------------------------
Hier ist der Aufruf.
-
@berges01 sagte in MQTT überträgt Wert nicht zum ESP32:
const String
Arghh, Arduino Programmierung ist schon einen Moment her ...
Also in den Beispielen die ich auf die schneller gefunden habe ist die Definition des Subscribe Befehls so:
Du hast also den Pfad angegeben und bei QoS nichts.
Wenn ich das richtig lese muss die Wertabfrage per Callback erledigt werden:
Woher hast du die Schreibweise wie du es machst?
-
Ich habe dieses hier als Vorlage benutzt.
Prinzipiel müßte es funktionieren da eine Händische Eingabe ja sofort übertragen wird.
Daraus habe ich gefolgert das der Blockly da einen Fehler hat. -
@berges01 jetzt sehe ich den Fehler. Du musst Steuere nehmen um die Datenpunkte zu befüllen, nicht Aktualisiere.
Wen ich das richtig verstanden habe müssen wir (und unsere Skripte) immer steuere nehmen. Der Adapter selbst übernimmt dann den Wert und "refreshed" den Wert noch mal mit Aktualisieren. Sprich wenn du schon Aktualisieren nimmst denkt der Adapter er hätte schon alles erledigt. -
@bananajoe
Oh Ha Natürlich !
Über alle hatte ich Steuern, nur da Aktualisiere !
So etwas Dämliches !Jetzt ist alles OK und die Meldung kommt Zeitnah an.
Danke für die Hilfe !