Erste Schritte Dynamisch Objekte erzeugen und diese durchsuchen

DennisSA

Mitglied
Hallo Java-User,
ich bin gerade an einem Problem dran, bei dem ich nicht weiter komme.

Folgende Situation:
Ich schreibe eine App in Android (Eclipse) für ein Laborprojekt meiner Hochschule. Innerhalb dieser App wird via Bluetooth nach "Sensoren" gesucht, ohne mich vorher mit ihnen koppeln zu müssen. Diese Sensoren senden ihre MAC-Adresse mit, sowie den jeweiligen Messwert (Temperatur bspw.). Dieser Messwert wird dann dargestellt auf dem Smartphone und das ganze wiederholt sich alle 500 Millisekunden. Soviel zum Szenario. Jeder Sensor liefert also alle 500ms einen neuen Messwert aus.

Bisher habe ich 2 Sensoren benutzt, deren MAC-Adresse mir bekannt waren und konnte so abfragen ob der Messwert jetzt zu Sensor1 oder Sensor2 gehört. Mein Prof hätte nun gern, dass das ganze dynamisch läuft, heißt: Wenn 10 Sensoren da sind, sollen 10 angezeigt werden. Da aber jeder alle 500ms neue Messwerte sendet, muss ich den jeweiligen Messwert anhand der MAC-Adresse dem jeweiligen Sensor zuordnen. Als Obergrenze werden 256 unterschiedliche Sensoren (und damit auch MAC-Adressen) festgelegt.

Ich brauche also ein Konstrukt, welches abhängig von der Anzahl der Sensoren unterschiedlich viele Anzeigen auf dem Display realisiert und diese dann jeweils "updated" sobald ein bereits bekannter Sensor einen neuen Messwert sendet. Wenn ein Sensor außerhalb der Bluetooth-Reichweite ist, dann soll der Messwert auf dem Display auch wieder verschwinden/gelöscht werden.

Leider habe ich keine Ahnung in welche Richtung ich dort gehen muss. Vielleicht habt ihr mir einen Tipp oder einen Ansatz.

Jeder Sensor hat eine MAC-Adresse und einen Messwert. Ich dachte da schon an ein "Struct" (was in Java ja nicht existiert, jedoch über eine Klasse realisiert werden kann), jedoch scheitere ich im Ansatz.

MAC-Adresse bekomme ich vom Scan als "String" und der Messwert ist ein byte[] Array

EDIT: Als Ablauf:
1. Scannen
2. Überprüfung: if(neuer Sensor?) --> Variable mit MAC-Adresse und Messwert anlegen
else(bereits bekannter Sensor --> Messwert updaten)
 
Zuletzt bearbeitet:

DennisSA

Mitglied
Das ist nicht zeitabhängig. Wenn der Scan-Prozess diesen Sensor nicht mehr findet, dann ist er außer Reichweite.

Ich geb mal ein Beispiel:
Scan-Prozess1 liefert Sensor1, Sensor 3, Sensor4, Sensor5

Scan-Prozess2 liefert Sensor1, Sensor 2, Sensor4, Sensor5

Das heißt Sensor3 wird nicht mehr gefunden (die MAC-Adresse von Sensor3), also soll Sensor3 nicht weiter angezeigt werden. Dafür kam Sensor2 neu dazu.
 

Flown

Administrator
Mitarbeiter
Die Frage ist jetzt, wie du deine Daten darstellen kannst? Oder wie du am besten herausfindest, welche Sensoren schon vorhanden sind und updatest?
 

DennisSA

Mitglied
Die Daten werden in einer Art Diagramm dargestellt. Die Diagrammfunktion benötigt nur den Messwert und den Sensornamen und macht den Rest (wurde nicht von mir entwickelt).
 

Flown

Administrator
Mitarbeiter
Also ich würde mir soetwas wie einen SensorManager basteln, der mir alle aktuellen Sensoren (die Verbunden sind) hält. Unter verbunden, verstehe ich die < 500 ms alte Temperatur geliefert haben.

Jedes mal, wenn ein Sensor zum Senden beginnt, würde ich einen Timer starten, der nach ~600 ms den Sensor aus dem Manager löscht und die GUI updated.
Wenn die Nachrichten regelmäßig ankommen, dann wird der Timer jedes mal zurückgesetzt (also ein klassischer time out).

