#include <Arduino.h>
#include <SoftwareSerial.h>

#define MQTT_CONNECT 0x10
#define MQTT_CONNACK 0x20
#define MQTT_PUBLISH 0x30
#define MQTT_SUBSCRIBE 0x82
#define MQTT_SUBACK 0x90
#define MQTT_DISCONNECT 0xE0

SoftwareSerial Serial1(10, 11); // RX, TX

void setup() {
  Serial.begin(115200);
  Serial1.begin(9600); // Soros port a MQTT klienshez
  Serial.println("MQTT Broker Indítás");
}

void loop() {
  if (Serial.available()) {
    handleMQTTMessage();
  }
}

void handleMQTTMessage() {
  byte packetType = Serial1.read();
  switch (packetType) {
    case MQTT_CONNECT:
      handleConnect();
      break;
    case MQTT_PUBLISH:
      handlePublish();
      break;
    case MQTT_SUBSCRIBE:
      handleSubscribe();
      break;
    case MQTT_DISCONNECT:
      handleDisconnect();
      break;
    default:
      Serial.println("Ismeretlen üzenettípus.");
  }
}

void handleConnect() {
  Serial.println("MQTT CONNECT Üzenet Fogadva");
  byte connack[] = { MQTT_CONNACK, 0x00, 0x00, 0x00 };
  Serial1.write(connack, sizeof(connack));
}

void handlePublish() {
  Serial.println("MQTT PUBLISH Üzenet Fogadva");
  int topicLength = Serial1.read() << 8 | Serial1.read();
  char topic[topicLength + 1];
  Serial1.readBytes(topic, topicLength);
  topic[topicLength] = '\0';

  int messageLength = Serial1.available();
  char message[messageLength + 1];
  Serial1.readBytes(message, messageLength);
  message[messageLength] = '\0';

  Serial.print("Téma: ");
  Serial.println(topic);
  Serial.print("Üzenet: ");
  Serial.println(message);

  // Üzenet továbbítása minden előfizetőnek (a megvalósítás hiányzik)
}

void handleSubscribe() {
  Serial.println("MQTT SUBSCRIBE Üzenet Fogadva");
  int topicLength = Serial1.read() << 8 | Serial1.read();
  char topic[topicLength + 1];
  Serial1.readBytes(topic, topicLength);
  topic[topicLength] = '\0';

  // Előfizetés regisztrálása (a megvalósítás hiányzik)

  byte suback[] = { MQTT_SUBACK, 0x00, 0x00, 0x00, 0x00 };
  Serial1.write(suback, sizeof(suback));
}

void handleDisconnect() {
  Serial.println("MQTT DISCONNECT Üzenet Fogadva");
  // Kapcsolat bontása (a megvalósítás hiányzik)
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5