diff --git a/.idea/dataSources/767b098c-c5bc-42ee-b3bc-d02e521ecc23.xml b/.idea/dataSources/767b098c-c5bc-42ee-b3bc-d02e521ecc23.xml index b37a075..05e008e 100644 --- a/.idea/dataSources/767b098c-c5bc-42ee-b3bc-d02e521ecc23.xml +++ b/.idea/dataSources/767b098c-c5bc-42ee-b3bc-d02e521ecc23.xml @@ -9,7 +9,7 @@ 2200 - 2017-06-07.19:30:21.978 + 2017-06-08.14:53:07.452 17257 1 1 diff --git a/.idea/dataSources/767b098c-c5bc-42ee-b3bc-d02e521ecc23/_metadata_/metadata b/.idea/dataSources/767b098c-c5bc-42ee-b3bc-d02e521ecc23/_metadata_/metadata index a3df136..36f89ba 100644 Binary files a/.idea/dataSources/767b098c-c5bc-42ee-b3bc-d02e521ecc23/_metadata_/metadata and b/.idea/dataSources/767b098c-c5bc-42ee-b3bc-d02e521ecc23/_metadata_/metadata differ diff --git a/.idea/dataSources/767b098c-c5bc-42ee-b3bc-d02e521ecc23/_metadata_/metadata.values.at b/.idea/dataSources/767b098c-c5bc-42ee-b3bc-d02e521ecc23/_metadata_/metadata.values.at index 2f3b6c6..82caa9c 100644 Binary files a/.idea/dataSources/767b098c-c5bc-42ee-b3bc-d02e521ecc23/_metadata_/metadata.values.at and b/.idea/dataSources/767b098c-c5bc-42ee-b3bc-d02e521ecc23/_metadata_/metadata.values.at differ diff --git a/src/main/java/com/lo53_mobile_localization/core/servlet/CalibrationServlet.java b/src/main/java/com/lo53_mobile_localization/core/servlet/CalibrationServlet.java index 23d28c7..f74642e 100644 --- a/src/main/java/com/lo53_mobile_localization/core/servlet/CalibrationServlet.java +++ b/src/main/java/com/lo53_mobile_localization/core/servlet/CalibrationServlet.java @@ -1,7 +1,11 @@ package com.lo53_mobile_localization.core.servlet; +import com.lo53_mobile_localization.core.entity.AccessPoint; import com.lo53_mobile_localization.core.entity.Location; +import com.lo53_mobile_localization.core.entity.Rssi; +import com.lo53_mobile_localization.core.service.AccessPointService; import com.lo53_mobile_localization.core.service.LocationService; +import com.lo53_mobile_localization.core.service.RSSIService; import com.lo53_mobile_localization.core.servlet.util.Param; import javax.servlet.ServletException; @@ -15,6 +19,7 @@ import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; +import java.net.SocketException; import java.nio.charset.StandardCharsets; /** @@ -65,7 +70,7 @@ public class CalibrationServlet extends HttpServlet { InetAddress address = InetAddress.getByAddress(Param.AP_IPS[i]); socket = new DatagramSocket(Param.AP_COMM_PORT); - String msg = buildRssiRequestMessage(Param.AP_IPS[i], Param.AP_COMM_PORT); + String msg = buildRssiRequestMessage(Param.AP_IPS[i], Param.AP_COMM_PORT, macAddr); DatagramPacket packet = new DatagramPacket(msg.getBytes(), msg.length(), address, Param.AP_COMM_PORT); socket.send(packet); @@ -78,12 +83,68 @@ public class CalibrationServlet extends HttpServlet { if (socket != null) socket.close(); } }else{ - System.out.println("MAC Address not found !"); + System.out.println("Unknown mac address"); } }else{ - System.out.println("Coordinates not found"); + System.out.println("Wrong coordinates"); } - request.getRequestDispatcher(Param.PATH_CALIBRATION).forward(request, response); + + long startTime = System.currentTimeMillis(); //fetch starting time + DatagramSocket socket = null; + try { + socket = new DatagramSocket(Param.DATAG_LISTENING_PORT); + while (false || (System.currentTimeMillis() - startTime) < 500) { + + byte[] receiveData = new byte[1024]; + DatagramPacket packet = new DatagramPacket(receiveData, receiveData.length); + socket.receive(packet); + String receivedData = new String(packet.getData()); + + //msg = "ap:ap:ap:ap:ap:ap" , "xx:xx:xx:xx:xx:xx" , "val" , "nbSamples" + String[] data = receivedData.split(","); + + String apMacAddress = data[0]; + String deviceMac = data[1]; + double value = Double.parseDouble(data[2]); + int nbSamples = Integer.parseInt(data[3]); + + if(nbSamples > 4){ + + LocationService locationService = new LocationService(); + AccessPointService apService = new AccessPointService(); + + Location location = new Location(); + location.setX(x); + location.setY(y); + + locationService.storeEntity(location); + + AccessPoint ap = apService.getSingleAccessPointFromMacAdress(apMacAddress); + if(ap == null){ + ap = new AccessPoint(); + ap.setMac_address(apMacAddress); + apService.storeEntity(ap); + } + + Rssi rssi = new Rssi(); + rssi.setLocation(location); + rssi.setAccessPoint(ap); + rssi.setOccurences(nbSamples); + rssi.setValue(value); + + RSSIService rssiService = new RSSIService(); + + rssiService.storeEntity(rssi); + } + } + } catch (SocketException e) { + System.out.println("[Calibration] SocketException"); + } catch (IOException e) { + System.out.println("[Calibration] IOException"); + }finally{ + if (socket != null ) socket.close(); + } + request.getRequestDispatcher(Param.PATH_HOME).forward(request, response); } private String getMacAddressFromArpTable(String ip) throws IOException { @@ -105,19 +166,18 @@ public class CalibrationServlet extends HttpServlet { return macAddr; } - private String buildRssiRequestMessage(byte [] apIp, int port){ + private String buildRssiRequestMessage(byte [] apIp, int port, String mac){ String request = "http://"; String ip = new String(apIp, StandardCharsets.UTF_8); - String macaddress = (String) getServletContext().getAttribute("macaddress"); String map_id = "1"; String get = "/get"; String macReq = "macs="; request += ip + ":" + port + get + "?"; - request += macReq + macaddress; + request += macReq + mac; System.out.println(request); diff --git a/src/main/java/com/lo53_mobile_localization/core/servlet/PositionServlet.java b/src/main/java/com/lo53_mobile_localization/core/servlet/PositionServlet.java index 3f57c4d..17b4a1c 100644 --- a/src/main/java/com/lo53_mobile_localization/core/servlet/PositionServlet.java +++ b/src/main/java/com/lo53_mobile_localization/core/servlet/PositionServlet.java @@ -1,6 +1,9 @@ package com.lo53_mobile_localization.core.servlet; +import com.lo53_mobile_localization.core.entity.Location; import com.lo53_mobile_localization.core.entity.Rssi; +import com.lo53_mobile_localization.core.service.AccessPointService; +import com.lo53_mobile_localization.core.service.LocationService; import com.lo53_mobile_localization.core.service.RSSIService; import com.lo53_mobile_localization.core.servlet.util.Param; @@ -11,6 +14,7 @@ import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; +import java.net.SocketException; import java.nio.charset.StandardCharsets; import java.util.List; @@ -26,7 +30,7 @@ import javax.servlet.http.HttpServletResponse; urlPatterns = {"/position"} )public class PositionServlet extends HttpServlet { - protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String requestIp = request.getRemoteAddr(); System.out.println("Request from ip : " + requestIp); @@ -51,35 +55,73 @@ import javax.servlet.http.HttpServletResponse; } socket.close(); } catch (IOException iox) { - System.out.println("[Positioning Servlet:Sending GET message to APs] IOException"); - } finally { - if (socket != null) socket.close(); + System.out.println("Position Servlet : error when sending IOException"); } - // Sleep during 500ms try { - Thread.sleep(500); - } catch (InterruptedException e1) { - e1.printStackTrace(); - } + socket = new DatagramSocket(Param.DATAG_LISTENING_PORT); - RSSIService rssiService = new RSSIService(); + long startTime = System.currentTimeMillis(); //fetch starting time - List rssis = rssiService.getRssiWithMacAdress(macAddr); + while (false || (System.currentTimeMillis() - startTime) < 500) { - int nbRes = 0; - for (Rssi r : rssis) { - nbRes++; - } + byte[] receiveData = new byte[1024]; + DatagramPacket packet = new DatagramPacket(receiveData, receiveData.length); + socket.receive(packet); + String receivedData = new String(packet.getData()); + + //msg = "ap:ap:ap:ap:ap:ap" , "xx:xx:xx:xx:xx:xx" , "val" , "nbSamples" + String[] data = receivedData.split(","); + + String apMacAddress = data[0]; + String deviceMac = data[1]; + double value = Double.parseDouble(data[2]); + int nbSamples = Integer.parseInt(data[3]); + + if(nbSamples > 4){ + + //int nbRes = 0; + //for (Rssi r : rssis) { + // nbRes++; + //} + + LocationService locationService = new LocationService(); + AccessPointService apService = new AccessPointService(); + RSSIService rssiService = new RSSIService(); + List rssis = rssiService.getRssiWithMacAdress(macAddr); + Location loc = computeMinimumDistance(); + + request.setAttribute("xLoc", loc.getX()); + request.setAttribute("yLoc", loc.getY()); + + request.getRequestDispatcher(Param.PATH_POSITION).forward(request,response); + } + } + } catch (SocketException e) { + System.out.println("[Calibration] SocketException"); + } catch (IOException e) { + System.out.println("[Calibration] IOException"); + }finally{ + if (socket != null ) socket.close(); + } } + request.setAttribute("xLoc", 40); + request.setAttribute("yLoc", 40); + + request.getRequestDispatcher(Param.PATH_POSITION).forward(request,response); } - protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + + response.setContentType(Param.CONTENT_TYPE); + request.getRequestDispatcher(Param.PATH_POSITION).forward(request,response); + } + private String getMacAdressFromArpTable(String ip) throws IOException { BufferedReader in = new BufferedReader(new FileReader("/proc/net/arp")); @@ -119,4 +161,51 @@ import javax.servlet.http.HttpServletResponse; return request; } + private Location computeMinimumDistance(){ + + Location location = new Location(); + location.setX(25); + location.setY(25); + + return location; + } + + public double rssi_distance( List rss1, List rss2) { + double distance = 0.0; + for (Rssi val:rss1) { + for (Rssi val2 : rss2) { + if (val.getAccessPoint().getMac_address() == val2.getAccessPoint().getMac_address()) { + if(!val.equals(rss2.get(rss2.size()-1))) + distance += (val.getValue() - val2.getValue()) * (val.getValue() - val2.getValue()); + else + distance += (val.getValue() + 95.0) * (val.getValue() + 95.0); + + } + } + } + for (Rssi val:rss2) { + for (Rssi val2 : rss1) { + if (val.getAccessPoint().getMac_address() == val2.getAccessPoint().getMac_address()) { + if(val.equals(rss1.get(rss1.size()-1))) + distance += (val.getValue() + 95.0) * (val.getValue() + 95.0); + } + } + } + return Math.sqrt(distance); + } + + /*Location closest_rssi( List fingerprints, List mes_rssi) { + double minimum_dist; + Location minimum_dist_location = new Location(); + minimum_dist = Double.POSITIVE_INFINITY; + Fingerprint fingerprint = new Fingerprint(); + for (Fingerprint finger:fingerprints) { + if (minimum_dist > rssi_distance(finger.getRSSI(),mes_rssi)){ + minimum_dist = rssi_distance(finger.getRSSI(),mes_rssi); + minimum_dist_location = fingerprint.getLocation(); + } + } + return minimum_dist_location; + }*/ + } \ No newline at end of file diff --git a/src/main/java/com/lo53_mobile_localization/core/servlet/PreferencesServlet.java b/src/main/java/com/lo53_mobile_localization/core/servlet/PreferencesServlet.java index f743fef..86ff530 100644 --- a/src/main/java/com/lo53_mobile_localization/core/servlet/PreferencesServlet.java +++ b/src/main/java/com/lo53_mobile_localization/core/servlet/PreferencesServlet.java @@ -22,7 +22,6 @@ public class PreferencesServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType(Param.CONTENT_TYPE); - request.setAttribute("message", "HELLO THERE"); request.getRequestDispatcher(Param.PATH_PREFERENCES).forward(request,response); } @@ -31,7 +30,7 @@ public class PreferencesServlet extends HttpServlet { response.setContentType(Param.CONTENT_TYPE); - String macAddress = request.getParameter(Param.AP_MAC_ADDRESS); + //String macAddress = request.getParameter(Param.AP_MAC_ADDRESS); String ip = request.getParameter(Param.ATTRIBUTE_IP); String port = request.getParameter(Param.ATTRIBUTE_PORT); @@ -40,12 +39,9 @@ public class PreferencesServlet extends HttpServlet { + "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." + "([01]?\\d\\d?|2[0-4]\\d|25[0-5])$"; - String MAC_PATTERN = "^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$"; + // String MAC_PATTERN = "^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$"; - String PORT_PATTERN = "[0-9]{4}"; - - Pattern patternMac = Pattern.compile(MAC_PATTERN); - Matcher matchMac = patternMac.matcher(macAddress); + String PORT_PATTERN = "[0-6][0-9]{3}"; Pattern patternIP = Pattern.compile(IP_PATTERN); Matcher matchIp = patternIP.matcher(ip); @@ -53,16 +49,15 @@ public class PreferencesServlet extends HttpServlet { Pattern patternPort = Pattern.compile(PORT_PATTERN); Matcher matchPort = patternPort.matcher(port); - if (!matchIp.find() || !matchMac.find() || !matchPort.find()) { + if (!matchIp.find() || !matchPort.find()) { System.out.println("ERROR IN SETTINGS"); request.setAttribute("message", "ERROR IN ONE OF THE FIELDS"); request.getRequestDispatcher(Param.PATH_PREFERENCES).forward(request, response); } else { - System.out.println("MAC ADDRESS = " + macAddress + " IP = " + ip + " PORT = " + port); + System.out.println(" IP = " + ip + " PORT = " + port); - getServletContext().setAttribute("macaddress", macAddress); getServletContext().setAttribute("ip", ip); getServletContext().setAttribute("port", port); diff --git a/src/test/java/com/lo53_mobile_localization/core/service/RssiServiceTest.java b/src/test/java/com/lo53_mobile_localization/core/service/RssiServiceTest.java index 4c110c6..bd58ca9 100644 --- a/src/test/java/com/lo53_mobile_localization/core/service/RssiServiceTest.java +++ b/src/test/java/com/lo53_mobile_localization/core/service/RssiServiceTest.java @@ -82,7 +82,7 @@ public class RssiServiceTest extends HibernateTestHelper{ service.updateEntity(rssi.getId(), rssi); - Rssi storedClient = (Rssi) service.getEntity(rssi.getId()); + Rssi storedClient = service.getEntity(rssi.getId()); assertEquals((int)rssi.getValue(), (int)storedClient.getValue()); } -- libgit2 0.21.4