From 90aea5b1bc6bdf604b73b83a1f1c5a56d4e0d47c Mon Sep 17 00:00:00 2001 From: Leon Market Date: Sat, 17 Jun 2023 23:58:34 +0200 Subject: [PATCH] Added LinkedBlockingQueue to collect data, added Thread to evaluate data from queue --- .../ueberwachungssystem/Accelerometer.java | 56 +++++++++-------- .../SensorValueThread.java | 61 +++++++++++++++++++ 2 files changed, 91 insertions(+), 26 deletions(-) create mode 100644 app/src/main/java/com/example/ueberwachungssystem/SensorValueThread.java diff --git a/app/src/main/java/com/example/ueberwachungssystem/Accelerometer.java b/app/src/main/java/com/example/ueberwachungssystem/Accelerometer.java index 02926b1..d4790a9 100644 --- a/app/src/main/java/com/example/ueberwachungssystem/Accelerometer.java +++ b/app/src/main/java/com/example/ueberwachungssystem/Accelerometer.java @@ -9,6 +9,8 @@ import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.widget.TextView; +import java.util.concurrent.LinkedBlockingQueue; + public class Accelerometer extends Detector implements SensorEventListener { Logger logger; @@ -25,6 +27,9 @@ public class Accelerometer extends Detector implements SensorEventListener { private DetectionReport detectionReport; TextView textViewLog; + //Queue for taking in values + LinkedBlockingQueue linkedBlockingQueue = new LinkedBlockingQueue<>(); + // In constructor pass Activity, Context and TextView from MainActivity in Accelerometer class public Accelerometer(Context context, Logger mainLogger, TextView textViewLog){ @@ -48,59 +53,58 @@ public class Accelerometer extends Detector implements SensorEventListener { } - void start() { - // register the sensor before using // - sensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL); - logger.log("Accelerometer, start!"); - } + // void start wird überflüssig mit void startDetection() + //void start() { + // // register the sensor before using // + // sensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL); + // logger.log("Accelerometer, registered"); + //} - - void stop() { - // unregister from the sensor to stop using it // - sensorManager.unregisterListener(this, accelerometer); - logger.log("Accelerometer unregistered!"); - } + // void stop wird überflüssig mit void stopDetection() + //void stop() { + // // unregister from the sensor to stop using it // + // sensorManager.unregisterListener(this, accelerometer); + // logger.log("Accelerometer unregistered!"); + //} @Override public void onSensorChanged(SensorEvent event) { - checkAlarm(event); + try { + checkAlarm(event); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } } StringBuffer stringBuffer = new StringBuffer(); - public void checkAlarm (SensorEvent event) { + public void checkAlarm (SensorEvent event) throws InterruptedException { 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; + float threshold = 1.5F; 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"); + if (betrag > threshold) { 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); + stringBuffer.append("\nDetectionReport = ").append(detectionReport).append("\nAlarm an").append(betrag).append(event.timestamp); + linkedBlockingQueue.put(betrag); 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); + if (betrag < threshold) { + stringBuffer.append("\nAlarm noch an; Neuer Betragswert unter Schwellwert:").append(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); + stringBuffer.append("\nAlarm = ").append(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()); diff --git a/app/src/main/java/com/example/ueberwachungssystem/SensorValueThread.java b/app/src/main/java/com/example/ueberwachungssystem/SensorValueThread.java new file mode 100644 index 0000000..402bdf5 --- /dev/null +++ b/app/src/main/java/com/example/ueberwachungssystem/SensorValueThread.java @@ -0,0 +1,61 @@ +package com.example.ueberwachungssystem; + +import androidx.appcompat.app.AppCompatActivity; + +import java.util.concurrent.LinkedBlockingQueue; + +public class SensorValueThread implements Runnable { + + private volatile boolean running = false; + private Thread thread; + private String threadname = "sensorValueThread"; + Logger logger; + LinkedBlockingQueue linkedBlockingQueue; + //AppCompatActivity activity; + + //Constructor muss die LinkedBlockingQueue übergeben bekommen + public SensorValueThread(LinkedBlockingQueue linkedBlockingQueue){ + this.linkedBlockingQueue = linkedBlockingQueue; + } + + @Override + public void run() { + while (running){ + //Code to execute while running == true, i.e. reading queue and + try { + linkedBlockingQueue.take(); + Thread.sleep(100); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + + void start() { + logger.log("Starting " + threadname + "..."); + running = true; + thread = new Thread(this); + thread.setName(threadname); + thread.start(); + logger.log("..." + threadname + " started"); + } + + void stop() { + 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(); + } + } + } + } + +}