diff --git a/.gitignore b/.gitignore
index 1ec2945..f68d109 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,7 +2,6 @@
out/
!**/src/main/**/out/
!**/src/test/**/out/
-config.json
### Eclipse ###
.apt_generated
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..146ab09
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/hivemq_mqtt_client.xml b/.idea/libraries/hivemq_mqtt_client.xml
new file mode 100644
index 0000000..c39a92c
--- /dev/null
+++ b/.idea/libraries/hivemq_mqtt_client.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/FA_Gateway_Java.iml b/FA_Gateway_Java.iml
index 0a81566..043fe26 100644
--- a/FA_Gateway_Java.iml
+++ b/FA_Gateway_Java.iml
@@ -13,5 +13,6 @@
+
\ No newline at end of file
diff --git a/config.json b/config.json
new file mode 100644
index 0000000..d9d6734
--- /dev/null
+++ b/config.json
@@ -0,0 +1 @@
+{"Modbus_Port":502,"Modbus_MasterIP":"192.168.10.1","Modbus_SlaveID":"1","VX3KTargetIP":"192.168.14.1","VX3KTargetPort":5000,"Email_SMTPServer":"mail.galva.co.id","Email_SMTPPort":587,"Email_SMTPSSL":true,"Email_SMTPUsername":"admin","Email_SMTPPassword":"admin","Email_SMTPFrom":"fa@galva.co.id","Email_SenderName":"Fire Alarm Gateway","Email_Subject":"Fire Alarm Gateway Notification","MQTT_Broker":"34.101.202.96","MQTT_Port":1883,"MQTT_Topic":"FA_Gateway/status","MQTT_ClientID":"Pekojan","MQTT_Username":"gtcdev","MQTT_Password":"gtcdev2025"}
\ No newline at end of file
diff --git a/lib/annotations-26.0.2.jar b/lib/annotations-26.0.2.jar
new file mode 100644
index 0000000..dbe2620
Binary files /dev/null and b/lib/annotations-26.0.2.jar differ
diff --git a/lib/dagger-2.27.jar b/lib/dagger-2.27.jar
new file mode 100644
index 0000000..8173b5d
Binary files /dev/null and b/lib/dagger-2.27.jar differ
diff --git a/lib/hivemq-mqtt-client-1.3.6.jar b/lib/hivemq-mqtt-client-1.3.6.jar
new file mode 100644
index 0000000..0854e07
Binary files /dev/null and b/lib/hivemq-mqtt-client-1.3.6.jar differ
diff --git a/lib/javax.inject-1.jar b/lib/javax.inject-1.jar
new file mode 100644
index 0000000..b2a9d0b
Binary files /dev/null and b/lib/javax.inject-1.jar differ
diff --git a/lib/jctools-core-2.1.2.jar b/lib/jctools-core-2.1.2.jar
new file mode 100644
index 0000000..1fb34fc
Binary files /dev/null and b/lib/jctools-core-2.1.2.jar differ
diff --git a/lib/netty-buffer-4.1.122.Final.jar b/lib/netty-buffer-4.1.122.Final.jar
new file mode 100644
index 0000000..9176880
Binary files /dev/null and b/lib/netty-buffer-4.1.122.Final.jar differ
diff --git a/lib/netty-codec-4.1.122.Final.jar b/lib/netty-codec-4.1.122.Final.jar
new file mode 100644
index 0000000..28c881f
Binary files /dev/null and b/lib/netty-codec-4.1.122.Final.jar differ
diff --git a/lib/netty-common-4.1.122.Final.jar b/lib/netty-common-4.1.122.Final.jar
new file mode 100644
index 0000000..0d4e215
Binary files /dev/null and b/lib/netty-common-4.1.122.Final.jar differ
diff --git a/lib/netty-handler-4.1.122.Final.jar b/lib/netty-handler-4.1.122.Final.jar
new file mode 100644
index 0000000..283ce82
Binary files /dev/null and b/lib/netty-handler-4.1.122.Final.jar differ
diff --git a/lib/netty-resolver-4.1.122.Final.jar b/lib/netty-resolver-4.1.122.Final.jar
new file mode 100644
index 0000000..3ba617e
Binary files /dev/null and b/lib/netty-resolver-4.1.122.Final.jar differ
diff --git a/lib/netty-transport-4.1.122.Final.jar b/lib/netty-transport-4.1.122.Final.jar
new file mode 100644
index 0000000..4389627
Binary files /dev/null and b/lib/netty-transport-4.1.122.Final.jar differ
diff --git a/lib/netty-transport-native-unix-common-4.1.122.Final.jar b/lib/netty-transport-native-unix-common-4.1.122.Final.jar
new file mode 100644
index 0000000..e458369
Binary files /dev/null and b/lib/netty-transport-native-unix-common-4.1.122.Final.jar differ
diff --git a/lib/reactive-streams-1.0.4.jar b/lib/reactive-streams-1.0.4.jar
new file mode 100644
index 0000000..e58c483
Binary files /dev/null and b/lib/reactive-streams-1.0.4.jar differ
diff --git a/lib/rxjava-2.2.21.jar b/lib/rxjava-2.2.21.jar
new file mode 100644
index 0000000..377d311
Binary files /dev/null and b/lib/rxjava-2.2.21.jar differ
diff --git a/src/Main.java b/src/Main.java
index 13df46a..88fed90 100644
--- a/src/Main.java
+++ b/src/Main.java
@@ -1,8 +1,27 @@
+import mqtt.MqttClient;
+import org.tinylog.Logger;
+
//TIP To Run code, press or
// click the icon in the gutter.
public class Main {
private static config config;
+ private static MqttClient mqttClient;
public static void main(String[] args) {
+ Logger.info("Application started");
config = new config();
+ mqttClient = new MqttClient(config.getMQTT_Broker(), config.getMQTT_Port(), config.getMQTT_Username(), config.getMQTT_Password(), connected -> {
+ if (connected) {
+ Logger.info("MQTT client connected successfully.");
+ mqttClient.Publish(config.getMQTT_Topic(), config.getMQTT_ClientID(), "Fire Alarm Gateway Online", published -> {
+ if (published) {
+ Logger.info("Online Message published successfully.");
+ } else {
+ Logger.error("Failed to publish Online Message.");
+ }
+ });
+ } else {
+ Logger.error("Failed to connect MQTT client.");
+ }
+ });
}
}
\ No newline at end of file
diff --git a/src/config.java b/src/config.java
index dd55083..8720384 100644
--- a/src/config.java
+++ b/src/config.java
@@ -6,6 +6,9 @@ import java.nio.file.Files;
import java.nio.file.Path;
public class config {
+ private @Getter @Setter int Modbus_Port = 502;
+ private @Getter @Setter String Modbus_MasterIP = "192.168.10.1";
+ private @Getter @Setter String Modbus_SlaveID = "1";
private @Getter @Setter String VX3KTargetIP;
private @Getter @Setter int VX3KTargetPort;
private @Getter @Setter String Email_SMTPServer;
@@ -42,6 +45,9 @@ public class config {
config loadedConfig = Somecodes.gson.fromJson(configContent, config.class);
if (loadedConfig != null) {
// Copy values from loadedConfig to this instance
+ this.Modbus_MasterIP = loadedConfig.Modbus_MasterIP;
+ this.Modbus_Port = loadedConfig.Modbus_Port;
+ this.Modbus_SlaveID = loadedConfig.Modbus_SlaveID;
this.VX3KTargetIP = loadedConfig.VX3KTargetIP;
this.VX3KTargetPort = loadedConfig.VX3KTargetPort;
this.Email_SMTPServer = loadedConfig.Email_SMTPServer;
@@ -59,7 +65,6 @@ public class config {
this.MQTT_Username = loadedConfig.MQTT_Username;
this.MQTT_Password = loadedConfig.MQTT_Password;
- Logger.info("Loaded config from {}", configPath.toAbsolutePath());
} else {
Logger.error("Loaded config is null, creating Default Config");
MakeDefaults();
@@ -80,7 +85,9 @@ public class config {
*/
private void MakeDefaults() {
// Set default values if needed
-
+ Modbus_MasterIP = "192.168.10.1";
+ Modbus_Port = 502;
+ Modbus_SlaveID = "1";
VX3KTargetIP = "192.168.14.1";
VX3KTargetPort = 5000;
Email_SMTPServer = "mail.galva.co.id";
diff --git a/src/mqtt/MqttClient.java b/src/mqtt/MqttClient.java
new file mode 100644
index 0000000..b69c141
--- /dev/null
+++ b/src/mqtt/MqttClient.java
@@ -0,0 +1,75 @@
+package mqtt;
+
+import com.hivemq.client.mqtt.mqtt3.Mqtt3AsyncClient;
+import com.hivemq.client.mqtt.mqtt3.Mqtt3Client;
+import com.hivemq.client.mqtt.mqtt3.message.auth.Mqtt3SimpleAuth;
+import org.tinylog.Logger;
+
+import java.nio.charset.StandardCharsets;
+import java.util.function.Consumer;
+
+public class MqttClient {
+
+ Mqtt3AsyncClient client;
+
+ /**
+ * Constructor to create an MQTT client and connect to the broker.
+ *
+ * @param host The hostname of the MQTT broker.
+ * @param port The port of the MQTT broker.
+ * @param username The username for authentication.
+ * @param password The password for authentication.
+ * @param connectedCallback A callback that is called when the connection is established or fails.
+ */
+ public MqttClient(String host, int port, String username, String password, Consumer connectedCallback) {
+ Mqtt3AsyncClient clientx = Mqtt3Client.builder()
+ .simpleAuth(Mqtt3SimpleAuth.builder().username(username).password(password.getBytes(StandardCharsets.UTF_8)).build())
+ .serverHost(host)
+ .serverPort(port)
+ .buildAsync();
+
+ clientx.connect()
+ .whenComplete((conn, throwable) -> {
+ if (throwable != null) {
+ client = null;
+ Logger.error("Failed to connect to MQTT broker at {}:{}, Message : {}", host, port, throwable.getMessage());
+ if (connectedCallback != null) {
+ connectedCallback.accept(false);
+ }
+ } else {
+ client = clientx;
+ Logger.info("Connected to MQTT broker at {}:{}", host, port);
+ if (connectedCallback != null) {
+ connectedCallback.accept(true);
+ }
+ }
+ });
+ }
+
+ public void Publish(String topic, String clientID, String message, Consumer publishCallback) {
+ if (client == null) {
+ Logger.error("Cannot publish message, MQTT client is not connected.");
+ if (publishCallback != null) {
+ publishCallback.accept(false);
+ }
+ return;
+ }
+ client.publishWith()
+ .topic(topic+"/" + clientID)
+ .payload(message.getBytes(StandardCharsets.UTF_8))
+ .send()
+ .whenComplete((pub, throwable) -> {
+ if (throwable != null) {
+ Logger.error("Failed to publish message to topic '{}', Message : {}", topic, throwable.getMessage());
+ if (publishCallback != null) {
+ publishCallback.accept(false);
+ }
+ } else {
+ Logger.info("Message published to topic '{}'", topic);
+ if (publishCallback != null) {
+ publishCallback.accept(true);
+ }
+ }
+ });
+ }
+}