Mein Python-Code zum versenden der mqtt-Daten und Brocker läuft auf einem Rapberry.
Auf dem Raspberry kann ich mit, mosquitto_sub -t "soc" -v ,den Wert sehen. "soc 50"
Meine ersten Schritte in Richtung auf dem Arduino mqtt sehen so aus.
Serial funktioniert schon.
Nur meine Ausgaben ``` Serial.print("SOC : "(char)mqttclient.read());
kommen nicht.
Auf der Python-Seite habe ich die Pausen heraus genommen.
Dann kommt etwas auf der Arduino Seite.
Topic-Länge ist dann 5, was ja (soc 50) sein sollte. Also 5 Zeichen.
Mit der Adresse vom Brocker kommt er scheinbar nicht zurecht. Bin von IP auf Hostname umgestiegen.
Frage muss der Client also der Arduino zeitgleich mit dem Brocker sein?
Get das gesendete von Python -> Brocker ------ Arduino verloren, oder speichert der Brocker bis zur nächsten Abfrage?
Mann oder Frau benutze mqttclient.poll(); damit regelmäßig abgefragt wird.
Man benutze mqttclient.subscribe(topic); und eventuell mqttclient.onMessage(onMqttMessage);
#include <ArduinoMqttClient.h>
#include <Ethernet.h>
//Ethernet
IPAddress ip(192, 168, 178, 29);
const char hostname[] = "optasolar";
EthernetClient lanclient;
MqttClient mqttclient(lanclient);
const char broker[] = "solaranzeige";
int port = 1883;
const char topic[] = "soc";
void setup() {
Serial.begin(9600);
// Ethernet
Ethernet.setHostname(hostname);
Ethernet.begin();
// Connect to MQTT broker
mqttclient.connect(broker, 1883);
mqttclient.subscribe("soc");
// set the message receive callback
mqttclient.onMessage(onMqttMessage);
}
void loop() {
mqttclient.poll();
delay(1000);
}
void onMqttMessage(int messageSize) {
// we received a message, print out the topic and contents
Serial.print("Received a message with topic '");
Serial.print(mqttclient.messageTopic());
Serial.print("', length ");
Serial.print(messageSize);
Serial.println(" bytes:");
// use the Stream interface to print the contents
while (mqttclient.available()) {
Serial.print((char)mqttclient.read());
}
Serial.println();
Serial.println();
}