Gateway Lora | local network

#include <LoRa.h>
#include <WiFi.h>
#include <PubSubClient.h>

// define the pins used by the transceiver module
#define ss 5
#define rst 14
#define dio0 2

// WiFi credentials
const char* ssid = "WIFI-SSID";
const char* password = "WIFI-PASSWORD";
const char* mqtt_server = "IP OH THE MQTT SERVER";

// MQTT credentials
const char* Mqtt_User = "MQTT USER";
const char* Mqtt_Password = "MQTT PASSWORD";



WiFiClient espClient;
PubSubClient client(espClient);

void setup_wifi() {
  delay(10);
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void callback(char* topic, byte* payload, unsigned int length) {
}

void reconnect() {
  while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    String clientId = "ESP32Client-";
    clientId += String(random(0xffff), HEX);

    if (client.connect(clientId.c_str(), Mqtt_User, Mqtt_Password)) {
      Serial.println("connected");
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      delay(5000);
    }
  }
}

void setup() {
  Serial.begin(115200);
  setup_wifi();
  client.setServer(mqtt_server, 1883);
  client.setCallback(callback);
  client.setBufferSize(512);
  Serial.println("LoRa Receiver");
  LoRa.setPins(ss, rst, dio0);
  while (!LoRa.begin(433E6)) {
    Serial.println(".");;
    delay(500);
  }
  LoRa.setSyncWord(0x5E);
  Serial.println("LoRa Initializing OK!");
}

void loop() {
  if (!client.connected()) {
    reconnect();
    }
  client.loop();
  int packetSize = LoRa.parsePacket();
  if (packetSize) {
    String LoRaData;
    while (LoRa.available()) {
      LoRaData += (char)LoRa.read();
      }
    Serial.println(LoRaData);



    int delimiterIndex = LoRaData.indexOf("|");
    if (delimiterIndex != -1) {
      String Topic = LoRaData.substring(0, delimiterIndex);
      String data = LoRaData.substring(delimiterIndex + 1);
      if (Topic.indexOf("/config") != -1) {
        delimiterIndex = data.indexOf("|");
        String device_class = data.substring(0, delimiterIndex);
        data = data.substring(delimiterIndex+ 1);
        delimiterIndex = data.indexOf("|");
        String name = data.substring(0, delimiterIndex);
        data = data.substring(delimiterIndex+ 1);
        delimiterIndex = data.indexOf("|");
        String unique_id = data.substring(0, delimiterIndex);
        data = data.substring(delimiterIndex+ 1);
        delimiterIndex = data.indexOf("|");
        String device_name = data.substring(0, delimiterIndex);
        data = data.substring(delimiterIndex+ 1);
        delimiterIndex = data.indexOf("|");
        String device_identifiers = data.substring(0, delimiterIndex);
        data = data.substring(delimiterIndex+ 1);
        delimiterIndex = data.indexOf("|");
        String state_topic = data.substring(0, delimiterIndex);
        data = data.substring(delimiterIndex+ 1);
        delimiterIndex = data.indexOf("|");
        String unit_of_measurement = data.substring(0, delimiterIndex);
        String data = "{\"device_class\":\"" + device_class +
                      "\",\"name\":\"" + name +
                      "\",\"unique_id\":\"" + unique_id +
                      "\",\"device\":{\"name\":\"" + device_name +
                      "\",\"identifiers\":\"" + device_identifiers +
                      "\"},\"state_topic\":\"" + state_topic +
                      "\",\"unit_of_measurement\":\"" + unit_of_measurement +
                      "\",\"value_template\":\"{{ value }}\",\"platform\":\"mqtt\"}";
        Serial.println(data);
        client.publish(Topic.c_str(), data.c_str());

      }else{
        Serial.print("First part: ");
        Serial.println(Topic);
        Serial.print("Second part: ");
        Serial.println(data);
        client.publish(Topic.c_str(), data.c_str());
      }
    }
  }
}