Mqtt zu iobroker

Hallo Forum,

ich kenn mich leider noch nicht so gut aus.

Im Moment bekomm ich diese Ausgabe aus dem Code unten:

{"id":"2","state":"Open","vBatt":"0","Temp":"0.00"}

damit kann ich in iobroker nichts anfangen.

void sensorMessageOverMQTT() {

Serial.println(myData.id);
String payload = "{";
payload += "\"id\":\"" + String(myData.id);
payload += "\",\"state\":\""+String(myData.state);
payload += "\",\"vBatt\":\""+String(myData.vBatt);
payload += "\",\"Temp\":\""+String(myData.Temp);
payload += "\"}";  
Serial.println(payload);

String topic = "Fensterkontakte/board/";           
    topic += String(myData.id);

  
  mqttPublish(topic.c_str(),payload);   
  //mqttPublish(topic.c_str(), String(myData.state));


}

Bräuchte aber die Werte so:

2
Open
0
0.00

Danke und Grüße
Olli

IOBroker sollte mit JSON umgehen können. Google mal danach.

Ansonsten für jedes Element ein Topic und dort das entsprechende veröffentlichen (publish)

Schau dir mal ArduinoJSON an. Über dein String gebastelt fragmentiert dein Speicher. ArduinoJSON kann den Speicher besser verwalten bis hin zu keiner fragmentierung.

Hallo Plumps,

das werde ich wohl nicht hinbekommen.
Bin ja leider nur Laie, was Programmieren angeht.

Wenn ich es so auftrenne:

Serial.println(myData.id);
String payload = "{";
payload += "\"id\":\"" + String(myData.id);
payload += "\"}";   
Serial.println(myData.state);
String payload1 = "{";
payload1 += "\",\"state\":\""+String(myData.state);
payload1 += "\"}";

bekomme ich das:
{"id": "1"}
{"state": "Closed"}

Die beiden Werte werden auch abwechselnd im Topic angezeigt.
Aber das Topic müsste ja erweitert werden. Da komme ich nicht weiter.
Das Topic sieht ja so aus:

Bild

So hätte ich es gerne:

Aus der Board ID wird ein Folder, in diesem sind die Variablen: Status, Temperatur, Akkuspannung.

Wäre toll wenn mir das jemand zeigt wie das geht.

Grüße
Olli

Ja dann ändere doch das Topic.

String topic = "Fensterkontakte/board/";           
  topic += String(myData.id);
  topic += „/whatever“;

Du kannst auch mehrere Topics erstellen, zusammensetzen.

Vielleicht arbeitest du dich mal in die MQTT Beispiele ein.

Hallo,

so ist es wie ich es wollte.

void sensorMessageOverMQTT() {

Serial.println(myData.id);
String payload = "{";
payload += "\"id\":\""+String(myData.id);
payload += "\"}";
String topic = "Fensterkontakte.Fenster.";  
    topic += String(myData.id);
    topic += ".ID";
delay(1000);
Serial.println(myData.state);
String payload1 = "{";
payload1 += "\"state\":\""+String(myData.state);
payload1 += "\"}";
String topic1 = "Fensterkontakte.Fenster.";  
    topic1 += String(myData.id);
    topic1 += ".Zustand";
delay(1000);
Serial.println(myData.vBatt);
String payload2 = "{";
payload2 += "\"vBatt\":\""+String(myData.vBatt);
payload2 += "\"}";
String topic2 = "Fensterkontakte.Fenster.";  
    topic2 += String(myData.id);
    topic2 += ".Batterie";
delay(1000);
Serial.println(myData.Temp);
String payload3 = "{";
payload3 += "\"Temp\":\""+String(myData.Temp);
payload3 += "\"}";
String topic3 = "Fensterkontakte.Fenster.";  
    topic3 += String(myData.id);
    topic3 += ".Temperatur";  
Serial.println(payload);
Serial.println(payload1);
Serial.println(payload2);
Serial.println(payload3);

    mqttPublish(topic.c_str(),payload);
   
    mqttPublish(topic1.c_str(),payload1);
    
    mqttPublish(topic2.c_str(),payload2);
   
    mqttPublish(topic3.c_str(),payload3);
}

Ob das die beste Lösung ist? Keine Ahnung.

Wer es besser kann, kann es mir ja zur Verfügung stellen. :wink:

Grüße
Olli

