# 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