2 Topic mit Arduino und MQTT

-->Jo....wenn was ist, nur her damit :wink:

Nach einiger tüftelei würde ich wieder einen Tipp benötigen.

--> Woran ich gerade scheitere:
Versuche den Wert für "led2Value" welchen ich aus dem pwmTable nehme über

        client.publish("led2", (led2Value)); // <-------- WRONG !!

zu senden - Nicht Seriell, das klappt.

Aktuelle Ausgabe: led2 Value

Hier mal mein Code - Mein Problem ist ziemlich am Schluss wo ich den 2. Taster abfrage.

#include <SPI.h>          // Serial Peripheral Interface
#include <Ethernet.h>     // Ethernet Bibliothek
#include <PubSubClient.h> // MQTT Bibliothek
#include <Bounce2.h>      // Tasten Entprellen

// Network parameters
byte mac[] = {  0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
IPAddress ip(10, 0, 0, 17);
IPAddress server(10, 0, 0, 98);

// Flag for button2
int flag = 0;

// PWM Index table
const byte pwmTable[9]={0, 2, 4, 8, 16, 32, 64, 128, 255}; // 9 brightness steps

// Set LED variables to digital/analog pins
int led1 = 6;
int led2 = 3;

// Set variable values & initially to LOW
int led1Value = LOW;
int led2Value = 0;

// Set button variables to digital/analog pins
int button1 = 7;
int button2 = 8;

// Initiate a bouncer instance for each button
Bounce bouncer1 = Bounce();
Bounce bouncer2 = Bounce();

// Initiate network instances
EthernetClient ethClient;
PubSubClient client(ethClient);

// Setup
void setup()
{
  // setup led, button, bouncer 1
  pinMode(led1, OUTPUT);
  pinMode(button1,INPUT);
  digitalWrite(button1,HIGH);
  bouncer1 .attach(button1);
  bouncer1 .interval(5);

  // setup led, button, bouncer 2
  pinMode(led2, OUTPUT);
  pinMode(button2,INPUT);
  digitalWrite(button2,HIGH);
  bouncer2 .attach(button2);
  bouncer2 .interval(5);

  // Setup serial connection
  Serial.begin(57600);
  
  // 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);
}

// Handle incoming MQTT messages
 void callback(char* topic, byte* payload, unsigned int length) {
// Serial.println(topic);

// ******************
  if ((strcmp(topic, "led") == 0) && (payload[0] == '1')) {
        led1Value = HIGH;
        Serial.println("1_On");
     }
  if ((strcmp(topic, "led") == 0) && (payload[0] == '0')) {
        led1Value = LOW;
        Serial.println("1_Off");
     }
  if ((strcmp(topic, "led2") == 0) && (payload[0] == '1')) {
   if (led2Value<sizeof(pwmTable)-1) {
    led2Value++;
    Serial.println("2_Heller");    
   }
}
  if ((strcmp(topic, "led2") == 0) && (payload[0] == '0')) {
   if (led2Value>0) {
    led2Value--;
    Serial.println("2_Off");
   }
}

  // Set digital pin states according to virtual switch settings
  digitalWrite(led1,led1Value);
  analogWrite(led2,pwmTable[led2Value]);
}

void reconnect() {
  // Repeat until connection is made
  while (!client.connected()) {
    Serial.print("MQTT Verbindungsaufbau...");
    // Connection attempt
    if (client.connect("arduinoClient")) {
      Serial.println("Erfolgreich verbunden!");
      // Messasge to outTopic
      client.publish("out","TimiArduino Online");
      // Subscride inTopic
      client.subscribe("led");  // subscribe to topic "led"
      client.subscribe("led2"); // subscribe to topic "led2"
    } else { // Error case => Message and new attempt
      Serial.print("Fehler, rc= ");
      Serial.print(client.state());
      Serial.println(" Neuer Versuch in 5 Sekunden");
      // 5 seconds pause
      delay(5000);
    }
  }
}

void loop()
{ 
// Listen for button interactions and take actions
// Button actions do send MQTT message AND do set led(x)Value to HIGH or LOW
  if (bouncer1.update()) {
    if (bouncer1.read() == HIGH) {
      if (led1Value == LOW) {
        led1Value = HIGH;
        client.publish("led","1");                
      } else {
        led1Value = LOW;
        client.publish("led","0");
      }
    }
  }  

  if (bouncer2.update()) {
    if (bouncer2.read() == HIGH) {
      if ((led2Value<sizeof(pwmTable)-1) && (flag == 0)) {
        led2Value++;
        int led2Value = led2Value;
        client.publish("led2", (led2Value)); // <-------- WRONG !!
        if (led2Value==sizeof(pwmTable)-1) {
         flag = 1;
        }
      } else {
        if ((led2Value>0) && (flag = 1)) {
         led2Value--;
         if (led2Value == 0) {
          flag = 0;
          }
        client.publish("led2","Dunkler");
      }
    }
  } 
 }

//-----------------------------------------------
  // Try until successful
  if (!client.connected()) {
    reconnect();
  }
  client.loop();
}

Also - Bin nicht mehr der Jüngste, hab auch wenig Foren Erfahrung - Deshalb
Sollten noch Infos benötigt werden bitte mir mitteilen.
Um hier keine Roman zu schreiben habe ich mich bis jetzt auch kurz gehalten, wenn genauere Erläuterung gewünscht sind was ich versuche umzusetzen auch bitte einfach mir mitteilen.


Danke Timi_Who