/**************************************************
 Übung: ESP32 (Teil 3) - Aufgabe 1 (Vorlage)
***************************************************/

//-----------------------------------------------------------
#include <WiFi.h>
#include <MQTT.h>

//-----------------------------------------------------------
// WiFi:
const char WIFI_SSID[] = "m126";
const char WIFI_PASSWORD[] = "M126M126";

// MQTT: Client ID (frei wählbar)
const char MQTT_CLIENT_ID[] = "BBW_ESP32_IHRNAME";

// MQTT: Angaben für public-Broker von shiftr.io
const char MQTT_BROKER_USER_NAME[] = "public";
const char MQTT_BROKER_USER_PASSWORD[] = "public";

// Objekte:
WiFiClient wifinetwork;
MQTTClient mqttclient;

// Variablen:
uint32_t zeitStempel = 0;

//-----------------------------------------------------------
void setup() {
  //---
  // UART starten (115200 Baud)
  Serial.begin(115200);

  //---
  // WiFi verbinden
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  Serial.print("Verbinde mit ");
  Serial.print(WIFI_SSID);

  // Warten bis mit WiFi verbunden...
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(250);
  }
  Serial.println(" Verbunden!");

  //---
  // MQTT: Client starten
  mqttclient.begin(wifinetwork);

  // MQTT: Init Broker-Name
  mqttclient.setHost("public.cloud.shiftr.io");
  Serial.print("Verbinde mit MQTT-Broker ");

  // MQTT: Mit Broker verbinden...
  while (mqttclient.connect(MQTT_CLIENT_ID, MQTT_BROKER_USER_NAME, MQTT_BROKER_USER_PASSWORD) == false) {
    Serial.print(".");
    delay(250);
  }
  Serial.println(" Verbunden!");
}

//-----------------------------------------------------------
void loop() {
  //---
  // MQTT: CPU-Zeit für Client (senden und empfangen)
  mqttclient.loop();

  //---
  // T=1000ms (1 Hz)
  if ((millis() - zeitStempel) > 1000) {
    zeitStempel = millis();

    // MQTT: Nachricht publizieren
    // - Topic:   /BBW/IHRNAME/AUFGABE1
    // - Payload: Hallo Welt
    mqttclient.publish("/BBW/IHRNAME/AUFGABE1", "Hallo Welt");

    Serial.println("Nachricht wurde publiziert :-)");
  }
}