Zum Inhalt springen

Digitale Vernetzung und Industrial IoT – Ein Monitoring-Dashboard entwickeln

Aus MOOCsWiki Staging
Version vom 10. Oktober 2026, 19:45 Uhr von Glanz (Diskussion | Beiträge) (aiMOOC über GPT aiMOOC Action erstellt)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
aiMOOC-Siegel aiMOOC

Digitale Vernetzung und Industrial IoT – Ein Monitoring-Dashboard entwickeln

QR-Code


Einleitung

Digitale Vernetzung und Industrial IoT – Ein Monitoring-Dashboard entwickeln

Zielgruppe: Ausbildung in Automatisierungstechnik, Mechatronik und IT. Lernzeit: ca. 90 Minuten. Ziel: Du erkennst Zustand, Trend und klar gekennzeichnete Alarme und programmierst ein lokales Dashboard.

Ausbildungsfall: Beim fiktiven Förderband B-12 möchtest Du die Temperatur des Antriebsmotors überwachen. Alle Messwerte und Temperaturgrenzen sind frei erfunden, nicht für echte Anlagen freigegeben.

Fallillustration (nicht B-12): Shixart1985, Wikimedia Commons, CC BY 2.0.

Sicherheitsregel: Nur lokale, ausdrücklich freigegebene Übungsumgebungen mit fiktiven Daten! Keine fremden Netze, Broker, SPS, Produktionsanlagen, Passwörter oder Kundendaten verwenden. Der Simulator benötigt kein Internet, sendet und speichert keine Daten und steuert keine Maschine.


Lerneinheiten


Sensoren und Messwerte (8 Minuten)

Ein Sensor erfasst physikalische Größen. Ein Messwert benötigt Zahl, Einheit und Gültigkeitsinformation. „75“ ohne °C ist unklar; ein fehlender Wert darf nicht als „OK“ erscheinen.

Sensor-Schaltungsbeispiel: OctopusArk, Wikimedia Commons, CC BY-SA 4.0.

Basisfrage: Was fehlt bei „75“? Feedback: Ohne Einheit und Datenqualität kannst Du den Wert nicht sicher interpretieren.


Datenweg im Industrial IoT (8 Minuten)

Industrial IoT verbindet physische Prozesse mit digitalen Anwendungen. Das Lernmodell zeigt den üblichen Grundgedanken, nicht die Architektur einer bestimmten Fabrik.

Sensor → Edge/Gateway → Datenverarbeitung → Dashboard → Mensch

Beispielarchitektur: Paul McLaughlin und Rohan McAdam, Wikimedia Commons, CC BY-SA 4.0.

Edge, Plattform, Unternehmen: Sujata Tilak, Wikimedia Commons, CC BY-SA 4.0.

Basisfrage: Was erledigt das Dashboard? Feedback: Es zeigt verarbeitete Informationen an, nicht die physikalische Messung selbst.


Vernetzung verstehen: MQTT und OPC UA (10 Minuten)

MQTT nutzt Publisher → Broker → Subscriber. OPC UA ermöglicht den standardisierten Austausch strukturierter Industrieinformationen samt Sicherheitsmechanismen. Beides bleibt hier Theorie: Es wird keinerlei Verbindung eingerichtet.

MQTT-Broker-Modell: Ademant, Wikimedia Commons, CC BY-SA 4.0.

Videos (freiwillige externe Medien):

HiveMQ: „MQTT Basics“.

OPC Foundation: „What is OPC? UA in a Minute“.

Anwendungsfrage: Garantiert eine zugestellte Nachricht eine korrekte Temperatur? Feedback: Nein: Übertragung und inhaltliche Validierung sind verschieden.


Zustandsanzeige, Zeitreihe und Alarme (10 Minuten)

Die folgenden Schwellen sind nur Übungsannahmen.

Zustand Regel Beschriftung
OK unter 70 °C Grün + „OK“
WARNUNG ab 70 °C und unter 80 °C Orange + „WARNUNG“
ALARM ab 80 °C Rot + „ALARM“
DATENFEHLER Messwert fehlt oder ist ungültig Grau + „DATENFEHLER“

Trend = Verlauf einer Zeitreihe. Hysterese = verzögerte Rückschaltung: Von ALARM erst unter 78 °C zurück, von WARNUNG erst unter 68 °C zurück. Damit vermeidest Du ein Flackern an der Schwelle. Ein fehlender Messwert ist kein Prozessalarm, sondern ein gesonderter Datenfehler.