Da Topics sich eigentlich nicht zur Laufzeit ändern, könntest du sie dir als Konstanten halten. Schont den Arbeitsspeicher.

Da deine MQTT-Bibliothek (welche eigentlich?) Char-Arrays benötigt, würde ich auch diese nutzen statt String.

Um dir ein Beispiel aufzuzeigen bräuchte es Angaben wie Bibliothek etc. Am besten ein funktionierendes, kompilierbares Beispiel von dir, worauf man aufbauen kann. Ein Code-Schnipsel reicht da nicht.

Bei MQTT trennt man „Ordner“ mit / und nicht mit . Das hängt mit den Platzhaltern fürs abonnieren zusammen, wie zum Beispiel Wildcard usw. Vielleicht liest du dich dazu mal ein.

Hallo Plumps,

hier der ganze Sketch.

#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include <PubSubClient.h>
#include <EEPROM.h>
#include <ArduinoJson.h>

/* ------------------------ Change Me --------------------------------------- */

const char*     ssid              = "";
const char*     password          = "";
const char*     mqtt_server       = "";
const char*     mqtt_username     = "";
const char*     mqtt_password     = "";
bool            use_fahrenheit    = false;


/* ------------------------------------------------------------------ */

#ifdef DEBUG_FLAG
#define debug(x) Serial.print(x)
#define debugln(x) Serial.println(x)
#else
#define debug(x)
#define debugln(x)
#endif

/*--------------------------ADDED IN----------------------------------*/
unsigned long previousMillis = 0;
unsigned long interval = 30000;


/* ------------------------ Messages --------------------------------------- */

#define MESH_ID               6734922

typedef struct struct_message {
  int mesh_id;
  int id;
  char state[7];
  int vBatt;
  float Temp;
} struct_message;

struct_message myData;


//struct_message  msg;
uint8_t         incomingData[sizeof(struct struct_message)];
size_t          received_msg_length;

/* --------------------------- Wifi/MQTT ---------------------------------------------- */

WiFiClient    wifiClient;
#define       MQTT_MSG_SIZE    200
char          mqttTopic[MQTT_MSG_SIZE];
#define       MSG_BUFFER_SIZE  (50)
PubSubClient  mqttClient(wifiClient);

void initWiFi() {
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  WiFi.setAutoReconnect(true);
  WiFi.persistent(true);
  Serial.print("Connecting to WiFi ..");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print('.');
    delay(1000);
  }
  Serial.println(WiFi.localIP());
}

/* ############################ Setup ############################################ */

void setup() {

  Serial.begin(115200);
  initWiFi();
  Serial.print("RRSI: ");
  Serial.println(WiFi.RSSI());

/*  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  WiFi.setAutoReconnect(true);
  WiFi.persistent(true);
  while (WiFi.status() != WL_CONNECTED) {
    debug(".");
    delay(1000);
  }
  debug("IP address:\t");
  debugln(WiFi.localIP());*/

  mqttClient.setServer( mqtt_server, 1886 );
  String MAC = WiFi.macAddress(); 
  MAC.replace(":", "");

}

/* ############################ Loop ############################################# */

void loop() {

  wifiReconnect();            
  mqttReconnect();
  mqttClient.loop();

  if (Serial.available()) {
    received_msg_length = Serial.readBytesUntil('\n', incomingData, sizeof(incomingData));
    if (received_msg_length == sizeof(incomingData)) {  // got a msg from a sensor
      memcpy(&myData, incomingData, sizeof(myData));
      if ( myData.mesh_id == MESH_ID ) sensorMessageOverMQTT();
    }
  }
}


/* ############################ Sensors ############################################# */

void sensorMessageOverMQTT() {

Serial.println(myData.id);
String payload = "{";
payload += "\"id\":\""+String(myData.id);
payload += "\"}";
String topic = "Fensterkontakte.Fenster.";  
    topic += String(myData.id);
    topic += ".ID";
delay(1000);
Serial.println(myData.state);
String payload1 = "{";
payload1 += "\"state\":\""+String(myData.state);
payload1 += "\"}";
String topic1 = "Fensterkontakte.Fenster.";  
    topic1 += String(myData.id);
    topic1 += ".Zustand";
delay(1000);
Serial.println(myData.vBatt);
String payload2 = "{";
payload2 += "\"vBatt\":\""+String(myData.vBatt);
payload2 += "\"}";
String topic2 = "Fensterkontakte.Fenster.";  
    topic2 += String(myData.id);
    topic2 += ".Batterie";
delay(1000);
Serial.println(myData.Temp);
String payload3 = "{";
payload3 += "\"Temp\":\""+String(myData.Temp);
payload3 += "\"}";
String topic3 = "Fensterkontakte.Fenster.";  
    topic3 += String(myData.id);
    topic3 += ".Temperatur";  
Serial.println(payload);
Serial.println(payload1);
Serial.println(payload2);
Serial.println(payload3);

    mqttPublish(topic.c_str(),payload);
   
    mqttPublish(topic1.c_str(),payload1);
    
    mqttPublish(topic2.c_str(),payload2);
   
    mqttPublish(topic3.c_str(),payload3);
}

