// https://github.com/256dpi/arduino-mqtt
//--------------------------------------------------
// Includes:
#include <WiFi.h>
#include <MQTT.h>
//--------------------------------------------------
// Globals:
WiFiClient wifinetwork;
MQTTClient mqttclient;
//--------------------------------------------------
void setup() {
  //---
  // Init USART:
  Serial.begin(115200);
  //---
  // WiFi: Mit WiFi verbinden
  // - SSID: Wokwi-GUEST
  // - KEY: (leeres Passwort)
  WiFi.begin("Wokwi-GUEST", "");
  Serial.print("Connecting to WiFi ...");
  // WiFi: Warten bis verbunden...
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(250);
  }
  Serial.println(" done");
  //---
  // MQTT: Init Network-Client
  mqttclient.begin(wifinetwork);
  // MQTT: Init Broker-Name
  mqttclient.setHost("public.cloud.shiftr.io");
  Serial.print("Connecting to MQTT-Broker ...");
  // MQTT: Mit Broker verbinden...
  // - Client-ID: BBW_ESP32_LP2 (Frei wählbar)
  // - User-Name: public (für public-Broker von shiftr.io)
  // - User-Password: public (für public-Broker von shiftr.io)
  while (mqttclient.connect("BBW_ESP32_LP2", "public", "public") == false) {
    Serial.print(".");
    delay(250);
  }
  Serial.println(" done");
  // MQTT: Subscribe
  mqttclient.subscribe("BBW/IOT/MQTT/TEST");
  // MQTT: Callback Funktion
  mqttclient.onMessage(messageReceived);
}
//--------------------------------------------------
void loop() {
  //---
  // MQTT: CPU-Zeit für Client (senden und empfangen)
  mqttclient.loop();
  //---
  // Nur bei Wokwi nötig für bessere Simulationsleistung!
  delay(10);
}
//--------------------------------------------------
void messageReceived(String &topic, String &payload) {
  Serial.println(String("Topic:   ") + topic);
  Serial.println(String("Payload: ") + payload);
}