# DEC4IoT Sequence
### Content
* [Links](#Links)
* [Sensor einrichten](#Sensor-einrichten)
* [Ablauf mit Email Event](#Ablauf-mit-Email-Event)
* [Ablauf mit DEC112 SDK Trigger](#Ablauf-mit-DEC112-SDK-Trigger)
* [Beschreibung für Blogpost](#Beschreibung-für-Blogpost)
* [Offene Punkte](#Offene-Punkte)
#### Links:
* Container: https://dec4iot.data-container.net
* HackMD mit Dev-Notes: https://hackmd.io/bOxFNoxnTACiadLgMcZyhQ
### Overview
Komponenten können mit `#lightgreen` eingefärbt werden
```plantuml
@startuml "architecture"
skinparam actorStyle Hollow
actor "User" as puck_user
rectangle "Puck.js" as puck
rectangle "ESP32" as esp32
puck_user .right.> puck
puck -> esp32
actor "User" as bangle_user
rectangle "Bangle.js" as bangle
rectangle "smart phone" as mobile
bangle_user .right.> bangle
bangle -> mobile
node "Data\nContainer" as dc
esp32 -down-> dc
mobile -up-> dc
package "ESInet" {
rectangle "BCF" as bcf
rectangle "ESRP" as esrp
}
dc -> bcf
bcf -> esrp
rectangle "Control\nRoom" as psap
esrp -> psap
actor "Operator" as operator
psap .right.> operator
@enduml
```
## Sensor einrichten
1) Seite zur Verwaltung von Sensoren öffnen
https://dec4iot.data-container.net/sensors
2) neuen Sensor anlegen (auf "New Sensor" klicken)
https://dec4iot.data-container.net/sensors/new
3) Sensor Daten:
* Identifier: default: Datensatz ID (max. 4 Zeichen)
Beispiel: `1`
* Service Endpoint: Information für den Sensor, wohin Daten geschickt werden sollen (max. 15 Zeichen)
Beispiel: `dec112.at/iot` (leitet auf https://dec4iot.data-container.net/api/data weiter)
* Add Info: Zusatzinformationen, die beim Auslösen von Events verwendet werden können (zB Stockwerk); Format: JSON
Beispiel:
```json=
{
"info": "Bangle.js 9075",
"target": "police",
"location": {
"city": "Bad Vöslau",
"zip": "2540",
"street": "Michael Scherz-Straße",
"number": "14"
}
}
```
Anmerkung: Zeichenbeschränkungen ergeben sich durch geringen Speicherplatz auf Sensoren
Zum Speichern der eingegebenen Daten auf `Create Sensor` klicken
4) Sensor mit Container koppeln
Daten des Sensors anzeigen und QR-Code scannen (App von Jakob)
Beispiel: https://dec4iot.data-container.net/sensors/37
## Ablauf mit Email Event
Annahmen:
* Sensor mit `identifier: 5` konfiguriert
* Monitoring für niedrigem Batteriestand konfiguriert:
https://dec4iot.data-container.net/api/data?id=49070
```json=
{
"base": "batt$",
"base_name": "batt",
"title": "Batterie Warnung",
"attribute": "v",
"operator": "<=",
"value": "20",
"trigger": "email",
"trigger-options": {
"to": "christoph.fabianek@gmail.com",
"body": "{{n}} ist unter 20% (aktuell: {{v}})",
"title": "E-Mail zu niedrigem Batteriestand",
"subject": "Niedriger Batteriestand"
}
}
```
<details><summary>Befehl zum Anlegen eines neuen Monitoring Datensatzes</summary>
```bash=
echo '{"title":"titel",
"base":"batt$",
"base_name":"batt",
"attribute":"v",
"operator": "<=",
"value":"60",
"trigger":"email",
"trigger-options": {
"title":"E-Mail zu niedrigem Batteriestand",
"to":"user@host.com",
"subject":"Niedriger Batteriestand",
"body":"{{n}} ist unter 20% (aktuell: {{v}})"},
"meta": {"schema":"IoT_Monitoring",
"processed":true}}' | \
curl -H 'Content-Type: application/json' -d @- \
-X POST https://dec4iot.data-container.net/api/data
```
</details>
### Ablauf
1) Sensor schickt Datensatz
relevant: `{"n":"batt","u":"%EL","v":19}`
<details><summary>Command</summary>
```bash=
echo '[{"n":"identifier","v":5,"bn":"urn:dev:mac:fb518cffff5b9075","bt":1685286440},{"n":"batt","u":"%EL","v":19},{"n":"heading","v":183.53101568878},{"n":"temperature","v":33.05662536621},{"n":"pressure","u":"hPa","v":973.95376105848},{"n":"altitude","u":"m","v":332.42848559087},{"n":"steps","u":"counter","v":21},{"n":"manually_triggered","vb":true}]' | \
curl -H "Content-Type: application/json" -d @- \
-X POST https://dec4iot.data-container.net/api/data
```
</details>
2) Datensatz ist gespeichert
https://dec4iot.data-container.net/api/data?id=49468
3) Daten werden in einzelne Komponenten aufgespalten:
(in den Metadaten wird auf den Ursprungsdatensatz via `source-id`verlinkt)
* Sensor Identifier (`v:5`): https://dec4iot.data-container.net/api/data?id=49469
* Batterie: https://dec4iot.data-container.net/api/data?id=49470
* Heading: https://dec4iot.data-container.net/api/data?id=49472
* Temperatur: https://dec4iot.data-container.net/api/data?id=49473
* Druck: https://dec4iot.data-container.net/api/data?id=49474
* Höhe: https://dec4iot.data-container.net/api/data?id=49475
* Schrittzahl: https://dec4iot.data-container.net/api/data?id=49476
* Taste gedrückt: https://dec4iot.data-container.net/api/data?id=49477
4) Monitoring erzeugt für Unterschreitung des Batterie-Schwellenwertes einen Event Datensatz
https://dec4iot.data-container.net/api/data?id=49471
## Ablauf mit DEC112 SDK Trigger
Annahmen:
* Sensor mit `identifier: 5` konfiguriert
* Monitoring für Taster (Knopf drücken) konfiguriert:
https://dec4iot.data-container.net/api/data?id=49070
```json=
{
"base": "manually_triggered$",
"base_name": "manually_triggered",
"title": "Notruftaste",
"attribute": "vb",
"value": "true",
"operator": "==",
"trigger": "dec112sdk",
"trigger-options": {
"title": "DEC112 Notruf via SDK",
"target": "{{#if sensor.target}}{{sensor.target}}{{else}}ambulance{{/if}}",
"callId": "{{meta.dri}}",
"sensorId": "{{n}}",
"language": "de-at",
"category": "{{#if sensor.category}}{{sensor.category}}{{else}}health{{/if}}",
"event": "Notruftaste auf IoT Sensor",
"contact": "Demosetup OwnYourData, Tel: 0677 617 53 112",
"web": "https://www.ownyourdata.eu/de/impressum/",
"headline": "Notruf durch IoT Sensor",
"locations": [{
"type": "Manual",
"civic": {
"street": "Michael Scherz-Straße",
"houseNumber": "14",
"floor": "",
"postalCode": "2540",
"city": "Bad Vöslau"
}
}]
}
}
```
<details><summary>Befehl zum Anlegen eines neuen Monitoring Datensatzes</summary>
</details>
### Ablauf
1) Sensor schickt Datensatz
relevant: `{"n":"manually_triggered","vb":true}`
<details><summary>Command - Sensor 5 (Christoph)</summary>
```bash=
echo '[{"n":"identifier","v":5,"bn":"urn:dev:mac:fb518cffff5b9075","bt":1685286440},{"n":"batt","u":"%EL","v":19},{"n":"heading","v":183.53101568878},{"n":"temperature","v":33.05662536621},{"n":"pressure","u":"hPa","v":973.95376105848},{"n":"altitude","u":"m","v":332.42848559087},{"n":"steps","u":"counter","v":21},{"n":"manually_triggered","vb":true}]' | \
curl -H "Content-Type: application/json" -d @- \
-X POST https://dec4iot.data-container.net/api/data
```
</details>
<details><summary>Command - Sensor 6 (Jakob)</summary>
```bash=
echo '[{"n":"identifier","v":6,"bn":"urn:dev:mac:fb518cffff5b9075","bt":1696077022},{"n":"batt","u":"%EL","v":39},{"n":"heading","v":129.52263127117},{"n":"temperature","v":33.32276407877},{"n":"pressure","u":"hPa","v":981.2715188464},{"n":"altitude","u":"m","v":269.71078897221},{"n":"steps","u":"counter","v":0},{"n":"manually_triggered","vb":true}]' | \
curl -H "Content-Type: application/json" -d @- \
-X POST https://dec4iot.data-container.net/api/data
```
</details>
2) Datensatz ist gespeichert
https://dec4iot.data-container.net/api/data?id=49468
3) Daten werden in einzelne Komponenten aufgespalten:
(in den Metadaten wird auf den Ursprungsdatensatz via `source-id`verlinkt)
* Taste gedrückt: https://dec4iot.data-container.net/api/data?id=49477
4) Protokollierung über Durchführung des Events
https://dec4iot.data-container.net/api/data?id=49478
5) Prüfe Anzeige im DEC112 Webclient:
URL: https://psap.test.dec112.eu/
Server: `wss://psap.test.dec112.eu:8091/api/v1`
Benutzername: `christophtest`
## Beschreibung für Blogpost
Notizen:
* Daten kommen SenML enkodiert auf `POST /api/data` an
* Prozess zum Aufsplitten in individuelle Zeitreihen
* Prozess für Monitoring, um vorkonfigurierte Grenzen/Werte zu erkennen
* Prozess zum Ausführen von Events nach Trigger von Monitoring
* unmittelbare Ausführung der Prozesse und Batch-Prozess, falls Ausführung hängen bleibt
* Konzept Fehler zu erkennen und über das Status-Monitoring von DEC diese zu dokumentieren / eine Benachrichtigung zu schicken
Monitoring:
1. **Aktives Überwachen (Positives Überwachen)**: Dies beinhaltet das Suchen nach Ereignissen, die Probleme oder Fehler anzeigen. Es handelt sich um eine aktive Suche nach Problemen. Wenn ein System oder Dienst ausfällt, Schwellenwerte überschreitet oder unerwartetes Verhalten zeigt, erkennen Werkzeuge für aktives Überwachen diese Probleme und lösen Alarme aus.
2. **Passives Überwachen (Negatives Überwachen)**: Dies beinhaltet das Überprüfen auf das Fehlen von erwarteten Ereignissen oder Signalen. Wenn beispielsweise ein geplanter Job jede Stunde laufen soll und eine Bestätigungsnachricht senden soll, würde passives Überwachen alarmieren, wenn diese Bestätigungsnachricht fehlt oder wenn sie nicht im erwarteten Zeitrahmen empfangen wurde.
## Offene Punkte
- [x] "sensor-id": null im QR Code bei neuem Sensor
- [x] dc-base: add created_at/update_at to meta as ISO timestamp
- [x] update deployment.yaml locale from C.UTF-8 -> "English"
- [x] check ob Email handlebars untestützt
later:
- [ ] Blogpost für Netidee schreiben
- [ ] Unterschreitung der Batteriewarnung erzeugt bei jedem Datensatz ein Email -> soll nur bei der 1. Unterschreitung ein Email geschickt werden?
- [x] Monitoring speichert Source-ID fälschlicherweise in data>meta>id
- [x] Event speichert Source-ID fälschlicherweise in data>meta>id
- [ ] falls vorhanden GPS Koordinaten in DEC112 SDK Trigger einbauen
- [x] Event über DEC112 SDK wird mit `christophtest` nicht angezeigt
- [ ] dec112sdk auf dec112alert umbenennen