/* ################################# MQTT ########################################### */

void mqttPublish(String topic, String message) {
  Serial.println("Publish");
  if (!mqttClient.connected()) {
    mqttReconnect();
  }
  mqttClient.publish(topic.c_str(), message.c_str());    
}


void mqttReconnect() {
  Serial.println("Waiting for ESP-NOW Message");
  while (!mqttClient.connected()) {
    Serial.print("Attempting MQTT connection...");
    String clientId = "ESP-NOW-Board-";
    clientId += String(myData.id);

    if (mqttClient.connect(clientId.c_str(),mqtt_username, mqtt_password)) {               
      Serial.println("connected");
  } else {
      Serial.print("failed to connect to mqtt server, rc = ");
      Serial.print(mqttClient.state());
      Serial.println(" try again in 5 seconds");
            // Wait 5 seconds before retrying    
      delay(5000);
  }
 } 
}
/* ############################ ADDED THIS - SEE LOOP ############################################# */

void wifiReconnect()  {
  unsigned long currentMillis = millis();
  // if WiFi is down, try reconnecting every CHECK_WIFI_TIME seconds
  if ((WiFi.status() != WL_CONNECTED) && (currentMillis - previousMillis >=interval)) {
    Serial.print(millis());
    Serial.println("Reconnecting to WiFi...");
    WiFi.disconnect();
  //  WiFi.config(localIP, gateway, subnet, primaryDNS); //////////////////////////////////////////////// added on 11/15
    WiFi.begin(ssid, password);
    Serial.println(WiFi.localIP());
    //Alternatively, you can restart your board
    //ESP.restart();  /////////////////////////////////////////////////////////////////////////////////added back in 11/15
    Serial.println(WiFi.RSSI());
    previousMillis = currentMillis;
  }
}
  

Danke für den Link.

Grüße
Olli

Du hältst ja schon ein Char-Array für das MQTT Topic. Nutzen tust du es aber nicht.

...
#define       MQTT_MSG_SIZE    200
char          mqttTopic[MQTT_MSG_SIZE];
...

Dort ist ein schöner Ort dein Topic als Konstante zu hinterlegen. Dort liegt sie auch Zentral zum bearbeiten.
Bsp:

...
char          mqttTopic[200];                                       //<- Anpassen auf die maximale Länge
char          mqttPayload[100];                                     //<- Anpassen auf die maximale Länge
const char* baseTopic = "Fensterkontakte/Fenster.";
const char* idTopic = "/ID";
const char* stateTopic = "/Zustand";
const char* batterieTopic = "/Batterie";
const char* tempTopic = "/Temperatur";
...

Zusammenbauen kannst du dies einfach über die snprintf-Funktion

void sensorMessageOverMQTT() {
  Serial.println(myData.id);
  snprintf(mqttTopic,sizeof(mqttTopic),"%s%d%s",baseTopic,myData.id,idTopic);
  snprintf(mqttPayload,sizeof(mqttPayload),"{\"id\":\"%.d"\"}",myData.id);
  mqttclient.publish(mqttTopic,mqttPayload);
  delay(1000);           // Warum hier eigentlich ein delay?
  Serial.println(myData.state);
  snprintf(mqttTopic,sizeof(mqttTopic),"%s%d%s",baseTopic,myData.id,stateTopic);
  snprintf(mqttPayload,sizeof(mqttPayload),"{\"state\":\"%.s"\"}",myData.state);
  mqttclient.publish(mqttTopic,mqttPayload);
...

Da mqttTopic und mqttPayload immer den gleichen Speicher reservieren, kommt es zu keiner Fragmentierung des Arbeitspeichers.
Aber warum baust du dir den JSON händisch zusammen, zumal du ja ArduinoJSON eingebunden hast. Das händische zusammenbasteln ist halt sehr Fehleranfällig.

Hallo Plumbs,

habe es mal versucht umzusetzen, leider ohne Erfolg.

error: 'tempTopic' was not declared in this scope
187 | snprintf(mqttTopic,sizeof(mqttTopic),"%s%d%s",baseTopic,myData.id,tempTopic);
| ^~~~~~~~~

exit status 1

#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include <PubSubClient.h>
#include <EEPROM.h>
#include <ArduinoJson.h>

/* ------------------------ Change Me --------------------------------------- */

const char* ssid = "";
const char* password = "";
const char* mqtt_server = "";
const char* mqtt_username = "";
const char* mqtt_password = "";
bool use_fahrenheit = false;


/* ------------------------------------------------------------------ */

#ifdef DEBUG_FLAG
#define debug(x) Serial.print(x)
#define debugln(x) Serial.println(x)
#else
#define debug(x)
#define debugln(x)
#endif

/*--------------------------ADDED IN----------------------------------*/
unsigned long previousMillis = 0;
unsigned long interval = 30000;


/* ------------------------ Messages --------------------------------------- */

#define MESH_ID 6734922

typedef struct struct_message {
  int mesh_id;
  int id;
  char state[7];
  int vBatt;
  float Temp;
} struct_message;

struct_message myData;


//struct_message  msg;
uint8_t incomingData[sizeof(struct struct_message)];
size_t received_msg_length;

/* --------------------------- Wifi/MQTT ---------------------------------------------- */

WiFiClient wifiClient;


#define char mqttTopic[200];    //<- Anpassen auf die maximale Länge
char mqttPayload[100];  //<- Anpassen auf die maximale Länge
const char* baseTopic = "Fensterkontakte/Fenster.";
const char* idTopic = "/ID";
const char* stateTopic = "/Zustand";
const char* batterieTopic = "/Batterie";
const char* tempTopic = "/Temperatur";
#define MSG_BUFFER_SIZE (50)
PubSubClient mqttClient(wifiClient);


void initWiFi() {
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  WiFi.setAutoReconnect(true);
  WiFi.persistent(true);
  Serial.print("Connecting to WiFi ..");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print('.');
    delay(1000);
  }
  Serial.println(WiFi.localIP());
}

/* ############################ Setup ############################################ */

void setup() {

  Serial.begin(115200);
  initWiFi();
  Serial.print("RRSI: ");
  Serial.println(WiFi.RSSI());

  mqttClient.setServer(mqtt_server, 1886);
  String MAC = WiFi.macAddress();
  MAC.replace(":", "");
}

/* ############################ Loop ############################################# */

void loop() {

  wifiReconnect();
  mqttReconnect();
  mqttClient.loop();

  if (Serial.available()) {
    received_msg_length = Serial.readBytesUntil('\n', incomingData, sizeof(incomingData));
    if (received_msg_length == sizeof(incomingData)) {  // got a msg from a sensor
      memcpy(&myData, incomingData, sizeof(myData));
      if (myData.mesh_id == MESH_ID) sensorMessageOverMQTT();
    }
  }
}




void sensorMessageOverMQTT() {
  Serial.println(myData.id);
  snprintf(mqttTopic, sizeof(mqttTopic), "%s%d%s", baseTopic, myData.id,idTopic);
  snprintf(mqttPayload, sizeof(mqttPayload), "{\"id\":\"%.d"\"}", myData.id);
  mqttClient.publish(mqttTopic, mqttPayload);
  Serial.println(myData.state);
  snprintf(mqttTopic,sizeof(mqttTopic),"%s%d%s",baseTopic,myData.id,stateTopic);
  snprintf(mqttPayload,sizeof(mqttPayload),"{\"state\":\"%.s"\"}",myData.state);
  mqttclient.publish(mqttTopic,mqttPayload);
  Serial.println(myData.vBatt);
  snprintf(mqttTopic,sizeof(mqttTopic),"%s%d%s",baseTopic,myData.id,batterieTopic);
  snprintf(mqttPayload,sizeof(mqttPayload),"{\"state\":\"%.s"\"}",myData.vBatt);
  mqttclient.publish(mqttTopic,mqttPayload);
  Serial.println(myData.Temp);
  snprintf(mqttTopic,sizeof(mqttTopic),"%s%d%s",baseTopic,myData.id,tempTopic);
  snprintf(mqttPayload,sizeof(mqttPayload),"{\"state\":\"%.s"\"}",myData.Temp);
  mqttclient.publish(mqttTopic,mqttPayload);
}

