# Getting started
## Inhaltsverzeichnis
- [Quickstart](#quickstart)
- [Selbst Beispieldaten erzeugen](#selbst-beispieldaten-erzeugen)
- [Selbst MQTT-Messages erzeugen](#selbst-mqtt-messages-erzeugen)
## Quickstart
#### Voraussetzungen
Um die Quickstart-Anleitung befolgen zu können, ist erforderlich:
- [docker-compose](https://docs.docker.com/compose/install)
- [mongo shell](https://docs.mongodb.com/manual/mongo) (oder überspringe Schritt 2 und erzeuge selbst Beispieldaten)
- [mqtt-cli](https://github.com/hivemq/mqtt-cli) (oder überspringe Schritt 4 und erzeuge selbst MQTT-Messages)
#### 1. Docker-compose
Starte docker-compose unter `compose/`:
```bash
docker-compose up
```
#### 2. Beispieldaten generieren
`sampledata/generate.sh` erzeugt Kaffeemaschinen zum testen. Die [mongo shell](https://docs.mongodb.com/manual/mongo) ist erforderlich.
#### 3. Webinterface öffnen
Das Webinterface ist unter [localhost:8080](http://localhost:8080) erreichbar.
#### 4. Maschinen simulieren
`sampledata/mqtt/temperature.sh <device-id> <temperature>` emittiert eine MQTT-Message, um die Temperatur einer Kaffeemaschine zu aktualisieren. Das Tool [mqtt-cli](https://github.com/hivemq/mqtt-cli) ist erforderlich.
Folgender Befehl sorgt für das Auslösen einer Warnung (110 Grad überschreitet den Überhitzungs-Threshold):
```bash
sampledata/mqtt/temperature.sh 1 110
```
Im Webinterface wird jetzt automatisch eine Maschine mit einer Warnung angezeigt.
---
## Selbst Beispieldaten erzeugen
Erzeuge in der Collection `devices` Kaffeemachinen mit folgendem Format:
```json
"_id": "1",
"_class": "de.smartsquare.smartbot.backend.persistence.entity.DeviceEntity",
"exceededThreshold": false,
"type": "coffeemachine",
"values": [
{
"_id": "1",
"thresholds": [
{
"_id": "1",
"prevStatus": false
}
]
}
]
```
## Selbst MQTT-Messages erzeugen
Werte eines Maschinen-Zustands sind durch MQTT-Messages mit folgender Payload änderbar:
```json
{
"topic": "topic",
"device": "1",
"source": "1",
"type": "Temperature",
"value": { "value": 110 }
}
```
### MQTTTestDataGenerator
Starte den [MQTTTestDataGenerator](MQTTTestDataGenerator/README.md) unter `MQTTTestDataGenerator/`.
Beispielanfrage per [Postman](https://www.postman.com/), die die Temperatur der Maschine mit id 1 zehn Mal aktualisiert:
```http
http://127.0.0.1:8081/generate?host=127.0.0.1&port=1883&numDevices=1&msgRate=200&rateVariation=3000&numInt=10
```
```json
{
"message": "(i) => \"{ \\\"topic\\\": \\\"topic\\\", \\\"device\\\": \\\"1\\\", \\\"source\\\": \\\"1\\\", \\\"type\\\": \\\"Temperature\\\", \\\"value\\\": { \\\"value\\\": \" + 10 + i + \" } }\"",
"topic": "() => 'topic'",
"qos": "() => 0"
}
```
### CLI-Tool
Starte die MQTT-CLI:
```bash
mqtt shell
```
Verbinde dich mit dem Broker (default auf `localhost:1883`):
```bash
con -V 3
```
Beispiel-MQTT-Message mit der Payload, die die Temperatur der Maschine mit der id 1 auf 110 setzt:
```bash
pub --topic topic --message '{ "topic": "topic", "device": "1", "source": "1", "type": "Temperature", "value": { "value": 110 } }'
```