Also ich hab mal was gebastelt:

Java:
public interface MeasurementListener {
	void receive(String macId, int temperature);
}

Java:
import java.util.Map;
import java.util.Map.Entry;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.ConcurrentHashMap;

public class SensorManager implements MeasurementListener {
	private Map<String, Integer> sensors;
	private Map<String, Timer> timers;
	private int updates = 0;
	
	public SensorManager() {
		sensors = new ConcurrentHashMap<>();
		timers = new ConcurrentHashMap<>();
	}
	
	public synchronized void display(String s) {
		System.out.println("----------------- UPDATE " + updates++ + "-----------------------");
		System.out.println("----------------- " + s + " ------------------------");
		for (Entry<String, Integer> sensor : sensors.entrySet()) {
			System.out.println(sensor.getKey() + ": " + sensor.getValue());
		}
	}
	
	@Override
	public void receive(String macId, int temperature) {
		if (sensors.containsKey(macId)) {
			timers.remove(macId).cancel();
		}
		sensors.put(macId, temperature);
		Timer t = new Timer();
		timers.put(macId, t);
		t.schedule(new TimerTask() {
			@Override
			public void run() {
				sensors.remove(macId);
				timers.remove(macId);
				display("Removed");
			}
		}, 600);
		
		display("Added");
	}
}

Java:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

public class SensorTest {
	
	public static void main(String... args) {
		int numSensors = (int) (Math.random() * 5) + 2;
		TemperatureSensor[] sensors = new TemperatureSensor[numSensors];
		SensorManager manager = new SensorManager();
		ExecutorService exec = Executors.newCachedThreadPool();
		for (int i = 0; i < numSensors; i++) {
			TemperatureSensor sensor = new TemperatureSensor("Sensor" + i, manager);
			exec.execute(sensor);
			sensors[i] = sensor;
		}
		try {
			TimeUnit.SECONDS.sleep(10);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		
		for (TemperatureSensor sensor : sensors) {
			sensor.stop();
		}
		exec.shutdown();
	}
}

Java:
import java.util.Random;
import java.util.concurrent.TimeUnit;

public class TemperatureSensor implements Runnable {
	private final String id;
	private boolean isRunning;
	private final MeasurementListener listener;
	
	public TemperatureSensor(String id, MeasurementListener listener) {
		this.id = id;
		this.listener = listener;
		this.isRunning = true;
	}
	
	public String getId() {
		return id;
	}
	
	public void stop() {
		isRunning = false;
	}
	
