diff --git a/software/Frontend/src/app/Home/home.component.html b/software/Frontend/src/app/Home/home.component.html
index 8d51b61..189b306 100644
--- a/software/Frontend/src/app/Home/home.component.html
+++ b/software/Frontend/src/app/Home/home.component.html
@@ -10,7 +10,7 @@
-
Robot is on Tour
-
Robot is Ready
+
Robot is on Tour
+
Robot is Ready
\ No newline at end of file
diff --git a/software/Frontend/src/app/Home/home.component.ts b/software/Frontend/src/app/Home/home.component.ts
index 260c0f5..9bbc289 100644
--- a/software/Frontend/src/app/Home/home.component.ts
+++ b/software/Frontend/src/app/Home/home.component.ts
@@ -8,7 +8,8 @@ import { StoreService } from '../Service/store.service';
styleUrls: ['./home.component.css']
})
export class HomeComponent {
- robotStateChange$: Observable = this.storeService.currentRobotReady;
+ // Aktueller RobotStatus wird subscribed
+ robotIsReady$: Observable = this.storeService.currentRobotReady;
constructor(private storeService: StoreService) {
}
diff --git a/software/Frontend/src/app/Home/input/input.component.ts b/software/Frontend/src/app/Home/input/input.component.ts
index e64e13d..4bf1ff6 100644
--- a/software/Frontend/src/app/Home/input/input.component.ts
+++ b/software/Frontend/src/app/Home/input/input.component.ts
@@ -15,36 +15,43 @@ export class InputComponent implements OnInit, OnDestroy {
subscription: Subscription;
constructor(
- public service: SpeechService,
+ public speechService: SpeechService,
private mqttRequestService: MqttRequestService
) {
- if (!this.service.initSpeechServiceStarted) {
- this.service.init();
+ if (!this.speechService.initSpeechServiceStarted) {
+ this.speechService.init();
}
}
ngOnInit(): void {
- this.subscription = this.service.currentApprovalStageMessage.subscribe(msg => {
+ // subscribe auf die eingegebene Spracheingabe, gibt als response einen string
+ this.subscription = this.speechService.currentApprovalStageMessage.subscribe(msg => {
this.text = msg;
if (this.text !== '') {
this.micIsClicked = false;
- this.mqttRequestService.publishToINPUT(this.text);
+ this.mqttRequestService.publishToINPUT(this.text); // msg wird hier den Request Service weitergeleitet
}
});
}
+ /**
+ * Beim klick auf das Mikrofon, wird die Spracheingabe gestartet. Beim 2ten klick auf das
+ * Mikrofon wird die Spracheingabe gestoppt
+ */
startStopService() {
+ //
if (this.micIsClicked) {
this.micIsClicked = false;
- this.service.stop();
+ this.speechService.stop(); // Spracheingabe stoppen
} else {
this.micIsClicked = true;
- this.service.start();
+ this.speechService.start(); //Spracheingabe starten
}
}
+
ngOnDestroy() {
this.subscription.unsubscribe()
- this.service.onDestory();
+ this.speechService.onDestory();
this.text = '';
}
diff --git a/software/Frontend/src/app/Home/output/output.component.ts b/software/Frontend/src/app/Home/output/output.component.ts
index d4b43b7..e8bfaa9 100644
--- a/software/Frontend/src/app/Home/output/output.component.ts
+++ b/software/Frontend/src/app/Home/output/output.component.ts
@@ -1,6 +1,5 @@
import { Component, OnDestroy, OnInit } from '@angular/core';
import { Subscription } from 'rxjs';
-
import { MqttRequestService } from 'src/app/Service/Mqtt/mqtt-request.service';
declare var speechSynthesis: any;
@@ -16,6 +15,7 @@ export class OutputComponent implements OnInit, OnDestroy {
constructor(private mqttRequestService: MqttRequestService) { }
ngOnInit(): void {
+ // subsribe auf "responseMessage", sie wird jedes mal getriggert wenn eine Spracheingabe statt findet
this.subscription = this.mqttRequestService.responseMessage.subscribe(msg => {
setTimeout(() => {
this.outputText = msg;
@@ -24,6 +24,11 @@ export class OutputComponent implements OnInit, OnDestroy {
});
}
+ /**
+ * Methode spricht das übergeben string aus --> Sprachausgabe
+ * @method speak
+ * @param string
+ */
speak(text: string) {
const utterance = new SpeechSynthesisUtterance(text);
utterance.lang = 'en-US';
@@ -34,5 +39,4 @@ export class OutputComponent implements OnInit, OnDestroy {
this.subscription.unsubscribe();
this.mqttRequestService.onDestroy();
}
-
}
diff --git a/software/Frontend/src/app/Home/speech.service.ts b/software/Frontend/src/app/Home/speech.service.ts
index 8ad18da..b88bc58 100644
--- a/software/Frontend/src/app/Home/speech.service.ts
+++ b/software/Frontend/src/app/Home/speech.service.ts
@@ -7,8 +7,13 @@ declare var webkitSpeechRecognition: any;
providedIn: 'root'
})
export class SpeechService {
+ /*
+ * currentApprovalStageMessage wird als observable festgelegt,
+ * damit man aus anderen Komponenten die änderungen mitbekommt!
+ */
private approvalStageMessage = new BehaviorSubject('');
currentApprovalStageMessage = this.approvalStageMessage.asObservable();
+
initSpeechServiceStarted: boolean = false;
recognition = new webkitSpeechRecognition();
@@ -18,8 +23,6 @@ export class SpeechService {
tempWords: string | undefined;
constructor() {
- this.recognition.pitch = 10;
- this.recognition.rate = 3;
}
init() {
@@ -33,22 +36,19 @@ export class SpeechService {
.map((result) => result.transcript)
.join('');
this.tempWords = transcript;
- console.log('init:' + transcript);
});
}
start() {
this.text = '';
this.isStoppedSpeechRecog = false;
- this.recognition.start();
- console.log("Speech recognition started")
+ this.recognition.start(); // Start der Sprachaufnahme
this.recognition.addEventListener('end', () => {
this.wordConcat()
- this.recognition.stop();
+ this.recognition.stop(); // Ende der Sprachaufnahme
if (!this.isStoppedSpeechRecog) {
this.isStoppedSpeechRecog = true;
- console.log("End speech recognition");
- this.approvalStageMessage.next(this.text);
+ this.approvalStageMessage.next(this.text); // String was eingelesen wurde, wird mit der Methode "next(..)" an alle subsriber weitergeleitet!
}
});
}
@@ -62,6 +62,7 @@ export class SpeechService {
}
}
+ // addiert die Wörter bei der Sprachaufnahme zusammen
wordConcat() {
this.text = this.text + ' ' + this.tempWords;
this.tempWords = '';
diff --git a/software/Frontend/src/app/Plants/plant-card/plant-card.component.ts b/software/Frontend/src/app/Plants/plant-card/plant-card.component.ts
index e634175..a51e99b 100644
--- a/software/Frontend/src/app/Plants/plant-card/plant-card.component.ts
+++ b/software/Frontend/src/app/Plants/plant-card/plant-card.component.ts
@@ -18,10 +18,19 @@ export class PlantCardComponent {
constructor(public dialog: MatDialog, private mqttRequestService: MqttRequestService) {
}
+ /**
+ * Methode wird in der HTML datei verwendet damit der Wert nicht undefined ist.
+ * @method
+ */
getFormattedLastRequestedTimestamp(): Observable {
return of(this.calculateTimestamp(this.plant.Timestamp))
}
+ /**
+* Methode dividiert den Timestamp der Pflanze mit der aktuellen Zeit. Die Zeit wird dann in Tagen, Stunden, Minuten, Sekunden angezeigt
+* @method
+* @return string wie z.B "1 hour ago"
+*/
calculateTimestamp(timestamp: string): string {
const datePlant = new Date(timestamp);
this.currentDate = new Date();
@@ -43,6 +52,10 @@ export class PlantCardComponent {
}
}
+ /**
+ * Methode öffnet den Dialog "DeleteConfirmDialogComponent"
+ * @method
+ */
onDeletePlant() {
this.dialog.open(DeleteConfirmDialogComponent, {
data: this.plant,
@@ -50,6 +63,10 @@ export class PlantCardComponent {
});
}
+ /**
+ * Methode öffnet den Dialog "ConfigurePlantDialogComponent"
+ * @method
+ */
onConfigurePlant() {
this.dialog.open(ConfigurePlantDialogComponent, {
data: {
@@ -58,5 +75,4 @@ export class PlantCardComponent {
width: '400px',
});
}
-
}
diff --git a/software/Frontend/src/app/Plants/plants.component.ts b/software/Frontend/src/app/Plants/plants.component.ts
index aa2b946..a6e33aa 100644
--- a/software/Frontend/src/app/Plants/plants.component.ts
+++ b/software/Frontend/src/app/Plants/plants.component.ts
@@ -21,6 +21,7 @@ export class PlantsComponent {
constructor(public dialog: MatDialog, public storeService: StoreService, private mqttRequestService: MqttRequestService) {
+ // sobald es eine änderung bei den pflanzenNamen gibt, wird bei der suchleiste ein neuer filter eingesetzt
this.options$.subscribe(response => {
this.filteredOptions = this.myControl.valueChanges.pipe(
startWith(''),
@@ -30,24 +31,39 @@ export class PlantsComponent {
})
}
+ /**
+* es wird nach dem Pflanzen Namen gesucht.
+* @method
+* @return Pflant
+*/
onSearchPlant(plantName: string): Observable {
return this.storeService.getPlant(plantName);
}
+ /**
+ * Methode öffnet das Dialog "AddPlantDialogComponent"
+ * @method
+ */
onNewPlant() {
this.dialog.open(AddPlantDialogComponent, {
width: '420px',
});
}
+ /**
+* die ausgewählte Pflanze wird in "selectedPlant" geschrieben
+* @method
+*/
onOptionSelect(value: string) {
this.selectedPlant = value;
}
+
onOptionDefault() {
this.selectedPlant = 'undefined';
}
+
private _filter(value: string, options: string[]): string[] {
const filterValue = value.toLowerCase();
diff --git a/software/Frontend/src/app/Robot/robot.component.ts b/software/Frontend/src/app/Robot/robot.component.ts
index 4a8654d..79aab97 100644
--- a/software/Frontend/src/app/Robot/robot.component.ts
+++ b/software/Frontend/src/app/Robot/robot.component.ts
@@ -17,18 +17,32 @@ export class RobotComponent {
constructor(private storeService: StoreService) {
}
+ /**
+* Methode setzt die Farbe der LoadingBar auf Rot ("warn") oder Blau ("Primary")
+* @method
+* @return warn oder primary
+*/
getLoadingBarColor(): Observable {
return this.batteryChargingStatus$.pipe(
map(chargingStatus => chargingStatus < 20 ? "warn" : "primary")
)
}
+ /**
+ * Methode wird in der HTML datei verwendet damit der Wert nicht undefined ist.
+ * @method
+ */
getFormattedLastRequestedBatteryState(): Observable {
return this.requestTimestamp$.pipe(
map(timestamp => this.formatLastRequestedBatteryState(timestamp))
)
}
+ /**
+* Methode dividiert den Timestamp der Pflanze mit der aktuellen Zeit. Die Zeit wird dann in Tagen, Stunden, Minuten, Sekunden angezeigt
+* @method
+* @return string wie z.B "1 hour ago"
+*/
formatLastRequestedBatteryState(timestamp: string): string {
const datePlant = new Date(timestamp);
const currentDate = new Date();
@@ -49,5 +63,4 @@ export class RobotComponent {
return `${seconds} second${seconds !== 1 ? 's' : ''} ago`;
}
}
-
}
diff --git a/software/Frontend/src/app/Service/Mqtt/mqtt-request.service.ts b/software/Frontend/src/app/Service/Mqtt/mqtt-request.service.ts
index f443f31..a609668 100644
--- a/software/Frontend/src/app/Service/Mqtt/mqtt-request.service.ts
+++ b/software/Frontend/src/app/Service/Mqtt/mqtt-request.service.ts
@@ -1,10 +1,10 @@
import { Injectable } from '@angular/core';
import { MatDialog } from '@angular/material/dialog';
import { BehaviorSubject, Subscription } from 'rxjs';
+import { take } from 'rxjs/operators';
import { ErrorDialogComponent } from 'src/app/dialog/error-dialog/error-dialog.component';
import { Plant } from 'src/app/models/plant.model';
import { PlantCount } from 'src/app/models/plantCount.model';
-import { Position } from 'src/app/models/position.model';
import { RobotBattery } from 'src/app/models/robotBattery.model';
import { StoreService } from '../store.service';
import { MqttSetDataService } from './mqtt-set-data.service';
@@ -14,6 +14,7 @@ import { MqttService } from './mqtt.service';
providedIn: 'root'
})
export class MqttRequestService {
+ // wird für die Sprachausgabe verwendet
private sourceMessage = new BehaviorSubject('');
responseMessage = this.sourceMessage.asObservable();
@@ -22,6 +23,7 @@ export class MqttRequestService {
constructor(private mqttService: MqttService,
private mqttSetDataService: MqttSetDataService,
private storeService: StoreService, public dialog: MatDialog) {
+
//Subscribe to the Topics
this.mqttService.subscribeToTopic("BACKEND/DATA/SENSORDATA_ALL").subscribe(data => {
if (typeof data !== "object") {
@@ -36,11 +38,10 @@ export class MqttRequestService {
console.error('Error:', err);
});
- this.mqttService.subscribeToTopic("BACKEND/DATA/ERROR").subscribe(data => {
- if (typeof data !== "object") {
- const payload = JSON.parse(data) as string;
+ this.mqttService.subscribeToTopic("BACKEND/DATA/ERROR").subscribe(errorMsg => {
+ if (typeof errorMsg !== "object") {
this.dialog.open(ErrorDialogComponent, {
- data: payload,
+ data: errorMsg,
width: '400px',
});
}
@@ -65,18 +66,18 @@ export class MqttRequestService {
console.error('Error:', err);
});
- this.mqttService.subscribeToTopic("BACKEND/DATA/POSITION").subscribe(data => {
- if (typeof data !== "object") {
- const payload = JSON.parse(data) as Position;
- this.mqttSetDataService.setRobotPosition(payload);
- }
- }, err => {
- this.dialog.open(ErrorDialogComponent, {
- data: err,
- width: '400px',
- });
- console.error('Error:', err);
- });
+ // this.mqttService.subscribeToTopic("BACKEND/DATA/POSITION").subscribe(data => {
+ // if (typeof data !== "object") {
+ // const payload = JSON.parse(data) as Position;
+ // this.mqttSetDataService.setRobotPosition(payload);
+ // }
+ // }, err => {
+ // this.dialog.open(ErrorDialogComponent, {
+ // data: err,
+ // width: '400px',
+ // });
+ // console.error('Error:', err);
+ // });
this.mqttService.subscribeToTopic("BACKEND/DATA/BATTERY").subscribe(data => {
if (typeof data !== "object") {
@@ -92,9 +93,10 @@ export class MqttRequestService {
});
this.mqttService.subscribeToTopic("BACKEND/DATA/ROBOTREADY").subscribe(data => {
- if (typeof data !== "object") {
- const payload = JSON.parse(data) as boolean;
- this.mqttSetDataService.setRobotReady(payload);
+ if (data === "False") {
+ this.mqttSetDataService.setRobotReady(false);
+ } else if (data === "True") {
+ this.mqttSetDataService.setRobotReady(true);
}
}, err => {
this.dialog.open(ErrorDialogComponent, {
@@ -116,14 +118,7 @@ export class MqttRequestService {
});
console.error('Error:', err);
});
- // this.mqttService.subscribeToTopic("BACKEND/DATA/POSITION").subscribe(data => {
- // if (typeof data !== "object") {
- // const payload = JSON.parse(data) as Plant[];
- // this.mqttSetDataService.setDataAllPlants(payload);
- // }
- // }, err => {
- // console.error('Error:', err);
- // });
+
// this.mqttService.subscribeToTopic("BACKEND/DATA/PICTURE").subscribe(data => {
// if (typeof data !== "object") {
// const payload = JSON.parse(data) as Plant;
@@ -178,10 +173,15 @@ export class MqttRequestService {
publishToPLANTCOUNT() {
this.mqttService.publishToTopic('BACKEND/ACTION/PLANTCOUNT');
}
-
+ /**
+ * publishToINPUT wird die Spracheingabe übermittelt, die dann mit
+ * mehreren if else anweisungen einen Request an das Backend sendet und
+ * die Sprachausgabe mit next(..) triggert
+ * @method
+ */
publishToINPUT(message: string) {
- message = message.replace(/\s/g, "");
- console.log(":" + message + ":");
+ message = message.replace(/\s/g, ""); //entfernt alle leerzeichen
+ console.log(":" + message + ":"); //Nachricht die übermittel wurde, wird ausgegeben auf der Konsole
let msgFound: boolean = false;
if (message === "whereismyrobot") {
@@ -194,10 +194,11 @@ export class MqttRequestService {
this.sourceMessage.next("The data is being collected and you can view it under the 'Robot' tab");
} else if (message === "howaremyplants") {
msgFound = true;
- // this.mqttService.publishToTopic('BACKEND/ACTION/DRIVEALL');
+ this.mqttService.publishToTopic('BACKEND/ACTION/DRIVEALL');
this.sourceMessage.next("Robot is driving to all plants");
} else {
- this.storeService.getAllPlantNames().subscribe(result =>
+ // schickt den Roboter zur eingegeben Pflanze..
+ this.storeService.getAllPlantNames().pipe(take(1)).subscribe(result =>
result.forEach((element: string) => {
let msgPlantName = "howismyplant".concat(element.toLowerCase())
if (message === msgPlantName) {
@@ -210,7 +211,9 @@ export class MqttRequestService {
)
}
+ // Wenn kein case eintrifft, wird "Please try again" ausgegeben
if (!msgFound) {
+ msgFound = false;
this.sourceMessage.next("Please try again");
}
diff --git a/software/Frontend/src/app/Service/Mqtt/mqtt.service.ts b/software/Frontend/src/app/Service/Mqtt/mqtt.service.ts
index 012871b..c2762a6 100644
--- a/software/Frontend/src/app/Service/Mqtt/mqtt.service.ts
+++ b/software/Frontend/src/app/Service/Mqtt/mqtt.service.ts
@@ -6,12 +6,12 @@ import { Observable } from 'rxjs';
providedIn: 'root'
})
export class MqttService {
-
private client: MqttClient;
+ // Connection zu dem MQTT Broker
constructor() {
- this.client = connect('wss://mqtt.eclipseprojects.io:443/mqtt'); //Je nachdem welchen Link der Broker hat
- // this.client = connect('mqtt://192.168.137.197:1883', { clientId: 'kemal' });
+ // this.client = connect('wss://mqtt.eclipseprojects.io:443/mqtt'); //Je nachdem welchen Link der Broker hat
+ this.client = connect('mqtt://192.168.137.197:1883', { clientId: 'kemal' });
}
public subscribeToTopic(topic: string): Observable {
diff --git a/software/Frontend/src/app/Service/store.service.ts b/software/Frontend/src/app/Service/store.service.ts
index 28a265c..f6d8cfa 100644
--- a/software/Frontend/src/app/Service/store.service.ts
+++ b/software/Frontend/src/app/Service/store.service.ts
@@ -8,6 +8,8 @@ import { RobotBattery } from '../models/robotBattery.model';
@Injectable({
providedIn: 'root'
})
+
+
export class StoreService {
positionRobot: Position;
plantCount: PlantCount;
diff --git a/software/Frontend/src/app/app.component.ts b/software/Frontend/src/app/app.component.ts
index 089304c..fce30b1 100644
--- a/software/Frontend/src/app/app.component.ts
+++ b/software/Frontend/src/app/app.component.ts
@@ -11,6 +11,7 @@ import { MqttRequestService } from './Service/Mqtt/mqtt-request.service';
export class AppComponent {
header: string;
constructor(private mqttRequestService: MqttRequestService, private location: Location) {
+ // Header in der Leiste zu bestimmen
const actualRoute = this.location.path().slice(1);
const lastParam = actualRoute.charAt(0).toUpperCase() + actualRoute.slice(1);
if (lastParam === "") {
diff --git a/software/Frontend/src/app/dialog/add-plant-dialog/add-plant-dialog.component.html b/software/Frontend/src/app/dialog/add-plant-dialog/add-plant-dialog.component.html
index 0bb14a6..df10613 100644
--- a/software/Frontend/src/app/dialog/add-plant-dialog/add-plant-dialog.component.html
+++ b/software/Frontend/src/app/dialog/add-plant-dialog/add-plant-dialog.component.html
@@ -17,13 +17,11 @@
Soil Moisture:
Brightness:
-
Choose an ID
-
+
{{option}}
diff --git a/software/Frontend/src/app/dialog/add-plant-dialog/add-plant-dialog.component.ts b/software/Frontend/src/app/dialog/add-plant-dialog/add-plant-dialog.component.ts
index 5ec4377..479ded6 100644
--- a/software/Frontend/src/app/dialog/add-plant-dialog/add-plant-dialog.component.ts
+++ b/software/Frontend/src/app/dialog/add-plant-dialog/add-plant-dialog.component.ts
@@ -12,13 +12,17 @@ import { MapPlantDialogComponent } from '../map-plant-dialog/map-plant-dialog.co
templateUrl: './add-plant-dialog.component.html',
styleUrls: ['./add-plant-dialog.component.css']
})
+
+/**
+ * @description
+ * Mit diesem Dialog "AddPlantDialogComponent" wird eine neue Pflanze erstellt und in das Backend geschickt.
+ */
export class AddPlantDialogComponent implements OnInit {
selected: number;
options$: Observable;
plantNames: string[];
plant = {} as Plant;
buttonSavedisabled: boolean;
- number: number[];
constructor(public dialogRef: MatDialogRef,
@Inject(MAT_DIALOG_DATA) public data: any,
@@ -28,16 +32,26 @@ export class AddPlantDialogComponent implements OnInit {
}
ngOnInit(): void {
- this.buttonSavedisabled = true;
- this.mqttRequestService.publishToPLANTCOUNT();
+ this.buttonSavedisabled = true; //Button "Save" wird disabled
+ this.mqttRequestService.publishToPLANTCOUNT(); // Pflanzen anzahl wird angefordet#
+
+ // ID's bei denen noch keine Pflanze sind, werden in "option$" rein geschrieben
this.storeService.currentPlants.subscribe(response => {
this.options$ = this.storeService.getIDsWithoutPlant(response);
})
+
+ // Alle aktuellen Pflanzen Namen werden in "plantNames" geschrieben
this.storeService.getAllPlantNames().subscribe(result => {
this.plantNames = result
});
}
+ /**
+ * Nach dem der Button "Save" geklickt wurde, werden die Daten in die Pflanze geschrieben
+ * die anschließend geprüft wird auf zulässige Werte, falls unzulässige werte vorhanden sind,
+ * wird eine Fehlermeldung angezeigt
+ * @method onSaveDialog
+ */
onSaveDialog() {
this.plant.PlantName = (document.getElementById("inputName")).value;
this.plant.AirTemperature = +(document.getElementById("inputAirTemperature")).value;
@@ -48,6 +62,7 @@ export class AddPlantDialogComponent implements OnInit {
const plantInputString: string = this.plantInputTestFails();
+ // bei unzulässigen Werten --> Dialog, bei zulässigen Wertden --> Pflanze wird an das Backend geschickt
if (plantInputString) {
this.dialog.open(ErrorDialogComponent, {
data: "Error: " + plantInputString,
@@ -55,11 +70,16 @@ export class AddPlantDialogComponent implements OnInit {
});
} else {
this.mqttRequestService.publishToNEWPLANT(this.plant);
- this.mqttRequestService.publishToGETALLDATA();
- window.location.reload();
+ this.mqttRequestService.publishToGETALLDATA(); // Daten werden aus dem Backend angefragt
+ window.location.reload(); // Seite neu laden
}
}
+ /**
+ * Methode prüft ob die Werte die eingegeben wurden, korrekt sind.
+ * @method
+ * @return Bei einem Fehler --> Fehlermeldung; wenn es passt --> string oder leeren string
+ */
plantInputTestFails(): string {
if (this.plantNames.indexOf(this.plant.PlantName) > -1) {
@@ -77,12 +97,16 @@ export class AddPlantDialogComponent implements OnInit {
if (this.plant.SoilMoisture > 100) {
return "Soil Moisture is to high";
}
- if (this.plant.Brightness > 100) {
+ if (this.plant.Brightness > 40000) {
return "Brightness is to high";
}
return ""; //Empty string is a Boolean false!
}
+ /**
+ * beim klick auf den Button, wird das Dialog "MapPlantDialogComponent" geöffnet
+ * @method
+ */
onOpenMap() {
this.dialog.open(MapPlantDialogComponent, {
width: '400px',
@@ -90,11 +114,11 @@ export class AddPlantDialogComponent implements OnInit {
});
}
- onOptionSelected(numb: number) {
- let num: number = numb;
- if (num < 7 && num > 0) { //TODOO anzahl der Pflanzen IDS variable machen statt 7 evtl. eine variable
- this.buttonSavedisabled = false;
- }
+ /**
+ * nach der Auswahl der ID, wird der Button "Save" enabled
+ * @method
+ */
+ onOptionSelected() {
+ this.buttonSavedisabled = false;
}
-
}
diff --git a/software/Frontend/src/app/dialog/configure-plant-dialog/configure-plant-dialog.component.ts b/software/Frontend/src/app/dialog/configure-plant-dialog/configure-plant-dialog.component.ts
index f9cd6e1..60b30ef 100644
--- a/software/Frontend/src/app/dialog/configure-plant-dialog/configure-plant-dialog.component.ts
+++ b/software/Frontend/src/app/dialog/configure-plant-dialog/configure-plant-dialog.component.ts
@@ -1,4 +1,4 @@
-import { Component, Inject, OnInit } from '@angular/core';
+import { Component, Inject } from '@angular/core';
import { MAT_DIALOG_DATA, MatDialog, MatDialogRef } from '@angular/material/dialog';
import { MqttRequestService } from 'src/app/Service/Mqtt/mqtt-request.service';
import { Plant } from 'src/app/models/plant.model';
@@ -9,7 +9,7 @@ import { ErrorDialogComponent } from '../error-dialog/error-dialog.component';
templateUrl: './configure-plant-dialog.component.html',
styleUrls: ['./configure-plant-dialog.component.css']
})
-export class ConfigurePlantDialogComponent implements OnInit {
+export class ConfigurePlantDialogComponent {
plant: Plant;
constructor(public dialogRef: MatDialogRef,
@@ -19,9 +19,12 @@ export class ConfigurePlantDialogComponent implements OnInit {
this.plant = data.plant;
}
- ngOnInit(): void {
- }
-
+ /**
+ * Nach dem der Button "Save" geklickt wurde, werden die Daten in die Pflanze geschrieben
+ * die anschließend geprüft wird auf zulässige Werte, falls unzulässige werte vorhanden sind,
+ * wird eine Fehlermeldung angezeigt
+ * @method onSaveDialog
+ */
onSaveDialog() {
this.plant.AirTemperature = +(document.getElementById("inputAirTemperature")).value;
this.plant.AirHumidity = +(document.getElementById("inputAirHumidity")).value;
@@ -29,19 +32,25 @@ export class ConfigurePlantDialogComponent implements OnInit {
this.plant.Brightness = +(document.getElementById("inputBrightness")).value;
const plantInputString: string = this.plantInputTestFails();
+
+ // bei unzulässigen Werten --> Dialog, bei zulässigen Wertden --> Pflanze wird an das Backend geschickt
if (plantInputString) {
this.dialog.open(ErrorDialogComponent, {
data: "Error: " + plantInputString,
width: '400px',
});
} else {
- //Request to the Backend, to change the data of the plant
- this.mqttRequestService.publishToCONFIGUREPLANT(this.plant);
- this.mqttRequestService.publishToGETALLDATA();
- window.location.reload();
+ this.mqttRequestService.publishToCONFIGUREPLANT(this.plant); //Request to the Backend, to change the data of the plant
+ this.mqttRequestService.publishToGETALLDATA(); // Daten werden aus dem Backend angefragt
+ window.location.reload(); // Seite neu laden
}
}
+ /**
+ * Methode prüft ob die Werte die eingegeben wurden, korrekt sind.
+ * @method
+ * @return Bei einem Fehler --> Fehlermeldung; wenn es passt --> string oder leeren string
+ */
plantInputTestFails(): string {
if (this.plant.AirTemperature > 100) {
return "Air Temperature is to high";
@@ -52,7 +61,7 @@ export class ConfigurePlantDialogComponent implements OnInit {
if (this.plant.SoilMoisture > 100) {
return "Soil Moisture is to high";
}
- if (this.plant.Brightness > 100) {
+ if (this.plant.Brightness > 40000) {
return "Brightness is to high";
}
return ""; //Empty string is a Boolean false!
diff --git a/software/Frontend/src/app/dialog/delete-confirm-dialog/delete-confirm-dialog.component.ts b/software/Frontend/src/app/dialog/delete-confirm-dialog/delete-confirm-dialog.component.ts
index e310eba..3f18fd5 100644
--- a/software/Frontend/src/app/dialog/delete-confirm-dialog/delete-confirm-dialog.component.ts
+++ b/software/Frontend/src/app/dialog/delete-confirm-dialog/delete-confirm-dialog.component.ts
@@ -11,12 +11,15 @@ import { ConfigurePlantDialogComponent } from '../configure-plant-dialog/configu
})
export class DeleteConfirmDialogComponent {
plant: Plant;
+
constructor(public dialogRef: MatDialogRef,
@Inject(MAT_DIALOG_DATA) public data: Plant, private mqttRequestService: MqttRequestService) {
this.plant = data;
}
-
-
+ /**
+ * beim Click auf "Delete" wird eine anfrage an das Backend geschickt um die Pflanze zu löschen.
+ * @method
+ */
onDelete() {
this.mqttRequestService.publishToDELETEPLANT(this.plant.PlantID);
}
diff --git a/software/Frontend/src/app/dialog/error-dialog/error-dialog.component.ts b/software/Frontend/src/app/dialog/error-dialog/error-dialog.component.ts
index 8cbc269..d14fb78 100644
--- a/software/Frontend/src/app/dialog/error-dialog/error-dialog.component.ts
+++ b/software/Frontend/src/app/dialog/error-dialog/error-dialog.component.ts
@@ -1,4 +1,4 @@
-import { Component, Inject, OnInit } from '@angular/core';
+import { Component, Inject } from '@angular/core';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
import { ConfigurePlantDialogComponent } from '../configure-plant-dialog/configure-plant-dialog.component';
@@ -7,19 +7,15 @@ import { ConfigurePlantDialogComponent } from '../configure-plant-dialog/configu
templateUrl: './error-dialog.component.html',
styleUrls: ['./error-dialog.component.css']
})
-export class ErrorDialogComponent implements OnInit {
-
+export class ErrorDialogComponent {
text: string = "";
+
constructor(public dialogRef: MatDialogRef,
@Inject(MAT_DIALOG_DATA) public data: any) {
this.text = data;
}
- ngOnInit(): void {
- }
-
onClose() {
- window.location.reload();
+ window.location.reload(); // Seite neu laden
}
-
}
diff --git a/software/Frontend/src/app/dialog/map-plant-dialog/map-plant-dialog.component.ts b/software/Frontend/src/app/dialog/map-plant-dialog/map-plant-dialog.component.ts
index aebb6fe..7b3bd0c 100644
--- a/software/Frontend/src/app/dialog/map-plant-dialog/map-plant-dialog.component.ts
+++ b/software/Frontend/src/app/dialog/map-plant-dialog/map-plant-dialog.component.ts
@@ -1,15 +1,10 @@
-import { Component, OnInit } from '@angular/core';
+import { Component } from '@angular/core';
@Component({
selector: 'app-map-plant-dialog',
templateUrl: './map-plant-dialog.component.html',
styleUrls: ['./map-plant-dialog.component.css']
})
-export class MapPlantDialogComponent implements OnInit {
-
+export class MapPlantDialogComponent {
constructor() { }
-
- ngOnInit(): void {
- }
-
}