//
/* ################################# MQTT ########################################### */

void mqttPublish(String topic, String message) {
  Serial.println("Publish");
  if (!mqttClient.connected()) {
    mqttReconnect();
  }
  mqttClient.publish(topic.c_str(), message.c_str());
}


void mqttReconnect() {
  Serial.println("Waiting for ESP-NOW Message");
  while (!mqttClient.connected()) {
    Serial.print("Attempting MQTT connection...");
    String clientId = "ESP-NOW-Board-";
    clientId += String(myData.id);

    if (mqttClient.connect(clientId.c_str(), mqtt_username, mqtt_password)) {
      Serial.println("connected");
    } else {
      Serial.print("failed to connect to mqtt server, rc = ");
      Serial.print(mqttClient.state());
      Serial.println(" try again in 5 seconds");
      // Wait 5 seconds before retrying
      delay(5000);
    }
  }
}
/* ############################ ADDED THIS - SEE LOOP ############################################# */

void wifiReconnect() {
  unsigned long currentMillis = millis();
  // if WiFi is down, try reconnecting every CHECK_WIFI_TIME seconds
  if ((WiFi.status() != WL_CONNECTED) && (currentMillis - previousMillis >= interval)) {
    Serial.print(millis());
    Serial.println("Reconnecting to WiFi...");
    WiFi.disconnect();
    //  WiFi.config(localIP, gateway, subnet, primaryDNS); //////////////////////////////////////////////// added on 11/15
    WiFi.begin(ssid, password);
    Serial.println(WiFi.localIP());
    //Alternatively, you can restart your board
    //ESP.restart();  /////////////////////////////////////////////////////////////////////////////////added back in 11/15
    Serial.println(WiFi.RSSI());
    previousMillis = currentMillis;
  }
}

Grüße
Olli

Zuhause, da konnte ich besser auf die Pirsch nach dem Fehler gehen.
So kompiliert es Fehlerfrei:

#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include <PubSubClient.h>
#include <EEPROM.h>
#include <ArduinoJson.h>

/* ------------------------ Change Me --------------------------------------- */

const char* ssid = "";
const char* password = "";
const char* mqtt_server = "";
const char* mqtt_username = "";
const char* mqtt_password = "";
bool use_fahrenheit = false;


/* ------------------------------------------------------------------ */

#ifdef DEBUG_FLAG
#define debug(x) Serial.print(x)
#define debugln(x) Serial.println(x)
#else
#define debug(x)
#define debugln(x)
#endif

/*--------------------------ADDED IN----------------------------------*/
unsigned long previousMillis = 0;
unsigned long interval = 30000;


/* ------------------------ Messages --------------------------------------- */

#define MESH_ID 6734922

typedef struct struct_message {
  int mesh_id;
  int id;
  char state[7];
  int vBatt;
  float Temp;
} struct_message;

struct_message myData;


//struct_message  msg;
uint8_t incomingData[sizeof(struct struct_message)];
size_t received_msg_length;

/* --------------------------- Wifi/MQTT ---------------------------------------------- */

WiFiClient wifiClient;


char mqttTopic[200];    //<- Anpassen auf die maximale Länge
char mqttPayload[100];  //<- Anpassen auf die maximale Länge
const char* baseTopic = "Fensterkontakte/Fenster.";
const char* idTopic = "/ID";
const char* stateTopic = "/Zustand";
const char* batterieTopic = "/Batterie";
const char* tempTopic = "/Temperatur";
#define MSG_BUFFER_SIZE (50)
PubSubClient mqttClient(wifiClient);


void initWiFi() {
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  WiFi.setAutoReconnect(true);
  WiFi.persistent(true);
  Serial.print("Connecting to WiFi ..");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print('.');
    delay(1000);
  }
  Serial.println(WiFi.localIP());
}

/* ############################ Setup ############################################ */

void setup() {

  Serial.begin(115200);
  initWiFi();
  Serial.print("RRSI: ");
  Serial.println(WiFi.RSSI());

  mqttClient.setServer(mqtt_server, 1886);
  String MAC = WiFi.macAddress();
  MAC.replace(":", "");
}

