From 591c0aff5bdd49df51c44160688af993615f6e3e Mon Sep 17 00:00:00 2001 From: rtrimana Date: Mon, 15 Jan 2018 16:27:28 -0800 Subject: [PATCH 1/1] Exchanging cameras between benchmarks; updating database --- .../HomeSecurityController.java | 8 +++--- .../Java/HomeSecurityController/Makefile | 4 +-- .../IrrigationController.java | 24 ++++++++++-------- .../SmartLightsController.java | 11 +++++--- localconfig/mysql/camSet.config | 2 +- localconfig/mysql/cameraSet.config | 10 ++++---- localconfig/mysql/cameras.config | 2 +- others/Mysql/IoTMain.gz | Bin 5768 -> 5768 bytes 8 files changed, 34 insertions(+), 27 deletions(-) diff --git a/benchmarks/Java/HomeSecurityController/HomeSecurityController.java b/benchmarks/Java/HomeSecurityController/HomeSecurityController.java index b6a398a..2ef8dc5 100644 --- a/benchmarks/Java/HomeSecurityController/HomeSecurityController.java +++ b/benchmarks/Java/HomeSecurityController/HomeSecurityController.java @@ -624,11 +624,11 @@ public class HomeSecurityController implements SmartthingsSensorCallback, Smartt */ public void init() { - System.out.println("DEBUG: Stopping here for debug purposes!"); - while(true) { } + //System.out.println("DEBUG: Stopping here for debug purposes!"); + //while(true) { } // Initialize IoTCloud server - /*initIoTCloudServer(); + initIoTCloudServer(); // Iterate over the set of rooms for (RoomSmart rm : roomSet.values()) { @@ -673,7 +673,7 @@ public class HomeSecurityController implements SmartthingsSensorCallback, Smartt } } - }*/ + } } } diff --git a/benchmarks/Java/HomeSecurityController/Makefile b/benchmarks/Java/HomeSecurityController/Makefile index 9d3aee2..ca4234c 100644 --- a/benchmarks/Java/HomeSecurityController/Makefile +++ b/benchmarks/Java/HomeSecurityController/Makefile @@ -22,14 +22,14 @@ PHONY += homesecurity homesecurity: $(JAVAC) $(JFLAGS) *.java cp HomeSecurityController.config $(BIN_DIR)/HomeSecurityController - cp HomeSecurityController.tomoyo $(BIN_DIR)/HomeSecurityController + #cp HomeSecurityController.tomoyo $(BIN_DIR)/HomeSecurityController cd $(BIN_DIR)/HomeSecurityController; $(JAR) $(JARFLAGS) HomeSecurityController.jar ../HomeSecurityController/HomeSecurityController*.class ../HomeSecurityController/*.class ../iotcode/interfaces/SmartthingsSensor*.class ../iotcode/interfaces/SmartthingsActuator*.class ../iotcode/interfaces/Camera*.class ../iotcode/interfaces/Alarm*.class ../iotcode/interfaces/Room*.class ../iotcode/interfaces/ZoneState*.class ../iotcode/interfaces/Resolution*.class PHONY += check-homesecurity check-homesecurity: $(JAVAC) $(JFLAGS) $(CHECKER_OPT) $(ASTUBS) *.java cp HomeSecurityController.config $(BIN_DIR)/HomeSecurityController - cp HomeSecurityController.tomoyo $(BIN_DIR)/HomeSecurityController + #cp HomeSecurityController.tomoyo $(BIN_DIR)/HomeSecurityController cd $(BIN_DIR)/HomeSecurityController; $(JAR) $(JARFLAGS) HomeSecurityController.jar ../HomeSecurityController/HomeSecurityController*.class ../HomeSecurityController/*.class ../iotcode/interfaces/SmartthingsSensor*.class ../iotcode/interfaces/SmartthingsActuator*.class ../iotcode/interfaces/Camera*.class ../iotcode/interfaces/Alarm*.class ../iotcode/interfaces/Room*.class ../iotcode/interfaces/ZoneState*.class ../iotcode/interfaces/Resolution*.class .PHONY: $(PHONY) diff --git a/benchmarks/Java/IrrigationController/IrrigationController.java b/benchmarks/Java/IrrigationController/IrrigationController.java index c06646f..4bcec62 100644 --- a/benchmarks/Java/IrrigationController/IrrigationController.java +++ b/benchmarks/Java/IrrigationController/IrrigationController.java @@ -257,18 +257,18 @@ public class IrrigationController extends UnicastRemoteObject implements Weather } System.out.println("DEBUG: Waiting for phone to send weather information"); - while (waitingForInterface.get()) { - try { - Thread.sleep(1000); - } catch (Exception e) { - e.printStackTrace(); - } - } + //while (waitingForInterface.get()) { + // try { + // Thread.sleep(1000); + // } catch (Exception e) { + // e.printStackTrace(); + // } + //} // TODO: Use a phone input interface later - //inchesPerWeek = 20.00; - //weatherZipCode = 92612; - //daysToWaterOn = 255; - //inchesPerMinute.add(1.50); + inchesPerWeek = 20.00; + weatherZipCode = 92612; + daysToWaterOn = 255; + inchesPerMinute.add(1.50); System.out.println("DEBUG: inchesPerWeek: " + inchesPerWeek); System.out.println("DEBUG: weatherZipCode: " + weatherZipCode); @@ -330,6 +330,8 @@ public class IrrigationController extends UnicastRemoteObject implements Weather // init the sprinkler controller, do it here since it only needs to be done once per controller try { spr.init(); + // Wait until sprinkler is active + Thread.sleep(30000); } catch (Exception e) { e.printStackTrace(); } diff --git a/benchmarks/Java/SmartLightsController/SmartLightsController.java b/benchmarks/Java/SmartLightsController/SmartLightsController.java index 9f3ad93..4f1c915 100644 --- a/benchmarks/Java/SmartLightsController/SmartLightsController.java +++ b/benchmarks/Java/SmartLightsController/SmartLightsController.java @@ -340,7 +340,7 @@ public class SmartLightsController { System.out.println("Initialized rooms!"); // Setup the cameras, start them all and assign each one a motion detector - for (CameraSmart cam : cameras.values()) { +/* for (CameraSmart cam : cameras.values()) { // Each camera will have a motion detector unique to it since the motion detection has state MotionDetection mo = new MotionDetection(12, 0.5f, 10, 10); @@ -362,6 +362,8 @@ public class SmartLightsController { camMotionDetect.put(cam, mo); } System.out.println("Initialized cameras!"); +*/ + System.out.println("Skipped cameras!"); //Initialize the light-bulbs, will turn off the bulb for (LightBulbSmart bulb : mainRoomLightBulbs.values()) { @@ -371,9 +373,12 @@ public class SmartLightsController { Thread.sleep(1000); } System.out.println("Initialized bulbs!"); + + System.out.println("STOP here until we have 2 more working cameras!"); + while (true) { } // Run the main loop that will keep check the bulbs and rooms periodically - while (true) { +/* while (true) { // Run this code every long currentTimeSeconds = (new Date()).getTime() / 1000; @@ -410,7 +415,7 @@ public class SmartLightsController { } } - } + }*/ } } diff --git a/localconfig/mysql/camSet.config b/localconfig/mysql/camSet.config index 9b21ecd..b6c0316 100644 --- a/localconfig/mysql/camSet.config +++ b/localconfig/mysql/camSet.config @@ -1,5 +1,5 @@ SELECT * FROM CameraSmart WHERE -ID='CM4' +ID='CM2' ; diff --git a/localconfig/mysql/cameraSet.config b/localconfig/mysql/cameraSet.config index 4233b23..5798c17 100644 --- a/localconfig/mysql/cameraSet.config +++ b/localconfig/mysql/cameraSet.config @@ -1,5 +1,5 @@ -SELECT * FROM -CameraSmart -WHERE -ID='CM3' -; +SELECT * FROM +CameraSmart +WHERE +ID='CM1' +; diff --git a/localconfig/mysql/cameras.config b/localconfig/mysql/cameras.config index e84b464..d4f64bd 100644 --- a/localconfig/mysql/cameras.config +++ b/localconfig/mysql/cameras.config @@ -1,5 +1,5 @@ SELECT * FROM CameraSmart WHERE -ID='CM1' or ID='CM2' +ID='CM3' or ID='CM4' ; diff --git a/others/Mysql/IoTMain.gz b/others/Mysql/IoTMain.gz index 123e17bec1456172b01cfc21ba41ca320fca69ae..5604d94dc3d2f192d392eae8fb95c599a2792660 100644 GIT binary patch literal 5768 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