Fiktive Messfolge Bildhafter Trend Zustand
54 → 69 → 71 → 82 → 79 → 77 → 65 °C ▁▃▄█▇▆▂ OK → OK → WARNUNG → ALARM → ALARM → WARNUNG → OK

Statistische Regelkarte, keine realen B-12-Grenzen: DanielPenfield, Wikimedia Commons, gemeinfrei.

Anwendungsfrage: Warum ist 79 °C direkt nach 82 °C weiterhin ALARM? Feedback: Die Rückschaltgrenze ist 78 °C.


Offline-Labor: Dashboard programmieren (25 Minuten)

Voraussetzung: Python 3 mit Tkinter und grafischer Oberfläche. Prüfe python -m tkinter oder python3 -m tkinter. Falls Tk auf Deinem System fehlt, kannst Du dennoch die unten enthaltenen Kommandozeilentests ausführen; besorge keine Software ohne Freigabe.

Start: Speichere den gesamten Code als dashboard.py. Führe im lokalen Übungsordner python dashboard.py --test aus (alternativ python3). Starte dann python dashboard.py. Das Fenster verwendet ausschließlich erfundene Werte im Arbeitsspeicher und zeichnet die letzten 16 Eingaben, keine echten Echtzeitdaten.

"""Offline-Trainingsdashboard: nur fiktive Temperaturen, kein Netzwerkzugriff."""
import math
import sys
import unittest
from collections import deque

WERTE = [54, 58, 63, 69, 71, 75, 82, 79, 77, 65]

def zustand(wert, vorher="OK"):
    if type(wert) not in (int, float) or not math.isfinite(wert):
        return "DATENFEHLER"
    if wert >= 80 or (vorher == "ALARM" and wert >= 78):
        return "ALARM"
    if wert >= 70 or (vorher == "WARNUNG" and wert >= 68):
        return "WARNUNG"
    return "OK"

def starten():
    import tkinter as tk
    fenster = tk.Tk()
    fenster.title("Förderband B-12 | Simulation – kein Anlagenanschluss")
    fenster.geometry("560x400")

    messungen = deque(maxlen=16)
    stand = {"index": 0, "zustand": "OK"}
    titel = tk.Label(fenster, text="Fiktive Motor-Temperatur | °C",
                     font=("Arial", 15, "bold"))
    titel.pack(pady=5)
    anzeige = tk.Label(fenster, font=("Arial", 17))
    anzeige.pack()
    status = tk.Label(fenster, font=("Arial", 13, "bold"))
    status.pack()
    info = tk.Label(fenster, text="Orange: Warnung ab 70 °C | Rot: Alarm ab 80 °C\n"
                    "Rückschaltung mit 2 °C Hysterese | Datenfehler separat")
    info.pack()
    kurve = tk.Canvas(fenster, width=520, height=235, bg="white")
    kurve.pack()

    def zeichnen():
        kurve.delete("all")
        for grenze, farbe in [(70, "#a75a00"), (80, "#b12222")]:
            y = 220 - (grenze - 40) * 3
            kurve.create_line(40, y, 510, y, fill=farbe, dash=(5, 3))
            kurve.create_text(5, y, anchor="w", text=str(grenze), fill=farbe)
        zuletzt = None
        for i, wert in enumerate(messungen):
            if wert is None or not math.isfinite(wert):
                zuletzt = None
                continue
            x = 45 + i * 28
            y = max(15, min(220, 220 - (wert - 40) * 3))
            if zuletzt is not None:
                kurve.create_line(*zuletzt, x, y, fill="#005a8b", width=3)
            kurve.create_oval(x-3, y-3, x+3, y+3, fill="#005a8b")
            zuletzt = (x, y)
        kurve.create_text(260, 230, text="Trend: bis zu 16 simulierte Messpunkte")

    def aufnehmen(wert):
        stand["zustand"] = zustand(wert, stand["zustand"])
        messungen.append(wert)
        anzeige.config(text="—" if wert is None else f"{wert} °C")
        farben = {"OK": "#176b3b", "WARNUNG": "#a75a00",
                  "ALARM": "#b12222", "DATENFEHLER": "#4b5563"}
        status.config(text="ZUSTAND: " + stand["zustand"],
                      fg=farben[stand["zustand"]])
        zeichnen()

    def weiter():
        wert = WERTE[stand["index"] % len(WERTE)]
        stand["index"] += 1
        aufnehmen(wert)

    def neu():
        messungen.clear()
        stand["index"] = 0
        stand["zustand"] = "OK"
        weiter()

    leiste = tk.Frame(fenster)
    leiste.pack(pady=5)
    for name, aktion in [
        ("Nächster Messwert", weiter),
        ("Alarmfall", lambda: aufnehmen(85)),
        ("Datenlücke", lambda: aufnehmen(None)),
        ("Neustart", neu),
    ]:
        tk.Button(leiste, text=name, command=aktion).pack(side="left", padx=3)
    neu()
    fenster.mainloop()

class LogikTests(unittest.TestCase):
    def test_grenzen(self):
        self.assertEqual(zustand(69), "OK")
        self.assertEqual(zustand(70), "WARNUNG")
        self.assertEqual(zustand(80), "ALARM")

    def test_hysterese(self):
        self.assertEqual(zustand(79, "ALARM"), "ALARM")
        self.assertEqual(zustand(77, "ALARM"), "WARNUNG")
        self.assertEqual(zustand(69, "WARNUNG"), "WARNUNG")
        self.assertEqual(zustand(67, "WARNUNG"), "OK")

    def test_datenqualitaet(self):
        self.assertEqual(zustand(None), "DATENFEHLER")
        self.assertEqual(zustand(float("nan")), "DATENFEHLER")

if __name__ == "__main__":
    if "--test" in sys.argv:
        unittest.main(argv=[sys.argv[0]])
    else:
        starten()

Bedienung: „Nächster Messwert“ spielt den fiktiven Verlauf ab; „Alarmfall“ erzeugt 85 °C; „Datenlücke“ erzeugt einen fehlenden Wert; „Neustart“ setzt alles zurück. Der Alarm wird immer in Text und Farbe gezeigt.

Testkontrolle: Erwartet werden Ran 3 tests und OK. Im Testmodus wird keine grafische Oberfläche gestartet.


Datenfehler und sichere Grenzen (10 Minuten)

TLS-Authentisierung bei MQTT als reines Anschauungsbeispiel: Ademant, Wikimedia Commons, CC BY-SA 4.0.

Ein Dashboard ist keine sicherheitsgerichtete Abschaltung. Echte Systeme benötigen geprüfte Grenzwerte, Zugriffskontrolle, Segmentierung, Alarmmanagement und gesonderte Schutzfunktionen.

Fraunhofer ITWM verlinkt diesen Vortrag zu Condition Monitoring und Predictive Maintenance; freiwilliges Vertiefungsvideo.

Transferfrage: Welche Anzeige ist beim Sensorausfall richtig? Feedback: „DATENFEHLER“, denn ein alter Normalwert beweist keine aktuelle Unbedenklichkeit.


Gestufte Hilfen und begründete Rückmeldung

Hilfe 1 – Impuls: Was muss die Oberfläche beantworten? Aktueller Zustand – Entwicklung – erforderliche Aufmerksamkeit.

Hilfe 2 – Vorgehen: Die Funktion zustand() bewertet; zeichnen() visualisiert. Prüfe die Bewertung unabhängig von der Anzeige.

Hilfe 3 – Muster: 70 °C → WARNUNG; 80 °C → ALARM; 79 °C nach ALARM → ALARM; fehlender Wert → DATENFEHLER. Warum? Inklusive Grenzwerte, 2 °C Hysterese und eigene Datenfehlerklasse.

Niveau Lokale Prüfung Feedback mit Begründung
Basis 70 °C bewerten WARNUNG, da die Schwelle eingeschlossen ist
Anwendung 82 °C gefolgt von 79 °C bewerten ALARM bleibt bis unter 78 °C
Transfer Leeren Wert simulieren DATENFEHLER statt OK, weil die Gültigkeit fehlt


Interaktive Aufgaben


Quiz: Teste Dein Wissen

Wie wird ein fehlender Temperaturwert markiert? (DATENFEHLER) (!OK) (!ENTWARNUNG) (!NORMALBETRIEB)




Was macht der MQTT-Broker? (Er verteilt abonnierte Nachrichten) (!Er misst Temperaturen) (!Er ersetzt Sensoren) (!Er schaltet Motoren ab)




