Hallo!
Da meine Haussteuerung in die Jahre gekommen ist - Sie läuft noch mit der guten alten "C-Control"
bin ich gerade am Modernisieren ![]()
Mein problem an dem ich schon ein weilchen kaue:
Ich habe 2 Topics "led" und "led2"
Die Led mit dem Topic "led" und dem payload "1on" bzw "1off" funktioniert
Die zweite Led in dem ich versuche mittels dem Topic zu steuern will nicht ?!
Ich erwähne es mal obwohl wahrscheinlich klar erkennbar. Sind meine ersten Berührungen mit Arudino und MQTT . . . .
Hier mal der Code
#include <SPI.h> // Serial Peripheral Interface
#include <Ethernet.h> // Ethernet Bibliothek
#include <PubSubClient.h> // MQTT Bibliothek
// Parameter für Ihr Netzwerk ein:
byte mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
IPAddress ip(10, 0, 0, 17);
IPAddress server(10, 0, 0, 98);
// Set LED variables to Aruino digital pins
const int led1 = 6;
const int led2 = 3;
// Handle and convert incoming MQTT messages ----------------------------------------
void callback(char* topic, byte* payload, unsigned int length) {
// handle message arrived
String content="";
char character;
for (int num=0;num<length;num++) {
character = payload[num];
content.concat(character);
}
Serial.println(topic);
Serial.println(content); // message sent out by button actions is returned from broker and serial printed
// This Work
if (content == "1on") {
Serial.println(topic);
digitalWrite(led1, HIGH);
}
if (content == "1off") {
digitalWrite(led1, LOW);
}
// This Not
if (topic == "led2") {
Serial.print("Changing GPIO 3 to ");
if (content == "2on"){
digitalWrite(led2, HIGH);
Serial.println("2_On");
}
else if(content == "0"){
digitalWrite(led2, LOW);
Serial.print("Off");
}
}
}
EthernetClient ethClient;
PubSubClient client(ethClient);
void reconnect() {
// Solange wiederholen bis Verbindung wiederhergestellt ist
while (!client.connected()) {
Serial.print("MQTT Verbindungsaufbau...");
//Verbindungsversuch:
if (client.connect("arduinoClient")) {
Serial.println("Erfolgreich verbunden!");
// Nun versendet der Arduino eine Nachricht in outTopic ...
client.publish("out","TimiArduino Online");
// und meldet sich bei inTopic für eingehende Nachrichten an:
client.subscribe("led");
client.subscribe("led2");
} else { // Im Fehlerfall => Fehlermeldung und neuer Versuch
Serial.print("Fehler, rc= ");
Serial.print(client.state());
Serial.println(" Neuer Versuch in 5 Sekunden");
// 5 Sekunden Pause vor dem nächsten Versuch
delay(5000);
}
}
}
void setup()
{
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
Serial.begin(57600);
// Broker erreichbar über ip-Adresse = server, port = 1883
client.setServer(server, 1883); // Adresse des MQTT-Brokers
client.setCallback(callback); // Handler für eingehende Nachrichten
// Ethernet-Verbindung aufbauen
Ethernet.begin(mac, ip);
// Kleine Pause
delay(1500);
}
void loop()
{
// Solange probieren bis es klappt:
if (!client.connected()) {
reconnect();
}
client.loop();
}
Vielen Dank - Timi