Forum

Bitte oder Registrieren, um Beiträge und Themen zu erstellen.

Funktion „client.publish()“ benötigt als payload explizit ein "array of char"

Hallo Edi

Die Funktion  „client.publish()“ in der PubSub Library Client scheint bei dem zu übergebenden Argument aber einwenig zickig zu sein. Der Sensor meiner Applikation liefert einen 1 Byte Wert den ich über UART des ESP8266 einlese. (Im Beispiel otto)

Hier mein aktuelles Beispiel:
……..
byte otto = 42;
char s_otto[4];

client.publish(outTopic, String(otto));  // Das funktioniert nicht // error: no matching function for call to 'PubSubClient::publish(const char [17], String)'
111 | client.publish(outTopic, String(otto));
|                                                       ^

client.publish(outTopic, "42");             // Das funktioniert

dtostrf(otto,3,0,s_otto);

// snprintf(s_otto, 4, "%d", otto);            Oder auch so
client.publish(outTopic, s_otto);           // Das funktioniert auch.

……..
Schön wäre es doch wenn man eine Byte oder Int mit der String() Funktion konvertiert übergeben könnte.
Hast Du dazu eine Idee?

Liebe Grüße
Axel

Steffen Wehner hat auf diesen Beitrag reagiert.
Steffen Wehner

Bei mir geht das mit der Anweisungsabfolge:

im Definitionsbereich:
char ZwischenspeicherHum[20];

im Loop:
String AnalogwertHum = String(sensor.getHumidity());
AnalogwertHum.toCharArray(ZwischenspeicherHum, 20);
connectToMQTT();
client.publish("Hum_41",ZwischenspeicherHum );

probier es mal so

Andreas

Steffen Wehner hat auf diesen Beitrag reagiert.
Steffen Wehner

Hallo Andreas

Vielen Dank.

Im Grunde macht meine Funktion snprintf(s_otto, 4, "%d", otto); des gleiche wie Deine AnalogwertHum.toCharArray(ZwischenspeicherHum, 20);

Eigentlich sollte die Funktion PubSubClient::publish(const char [17], String) da wo String steht auch einen solchen verarbeiten können.

Vielleicht kann Edi ja in einem seiner Videos mal darauf hinweisen, wie man einen Messwert "verwursten" muss, damit die Funktion ihn auch frisst. Das kann den Einen oder Anderen schon verwirren.

LG

Axel

 

 

Steffen Wehner hat auf diesen Beitrag reagiert.
Steffen Wehner