Was bedeutet Trend? (Verlauf mehrerer Messwerte) (!Art einer Schutzschaltung) (!Name eines Passworts) (!Farbe des Sensors)




Welcher Zustand gilt bei 82 Grad Celsius im Lernmodell? (ALARM) (!WARNUNG) (!OK) (!DATENFEHLER)




Warum werden Alarmfarbe und Text kombiniert? (Für eine eindeutigere Kennzeichnung) (!Zum Verschlüsseln der Daten) (!Zum Aktivieren des Gateways) (!Zum Ersetzen eines Tests)




Welche Technologie unterstützt industrielle Informationsmodelle? (OPC UA) (!PNG) (!JPEG) (!HTML allein)




Was bewirkt eine Hysterese? (Sie verhindert häufige Zustandswechsel an der Grenze) (!Sie löscht alle Sensorwerte) (!Sie lädt Kundendaten) (!Sie verbindet mit fremden Netzen)




Welche Anzeige gilt für 79 Grad Celsius direkt nach ALARM? (ALARM) (!OK) (!DATENFEHLER) (!SYSTEM AUS)




Wie testest Du die Bewertungsfunktion ohne Fenster? (Mit dem Python Testmodus) (!Mit einem fremden MQTT Broker) (!Mit einer produktiven SPS) (!Mit echten Kundendaten)




Welche Aussage zum Beispielprogramm ist richtig? (Es verwendet ausschließlich lokale fiktive Werte) (!Es liest echte Produktionssensoren) (!Es lädt Messwerte in eine Cloud) (!Es ist eine zertifizierte Sicherheitssteuerung)





Memory

Sensor physikalische Messgröße erfassen
Gateway Übergang zwischen Komponenten
Broker Nachrichten verteilen
Zeitreihe Messwerte in zeitlicher Folge
Hysterese verzögerte Rückschaltung
Datenfehler ungültige oder fehlende Messung
Dashboard visuelle Zustandsübersicht





Drag and Drop

Ordne die richtigen Begriffe zu. Funktion
Sensor Temperatur erfassen
Gateway Daten vermitteln
Broker Nachrichten verteilen
Trend Verlauf sichtbar machen
Alarm Kritischen Zustand kennzeichnen





Kreuzworträtsel

Sensor Welches Bauteil erfasst eine physikalische Größe?
Gateway Wie nennt man einen Vermittler zwischen technischen Systemen?
Broker Wer verteilt bei MQTT abonnierte Nachrichten?
Trend Wie heißt eine erkennbare Verlaufsrichtung?
Hysterese Was verhindert zu häufiges Umschalten an Grenzwerten?
Alarm Wie heißt ein deutlich markierter kritischer Zustand?





LearningApps

Externe Suche; ein passendes Ergebnis ist nicht garantiert.


Lückentext

Vervollständige den Text.
Ein

erfasst physikalische Größen.
Ein

vermittelt Daten zwischen Komponenten.
Bei MQTT verteilt ein

abonnierte Nachrichten.
Eine Folge von Messwerten heißt

.
Die aktuelle Bewertung nennt man

.
Ab der ersten Übungsgrenze erscheint eine

.
Die

verhindert schnelles Hin und Her an Schwellen.
Bei einer fehlenden Messung erscheint

.
Die Logik wird offline mit

geprüft.



Offene Aufgaben

Nur mit fiktiven Daten in Deiner lokalen Übungsumgebung arbeiten. Basis, Anwendung und Transfer sind nach Schwierigkeit gestuft.


Leicht – Basis

  1. Sensor: Zeichne einen Messpunkt am erfundenen Motor. Feedback: Messort und Einheit müssen sichtbar sein, sonst bleibt die Messung mehrdeutig.
  2. Industrial Internet of Things: Skizziere den Datenweg. Feedback: Erfassen, Weiterleiten und Anzeigen müssen getrennt sein, weil sie unterschiedliche Aufgaben übernehmen.
  3. Dashboard: Entwirf drei Bereiche für Zustand, Trend und Alarm. Feedback: Eine Textkennzeichnung zusätzlich zur Farbe macht Alarme verständlicher.
  4. Messwert: Ordne 54, 71 und 82 °C Zustände zu. Feedback: OK, WARNUNG, ALARM entsprechen den Übungsgrenzen.


Standard – Anwendung

  1. Python: Führe die drei Offline-Tests aus und dokumentiere das Ergebnis. Feedback: Erfolgreiche Tests bestätigen nur die geprüften Regeln, nicht die Sicherheit einer Anlage.
  2. Datenvisualisierung: Zeichne den vorgegebenen Temperaturverlauf mit Grenzlinien. Feedback: Nur mit Reihenfolge und Grenzen lässt sich ein Trend sinnvoll beurteilen.
  3. Alarmmanagement: Prüfe 82 → 79 → 77 °C. Feedback: ALARM → ALARM → WARNUNG folgt aus der Rückschaltgrenze.
  4. Datenqualität: Betätige „Datenlücke“ und dokumentiere die Anzeige. Feedback: DATENFEHLER verhindert eine falsche Entwarnung.


Schwer – Transfer

  1. Softwaretest: Ergänze lokal einen Test für unendliche Zahlen. Feedback: DATENFEHLER ist richtig, weil unendliche Zahlen keine gültigen Temperaturen sind.
  2. Usability: Ergänze eine symbolische Alarmanzeige für farbsehschwache Personen. Feedback: Farbe darf nicht der einzige Informationsträger sein.
  3. IT-Sicherheit: Plane die Trennung von Trainingsnetz, Betriebsnetz und Schutzsteuerung. Feedback: Ein Übungsdashboard benötigt keinen Zugang zur Produktion.
  4. Instandhaltung: Entwirf einen zweiten fiktiven Schwingungskanal auf Papier. Feedback: Andere Messgrößen brauchen eigene Einheiten und fachlich begründete Grenzwerte.




Text bearbeiten Bild einfügen Video einbetten Interaktive Aufgaben erstellen



Lernkontrolle

  1. Systemanalyse: Zeichne, wo Sensor-, Übertragungs- und Auswertungsfehler entstehen könnten, und begründe die jeweiligen Anzeigen.
  2. Mensch-Maschine-Schnittstelle: Vergleiche zwei Dashboard-Entwürfe nach Alarmklarheit und Trendverständlichkeit.
  3. Softwarequalität: Entwirf neue Grenzwerttests und erläutere, welche Fehler damit gefunden werden können.
  4. Industrial Ethernet: Erkläre anhand fiktiver Daten, warum korrekte Datenübertragung nicht automatisch richtige Messwerte bedeutet.
  5. Risikobeurteilung: Beurteile, warum der Prototyp keine Sicherheitsabschaltung ersetzen kann.
  6. Wartungsplanung: Erläutere, welche zusätzlichen Betriebsinformationen eine Wartungsentscheidung verbessern würden.


Lernnachweis

  1. Dokumentierter Dashboard-Entwurf mit Zustand, Trend und eindeutigem Alarm.
  2. Lokale Programmausführung mit ausschließlich fiktiven Daten.
  3. Drei bestandene Tests samt Erläuterung der getesteten Regeln.
  4. Fehlerfallanalyse für Hysterese und fehlende Werte.
  5. Begründete Abgrenzung von echten Anlagen und Netzen.
  6. Eine eigene Verbesserungsidee für die Offline-Simulation.


OERs zum Thema

Thematisch passende Wikipedia-Einstiege:

Geprüfte Fachquellen (10.10.2026):

  1. MQTT.org – Grundlagen und MQTT-Spezifikationen.
  2. OPC Foundation – OPC UA.
  3. Fraunhofer EMFT – Condition Monitoring.
  4. BSI – Empfehlungen für ICS.
  5. Python – Tkinter und Python – unittest.

Medienrechte: Commons-Bilder mit Urheber und Lizenz direkt am Bild, weitere Bedingungen auf der jeweiligen Dateiseite. Videos von HiveMQ, OPC Foundation und ein durch Fraunhofer verlinkter Vortrag sind nicht automatisch OER-lizenziert. Die freiwillige Wiedergabe externer Videos kann Daten an YouTube übertragen. Das lokale Programm überträgt nichts.


Verknüpfte Lernbereiche


aiMOOC-Projekte



Schulfach+




aiMOOCs



aiMOOC Projekte









MOOCwiki · Deutsch

Nach dem Lernen ist vor dem Lernen

Entdecke direkt den nächsten Lernkurs. Weitere Inhalte erscheinen, wenn Du weiter nach unten scrollst.

Zur MOOCwiki-Hauptseite

Mediathek

Inhalte werden geladen ...

Mediathek wird aus dem Wiki geladen ...