Compare commits

..
Author SHA1 Message Date
nutzma75019 0423a56117 Senden der Geräte-IP-Adresse (in Device Repository)
Senden der zusammengesetzten Nachricht vom Message String Builder --> Teile der alten Testnachricht in WiFiCommunication entfernt
2023-06-20 10:42:04 +02:00
nutzma75019 a13f4e295b Änderungen in:
messageStringBuilder: Hinzufügen der Nachricht-ID (immer 1) und der Gruppen-ID (immer Gruppe3)
getNewReceivedMessage: Zuweisung der neuen Array-Felder von messageString an die jeweiligen Variablen, Einbinden der if-Bedingung: nur die Funktion nach dem Message Split weiter ausführen, wenn erstes Array-Feld ="1" und Array-Länge=7 ist
WICHTIG: Datentyp von sensorMassage (Zeile 84) ist int --> zeigen wir empfangenen float Wert als Int an? Gleiches in getSensorMassage-Funktion (Z.257)
2023-06-19 23:23:27 +02:00
Tinzch67102 c57d277dfb Test 2023-06-19 22:01:35 +02:00
9 changed files with 106 additions and 174 deletions
-3
View File
@@ -29,9 +29,6 @@
<activity <activity
android:name=".AccelerometerActivity" android:name=".AccelerometerActivity"
android:exported="false" /> android:exported="false" />
<activity
android:name=".VideoPreviewActivity"
android:exported="false" />
<activity <activity
android:name=".MainActivity" android:name=".MainActivity"
android:exported="true"> android:exported="true">
@@ -92,7 +92,7 @@ public class AccelerometerActivity extends AppCompatActivity implements SensorEv
} }
}); });
mAccelerometerViewModel.getAccelerometerAlarmDetected().observe(this, new Observer<Boolean>() { mAccelerometerViewModel.getMovementDetectedValue().observe(this, new Observer<Boolean>() {
@Override @Override
public void onChanged(Boolean aBoolean) { public void onChanged(Boolean aBoolean) {
if (aBoolean) { if (aBoolean) {
@@ -27,7 +27,6 @@ public class MainActivity extends AppCompatActivity {
private Button audiodetectionAndAccelerometerButton; private Button audiodetectionAndAccelerometerButton;
private Button videodetectionAndAccelerometerButton; private Button videodetectionAndAccelerometerButton;
private Button connectionButton; private Button connectionButton;
private Button prewview_kamera;
private MainActivityViewModel mMainActivityViewModel; private MainActivityViewModel mMainActivityViewModel;
@Override @Override
@@ -41,7 +40,6 @@ public class MainActivity extends AppCompatActivity {
audiodetectionAndAccelerometerButton = (Button) findViewById(R.id.audiodetectionAndAccelerometerButton); audiodetectionAndAccelerometerButton = (Button) findViewById(R.id.audiodetectionAndAccelerometerButton);
videodetectionAndAccelerometerButton = (Button) findViewById(R.id.videodetectionAndAccelerometerButton); videodetectionAndAccelerometerButton = (Button) findViewById(R.id.videodetectionAndAccelerometerButton);
connectionButton = (Button) findViewById(R.id.connectionButton); connectionButton = (Button) findViewById(R.id.connectionButton);
prewview_kamera = (Button) findViewById(R.id.preview_kamera);
RecyclerView deviceListRecyclerView = findViewById(R.id.deviceListRecyclerView); RecyclerView deviceListRecyclerView = findViewById(R.id.deviceListRecyclerView);
deviceListRecyclerView.setLayoutManager(new LinearLayoutManager(this)); deviceListRecyclerView.setLayoutManager(new LinearLayoutManager(this));
@@ -86,17 +84,6 @@ public class MainActivity extends AppCompatActivity {
} }
}); });
prewview_kamera.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mMainActivityViewModel.isCameraAccessAllowed(MainActivity.this)) {
openVideoPrewvoewActivity();
}
else {
mMainActivityViewModel.accessRequestCamera(MainActivity.this);
}
}
});
audiodetectionButton.setOnClickListener(new View.OnClickListener() { audiodetectionButton.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
@@ -144,10 +131,6 @@ public class MainActivity extends AppCompatActivity {
} }
}); });
} }
public void openVideoPrewvoewActivity() {
Intent intent = new Intent(this, VideoPreviewActivity.class);
startActivity(intent);
}
public void openAudiodetectionActivity(){ public void openAudiodetectionActivity(){
Intent intent = new Intent(this, AudiodetectionActivity.class); Intent intent = new Intent(this, AudiodetectionActivity.class);
startActivity(intent); startActivity(intent);
@@ -1,61 +0,0 @@
package com.example.greenwatch;
import android.os.Bundle;
import android.util.Size;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
import androidx.camera.core.CameraSelector;
import androidx.camera.core.ImageAnalysis;
import androidx.camera.core.ImageProxy;
import androidx.camera.core.Preview;
import androidx.camera.lifecycle.ProcessCameraProvider;
import androidx.camera.view.PreviewView;
import androidx.core.content.ContextCompat;
import androidx.lifecycle.LifecycleOwner;
import com.google.common.util.concurrent.ListenableFuture;
import java.util.concurrent.ExecutionException;
public class VideoPreviewActivity extends AppCompatActivity {
private Button backToMainActivity;
private PreviewView previewView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_preview_kamera);
backToMainActivity = (Button) findViewById(R.id.videodetectorBackToMainActivity);
previewView = findViewById(R.id.previewView);
backToMainActivity.setOnClickListener(v -> finish());
final ListenableFuture<ProcessCameraProvider> cameraProviderFuture = ProcessCameraProvider.getInstance(this);
cameraProviderFuture.addListener(() -> {
try {
bindImageAnalysis(cameraProviderFuture.get());
} catch (ExecutionException | InterruptedException e) {
e.printStackTrace();
}
}, ContextCompat.getMainExecutor(this));
}
private void bindImageAnalysis(ProcessCameraProvider cameraProvider) {
ImageAnalysis.Builder builder = new ImageAnalysis.Builder();
builder.setTargetResolution(new Size(640, 480));
builder.setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST);
ImageAnalysis imageAnalysis = builder.build();
imageAnalysis.setAnalyzer(
ContextCompat.getMainExecutor(this),
ImageProxy::close);
Preview preview = new Preview.Builder().build();
CameraSelector cameraSelector = new CameraSelector.Builder().requireLensFacing(CameraSelector.LENS_FACING_BACK).build();
preview.setSurfaceProvider(previewView.getSurfaceProvider());
cameraProvider.bindToLifecycle((LifecycleOwner) this, cameraSelector, imageAnalysis, preview);
}
}
@@ -1,5 +1,7 @@
package com.example.greenwatch.communication; package com.example.greenwatch.communication;
import android.util.Log;
import com.example.greenwatch.repositories.DeviceRepository; import com.example.greenwatch.repositories.DeviceRepository;
import java.io.IOException; import java.io.IOException;
@@ -56,23 +58,6 @@ public class WiFiCommunication {
this.isNewMessage = isNewMessage; this.isNewMessage = isNewMessage;
} }
public static String getLocalIpAddress() {
try {
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface networkInterface = (NetworkInterface) ((Enumeration<?>) en).nextElement();
for (Enumeration<InetAddress> addresses = networkInterface.getInetAddresses(); addresses.hasMoreElements();) {
InetAddress inetAddress = addresses.nextElement();
if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) {
return inetAddress.getHostAddress();
}
}
}
} catch (SocketException ex) {
ex.printStackTrace();
}
return null;
}
public void stopCommunication() { public void stopCommunication() {
running = false; running = false;
socket.close(); socket.close();
@@ -89,7 +74,7 @@ public class WiFiCommunication {
{ {
isNewMessage = false; isNewMessage = false;
//todo: adapt send String //todo: adapt send String
String txString = getLocalIpAddress() + " sends. #" + tmpCnt++ + sendMessage; String txString = sendMessage;
byte[] txBuffer = txString.getBytes(); byte[] txBuffer = txString.getBytes();
DatagramPacket txPacket = new DatagramPacket(txBuffer, txBuffer.length, address, port); DatagramPacket txPacket = new DatagramPacket(txBuffer, txBuffer.length, address, port);
@@ -1,14 +1,21 @@
package com.example.greenwatch.repositories; package com.example.greenwatch.repositories;
import android.util.Log;
import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.MutableLiveData;
import com.example.greenwatch.models.Device; import com.example.greenwatch.models.Device;
import com.example.greenwatch.communication.WiFiCommunication; import com.example.greenwatch.communication.WiFiCommunication;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.Enumeration;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
@@ -76,21 +83,23 @@ public class DeviceRepository {
public void getNewReceivedMessage(String newMessage) { public void getNewReceivedMessage(String newMessage) {
String[] messageString = messageStringSplitter(newMessage); String[] messageString = messageStringSplitter(newMessage);
String timeStamp = messageString[0]; if(messageString[0]=="1" && messageString.length == 7){
String deviceID = messageString[1]; String timeStamp = messageString[1];
boolean sensorStatus = convertSensorStatus(messageString[2]); String deviceID = messageString[3];
String sensorType = messageString[3]; boolean sensorStatus = convertSensorStatus(messageString[4]);
int sensorMassage = Integer.valueOf(messageString[4]); String sensorType = messageString[5];
int sensorMassage = Integer.valueOf(messageString[6]);
if (deviceID.equals(checkDeviceID(localDeviceUUID))) { if (deviceID.equals(checkDeviceID(localDeviceUUID))) {
return; return;
} }
if(!connectedDevicesList.containsKey(deviceID)) { if(!connectedDevicesList.containsKey(deviceID)) {
createNewDevice(timeStamp, deviceID, sensorStatus, sensorType, sensorMassage); createNewDevice(timeStamp, deviceID, sensorStatus, sensorType, sensorMassage);
} }
else { else {
updateDevice(deviceID, timeStamp, sensorStatus, sensorType, sensorMassage); updateDevice(deviceID, timeStamp, sensorStatus, sensorType, sensorMassage);
}
} }
} }
@@ -98,9 +107,14 @@ public class DeviceRepository {
StringBuilder message = new StringBuilder(); StringBuilder message = new StringBuilder();
Device device = connectedDevicesList.get(deviceID); Device device = connectedDevicesList.get(deviceID);
if(device != null) { if(device != null) {
message.append(device.getTimeStamp()) message.append("1")
.append(delimiter) .append(delimiter)
.append(device.getDeviceID()) .append(device.getTimeStamp())
.append(delimiter)
.append("Gruppe3")
.append(delimiter)
//.append(device.getDeviceID())
.append(getLocalIpAddress(deviceID))
.append(delimiter) .append(delimiter)
.append(device.getSensorStatus()) .append(device.getSensorStatus())
.append(delimiter) .append(delimiter)
@@ -117,6 +131,10 @@ public class DeviceRepository {
.append(delimiter) .append(delimiter)
.append("") .append("")
.append(delimiter) .append(delimiter)
.append("")
.append(delimiter)
.append("")
.append(delimiter)
.append(""); .append("");
} }
return message.toString(); return message.toString();
@@ -319,4 +337,25 @@ public class DeviceRepository {
} }
return false; return false;
} }
public String getLocalIpAddress(String deviceID) {
String checkedDeviceID = checkDeviceID(deviceID);
Device device = connectedDevicesList.get(checkedDeviceID);
if(device != null){
try {
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface networkInterface = (NetworkInterface) ((Enumeration<?>) en).nextElement();
for (Enumeration<InetAddress> addresses = networkInterface.getInetAddresses(); addresses.hasMoreElements();) {
InetAddress inetAddress = addresses.nextElement();
if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) {
return inetAddress.getHostAddress();
}
}
}
} catch (SocketException ex) {
ex.printStackTrace();
}
}
return "";
}
} }
@@ -6,59 +6,86 @@ import androidx.lifecycle.ViewModel;
import com.example.greenwatch.models.Device; import com.example.greenwatch.models.Device;
import com.example.greenwatch.repositories.DeviceRepository; import com.example.greenwatch.repositories.DeviceRepository;
import com.example.greenwatch.sensors.AccelerometerSensor;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;
public class AccelerometerViewModel extends ViewModel implements ViewModelInterface { public class AccelerometerViewModel extends ViewModel implements ViewModelInterface {
private MutableLiveData<List<Device>> mDeviceList; private MutableLiveData<List<Device>> mDeviceList;
private MutableLiveData<Boolean> mAccelerometerAlarmDetected; private MutableLiveData<Boolean> mMovementDetected = new MutableLiveData<>();
private MutableLiveData<List<Device>> mAlarmHistoryList; private MutableLiveData<List<Device>> mAlarmHistoryList;
private MutableLiveData<Boolean> mStartAlarmRecording; private MutableLiveData<Boolean> mStartAlarmRecording;
private AccelerometerSensor mAccelerometerSensor;
private DeviceRepository mDeviceRepository; private DeviceRepository mDeviceRepository;
private ArrayList<Float> Gesamt_be;
int arraySize = 500;
int functionCallCount;
float meanValue;
float offsetValue;
float thresholdValue;
boolean startMeasuring;
@Override @Override
public void init() { public void init() {
if (mDeviceRepository == null) {
mDeviceRepository = DeviceRepository.getInstance();
}
if (mAccelerometerSensor == null) {
mAccelerometerSensor = AccelerometerSensor.getInstance();
}
if (mDeviceList == null) { if (mDeviceList == null) {
mDeviceRepository = DeviceRepository.getInstance();
mDeviceList = mDeviceRepository.getConnectedDeviceList(); mDeviceList = mDeviceRepository.getConnectedDeviceList();
}
if (mAlarmHistoryList == null) {
mAlarmHistoryList = mDeviceRepository.getAlarmHistoryDeviceList(); mAlarmHistoryList = mDeviceRepository.getAlarmHistoryDeviceList();
}
if (mStartAlarmRecording == null) {
mStartAlarmRecording = mDeviceRepository.getStartAlarmRecording(); mStartAlarmRecording = mDeviceRepository.getStartAlarmRecording();
} }
if (mAccelerometerAlarmDetected == null) { initGesamtBE();
mAccelerometerAlarmDetected = mAccelerometerSensor.getAccelerometerAlarmDetected(); mMovementDetected.setValue(false);
functionCallCount = 0;
meanValue = 0f;
offsetValue = 0.1f;
thresholdValue = 0.15f;
startMeasuring = false;
}
public void initGesamtBE() {
Gesamt_be = new ArrayList<>(arraySize);
for (int i = 0; i < arraySize; i++) {
Gesamt_be.add(0f);
} }
} }
public void addValueToGesamtBE(float newValue) { public void addValueToGesamtBE(float newValue) {
mAccelerometerSensor.addValueToGesamtBE(newValue); if (Gesamt_be.size() == arraySize) {
Gesamt_be.remove(Gesamt_be.size() -1);
}
Gesamt_be.add(0, newValue);
functionCallCount++;
} }
public void meanValueCalculation() { public void meanValueCalculation() {
mAccelerometerSensor.meanValueCalculation(); for (float element : Gesamt_be) {
meanValue += Math.abs(element);
}
meanValue = meanValue/arraySize;
} }
public void calibrateAccelerometerSensor() { public void calibrateAccelerometerSensor() {
mAccelerometerSensor.calibrateAccelerometerSensor(); if (functionCallCount <= arraySize) {
offsetValue = meanValue;
}
else {
startMeasuring = true;
}
} }
public void checkAlarmCondition() { public void checkAlarmCondition() {
mAccelerometerSensor.checkAlarmCondition(); if (meanValue > (thresholdValue + offsetValue) && startMeasuring && !mMovementDetected.getValue()) {
mMovementDetected.setValue(true);
}
else if (meanValue < (thresholdValue + offsetValue) && mMovementDetected.getValue()){
mMovementDetected.setValue(false);
}
} }
public LiveData<Boolean> getAccelerometerAlarmDetected() { public LiveData<Boolean> getMovementDetectedValue() {
return mAccelerometerAlarmDetected; return mMovementDetected;
} }
@Override @Override
@@ -8,12 +8,6 @@
android:padding="10dp" android:padding="10dp"
tools:context=".MainActivity"> tools:context=".MainActivity">
<Button
android:id="@+id/preview_kamera"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="PrewView Kamera" />
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/alarmHistoryListRecyclerView" android:id="@+id/alarmHistoryListRecyclerView"
android:layout_width="match_parent" android:layout_width="match_parent"
@@ -28,7 +22,6 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="3" android:layout_weight="3"
tools:listitem="@layout/device_item"> tools:listitem="@layout/device_item">
</androidx.recyclerview.widget.RecyclerView> </androidx.recyclerview.widget.RecyclerView>
<LinearLayout <LinearLayout
@@ -1,31 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="">
<Button
android:id="@+id/videodetectorBackToMainActivity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Back to MainActivity">
</Button>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/erklaerung">
<androidx.camera.view.PreviewView
android:id="@+id/previewView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</FrameLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"/>
</androidx.constraintlayout.widget.ConstraintLayout>