diff --git a/build.gradle b/build.gradle index 10a9a5f..9e21e7d 100644 --- a/build.gradle +++ b/build.gradle @@ -1,4 +1,4 @@ -version = '0.1.0' +version = '0.2.0-SNAPSHOT' apply plugin: 'java' apply plugin: 'eclipse' @@ -10,14 +10,11 @@ repositories { } dependencies { - compile("com.github.ev3dev-lang-java:lejos-commons:v0.5.1-SNAPSHOT") - compile("com.github.ev3dev-lang-java:ev3dev-lang-java:v0.6.1-SNAPSHOT") - compile("net.logstash.logback:logstash-logback-encoder:4.7") + compile("ch.qos.logback:logback-classic:1.2.3") + compile("com.github.ev3dev-lang-java:lejos-commons:v0.5.0") + compile("com.github.ev3dev-lang-java:ev3dev-lang-java:v0.6.1") - testCompile("junit:junit:4.12") - testCompile("org.hamcrest:hamcrest-junit:2.0.0.0") - testCompile("org.mockito:mockito-core:2.7.22") - testCompile("org.powermock:powermock-module-junit4:1.6.6") + compile("net.logstash.logback:logstash-logback-encoder:4.7") } //Compile diff --git a/releases/batteryMonitor-0.2.0-SNAPSHOT.zip b/releases/batteryMonitor-0.2.0-SNAPSHOT.zip new file mode 100644 index 0000000..b3f2e95 Binary files /dev/null and b/releases/batteryMonitor-0.2.0-SNAPSHOT.zip differ diff --git a/releases/batteryMonitor-0.2.0-SNAPSHOT/README.md b/releases/batteryMonitor-0.2.0-SNAPSHOT/README.md new file mode 100644 index 0000000..199d4f1 --- /dev/null +++ b/releases/batteryMonitor-0.2.0-SNAPSHOT/README.md @@ -0,0 +1,14 @@ +# Technical documentation + +BatteryMonitor is a simple battery monitor +to protect your robots when has battery has a low level. + +The release batteryMonitor will includes: + ++ A fatJar with the solution to measure the battery ++ Linux service (batteryMonitor-service.sh) to be installed on `/etc/init.d` ++ Scripts to Start & Stop the service + +The solution will be managed by the Installer: +https://github.com/ev3dev-lang-java/installer + diff --git a/releases/batteryMonitor-0.2.0-SNAPSHOT/batteryMonitor-all-0.2.0-SNAPSHOT.jar b/releases/batteryMonitor-0.2.0-SNAPSHOT/batteryMonitor-all-0.2.0-SNAPSHOT.jar new file mode 100644 index 0000000..7bad597 Binary files /dev/null and b/releases/batteryMonitor-0.2.0-SNAPSHOT/batteryMonitor-all-0.2.0-SNAPSHOT.jar differ diff --git a/releases/batteryMonitor-0.2.0-SNAPSHOT/batteryMonitor-service.sh b/releases/batteryMonitor-0.2.0-SNAPSHOT/batteryMonitor-service.sh new file mode 100644 index 0000000..c755277 --- /dev/null +++ b/releases/batteryMonitor-0.2.0-SNAPSHOT/batteryMonitor-service.sh @@ -0,0 +1,18 @@ +#!/bin/bash +# Battery Monitor +# +# description: A Java battery monitor to protect EV3Dev hardware + +case $1 in + start) + /bin/bash /home/robot/batteryMonitor/start.sh + ;; + stop) + /bin/bash /home/robot/batteryMonitor/stop.sh + ;; + restart) + /bin/bash /home/robot/batteryMonitor/stop.sh + /bin/bash /home/robot/batteryMonitor/start.sh + ;; +esac +exit 0 \ No newline at end of file diff --git a/releases/batteryMonitor-0.2.0-SNAPSHOT/logback.xml b/releases/batteryMonitor-0.2.0-SNAPSHOT/logback.xml new file mode 100644 index 0000000..f7ddee1 --- /dev/null +++ b/releases/batteryMonitor-0.2.0-SNAPSHOT/logback.xml @@ -0,0 +1,32 @@ + + + + + + + + %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n + + + + + + /home/robot/batteryMonitor/logs/log-${byDay}.log + true + + + %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + + + + + + + \ No newline at end of file diff --git a/releases/batteryMonitor-0.2.0-SNAPSHOT/start.sh b/releases/batteryMonitor-0.2.0-SNAPSHOT/start.sh new file mode 100644 index 0000000..926bbf7 --- /dev/null +++ b/releases/batteryMonitor-0.2.0-SNAPSHOT/start.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +java -server -Dlogback.configurationFile=/home/robot/batteryMonitor/logback.xml -jar /home/robot/batteryMonitor/batteryMonitor-all-0.2.0-SNAPSHOT.jar & + diff --git a/releases/batteryMonitor-0.2.0-SNAPSHOT/stop.sh b/releases/batteryMonitor-0.2.0-SNAPSHOT/stop.sh new file mode 100644 index 0000000..4eba89a --- /dev/null +++ b/releases/batteryMonitor-0.2.0-SNAPSHOT/stop.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +pid=`ps aux | grep batteryMonitor | awk '{print $2}'` +kill -9 $pid diff --git a/scripts/README.md b/scripts/README.md new file mode 100644 index 0000000..199d4f1 --- /dev/null +++ b/scripts/README.md @@ -0,0 +1,14 @@ +# Technical documentation + +BatteryMonitor is a simple battery monitor +to protect your robots when has battery has a low level. + +The release batteryMonitor will includes: + ++ A fatJar with the solution to measure the battery ++ Linux service (batteryMonitor-service.sh) to be installed on `/etc/init.d` ++ Scripts to Start & Stop the service + +The solution will be managed by the Installer: +https://github.com/ev3dev-lang-java/installer + diff --git a/scripts/batteryMonitor-service.sh b/scripts/batteryMonitor-service.sh index c755277..c1a5b9f 100644 --- a/scripts/batteryMonitor-service.sh +++ b/scripts/batteryMonitor-service.sh @@ -15,4 +15,4 @@ case $1 in /bin/bash /home/robot/batteryMonitor/start.sh ;; esac -exit 0 \ No newline at end of file +exit 0 diff --git a/scripts/platform.sh b/scripts/platform.sh new file mode 100644 index 0000000..744b98b --- /dev/null +++ b/scripts/platform.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +EV3="EV3" +BRICKPI="BRICKPI" +PISTORMS="PISTORMS" +UNKNOWN="UNKNOWN" +PLATFORM=$UNKNOWN + +#1. Detect platform +if [ -d "/sys/class/power_supply/legoev3-battery" ]; then + echo "The user has a EV3 Brick" + PLATFORM=$EV3 +elif [ -d "/sys/class/power_supply/brickpi-battery" ]; then + echo "The user has a BrickPi+" + PLATFORM=$BRICKPI +elif [ -d "/sys/class/power_supply/pistorms-battery" ]; then + echo "The user has a PiStorms" + PLATFORM=$PISTORMS +fi +echo "Platform detected: $PLATFORM" +echo diff --git a/scripts/start.sh b/scripts/start.sh index a32dd1e..9678d07 100644 --- a/scripts/start.sh +++ b/scripts/start.sh @@ -1,4 +1,21 @@ #!/bin/bash -java -server -Dlogback.configurationFile=/home/robot/batteryMonitor/logback.xml -jar /home/robot/batteryMonitor/batteryMonitor-all-0.1.0.jar & +source "platform.sh" +if [ "$PLATFORM" == "$EV3" ]; then + echo "Executing a Script for EV3" + cd /sys/class/power_supply/legoev3-battery + while true; do + voltage=`cat voltage_now` + echo $voltage + if [ $voltage -lt 7500000 ]; then + break; + fi + sleep 1m + done + shutdown now +elif [ "$PLATFORM" == "$BRICKPI" ]; then + java -server -Dlogback.configurationFile=/home/robot/batteryMonitor/logback.xml -jar /home/robot/batteryMonitor/batteryMonitor-all-0.2.0-SNAPSHOT.jar & +elif [ "$PLATFORM" == "$PISTORMS" ]; then + java -server -Dlogback.configurationFile=/home/robot/batteryMonitor/logback.xml -jar /home/robot/batteryMonitor/batteryMonitor-all-0.2.0-SNAPSHOT.jar & +fi diff --git a/scripts/stop.sh b/scripts/stop.sh index 4eba89a..7e6b8dd 100644 --- a/scripts/stop.sh +++ b/scripts/stop.sh @@ -1,4 +1,14 @@ #!/bin/bash -pid=`ps aux | grep batteryMonitor | awk '{print $2}'` -kill -9 $pid +source "platform.sh" + +if [ "$PLATFORM" == "$EV3" ]; then + echo "The memory usage is minimum" +elif [ "$PLATFORM" == "$BRICKPI" ]; then + pid=`ps aux | grep batteryMonitor | awk '{print $2}'` + kill -9 $pid +elif [ "$PLATFORM" == "$PISTORMS" ]; then + pid=`ps aux | grep batteryMonitor | awk '{print $2}'` + kill -9 $pid +fi + diff --git a/src/main/java/META-INF/MANIFEST.MF b/src/main/java/META-INF/MANIFEST.MF index 196b3e7..91183b0 100644 --- a/src/main/java/META-INF/MANIFEST.MF +++ b/src/main/java/META-INF/MANIFEST.MF @@ -1,6 +1,6 @@ Manifest-Version: 1.0 Implementation-Title: EV3Dev-lang-java -Implementation-Version: 0.5.0 +Implementation-Version: 0.1.0 Implementation-Vendor: Juan Antonio BreƱa Moral Main-Class: ev3dev.utils.monitor.BatteryMonitorApp diff --git a/src/main/java/ev3dev/utils/monitor/BatteryExecutor.java b/src/main/java/ev3dev/utils/monitor/BatteryExecutor.java index 2ee2b7a..9f6a029 100644 --- a/src/main/java/ev3dev/utils/monitor/BatteryExecutor.java +++ b/src/main/java/ev3dev/utils/monitor/BatteryExecutor.java @@ -1,11 +1,13 @@ package ev3dev.utils.monitor; -import lombok.extern.slf4j.Slf4j; import ev3dev.utils.Shell; +import org.slf4j.Logger; import java.util.concurrent.*; -public @Slf4j class BatteryExecutor { +public class BatteryExecutor { + + private static final Logger log = org.slf4j.LoggerFactory.getLogger(BatteryMonitorApp.class); private final String COMMAND_SHUTDOWN = "sudo shutdown now"; diff --git a/src/main/java/ev3dev/utils/monitor/BatteryMonitorApp.java b/src/main/java/ev3dev/utils/monitor/BatteryMonitorApp.java index b76a517..c599c15 100644 --- a/src/main/java/ev3dev/utils/monitor/BatteryMonitorApp.java +++ b/src/main/java/ev3dev/utils/monitor/BatteryMonitorApp.java @@ -1,8 +1,10 @@ package ev3dev.utils.monitor; -import lombok.extern.slf4j.Slf4j; +import org.slf4j.Logger; -public @Slf4j class BatteryMonitorApp { +public class BatteryMonitorApp { + + private static final Logger log = org.slf4j.LoggerFactory.getLogger(BatteryMonitorApp.class); //TODO Add support to send parameters by command line public static void main(final String... args) throws Exception { diff --git a/src/main/java/ev3dev/utils/monitor/BatteryProvider.java b/src/main/java/ev3dev/utils/monitor/BatteryProvider.java index e2f860d..98adc74 100644 --- a/src/main/java/ev3dev/utils/monitor/BatteryProvider.java +++ b/src/main/java/ev3dev/utils/monitor/BatteryProvider.java @@ -2,7 +2,6 @@ import ev3dev.sensors.Battery; import lejos.hardware.Power; -import lombok.extern.slf4j.Slf4j; public class BatteryProvider { diff --git a/src/main/java/ev3dev/utils/monitor/BatteryTask.java b/src/main/java/ev3dev/utils/monitor/BatteryTask.java index 528107a..efe219c 100644 --- a/src/main/java/ev3dev/utils/monitor/BatteryTask.java +++ b/src/main/java/ev3dev/utils/monitor/BatteryTask.java @@ -1,15 +1,15 @@ package ev3dev.utils.monitor; -import lombok.extern.slf4j.Slf4j; -import ev3dev.sensors.Battery; -import lejos.hardware.Power; +import org.slf4j.Logger; import java.util.ArrayList; import java.util.List; import java.util.concurrent.Callable; import java.util.concurrent.TimeUnit; -public @Slf4j class BatteryTask implements Callable { +public class BatteryTask implements Callable { + + private static final Logger log = org.slf4j.LoggerFactory.getLogger(BatteryTask.class); private static int DEFAULT_VOLTAGE_THRESHOLD = 7500; private static int DEFAULT_VOLTAGE_MEASURE_INTERVAL = 1; diff --git a/src/test/java/ev3dev/mocks/metatest/InsideClass.java b/src/test/java/ev3dev/mocks/metatest/InsideClass.java deleted file mode 100644 index a5ce9f1..0000000 --- a/src/test/java/ev3dev/mocks/metatest/InsideClass.java +++ /dev/null @@ -1,13 +0,0 @@ -package ev3dev.mocks.metatest; - -public class InsideClass { - - - public InsideClass(){ - - } - - public int methodA(){ - return 10; - } -} diff --git a/src/test/java/ev3dev/mocks/metatest/UpperClass.java b/src/test/java/ev3dev/mocks/metatest/UpperClass.java deleted file mode 100644 index 74fc316..0000000 --- a/src/test/java/ev3dev/mocks/metatest/UpperClass.java +++ /dev/null @@ -1,15 +0,0 @@ -package ev3dev.mocks.metatest; - -public class UpperClass { - - final InsideClass insideClass; - - public UpperClass(final InsideClass insideClass){ - this.insideClass = insideClass; - } - - public int methodA(){ - return this.insideClass.methodA() * 2; - } - -} diff --git a/src/test/java/ev3dev/mocks/metatest/UpperClassMockTest.java b/src/test/java/ev3dev/mocks/metatest/UpperClassMockTest.java deleted file mode 100644 index 6e55601..0000000 --- a/src/test/java/ev3dev/mocks/metatest/UpperClassMockTest.java +++ /dev/null @@ -1,37 +0,0 @@ -package ev3dev.mocks.metatest; - -import lombok.extern.slf4j.Slf4j; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.junit.MockitoJUnitRunner; - -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.mockito.BDDMockito.given; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; - -@RunWith(MockitoJUnitRunner.class) -public @Slf4j class UpperClassMockTest { - - @Mock - InsideClass insideClass; - - @InjectMocks - UpperClass upperClass; - - @Test - public void test() throws Exception { - - given(insideClass.methodA()).willReturn(20); - - final int result = upperClass.methodA(); - assertThat(result, is(40)); - - verify(insideClass, times(1)).methodA(); - - } - -}