/* ############################ Loop ############################################# */

void loop() {

  wifiReconnect();
  mqttReconnect();
  mqttClient.loop();

  if (Serial.available()) {
    received_msg_length = Serial.readBytesUntil('\n', incomingData, sizeof(incomingData));
    if (received_msg_length == sizeof(incomingData)) {  // got a msg from a sensor
      memcpy(&myData, incomingData, sizeof(myData));
      if (myData.mesh_id == MESH_ID) sensorMessageOverMQTT();
    }
  }
}




void sensorMessageOverMQTT() {
  Serial.println(myData.id);
  snprintf(mqttTopic, sizeof(mqttTopic), "%s%d%s", baseTopic, myData.id, idTopic);
  snprintf(mqttPayload, sizeof(mqttPayload), "{\"id\":\"%.d\"}", myData.id);
  mqttClient.publish(mqttTopic, mqttPayload);
  Serial.println(myData.state);
  snprintf(mqttTopic, sizeof(mqttTopic), "%s%d%s", baseTopic, myData.id, stateTopic);
  snprintf(mqttPayload, sizeof(mqttPayload), "{\"state\":\"%.s\"}", myData.state);
  mqttClient.publish(mqttTopic, mqttPayload);
  Serial.println(myData.vBatt);
  snprintf(mqttTopic, sizeof(mqttTopic), "%s%d%s", baseTopic, myData.id, batterieTopic);
  snprintf(mqttPayload, sizeof(mqttPayload), "{\"state\":\"%.d\"}", myData.vBatt);
  mqttClient.publish(mqttTopic, mqttPayload);
  Serial.println(myData.Temp);
  snprintf(mqttTopic, sizeof(mqttTopic), "%s%d%s", baseTopic, myData.id, tempTopic);
  snprintf(mqttPayload, sizeof(mqttPayload), "{\"state\":\"%.f\"}", myData.Temp);
  mqttClient.publish(mqttTopic, mqttPayload);
}

//
/* ################################# MQTT ########################################### */

void mqttPublish(String topic, String message) {
  Serial.println("Publish");
  if (!mqttClient.connected()) {
    mqttReconnect();
  }
  mqttClient.publish(topic.c_str(), message.c_str());
}


void mqttReconnect() {
  Serial.println("Waiting for ESP-NOW Message");
  while (!mqttClient.connected()) {
    Serial.print("Attempting MQTT connection...");
    String clientId = "ESP-NOW-Board-";
    clientId += String(myData.id);

    if (mqttClient.connect(clientId.c_str(), mqtt_username, mqtt_password)) {
      Serial.println("connected");
    } else {
      Serial.print("failed to connect to mqtt server, rc = ");
      Serial.print(mqttClient.state());
      Serial.println(" try again in 5 seconds");
      // Wait 5 seconds before retrying
      delay(5000);
    }
  }
}
/* ############################ ADDED THIS - SEE LOOP ############################################# */

void wifiReconnect() {
  unsigned long currentMillis = millis();
  // if WiFi is down, try reconnecting every CHECK_WIFI_TIME seconds
  if ((WiFi.status() != WL_CONNECTED) && (currentMillis - previousMillis >= interval)) {
    Serial.print(millis());
    Serial.println("Reconnecting to WiFi...");
    WiFi.disconnect();
    //  WiFi.config(localIP, gateway, subnet, primaryDNS); //////////////////////////////////////////////// added on 11/15
    WiFi.begin(ssid, password);
    Serial.println(WiFi.localIP());
    //Alternatively, you can restart your board
    //ESP.restart();  /////////////////////////////////////////////////////////////////////////////////added back in 11/15
    Serial.println(WiFi.RSSI());
    previousMillis = currentMillis;
  }
}

Grundübel war ein #define.

#define char mqttTopic[200];    //<- Anpassen auf die maximale Länge

Warum fügst du dort ein #define ein? Macht keinen Sinn.
#define ist eine Präprozesordirektive. Also eine reine Textersetzung, bevor der Compiler kompiliert.

Gefolgt von ein paar Schreibfehlern, die du wahrscheinlich auch selber noch gefunden hättest. (mqttclient -> mqttClient);

Ein paar Warnungen zur Zuweisung vom falschen Typ.

Und das Handmade JSON hatte ein " an einer falschen Stelle. Ich sagte ja, fehleranfällig. Dafür gibt es eine schöne Bibliothek.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.