diff --git a/app/src/main/java/com/example/ueberwachungssystem/Accelerometer.java b/app/src/main/java/com/example/ueberwachungssystem/Accelerometer.java
index f3c92f4..a8731bc 100644
--- a/app/src/main/java/com/example/ueberwachungssystem/Accelerometer.java
+++ b/app/src/main/java/com/example/ueberwachungssystem/Accelerometer.java
@@ -1,6 +1,6 @@
package com.example.ueberwachungssystem;
-
+import static java.lang.Math.sqrt;
import android.content.Context;
import android.hardware.Sensor;
@@ -11,114 +11,129 @@ import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
-
-public class Accelerometer implements Runnable, SensorEventListener {
+public class Accelerometer extends Detector implements SensorEventListener {
Logger logger;
+
private volatile boolean running = false;
public SensorManager sensorManager;
- private int sensorType = Sensor.TYPE_ACCELEROMETER;
+ private static final int sensorType = Sensor.TYPE_LINEAR_ACCELERATION;
private Sensor accelerometer;
private Context context;
- private Thread thread;
- private String threadName = "Accelerometer Thread";
- double[] gravity = new double[3];
- double[] linear_acceleration = new double[3];
- private TextView textViewWorkerThread;
- // In constructor pass Context from MainActivity in Accelerometer class
- public Accelerometer(Context context, TextView textViewWorkerThread){
+ private String threadName = "Accelerometer Thread";
+ boolean alarm = false;
+ //Preallocate memory for the data of each axis of the acceleration sensor
+ float x;
+ float y;
+ float z;
+ float betrag; //Betrag aller drei Achsen sqrt(x*x + y*y + z*z)
+ private TextView textViewWorkerThread;
+ private AppCompatActivity activity;
+ private DetectionReport detectionReport;
+
+
+ // In constructor pass Activity, Context and TextView from MainActivity in Accelerometer class
+ public Accelerometer(Context context, Logger mainLogger, TextView textViewWorkerThread){
+ super(context); //von Detektor
+ logger = mainLogger;
this.context = context;
this.textViewWorkerThread = textViewWorkerThread;
- }
- // Passing Activity's instance as argument on worker thread
- AppCompatActivity activity;
- public Accelerometer(AppCompatActivity activity){
- this.activity = activity;
+ Logger logger = new Logger(this.getClass().getSimpleName(), textViewWorkerThread, "");
}
- private void print (final String s){
- activity.runOnUiThread(new Runnable() {
- @Override
- public void run() {
- textViewWorkerThread.setText(s);
- }
- });
- }
-
- @Override
- public void run() {
- while (running) {
- sensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
- if (sensorManager.getSensorList(sensorType).size() == 0) {
- logger.log("Es gibt den gewünschten Sensor nicht");
- accelerometer = null;
- } else {
- accelerometer = sensorManager.getSensorList(sensorType).get(0);
- }
+ public void getSensor(){
+ sensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE);
+ if(sensorManager.getSensorList(sensorType).size()==0) {
+ logger.log("Es gibt den gewünschten Sensor nicht");
+ accelerometer = null;
+ }
+ else {
+ accelerometer = sensorManager.getSensorList(sensorType).get(0);
+ logger.log("Sensor gefunden");
}
}
- void start(){
- logger.log("Starting" + threadName);
- running = true;
- thread = new Thread(this);
- thread.setName(threadName);
- thread.start();
- logger.log("alright, " + threadName + " started!");
+
+ void start() {
// register the sensor before using //
- sensorManager.registerListener((SensorEventListener) context, accelerometer, SensorManager.SENSOR_DELAY_NORMAL);
- logger.log("Accelerometer, du bist dran!");
+ sensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_GAME);
+ logger.log("Accelerometer, start!");
}
+
void stop() {
// unregister from the sensor to stop using it //
- sensorManager.unregisterListener((SensorEventListener) context, accelerometer);
- logger.log("Das reicht Accelerometer, komm zurück!");
- if (!running){
- logger.log(threadName + " not running.");
- } else {
- logger.log("Stopping " + threadName);
- running = false;
- while (true) {
- try {
- thread.join();
- logger.log("..." + threadName + " stopped");
- break;
- } catch (InterruptedException e){
- e.printStackTrace();
- }
- }
- }
+ sensorManager.unregisterListener(this, accelerometer);
+ logger.log("Accelerometer unregistered!");
}
+
@Override
public void onSensorChanged(SensorEvent event) {
- // Highpass filter to filter out gravity influence
- final double alpha = 0.8;
+ checkAlarm(event);
+ }
- gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0];
- gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1];
- gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2];
- linear_acceleration[0] = event.values[0] - gravity[0];
+ StringBuffer stringBuffer = new StringBuffer();
+ public void checkAlarm (SensorEvent event) {
+ x = event.values[0];
+ y = event.values[1];
+ z = event.values[2];
+ betrag = (float) sqrt(x*x + y*y + z*z);
+ double schwelle = 1.5;
+ //stringBuffer.append("\nBetrag =" + betrag);
+ //logger.log("Betrag" + betrag);
- linear_acceleration[1] = event.values[1] - gravity[1];
- linear_acceleration[2] = event.values[2] - gravity[2];
-
- String sb = "t=" + event.timestamp +
- "\nx=" + event.values[0] + // Wert liegend: x = 0.04
- "\ny=" + event.values[1] + // Wert liegend: y = 0.44
- "\nz=" + event.values[2] + // Wert liegend: z = 9.90 = Erdbeschleunigung --> Wenn Ausrichtung unbekannt ist, müsste kalibrierung bei Start der Bewegungsüberwachung vorgenommen werden
- "\nlin_x=" + linear_acceleration[0] +
- "\nlin_x=" + linear_acceleration[1] +
- "\nlin_x=" + linear_acceleration[2];
-
- logger.clearLog();
- logger.log(sb);
+ if (!alarm) {
+ if (betrag > schwelle) {
+ stringBuffer.append("\n Betragswert über Schwelle, Detection Report wird gleich aufgerufen");
+ //logger.log("Betragswert über Schwelle erkannt, Alarm wird gleich angeschaltet");
+ alarm = true;
+ stringBuffer.append("\nAlarm = " + alarm);
+ detectionReport = new DetectionReport("Accelerometer1", "Bewegung", betrag);
+ stringBuffer.append("\nDetectionReport = " + detectionReport)
+ .append("\nAlarm an" + betrag + event.timestamp);
+ //logger.log("Alarm an");
+ //logger.log("Betrag: " + betrag + event.timestamp);
+ logger.clearLog();
+ logger.log(stringBuffer.toString());
+ stringBuffer.delete(0, stringBuffer.length());
+ }
+ } else {
+ if (betrag < schwelle) {
+ stringBuffer.append("\nAlarm noch an; Neuer Betragswert unter Schwellwert:" + betrag);
+ //logger.log("Alarm ist noch an; Neuer Betragswert unter Schwellwert: " + betrag);
+ alarm = false;
+ //logger.log("Alarm" + alarm);
+ //logger.log("Alarm wieder ausgeschaltet");
+ stringBuffer.append("\nAlarm = " + alarm);
+ } else {
+ logger.log("Betragswert immer noch über Schwellwert: " + betrag + "; Alarm bleibt an.");
+ logger.log("Betragswert immer noch über Schwellwert: " + betrag + "; Alarm bleibt an.");
+ }
+ logger.clearLog();
+ logger.log(stringBuffer.toString());
+ stringBuffer.delete(0, stringBuffer.length());
+ }
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
+ }
+ @Override
+ public void startDetection() {
+ // entspricht void start()
+ if (accelerometer != null) {
+ sensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_GAME);
+ logger.log("Sensor registriert");
+ }
+ }
+
+ @Override
+ public void stopDetection() {
+ // entspricht void stop()
+ sensorManager.unregisterListener(this, accelerometer);
+ logger.log("Vom Sensor abgemeldet");
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/ueberwachungssystem/Beschleunigungssensor.java b/app/src/main/java/com/example/ueberwachungssystem/Beschleunigungssensor.java
index d5fc8e2..64b41fa 100644
--- a/app/src/main/java/com/example/ueberwachungssystem/Beschleunigungssensor.java
+++ b/app/src/main/java/com/example/ueberwachungssystem/Beschleunigungssensor.java
@@ -54,6 +54,7 @@ public class Beschleunigungssensor extends AppCompatActivity implements SensorEv
else
{
sensor = sensorManager.getSensorList(sensorType).get(0);
+ logger.log("Accelerometer gefunden.");
}
}
@@ -89,7 +90,7 @@ public class Beschleunigungssensor extends AppCompatActivity implements SensorEv
y = event.values[1];
z = event.values[2];
betrag = sqrt(x*x + y*y + z*z);
- double schwelle = 1.5;
+ double schwelle = 0.05;
if (!alarm) {
if (betrag > schwelle) {
diff --git a/app/src/main/java/com/example/ueberwachungssystem/MainActivity.java b/app/src/main/java/com/example/ueberwachungssystem/MainActivity.java
index f3ba22b..de11afe 100644
--- a/app/src/main/java/com/example/ueberwachungssystem/MainActivity.java
+++ b/app/src/main/java/com/example/ueberwachungssystem/MainActivity.java
@@ -5,8 +5,11 @@ import static java.lang.Boolean.TRUE;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
+import android.hardware.SensorEvent;
import android.os.Bundle;
+import android.text.method.ScrollingMovementMethod;
import android.view.View;
+import android.widget.Button;
import android.widget.TextView;
import android.widget.ToggleButton;
@@ -14,14 +17,17 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
private Logger logger;
private Context context;
- //private Accelerometer beschleunigungssensor;
- private ThreadDemo threadDemo;
+ private Accelerometer beschleunigungssensor;
+ //private ThreadDemo threadDemo;
private TextView textViewLog;
+ private Button button1;
private TextView textViewWorkerThread;
+ SensorEvent event;
- //private WorkerUsingThread workerUsingThread;
ToggleButton toggleButton1;
+ boolean currentAlarm;
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -35,8 +41,16 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
toggleButton1 = (ToggleButton) findViewById(R.id.toggleButton1); //togglebutton um Thread zu steuern
toggleButton1.setOnClickListener(this);
textViewWorkerThread = (TextView) findViewById(R.id.textViewWorkerThread); //TextView um Thread zu überwachen
- // beschleunigungssensor = new Accelerometer(this);
- threadDemo = new ThreadDemo(this, textViewWorkerThread);
+ textViewWorkerThread.setMovementMethod(new ScrollingMovementMethod());
+
+ //Button to clear Log while Debugging
+ button1 = (Button) findViewById(R.id.button1);
+ button1.setOnClickListener(this);
+
+ //Accelerometer Setup
+ beschleunigungssensor = new Accelerometer(this, logger, textViewWorkerThread);
+ beschleunigungssensor.getSensor();
+
logger.log("onCreate");
}
@@ -48,21 +62,30 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
protected void onPause() {
super.onPause();
//beschleunigungssensor.stop();
- threadDemo.stop();
+ //threadDemo.stop();
}
-
@Override
public void onClick(View v) {
logger.log("toggleButton1 is clicked");
- if (toggleButton1.isChecked()) {
- logger.log("ToggleButton is ON");
- //beschleunigungssensor.start();
- threadDemo.start();
- } else {
- logger.log("ToggleButton is OFF");
- threadDemo.stop();
+ if(v == toggleButton1) {
+ if (toggleButton1.isChecked()) {
+ logger.log("ToggleButton is ON");
+ //beschleunigungssensor.start();
+ beschleunigungssensor.startDetection();
+ logger.log("Detection started");
+ //logger.log(stringBuffer.toString());
+
+ } else {
+ logger.log("ToggleButton is OFF");
+ //threadDemo.stop();
+ //beschleunigungssensor.stop();
+ beschleunigungssensor.stopDetection();
+ logger.log("Detection stopped");
+ }
+ } else if (v == button1) {
+ logger.clearLog();
}
}
}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 0726f26..c3db55a 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -4,17 +4,23 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
- tools:context=".MainActivityBackup">
+ tools:context=".MainActivity">
+ app:layout_constraintTop_toBottomOf="@+id/textViewWorkerThread"
+ app:layout_constraintVertical_bias="0.0" />
+
+
\ No newline at end of file