	@Override
	public void run() {
		Random rand = new Random();
		while (isRunning) {
			listener.receive(getId(), rand.nextInt(30));
			try {
				TimeUnit.MILLISECONDS.sleep(rand.nextBoolean() ? 500 : 1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}
 

DennisSA

Mitglied
Danke für deine Mühe. Teile aus dem Code hab ich jetz mal übernommen und bin meinem Ziel ein wenig näher gerückt.

Mich würde nur noch interessieren wie ich (mit einer Schleife oder so) die Datensätze nach einem bestimmten Sensor durchsuchen kann. Wenn die Suche bspw. Sensor41 nicht findet, dann soll dieser angelegt werden.
 

Flown

Administrator
Mitarbeiter
Naja wenn du das mit einer Map löst, so wie ich, dann frag doch, ob der Key enthalten ist mit containsKey?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Objekte dynamisch erzeugen? Java Basics - Anfänger-Themen 6
Z Objekte dynamisch erzeugen Java Basics - Anfänger-Themen 19
R Objekte dynamisch erstellen? Java Basics - Anfänger-Themen 14
B Klassen Objekte während der Laufzeit dynamisch anlegen Java Basics - Anfänger-Themen 8
R Liste graphischer Objekte z.B. JButton dynamisch erstellen Java Basics - Anfänger-Themen 13
6 Swing: Dynamisch erzeugte Objekte sind verschoben Java Basics - Anfänger-Themen 2
S Objekte dynamisch anlegen Java Basics - Anfänger-Themen 3
F Objekte dynamisch erstelle Java Basics - Anfänger-Themen 11
districon Dynamisch Programmierung/Backtracking/Memoization Java Basics - Anfänger-Themen 3
T Klassen Denkfehler im Klassen "dynamisch" instanzieren? Java Basics - Anfänger-Themen 4
J Verundung dynamisch gestalten Java Basics - Anfänger-Themen 21
B Folgende Abfrage dynamisch programmieren? Java Basics - Anfänger-Themen 8
R Datenbank-Werte dynamisch ausgeben Java Basics - Anfänger-Themen 19
D new arraylist (List) dynamisch erstellen Java Basics - Anfänger-Themen 1
B Klassen Klasse dynamisch laden. Java Basics - Anfänger-Themen 8
N Dynamisch erzeugtes Label wird nicht angezeigt, TextField schon Java Basics - Anfänger-Themen 1
D Koordinatensystem dynamisch anpassen Java Basics - Anfänger-Themen 17
J Tableview, ObservableList ein bisschen dynamisch Java Basics - Anfänger-Themen 6
C Array - Länge dynamisch übergeben Java Basics - Anfänger-Themen 7
GreyFox Object dynamisch mit werten versehen. Java Basics - Anfänger-Themen 4
G Array dynamisch ausgeben Java Basics - Anfänger-Themen 3
S JTable dynamisch mit Datenbankinhalten füllen Java Basics - Anfänger-Themen 6
F Erste Schritte If Bedingung in Schleife dynamisch erweitern Java Basics - Anfänger-Themen 4
K JLabel zur Laufzeit dynamisch erzeugen Java Basics - Anfänger-Themen 7
V Text aus einer .txt dynamisch ins applet einpassen Java Basics - Anfänger-Themen 0
Y Eingabe-Formular mit JSP dynamisch machen - j/n/wie? Java Basics - Anfänger-Themen 2
N Dynamisch JTree erstellen Java Basics - Anfänger-Themen 3
C Variablen Array dynamisch halten und ausrechnen Java Basics - Anfänger-Themen 14
N Ergebnisse dynamisch in Tabelle schreiben Java Basics - Anfänger-Themen 3
G JObjekte dynamisch vom Server erzeugen lassen Java Basics - Anfänger-Themen 4
I Dynamisch erzeugten Buttons Methoden zuweisen Java Basics - Anfänger-Themen 6
M Variablen dynamisch variableninhalt von Object auslesen Java Basics - Anfänger-Themen 4
S if-Block dynamisch aufbauen Java Basics - Anfänger-Themen 5
M Static Variable "dynamisch" aufrufen? Java Basics - Anfänger-Themen 8
A JButtons dynamisch generieren mit verschiedenen actionhandlern Java Basics - Anfänger-Themen 6
P Scrollpane mit dynamisch erzeugten Komponenten Java Basics - Anfänger-Themen 3
U JPanel dynamisch gestalten Java Basics - Anfänger-Themen 7
A Dynamisch die Anzahl der Threads in der Cyclic Barrier ändern Java Basics - Anfänger-Themen 2
K Datentypen Full qualified Name dynamisch gestalten Java Basics - Anfänger-Themen 7
M For-Schleifen dynamisch generieren? Java Basics - Anfänger-Themen 10
sqsh statische jlabels dynamisch verwalten Java Basics - Anfänger-Themen 2
O Wie kann man das einfach lösen? (dynamisch viele Attribute) Java Basics - Anfänger-Themen 6
L Tray-Einträge und dazu passende ActionListener dynamisch erzeugen? Java Basics - Anfänger-Themen 2
D JPanel dynamisch anpassen Java Basics - Anfänger-Themen 5
S Dialog dynamisch vergrößern Java Basics - Anfänger-Themen 2
S Dynamisch Zeit auslesen Java Basics - Anfänger-Themen 11
M JTextPane dynamisch erzeugen Java Basics - Anfänger-Themen 2
J Aufgaben Dynamisch auf Pool von Threads verteilen. Java Basics - Anfänger-Themen 3
D ArrayList dynamisch befüllen Java Basics - Anfänger-Themen 14
G Objekteigenschaften dynamisch erzeugen Java Basics - Anfänger-Themen 7
jnoob Checkbox in Dialog Dynamisch erstellen Java Basics - Anfänger-Themen 2
K suche nicht dynamisch Datenstruktur Java Basics - Anfänger-Themen 6
J ListModel dynamisch und schnell aber sicher ändern Java Basics - Anfänger-Themen 7
M Dynamisch Instanzen erstellen. Java Basics - Anfänger-Themen 4
G Zweidimensionales Array - dynamisch Java Basics - Anfänger-Themen 4
B arrays dynamisch vergrößern Java Basics - Anfänger-Themen 5
V Kundenklasse dynamisch erzeugen und id hochzählen? Java Basics - Anfänger-Themen 4
C Dynamisch durch alle Objektvariablen eines Objektes iteriere Java Basics - Anfänger-Themen 15
P JPanel dynamisch mit ActionListener verwalten Java Basics - Anfänger-Themen 3
R Arraygroesse dynamisch anpassen Java Basics - Anfänger-Themen 8
X this dynamisch, super statisch? Java Basics - Anfänger-Themen 3
G Namen von ArrayListen dynamisch erzeugen Java Basics - Anfänger-Themen 4
H variable dynamisch ändern Java Basics - Anfänger-Themen 2
G Klasse dynamisch ohne Datei compilieren: Fehler Java Basics - Anfänger-Themen 4
G Klasse dynamisch nachladen: Fehler Java Basics - Anfänger-Themen 9
T Array Dynamisch Erweiterm Java Basics - Anfänger-Themen 15
H dynamisch Klassen laden und ausführen Java Basics - Anfänger-Themen 3
M Gleichungen dynamisch erstellen und ausrechnen? Java Basics - Anfänger-Themen 8
G Pfad dynamisch gestalten. Java Basics - Anfänger-Themen 3
B Matrix Dynamisch erzeugen Java Basics - Anfänger-Themen 3
G JTable dynamisch erzeugen. Java Basics - Anfänger-Themen 2
D Labels Dynamisch ? Java Basics - Anfänger-Themen 5
G Variablenname dynamisch vergeben Java Basics - Anfänger-Themen 10
H 2DArray manuell dynamisch erweitern Java Basics - Anfänger-Themen 7
G Länge eines Array trimmen oder dynamisch verändern. Java Basics - Anfänger-Themen 3
M Dynamisch Klassen aufrufen Java Basics - Anfänger-Themen 4
H JLabel dynamisch anzeigen? Java Basics - Anfänger-Themen 10
T ActionListener zu Buttons dynamisch zuordnen Java Basics - Anfänger-Themen 10
G dynamisch Jtextfields erzeugen Java Basics - Anfänger-Themen 3
M HTML Seite die Daten in JavaApplet dynamisch verarbeiten Java Basics - Anfänger-Themen 2
H Variablenname dynamisch festlegen Java Basics - Anfänger-Themen 3
H Variablenname dynamisch festlegen Java Basics - Anfänger-Themen 3
J Tabelle mit mehreren Zeilen dynamisch aufbauen Java Basics - Anfänger-Themen 2
K Bild dynamisch erstellen Java Basics - Anfänger-Themen 2
M Klasse dynamisch erzeugen! Java Basics - Anfänger-Themen 4
M [SOLVED]JComboBoxen dynamisch erstellen und abfragen Java Basics - Anfänger-Themen 2
S Dynamisch Platz für ein Array reservieren? Java Basics - Anfänger-Themen 7
O Variabelnamen dynamisch generieren Java Basics - Anfänger-Themen 3
E Klassenaufrufe dynamisch mit Reflection Java Basics - Anfänger-Themen 4
J Instanzen dynamisch erzeugen Java Basics - Anfänger-Themen 8
G jar dynamisch laden Java Basics - Anfänger-Themen 6
B Kann man in Java Variablen dynamisch generieren? Java Basics - Anfänger-Themen 3
B JTextField dynamisch anpassen Java Basics - Anfänger-Themen 6
G Komponenten dynamisch auf contentPane einbinden Java Basics - Anfänger-Themen 5
G Objekt Namen dynamisch vergeben. Java Basics - Anfänger-Themen 7
T Newbie Frage. Vector dynamisch benennen :( Java Basics - Anfänger-Themen 5
M String und Int Arrays dynamisch die Größe verändern Java Basics - Anfänger-Themen 7
C eine Liste dynamisch erzeugen ? Java Basics - Anfänger-Themen 6
G klasse dynamisch aufrufen, wie? Java Basics - Anfänger-Themen 6
G JToolbar dynamisch erweitern Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben