From 02dff914ca4e1f048911ae90ead285f9c63dfb74 Mon Sep 17 00:00:00 2001 From: lukas-heiligenbrunner Date: Fri, 31 Jan 2020 09:37:06 +0100 Subject: [PATCH] alter mqttservice to gradle --- src/java/com/wasteinformationserver/Main.kt | 16 +- .../mqtt/MqttService.java | 200 ------------------ .../mqtt/MqttService.kt | 178 ++++++++++++++++ 3 files changed, 186 insertions(+), 208 deletions(-) delete mode 100644 src/java/com/wasteinformationserver/mqtt/MqttService.java create mode 100644 src/java/com/wasteinformationserver/mqtt/MqttService.kt diff --git a/src/java/com/wasteinformationserver/Main.kt b/src/java/com/wasteinformationserver/Main.kt index 8db0737..b741f9c 100644 --- a/src/java/com/wasteinformationserver/Main.kt +++ b/src/java/com/wasteinformationserver/Main.kt @@ -8,31 +8,31 @@ import com.wasteinformationserver.website.Webserver import java.io.IOException fun main() { - Log.Log.setLevel(Log.Log.DEBUG) + Log.setLevel(Log.DEBUG) Info.init() - Log.Log.info("startup of WasteInformationServer") + Log.info("startup of WasteInformationServer") Runtime.getRuntime().addShutdownHook(Thread(Runnable { try { Thread.sleep(200) - Log.Log.warning("Shutting down ...") + Log.warning("Shutting down ...") //shutdown routine } catch (e: InterruptedException) { e.printStackTrace() } })) - Log.Log.info("Server version: " + Info.getVersion()) - Log.Log.debug("Build date: " + Info.getBuilddate()) + Log.info("Server version: " + Info.getVersion()) + Log.debug("Build date: " + Info.getBuilddate()) //initial connect to db - Log.Log.message("initial login to db") + Log.message("initial login to db") try { JDBC.init("ingproject", "Kb9Dxklumt76ieq6", "ingproject", "db.power4future.at", 3306) //JDBC.init("users", "kOpaIJUjkgb9ur6S", "wasteinformation", "192.168.65.15", 3306); } catch (e: IOException) { //e.printStackTrace(); - Log.Log.error("no connection to db") + Log.error("no connection to db") } @@ -42,7 +42,7 @@ fun main() { //startup mqtt service - Log.Log.message("starting mqtt service") + Log.message("starting mqtt service") val m = MqttService("mqtt.heili.eu", "1883") m.startupService() diff --git a/src/java/com/wasteinformationserver/mqtt/MqttService.java b/src/java/com/wasteinformationserver/mqtt/MqttService.java deleted file mode 100644 index 3455880..0000000 --- a/src/java/com/wasteinformationserver/mqtt/MqttService.java +++ /dev/null @@ -1,200 +0,0 @@ -package com.wasteinformationserver.mqtt; - -import com.wasteinformationserver.basicutils.Log; -import com.wasteinformationserver.db.JDBC; -import org.eclipse.paho.client.mqttv3.*; - -import java.io.IOException; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; - -/** - * Mqtt Service to receive and send back messages to the Hardware - * todo - * - * @author Lukas Heiligenbrunner - * @author Gregor Dutzler - */ -public class MqttService { - private MqttClient client = null; - private String serveruri; - private JDBC db; - - /** - * init mqtt service - * JDBC has to be inited before - * - * @param serverurl mqtt server ip or hostname - * @param port mqtt server port - */ - public MqttService(String serverurl, String port) { - serveruri = "tcp://" + serverurl + ":" + port; - try { - db = JDBC.getInstance(); - } catch (IOException e) { - Log.Log.error("no connetion to db"); - } - } - - /** - * startup of the mqtt service - */ - public void startupService() { - try { - client = new MqttClient(serveruri, "JavaSample42"); - MqttConnectOptions connOpts = new MqttConnectOptions(); - connOpts.setCleanSession(true); - client.connect(connOpts); - - client.setCallback(new MqttCallback() { - @Override - public void connectionLost(Throwable throwable) { - Log.Log.error("connection lost"); - // TODO: 12.01.20 reconnect - } - - @Override - public void messageArrived(String s, MqttMessage mqttMessage) { - String deviceid = new String(mqttMessage.getPayload()); - Log.Log.message("received Request from PCB"); - - ResultSet res = db.executeQuery("SELECT * from devices WHERE DeviceID=" + deviceid); - try { - res.last(); - if (res.getRow() != 0) { - //existing device - res.first(); - - ResultSet devicecities = db.executeQuery("SELECT * from device_city WHERE DeviceID='" + deviceid + "'"); - devicecities.last(); - if (devicecities.getRow() == 0) { - //not configured - tramsmitMessage(deviceid + ",-1"); - } else { - devicecities.first(); - devicecities.previous(); - // TODO: 23.01.20 Test this stuff - while (devicecities.next()) { - int cityid = devicecities.getInt("CityID"); - checkDatabase(cityid, Integer.parseInt(deviceid)); - } - } - - - } else { - //new device - db.executeUpdate("INSERT INTO devices (DeviceID) VALUES (" + deviceid + ")"); - Log.Log.info("new device registered to server"); - tramsmitMessage(deviceid + ",-1"); - } - } catch (SQLException e) { - e.printStackTrace(); - } - } - - @Override - public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) { - - } - }); - client.subscribe("TopicIn"); - } catch (MqttException e) { - Log.Log.error("Connection to the Broker failed"); - } - } - - private void checkDatabase(int citywastezoneid, int deviceid) { - int wastetype = -1; - ResultSet set2 = db.executeQuery("SELECT * FROM cities WHERE `id`='" + citywastezoneid + "'"); - try { - set2.last(); - if (set2.getRow() != 1) { - //error - } else { - String typ = set2.getString("wastetype"); - wastetype = getIntTyp(typ); - } - } catch (SQLException e) { - e.printStackTrace(); - } - - - ResultSet result = db.executeQuery("SELECT pickupdates.pickupdate FROM pickupdates WHERE pickupdates.citywastezoneid=" + citywastezoneid); - try { - result.last(); - if (result.getRow() == 0) { - //if not found in db --> send zero - Log.Log.debug("not found in db"); - - tramsmitMessage(deviceid + "," + wastetype + "," + 0); - } else { - Log.Log.debug(result.getString("pickupdate")); - - result.first(); - do { - SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); - long timestamp = formatter.parse(result.getString("pickupdate")).getTime(); - long timestampnow = formatter.parse(formatter.format(new Date())).getTime(); - Log.Log.debug("timestamp is :" + timestamp); - - if (timestamp == timestampnow || timestamp == timestampnow + 86400000) { // 86400000 == one day - // valid time - tramsmitMessage(deviceid + "," + wastetype + "," + 1); - Log.Log.debug("valid time"); - return; - } - } while (result.next()); - tramsmitMessage(deviceid + "," + wastetype + "," + 0); //transmit zero if not returned before - } - } catch (SQLException | ParseException e) { - e.printStackTrace(); - } - } - - - private void tramsmitMessage(String temp) { - Log.Log.debug("sending message >>>" + temp); - MqttMessage message = new MqttMessage(temp.getBytes()); - message.setQos(2); - try { - client.publish("TopicOut", message); - } catch (MqttException e) { - e.printStackTrace(); - } - } - - private String getTyp(int number) { - if (number == 1) { - return "Plastic"; - } else if (number == 2) { - return "Metal"; - } else if (number == 3) { - return "Residual waste"; - } else if (number == 4) { - return "Biowaste"; - } - return null; - } - - private int getIntTyp(String temp) { - int number = 0; - switch (temp) { - case "Plastic": - number = 1; - break; - case "Metal": - number = 2; - break; - case "Residual waste": - number = 3; - break; - case "Biowaste": - number = 4; - break; - } - return number; - } -} \ No newline at end of file diff --git a/src/java/com/wasteinformationserver/mqtt/MqttService.kt b/src/java/com/wasteinformationserver/mqtt/MqttService.kt new file mode 100644 index 0000000..ab4cc76 --- /dev/null +++ b/src/java/com/wasteinformationserver/mqtt/MqttService.kt @@ -0,0 +1,178 @@ +package com.wasteinformationserver.mqtt + +import com.wasteinformationserver.basicutils.Log.Log.debug +import com.wasteinformationserver.basicutils.Log.Log.error +import com.wasteinformationserver.basicutils.Log.Log.info +import com.wasteinformationserver.basicutils.Log.Log.message +import com.wasteinformationserver.db.JDBC +import org.eclipse.paho.client.mqttv3.* +import java.io.IOException +import java.sql.SQLException +import java.text.ParseException +import java.text.SimpleDateFormat +import java.util.* + +/** + * Mqtt Service to receive and send back messages to the Hardware + * todo + * + * @author Lukas Heiligenbrunner + * @author Gregor Dutzler + */ +class MqttService(serverurl: String, port: String) { + private var client: MqttClient? = null + private val serveruri: String + private var db: JDBC? = null + + /** + * init mqtt service + * JDBC has to be inited before + * + * @param serverurl mqtt server ip or hostname + * @param port mqtt server port + */ + init { + serveruri = "tcp://$serverurl:$port" + connect() + } + + /** + * startup of the mqtt service + */ + fun startupService() { + try { + client = MqttClient(serveruri, "JavaSample42") + val connOpts = MqttConnectOptions() + connOpts.isCleanSession = true + client!!.connect(connOpts) + client!!.setCallback(object : MqttCallback { + override fun connectionLost(throwable: Throwable) { + error("connection lost") + connect() + } + + override fun messageArrived(s: String, mqttMessage: MqttMessage) { + val deviceid = String(mqttMessage.payload) + message("received Request from PCB") + val res = db!!.executeQuery("SELECT * from devices WHERE DeviceID=$deviceid") + try { + res.last() + if (res.row != 0) { //existing device + res.first() + val devicecities = db!!.executeQuery("SELECT * from device_city WHERE DeviceID='$deviceid'") + devicecities.last() + if (devicecities.row == 0) { //not configured + tramsmitMessage("$deviceid,-1") + } else { + devicecities.first() + devicecities.previous() + + while (devicecities.next()) { + val cityid = devicecities.getInt("CityID") + checkDatabase(cityid, deviceid.toInt()) + } + } + } else { //new device + db!!.executeUpdate("INSERT INTO devices (DeviceID) VALUES ($deviceid)") + info("new device registered to server") + tramsmitMessage("$deviceid,-1") + } + } catch (e: SQLException) { + e.printStackTrace() + } + } + + override fun deliveryComplete(iMqttDeliveryToken: IMqttDeliveryToken) {} + }) + client!!.subscribe("TopicIn") + } catch (e: MqttException) { + error("Connection to the Broker failed") + } + } + + private fun checkDatabase(citywastezoneid: Int, deviceid: Int) { + var wastetype = -1 + val set2 = db!!.executeQuery("SELECT * FROM cities WHERE `id`='$citywastezoneid'") + try { + set2.last() + if (set2.row != 1) { //error + } else { + val typ = set2.getString("wastetype") + wastetype = getIntTyp(typ) + } + } catch (e: SQLException) { + e.printStackTrace() + } + val result = db!!.executeQuery("SELECT pickupdates.pickupdate FROM pickupdates WHERE pickupdates.citywastezoneid=$citywastezoneid") + try { + result.last() + if (result.row == 0) { //if not found in db --> send zero + debug("not found in db") + tramsmitMessage("$deviceid,$wastetype,0") + } else { + debug(result.getString("pickupdate")) + result.first() + do { + val formatter = SimpleDateFormat("yyyy-MM-dd") + val timestamp = formatter.parse(result.getString("pickupdate")).time + val timestampnow = formatter.parse(formatter.format(Date())).time + debug("timestamp is :$timestamp") + if (timestamp == timestampnow || timestamp == timestampnow + 86400000) { // 86400000 == one day + // valid time + tramsmitMessage("$deviceid,$wastetype,1") + debug("valid time") + return + } + } while (result.next()) + tramsmitMessage("$deviceid,$wastetype,0") //transmit zero if not returned before + } + } catch (e: SQLException) { + e.printStackTrace() + } catch (e: ParseException) { + e.printStackTrace() + } + } + + private fun tramsmitMessage(temp: String) { + debug("sending message >>>$temp") + val message = MqttMessage(temp.toByteArray()) + message.qos = 2 + try { + client!!.publish("TopicOut", message) + } catch (e: MqttException) { + e.printStackTrace() + } + } + + private fun getTyp(number: Int): String? { + if (number == 1) { + return "Plastic" + } else if (number == 2) { + return "Metal" + } else if (number == 3) { + return "Residual waste" + } else if (number == 4) { + return "Biowaste" + } + return null + } + + private fun getIntTyp(temp: String): Int { + var number = 0 + when (temp) { + "Plastic" -> number = 1 + "Metal" -> number = 2 + "Residual waste" -> number = 3 + "Biowaste" -> number = 4 + } + return number + } + + private fun connect() { + try { + db = JDBC.getInstance() + } catch (e: IOException) { + error("no connetion to db") + } + } +} \ No newline at end of file