Skip to content

Commit

Permalink
add http server and api to test
Browse files Browse the repository at this point in the history
  • Loading branch information
davidedimarco00 committed Feb 12, 2024
1 parent 8f31be0 commit e738a29
Show file tree
Hide file tree
Showing 14 changed files with 251 additions and 96 deletions.
5 changes: 4 additions & 1 deletion river-monitoring-service/Server/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,10 @@ repositories {
}

dependencies {
implementation("io.vertx:vertx-mqtt:4.5.1") //for mqtt vertx server
implementation("io.vertx:vertx-mqtt:4.2.6")
implementation("io.vertx:vertx-core:4.2.6")
implementation("io.vertx:vertx-web:4.2.6")
implementation("io.vertx:vertx-web-client:4.2.6")
implementation("com.google.code.gson:gson:2.8.8") //for json
implementation("io.github.java-native:jssc:2.9.6") //for serial communication
implementation("org.slf4j:slf4j-api:1.7.32")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,13 @@


import com.google.gson.stream.MalformedJsonException;
import io.vertx.core.Vertx;
import org.mqttserver.policy.ChannelControllerManager;
import org.mqttserver.policy.ChannelControllerManagerImpl;
import org.mqttserver.presentation.JSONUtils;
import org.mqttserver.presentation.MessageFromArduino;
import org.mqttserver.services.HTTP.DataService;
import org.mqttserver.services.HTTP.HTTPServerImpl;
import org.mqttserver.services.MQTT.Broker;
import org.mqttserver.services.MQTT.BrokerImpl;

Expand All @@ -16,13 +19,27 @@ public static void main(String[] args) throws Exception {
//start the broker (MQTTServer)
Broker broker = new BrokerImpl();
broker.initialize(broker.getMqttServer());

//start the httpServer and DataService (for dashboard and http server)
Vertx vertx = Vertx.vertx();
HTTPServerImpl httpServer = new HTTPServerImpl();
vertx.deployVerticle(httpServer);
DataService service = new DataService(8050, broker);
vertx.deployVerticle(service);

//Init Channel Controller Manager
ChannelControllerManager channelControllerManager = new ChannelControllerManagerImpl(broker, null);
ChannelControllerManager channelControllerManager = new ChannelControllerManagerImpl(broker);

while (true) {
channelControllerManager.sendMessageToArduino(broker.getSystemController().getStatus()); //I send the message to arduino with state
String msg = channelControllerManager.receiveDataFromArduino(); //i receive the answer from arduino
broker.getSystemController().checkValveValue(msg, broker); //check valve value
Thread.sleep(200);

if (!broker.getSystemController().getIsManual()) {
channelControllerManager.sendMessageToArduino(broker.getSystemController().getStatus()); //I send the message to arduino with state
//String msg = channelControllerManager.receiveDataFromArduino(); //I receive the answer from arduino
//broker.getSystemController().checkValveValue(msg, broker); //check valve value
} else {
channelControllerManager.sendMessageToArduino(broker.getSystemController().getValveValue()); //I send the message to arduino with state
}
Thread.sleep(400);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,11 @@

public interface ChannelControllerManager {


//ARDUINO
void sendMessageToArduino(Status status);
String receiveDataFromArduino() throws InterruptedException;

//DASHBOARD
void sendMessageToDashboard(MessageToDashboard message);





void sendMessageToArduino(int valveValue);

String receiveDataFromArduino() throws InterruptedException;

}
Original file line number Diff line number Diff line change
Expand Up @@ -5,47 +5,39 @@
import org.mqttserver.serial.SerialCommChannelImpl;
import org.mqttserver.serial.SerialScanner;
import org.mqttserver.serial.SerialScannerImpl;
import org.mqttserver.services.HTTP.HTTPServer;
import org.mqttserver.services.MQTT.Broker;

public class ChannelControllerManagerImpl implements ChannelControllerManager {

private Broker broker;

private HTTPServer httpServer;

private SerialCommChannel serialCommChannel;
private SerialScanner serialScanner = new SerialScannerImpl();



public ChannelControllerManagerImpl(Broker broker, HTTPServer httpServer) throws Exception {
public ChannelControllerManagerImpl(Broker broker) throws Exception {
//Init broker and http server
this.broker = broker;
this.httpServer = httpServer;

//init serial communication
this.serialCommChannel = new SerialCommChannelImpl(this.serialScanner.getConnectedPort(), 9600 );
System.out.println("Started CHANNEL CONTROLLER " + "\nChannel Controller Controls MQTTServer: " +
this.broker.getMqttServer().toString() + " ON PORT: " + this.broker.getMqttServer().actualPort());
}


@Override
public void sendMessageToArduino(Status status) {
MessageToArduino messageToArduino = new MessageToArduino(status);
this.serialCommChannel.sendMessageToArduino(JSONUtils.objectToJson(messageToArduino));
}

@Override
public String receiveDataFromArduino() throws InterruptedException { //USE SERIAL PROTOCOL
return this.serialCommChannel.receiveMessageFromArduino();
public void sendMessageToArduino(int valveValue) {
MessageToArduino messageToArduino = new MessageToArduino(valveValue);
this.serialCommChannel.sendMessageToArduino(JSONUtils.objectToJson(messageToArduino));
}

@Override
public void sendMessageToDashboard(MessageToDashboard message) { //USE HTTP PROTOCOL

public String receiveDataFromArduino() throws InterruptedException { //USE SERIAL PROTOCOL
return this.serialCommChannel.receiveMessageFromArduino();
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,19 @@ public interface SystemController {
void setWL(float wl);

Status getStatus();
float getWl();

int getValveValue();

void setValveValueFromDashboard(int valveValue);

Map<Status, Integer> getStatusValveValue();

int getFrequency();

void checkValveValue(String msg, Broker broker);

void setIsManual(boolean isManual);

boolean getIsManual();
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import io.vertx.core.buffer.Buffer;
import org.mqttserver.presentation.JSONUtils;
import org.mqttserver.presentation.MessageFromArduino;
import org.mqttserver.presentation.MessageToArduino;
import org.mqttserver.presentation.Status;
import org.mqttserver.services.MQTT.Broker;

Expand All @@ -13,6 +14,11 @@ public class SystemControllerImpl implements SystemController {

private Status status = null;

private int valveValue = 0;

private float wl = 0;

private boolean isManual = false;
private final double WL1 = 5;
private final double WL2 = 20;
private final double WL3 = 25;
Expand All @@ -22,9 +28,9 @@ public class SystemControllerImpl implements SystemController {

private int frequency = 1;

private final int F1 = 1800; //1800ms
private final int F1 = 6000; //1800ms

private final int F2 = 1000; //1000ms
private final int F2 = 2000; //1000ms

private final int F0 = 0;

Expand Down Expand Up @@ -54,6 +60,7 @@ public SystemControllerImpl() {
public void setWL(float wl) {
System.out.println("WL RECEIVED VALUE: " + wl);
if (wl > INVALID_WL) { //INVALID WL = -1;
this.wl = wl;
if (wl < WL1) {
this.status = Status.ALARM_TOO_LOW;
} else if (wl > WL1 && wl <= WL2) {
Expand All @@ -73,17 +80,18 @@ public void setWL(float wl) {
this.status = Status.INVALID_STATUS;
}

System.out.println("SET SYSTEM STATUS: " + this.status);
System.out.println("SET SYSTEM STATUS: " + this.status.toString().toUpperCase());
}

public Status getStatus() {
if (this.status==null){
System.err.println("SERVER: STATUS undefined, check your connection to sensor");
return null;
}
return this.status; //return this.status
return this.status;
}


public Map<Status, Integer> getStatusValveValue() {
return this.statusValveValue;
}
Expand All @@ -93,13 +101,33 @@ public int getFrequency() {
return this.frequency;
}

@Override
public float getWl() {
return this.wl;
}

@Override
public int getValveValue() {
return this.valveValue;
}

@Override
public void setValveValueFromDashboard(int valveValue) {
this.valveValue = valveValue;
//MessageToArduino messageToArduino = new MessageToArduino(statusValveValue);

}


@Override
public void checkValveValue(String msg, Broker broker) {
try {
System.out.println("ARDUINO SENT: " + msg);
Integer valveValue = JSONUtils.jsonToObject(msg, MessageFromArduino.class).getValveValue();
if (valveValue.equals(broker.getSystemController().getStatusValveValue().get(broker.getSystemController().getStatus()))) {
System.out.println("SERVER: Valve value ok");
this.valveValue = valveValue;

} else {
System.err.println("SERVER: Valve value incorrect for system state");
}
Expand All @@ -108,4 +136,16 @@ public void checkValveValue(String msg, Broker broker) {
System.err.println("Il server è In attesa di dati validi da parte di Arduino....");
}
}

@Override
public void setIsManual(boolean isManual) {
this.isManual = isManual;
}

@Override
public boolean getIsManual() {
return this.isManual;
}


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package org.mqttserver.presentation;


/*The message sent by Dashboard using POST method in HTTP Server*/

public class MessageFromDashboard {
private final int valveValue;

public MessageFromDashboard(int valveValue) {
this.valveValue = valveValue;
}
public int getValveValue() {
return valveValue;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,15 @@ public class MessageToArduino {

private Status status;

private int valveValue;

public MessageToArduino(Status status) {
this.status = status;
}

public MessageToArduino(int valveValue) {
this.valveValue = valveValue;
}
public Status getStatus() {
return this.status;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,29 @@
package org.mqttserver.presentation;


/**
* This class contains the representation of the JSON message to send to dashboard by
* HTTPServer. TODO: TO DEFINE THE MESSAGE
* */
public class MessageToDashboard {

private float WL;
private Status status;

private int valveValue;

public MessageToDashboard(float WL, Status status, int valveValue) {
this.WL = WL;
this.status = status;
this.valveValue = valveValue;
}

public float getWL() {
return WL;
}

public Status getStatus() {
return status;
}

public int getValveValue() {
return valveValue;
}

}

This file was deleted.

Loading

0 comments on commit e738a29

Please sign in to comment.