Ziele gemäß Rahmenlehrplan

Cyber-physische Systeme ergänzen

Die Schülerinnen und Schüler verfügen über die Kompetenz, die physische Welt und IT-Systeme funktional zu einem cyber-physischen System zusammenzuführen.

  • Die Schülerinnen und Schüler analysieren ein cyber-physisches System bezüglich eines Kundenauftrags zur Ergänzung und Inbetriebnahme weiterer Komponenten.

  • Sie informieren sich über den Datenfluss an der Schnittstelle zwischen physischer Welt und IT-System sowie über die Kommunikation in einem bestehenden Netzwerk. Sie verschaffen sich einen Überblick über die Energie-, Stoff- und Informationsflüsse aller am System beteiligten Geräte und Betriebsmittel.

  • Die Schülerinnen und Schüler planen die Umsetzung des Kundenwunsches, indem sie Kri- terien für die Auswahl von Energieversorgung, Hardware und Software (Bibliotheken, Protokolle) aufstellen. Dazu nutzen sie Unterlagen der technischen Kommunikation und passen diese an.

  • Sie führen Komponenten mit dem cyber-physischen System funktional zusammen.

  • Sie prüfen systematisch die Funktion, messen physikalische Betriebswerte, validieren den Energiebedarf und protokollieren die Ergebnisse.

  • Die Schülerinnen und Schüler reflektieren den Arbeitsprozess hinsichtlich möglicher Optimierungen und diskutieren das Ergebnis in Bezug auf Betriebssicherheit und Datensicherheit.

Bullshit-Bingo

Plan

Zeitplan

gantt
 title August (15h)
 dateFormat YYYY-MM-DD
 axisFormat %d.%m.
 section 2h Do 22.08.
  Einführung                  :2024-08-22, 2h
 section 4h Fr 23.08.
  Grundlagen CPS, SOL (Funktionsweise CPU)  :2024-08-23, 4h
 section 5h Do 29.08.
  Logische Verknüpfungen, Binäres Rechnen, Praxis Logische Verknüpfungen  :2024-08-29, 5h
 section 4h Fr 30.08.
  Von-Neumann-Zyklus          :2024-08-30, 4h
gantt
 title Oktober + November (12h)
 dateFormat YYYY-MM-DD
 axisFormat %d.%m.
 section 3h Mo 21.10.
  Einführung Mikrocontroller  :2024-10-21, 3h
 section 3h Mi 30.10.
  Praxis Arduino (Simulator)  :2024-10-24, 3h
 section 4h Fr 01.11.
  Einführung Git              :2024-11-01, 2h
  SOL (Git)                   :2024-11-01, 2h
gantt
 title Dezember (17h)
 dateFormat YYYY-MM-DD
 axisFormat %d.%m.
 section 5h Do 05.12.
  Physikalische Betriebswerte, Berechnung von (Vor-)Widerständen  :2024-12-05, 4h
 section 4h Fr 06.12.
  Wiederholung                :2024-12-06, 2h
  SOL (Rechnernetze / Topologien + Vorbereitung Klassenarbeit)  :2024-12-06, 2h
 section 2h Di 10.12.
  Fragen zur Klassenarbeit    :2024-12-10, 2h
 section 2h Mi 11.12.
  Klassenarbeit               :milestone, 2024-12-11, 2h
gantt
 title Januar (13h)
 dateFormat YYYY-MM-DD
 axisFormat %d.%m.
 section 3h Do 22.01.
  OSI-Modell (Physical Layer) :2025-01-23, 3h
 section 5h Do 23.01.
  UART, I²C, SPI              :2025-01-23, 5h
 section 4h Fr 24.01.
  HTTP, MQTT                  :n2025-01-24, 2h
  SOL (Vorbereitung Klassenarbeit)  :2025-01-24, 2h
 section 3h Di 28.01.
  Wiederholung                :2025-01-23, 3h
 section 4h Fr 31.01.
  Klassenarbeit               :milestone, 2025-01-31, 2h
  SOL (Projektplanung)        :2025-01-31, 2h
gantt
 title März (6h)
 dateFormat YYYY-MM-DD
 axisFormat %d.%m.
 section 2h Mi 19.03.
  Praxisprojekt               :2025-03-19, 2h
 section 4h Fr 21.03.
  …                           :2025-03-21, 2h
  SOL                         :2025-03-21, 2h
gantt
 title Juni (23h)
 dateFormat YYYY-MM-DD
 axisFormat %d.%m.
 section 3h Mi 04.06.
  …                           :2025-06-04, 3h
 section 5h Do 05.06.
  …                           :2025-06-05, 5h
 section 5h Mo 16.06.
  …                           :2025-06-16, 5h
 section 5h Do 19.06.
  …                           :2025-06-19, 5h
 section 2h Fr 20.06.
  SOL (Projektabschluss)      :2025-06-20, 2h
 section 3h Mo 23.06.
  Projektvorstellungen        :2025-06-23, 3h

Leistungskontrollen

  • Soll Notendichte: 7
  • Minimum Klassenarbeiten (>45min, doppelte Wertung): 2
  • Sonstige Noten: >=3
  • 2. Klassenarbeit 31.01. ~90min (einseitig beschrifteter A4 Notizzettel)
    • OSI-Modell, insbesondere Physical Layer
    • UART, I²C, SPI
    • HTTP, MQTT
    • Grundlagen Programmierung (Variablen, While, If/Else)

Literatur

Prüfungskatalog FiSi

„Prüfungskatalog für die IHK Abschlussprüfungen — Fachinformatiker Fachinformatikerin Fachrichtung Systemintegration — Verordnung über die Berufsausbildung zum Fachinformatiker/ zur Fachinformatikerin vom 5. März 2020“

Zentralstelle für Prüfungsaufgaben der Industrie- und Handelskammern (ZPA) Nord-West

  1. Auflage 2021

Prüfungsvorbereitung FiSi

„Prüfungsvorbereitung Aktuell — Teil 2 der gestreckten Abschlussprüfung Fachinformatiker/-in Systemintegration (nach der neuen Ausbildungsverordnung ab August 2020)“

Europa-Fachbuchreihe

  1. Auflage 2022

ISBN 978-3-7585-3169-9

Lehrbuch FiSi LF10-12

„IT-Berufe Fachstufe II — Fachinformatiker/-in Fachrichtung Systemintegration — Lernfelder 10-12“

Westermann

  1. Auflage 2023 (Vorabversion)

ISBN 978-3-14-220108-5

Grundlagen CPS

Was sind Cyber-physische Systeme?

Ein CPS ist eine Verbindung einer Software mit mechanischen Bauteilen, die miteinander kommunizieren. Sprich ein CPS verbindet die virtuelle Welt mit der realen.

Was ist „Cyber“ und wo kommt das Wort her?

Cybersicherheitsarchitektur

Cyberwehr

Anwendungsfelder

  • Industrie 4.0 = ist die Bezeichnung für Projekte zur umfassenden Digitalisierung der industriellen Produktion.
  • Smart Grids (deutsch: Intelligentes Stromnetz)
  • Logistik, Verkehrssteuerung
  • E-Health
  • Sicherheits- & Fahrerassistenzsysteme
  • Frühwarnsysteme für Katastrophenschutz (Bsp. Tsunami)

Wie grenzen sich CPS von IOT und Robotik ab?

  • IOT und Robotik sind den Cyber physischen Systemen untergeordnet
  • IOT = Sammelbegriff für die unterschiedlichsten Technologien einer globalen Infrastruktur der Informationsgesellschaften. Vernetzt physische und virtuelle Objekte miteinander und lassen sie zusammenarbeiten.
  • CPS vs. IoT: CPS betont die Integration und Interaktion zwischen physischen und digitalen Komponenten, während IoT sich auf die Vernetzung und den Datenaustausch zwischen Geräten konzentriert.
  • CPS vs. Robotik: CPS umfasst eine breitere Palette von Anwendungen, die über die reine Robotik hinausgehen, einschließlich eingebetteter Systeme und industrieller Steuerungen

Relevante Technologien

  • Eingebettete Systeme = sind Computer Systeme die Verbaut sind für ein bestimmten anwendungsfall (z.B. Kassensysteme)

  • Sensornetze = sind ein Verbund aus Sensoren in einem bestimmten Bereich

  • Internet-Infrastruktur = Geräte werden mit Internet ausgestattet und Verbunden

  • Echtzeitverarbeitung = Daten werden Echtzeit verarbeitet, wie Verkehrsdaten wo welches Auto sind

„Industrie 4.0“

  1. industrielle Revolution bestand in der Mechanisierung mittels Wasser- und Dampfkraft
  2. industrielle Revolution geprägt durch Massenfertigung mit Hilfe von Fließbändern und elektrischer Energie
  3. industrielle Revolution oder digitale Revolution mit Einsatz von Elektronik und IT (v. a. die speicherprogrammierbare Steuerung und die CNC-Maschine)
  4. industrielle Revolution: Smart Factory und Industrial internet of things

Schnittstellen

Wie kommunizieren Mensch, „Cyber“ und Physik miteinander?

„Aus CPS-Sicht“

HCI vs M2M vs CPS

flowchart LR
  Mensch <--HCI--> Cyber
  subgraph CPS[Cyber-physisches System]
    subgraph Cyber[Cyber System]
      Computer1 <--M2M--> Computer2
    end
    subgraph PS[Physisches System]
      subgraph Schnittstelle
        Aktuator
        Sensor
      end
      subgraph I[Geräte / Anlagen]
        Maschine1
        Maschine2
      end
    end
    PS --messen--> Cyber
    Cyber --ansteuern--> PS
  end
  Mensch <-..-> PS

HCI

(Human–computer interaction / Human-computer Interface)

-> Mensch-Maschine-Interaktion / Benutzerschnittstelle

M2M

(Machine-to-Machine)

CPS

(Cyber-physical system)

„Aus Sicht eines Prozessors

(Rechnerarchitektur / Prozessorarchitektur)

IHK-Zwischenprüfung Herbst 2018: Aufgabe 2.2

stark vereinfacht

flowchart LR
subgraph Computersystem
  Arbeitsspeicher
  subgraph Devices
    subgraph Peripherie
      Speichermedien
      Netzwerkkarten
      HID[Human Interface Device]
    end
    Controller
    Koprozessoren
  end
  subgraph Prozessor
    Bus <--> Register
    Bus <--> Rechenwerk <--> Register
    Bus <--> Steuerwerk <--> Register
    Steuerwerk <--> Rechenwerk
  end
end
Arbeitsspeicher <--> Bus
Devices <--> Bus

cpu

detailierter

flowchart TB
  subgraph Motherboard[Motherboard / SoC]
    Arbeitsspeicher <--MMU--> Northbridge
    subgraph CPU-Chip
      Northbridge <--FSB--> Bus
      subgraph Prozessor-Kern
        Bus <--> Register
        Bus <--> Rechenwerk <--> Register
        Bus <--> Steuerwerk <--> Register
        Steuerwerk <--> Rechenwerk
      end
    end
    Northbridge <--DMI-->  Southbridge
  end
  subgraph Welt[Rest der Welt]
    subgraph Devices
      Device1
      Device2
      Device3
    end
  end
  Southbridge <--MMIO-->Device1 
  Southbridge <--PMIO--> Device2
  Register <--GPIO--> Device3
SoC

(System-on-a-Chip)

FSB

(Front Side Bus)

DMI

(Direct Media Interface)

MMU

(Memory Management Unit)

MMIO

(Memory-mapped I/O)

PMIO

(Port-mapped I/O)

GPIO

(General Purpose Input/Output)

Was ist die „richtige“ Sichtweise?

Prozessoren

Logikgatter

Aufgabe 6 von Seite 78 aus „Prüfungsvorbereitung Aktuell Teil 1“ (Europa Verlag)

SOL „Funktionsweise von Prozessoren“

Erkundigen Sie sich selbstständig darüber, wie es möglich ist, mittels Maschinen zu rechnen. Als Einstieg wird folgendes Video empfohlen: A Computer Built With Dominos.

Beantworten Sie die folgenden Fragen:

  1. Wie funktioniert das Binärsystem?
  2. Schreiben Sie die Zahlen 0-7 als Binärzahl auf.
  3. Benennen Sie 4 verschiedene zweistellige logische Verknüpfungen (Logikgatter).
  4. Was ist ein Halbaddierer?
  5. Wieviele Eingänge und wieviele Ausgänge hat ein Halbaddierer?
  6. Zeichnen oder beschreiben Sie eine Schaltung, wie ein Halbaddierer aus einfachen Logikgattern aufgebaut werden kann.
  7. Finden Sie Möglichkeiten, wie Logikgatter mittels Murmeln, Wasser oder in Minecraft aufgebaut werden können?

Transistoren

npn

npn

Aufbau von Gattern und Addierer mit BJT-Transistioren

Von-Neumann-Zyklus

cpu

  1. FETCH (Befehlsabruf):
    • Nächsten Befehl (entsprechend Adresse im Befehlszähler) aus Arbeitsspeicher in das Befehlsregister laden und Befehlszähler inkrementieren
  2. DECODE(Dekodierung):
    • Der Befehl wird durch das Steuerwerk in Schaltinstruktionen für das Rechenwerk aufgelöst
  3. FETCH OPERANDS(Operandenabruf):
    • Operanden werden aus dem Speicher laden
  4. EXECUTE (Befehlsausführung):
    • Arithmetische oder logische Operation wird vom Rechenwerk berechnet. (Bei Sprungbefehlen und erfüllter Sprungbedingung wird der Befehlszähler angepasst)
  5. WRITE BACK (Rückschreiben des Resultats): Ergebnis der Berechnung wird in den Speicher zurückgeschrieben (falls nötig)

Assembler

ARM instruction summary

Beispiel (blinky-rust):

git clone git@github.com:johannesloetzsch/blinky-rust-nix.git -b asm
cd blinky-rust-nix; nix develop
cargo rustc -- --emit asm
grep -m1 main_loop: -A43 target/thumbv7m-none-eabi/debug/deps/blinky_rust-*.s | bat --file-name example.s
.LBB26_1:
    .loc    11 0 5 is_stmt 0
    subs    r0, r7, #1
    .loc    11 15 9 is_stmt 1
    str r0, [sp]
    bl  _ZN136_$LT$stm32f1xx_hal..gpio..gpioc..PC13$LT$stm32f1xx_hal..gpio..Output$LT$MODE$GT$$GT$$u20$as$u20$embedded_hal..digital..v2..OutputPin$GT$8set_high17h41a8f7d2c1b1fab3E
    bl  _ZN4core6result19Result$LT$T$C$E$GT$2ok17hbba81ef68e509503E
    .loc    11 16 9
    ldr r0, [sp, #8]
    mov.w   r1, #1000
    str r1, [sp, #4]
    bl  _ZN97_$LT$stm32f1xx_hal..delay..Delay$u20$as$u20$embedded_hal..blocking..delay..DelayMs$LT$u16$GT$$GT$8delay_ms17h9fb44941d1d2b02bE
    ldr r0, [sp]
    .loc    11 18 9
    bl  _ZN136_$LT$stm32f1xx_hal..gpio..gpioc..PC13$LT$stm32f1xx_hal..gpio..Output$LT$MODE$GT$$GT$$u20$as$u20$embedded_hal..digital..v2..OutputPin$GT$7set_low17h5e48a13c9b6d1e70E
    bl  _ZN4core6result19Result$LT$T$C$E$GT$2ok17hbba81ef68e509503E
    ldr r1, [sp, #4]
    .loc    11 19 9
    ldr r0, [sp, #8]
    bl  _ZN97_$LT$stm32f1xx_hal..delay..Delay$u20$as$u20$embedded_hal..blocking..delay..DelayMs$LT$u16$GT$$GT$8delay_ms17h9fb44941d1d2b02bE
    b   .LBB26_1

Binary

## laut disassembly startet <main_loop> bei 0800_016c, das ist im ELF-binary an 1_016c
hexdump -s $((16#1016c)) target/thumbv7m-none-eabi/debug/deps/blinky_rust-* |head -n4
001016c b580 466f b084 9002 e7ff 1e78 9000 f000
001017c f92f f000 f886 9802 f44f 717a 9101 f000
001018c fc30 9800 f000 f917 f000 f87b 9901 9802
001019c f000 fc27 e7e9 b580 466f f000 f800 b580
## …und an adresse 717a befindet sich #0x3e8, also #1000
hexdump -s $((16#20717a)) target/thumbv7m-none-eabi/debug/deps/blinky_rust-* |head -n 1
020717a 4202 070d 0000 0018 0000 03e8 0000 0000

Disassemble

cargo objdump -- -S target/thumbv7m-none-eabi/debug/deps/blinky_rust-* | grep -m1 '<main_loop>' -A 26
0800016c <main_loop>:
; fn main_loop(mut led: PC13<Output<PushPull>>, mut delay: Delay) -> ! {
 800016c: b580         	push	{r7, lr}
 800016e: 466f         	mov	r7, sp
 8000170: b084         	sub	sp, #0x10
 8000172: 9002         	str	r0, [sp, #0x8]
;     loop {
 8000174: e7ff         	b	0x8000176 <main_loop+0xa> @ imm = #-0x2
 8000176: 1e78         	subs	r0, r7, #0x1
;         led.set_high().ok();
 8000178: 9000         	str	r0, [sp]
 800017a: f000 f92f    	bl	0x80003dc <_ZN136_$LT$stm32f1xx_hal..gpio..gpioc..PC13$LT$stm32f1xx_hal..gpio..Output$LT$MODE$GT$$GT$$u20$as$u20$embedded_hal..digital..v2..OutputPin$GT$8set_high17h41a8f7d2c1b1fab3E> @ imm = #0x25e
 800017e: f000 f886    	bl	0x800028e <_ZN4core6result19Result$LT$T$C$E$GT$2ok17hbba81ef68e509503E> @ imm = #0x10c
;         delay.delay_ms(1000_u16);
 8000182: 9802         	ldr	r0, [sp, #0x8]
 8000184: f44f 717a    	mov.w	r1, #0x3e8
 8000188: 9101         	str	r1, [sp, #0x4]
 800018a: f000 fc30    	bl	0x80009ee <<stm32f1xx_hal::delay::Delay as embedded_hal::blocking::delay::DelayMs<u16>>::delay_ms::h9fb44941d1d2b02b> @ imm = #0x860
 800018e: 9800         	ldr	r0, [sp]
;         led.set_low().ok();
 8000190: f000 f917    	bl	0x80003c2 <_ZN136_$LT$stm32f1xx_hal..gpio..gpioc..PC13$LT$stm32f1xx_hal..gpio..Output$LT$MODE$GT$$GT$$u20$as$u20$embedded_hal..digital..v2..OutputPin$GT$7set_low17h5e48a13c9b6d1e70E> @ imm = #0x22e
 8000194: f000 f87b    	bl	0x800028e <_ZN4core6result19Result$LT$T$C$E$GT$2ok17hbba81ef68e509503E> @ imm = #0xf6
 8000198: 9901         	ldr	r1, [sp, #0x4]
;         delay.delay_ms(1000_u16);
 800019a: 9802         	ldr	r0, [sp, #0x8]
 800019c: f000 fc27    	bl	0x80009ee <<stm32f1xx_hal::delay::Delay as embedded_hal::blocking::delay::DelayMs<u16>>::delay_ms::h9fb44941d1d2b02b> @ imm = #0x84e
 80001a0: e7e9         	b	0x8000176 <main_loop+0xa> @ imm = #-0x2e

bare-metal-programming

Binärzahlen

Computer kennen nur 1 und 0 und arbeiten mit Binärzahlen (im Dualsystem).

Wieviele Zustände können mit einer gegebenen Anzahl von Bits dargestellt werden?

Umrechnung

Addition

Integer overflow

Rechnernetze

Topologien

Welche Topologien kennt ihr? Wo finden sie Anwendung?

Welche Vor- und Nachteile haben verschiedene Topologien?

topologien

Bussysteme

Für welche Einsatzzwecke sind Bussysteme attraktiv? Warum?

chipset

graph TB
  Bussysteme --> On-Chip[On-Chip Bus]
  Bussysteme --> Inter-Chip[Inter-Chip Bus]
  Inter-Chip -..-> FSB[Front Side Bus]
  Inter-Chip -..-> DMI[Direct Media Interface]
  Bussysteme --> Peripheriebus
  Peripheriebus -..-> intern
  intern -..-> PCI
  intern -..-> sata[Serial ATA]
  intern -..-> I2C
  intern -..-> SPI
  Peripheriebus -..-> extern
  extern -..-> seriell[Serielle Schnittstelle]
  extern -..-> parallel[Parallele Schnittstelle]
  extern -..-> USB
  Bussysteme --> Feldbus -..-> CAN[z.B. CAN]

I²C

I²C

  • Master-Slave-Bus
  • zwei Signalleitungen
    • SCL = Serial Clock
    • SDA = Serial Data

SPI

(Serial Peripheral Interface)

SPI

Integration (ergänzen / zusammenführen)

Was soll/kann woran ergänzt oder zusammengeführt werden?

Wie sollte eine Systemarchitektur aussehen, damit sie:

  • Möglichst gut ergänzt oder mit anderen Systemen zusammengeführt werden kann?
  • Effektiv entwickelt, gewartet und ergänzt werden kann?
  • „Sicher“ ist?

Best Practice

  • Modularisierung
  • Schnittstellen
    • gut designen
      • wo?
      • welche?
    • dokumentieren
  • bestehende, verbreitete, offene Standards nutzen
    • Schnittstellen
      • Protokolle
        • Bibliotheken
  • Versionieren
    • git

Standards / Normen

Wofür werden Standards benötigt?

Welche Standards und Standardisierungsgremien kennt ihr?

graph TB
  Standards[Technische Standards] --> Industriestandard[Industriestandard / De-facto-Standard]
  Standards --> Normen[Internationale Normen / De-jure-Standards]
  Normen -..-> DIN
  Normen -..-> WSC
  WSC -..-> ISO
  WSC -..-> ITU
  WSC -..-> IEC
  Normen -..-> IEEE
  Normen -..-> W3C
  Normen -..-> IETF -..-> RFC

Normen können auch Spaß machen…

OSI Modell

(Open Systems Interconnection model)

Was ist ein Modell? Wofür sind Modelle wichtig?

7 OSI Layer

OSI-SchichtEinordnungTCP/IP-ReferenzmodellProtokollbeispieleEinheitenKopplungselemente
7Anwendung (Application)
6Darstellung (Presentation)
5Sitzung (Session)AnwendungsorientiertAnwendung
HTTP, MQTT, DHCP, DNSDaten
4TransportTransportorientiertTransportTCP, UDP(TCP) Segmente, (UDP) Datagrame
3Vermittlung (Network)Ende-zu-EndeInternetIPv4, IPv6, ICMPPaketeRouter, Layer-3-Switch
2Sicherung (Data Link)Punkt-zu-PunktNetzzugriffARP, MAC, IEEE 802.11 (WLAN)Rahmen (Frames)Bridge, Layer-2-Switch, Wireless Access Point
1Bitübertragung (Physical)RS-232 (Serielle Schnittstelle), 1000BASE-T (Twisted-Pair GbE), 100GBASE-LR4 (Glasfaser)Bits, SymboleLeitungen, Stecker, Hubs, Repeater

Protokolle

Was sind Protokolle?

Protokolle definieren Regeln und Standards, die die Kommunikation und den Datenaustausch zwischen Geräten oder Systemen regeln.


Fragen zu Protokollen

  1. Welche Arten von Protokollen gibt es?

    • Es gibt verschiedene Protokollarten wie Netzwerkprotokolle (z. B. TCP/IP), Sicherheitsprotokolle (z. B. SSL/TLS) und Übertragungsprotokolle (z. B. HTTP, FTP).
  2. Warum sind Protokolle in Netzwerken wichtig?

    • Protokolle gewährleisten zuverlässige und effiziente Datenübertragung und definieren, wie Informationen über ein Netzwerk transportiert werden.
  3. Welche Sicherheitsaspekte sind bei Protokollen relevant?

    • Authentifizierung, Verschlüsselung und Integrität der Daten sind entscheidend, um vertrauliche Informationen zu schützen.
  4. Wie unterscheiden sich verbindungsorientierte und verbindungslose Protokolle?

    • Verbindungsorientierte Protokolle (wie TCP) garantieren die Datenlieferung, während verbindungslose Protokolle (wie UDP) die Daten ohne Bestätigung senden.
  5. Welche Rolle spielt die Latenz bei der Protokollauswahl?

    • Protokolle mit niedriger Latenz sind wichtig für Echtzeitanwendungen, während andere Anwendungen mehr Fehlerkorrektur benötigen.
  6. Was bedeutet Protokoll-Interoperabilität?

    • Verschiedene Systeme sollten mithilfe standardisierter Protokolle miteinander kommunizieren können, um Kompatibilität zu gewährleisten.
  7. Wie kann man die Effizienz eines Protokolls messen?

    • Wichtige Kennzahlen sind Bandbreite, Latenz, Fehlerrate und die Komplexität des Overheads.
  8. Welche Rolle spielen Protokollschichten in einem Netzwerk?

    • Verschiedene Schichten (z. B. OSI-Modell) trennen Funktionen wie Transport, Datenverbindung und Anwendung, was die Komplexität reduziert und Flexibilität ermöglicht.

Protokolle sind das Rückgrat moderner Netzwerke, daher ist die Auswahl eines geeigneten Protokolls entscheidend für die Leistungsfähigkeit und Sicherheit der Systeme.

Bitübertragung == Physical Layer

Serielle Schnittstelle

UART

(Universal Asynchronous Receiver Transmitter)

rs-232 oscilloscope

NodeMCU

PI GPIO

RS-232

DE9 Stift (männlich) und Buchse (weiblich)

Ethernet Bitübertragung

Kupferkabel

z.B. 1 Gbit/s 1000BASE-T == IEEE 802.3 Clause 40 (früher IEEE 802.3ab)

Lichtwellenleiter

z.B. 1 Gbit/s 1000BASE-LX == IEEE 802.3 Clause 38 (früher IEEE 802.3z)

z.B. 100 Gbit/s 100GBASE-LR4

Totalreflexion

Anwendungsorientiert

HTTP

  • Server + Clients
  • Übertragung von Daten/Dateien
  • Für jede Übertragung wird eine neue TCP-Verbindung auf- und abgebaut

Layer

5-7

  • baut auf TCP/IP (Layer 4/3) auf
  • wenn SSL/TLS genutzt wird, ist es wie ein zusätzlicher Layer zwischen 4 und 5

Ports

  • 80 Standardport HTTP://
  • 443 HTTPS://

Methoden (Verben)

  • GET
  • POST
  • PUT
  • DELETE

Statuscodes

  • 200 OK
  • 301 Redirect
  • 404 Not Found
  • 503 Service Unavailable
  • 418 I'm a Teapot

HTTP-Response

HTTP 1.1 200 OK ## Protokoll-Version + Statuscode

Content-Type: text/html

… ## Weitere Header (key+value)

                  ## Leerzeile

<html> ## Content

</html>

REST

Beispiel APIs

Nominatim

API-Dokumentation

„Free-form query“ mit q=

„Structured query“ mit city= und optional countrycodes=

Mit format=xml

Ohne format=

Swagger Petstore

Beispiel Code

Sicherheit

OWASP Top 10 Web Application Security Risks

Relevante IT-Grundschutz-Bausteine:

  • CON.2 Datenschutz
  • CON.8 Software-Entwicklung
  • CON.10 Entwicklung von Webanwendungen
  • APP.3.1 Webanwendungen und Webservices
  • APP.3.2 Webserver

Beispiel

APP.3.1.A21 Sichere HTTP-Konfiguration bei Webanwendungen

Zum Schutz vor Clickjacking, Cross-Site-Scripting und anderen Angriffen SOLLTE der IT-Betrieb geeignete HTTPResponse-Header setzen. Dazu SOLLTEN mindestens die folgenden HTTP-Header verwendet werden:

Weitere Infos bei OWASP

Python REST example

Der Beispielcode rest.py nutzt die Bibliothek FastAPI um eine REST-API mit Swagger UI bereitzustellen.

Usage

git clone https://github.com/johannesloetzsch/LF7.git
cd src/examples/rest/python
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

python rest.py

http://localhost:8000/index.html

Development

To run a devserver with automatic reloading when code changed, use:

uvicorn rest:app --reload

MQTT

Message Queuing Telemetry Transport“

  • Publish/Subscribe

  • Clients können ein „Topic“ abonnieren

    • TCP-Verbindung wird offen gehalten
    • Server kann Clients über bestehende Verbindung über Updates informieren
mosquitto_sub -h 192.168.88.47 -p 1883 -u fi22 -P geheim -t fi22/buttonGPIO2
mosquitto_pub -h 192.168.88.47 -p 1883 -u fi22 -P geheim -t fi22/buttonGPIO2 -m '1'

Praxis

Git

SOL

Erarbeiten Sie sich die Grundlagen zu Git.

Von folgenden Subcommands sollten Sie wissen, was sie tun:


git init

git clone

git status

git add

git diff

git commit

git restore




Empfehlung: Wenn Git für sie komplett neu ist, probieren sie zum lernen gerne die ersten Level von https://ohmygit.org/




Abgabe: Als Ergebnis wird erwartet, dass Sie zwischen folgenden beiden Aufgaben auswählen:




Variante 1:

a) erstellen Sie per "git init" ein neues git Repository

b) legen Sie die Dateien aus ihrem Arduine-Projekt in dem Repository ab

c) wählen Sie die Daten zum commit aus ("git add") und erstellen Sie einen commit

d) ändern Sie Dateien oder fügen Sie neue Dateien (z.B. eine README.md) hinzu

e) erstellen Sie einen zweiten commit mit den Änderungen

f) versuchen Sie Ihr git Repository auf einen Git-Server (z.B. https://github.com oder https://gitlab.com) hochzuladen. Wenn Sie erfolgreich sind, reicht als Abgabe ein Link

g) falls Sie mit f) nicht erfolgreich waren, erzeugen Sie ein zip-Archiv des Repositories und laden Sie dieses als Abgabe hoch

 

Variante 2:

a) erstellen Sie einen Github-Account (wenn Sie noch keinen haben)

b) forken Sie mein repository https://github.com/johannesloetzsch/LF7

c) clonen Sie ihren Fork auf ihren Computer

d) editieren Sie mindestens eine Datei (beheben Sie z.B. einen Tipp-/Rechtschreibfehler oder fügen sie zu einem Thema ergänzende Informationen wie einen nützlichen Link oder den Vorschlag einer Definition eines Begriffes hinzu)

e) commiten und pushen Sie die Änderungen

f) stellen Sie mir einen Pull-Request (das reicht als Abgabe)

SOL - Definition Musterlösung

git init - Initialisiert ein neues lokales und leeres Git-Repository.

git clone - Klont ein Repository in ein neues Verzeichnis. Dieses muss/wird mit der URL des Repositorys angegeben.

git status - Zeigt den Status des Arbeitsverzeichnisses und des Staging-Bereichs an. Es zeigt an, welche Dateien geändert wurden, welche Dateien zum Staging-Bereich hinzugefügt wurden und welche Dateien im Staging-Bereich sind.

git add - Fügt Dateien zum Staging-Bereich hinzu. Es gibt verschiedene Möglichkeiten, Dateien hinzuzufügen.

git diff - Zeigt die Unterschiede zwischen zwei Commits, zwischen einem Commit und dem Arbeitsverzeichnis oder zwischen zwei Branches an.

git commit - Erstellt einen neuen Commit. Dieser Commit ist nur lokal verfügbar und muss mit git push auf den Remote-Server hochgeladen werden.

git restore - Stellt Dateien aus dem Staging-Bereich oder dem letzten Commit wieder her.

Raspberry Pi

Pinout

pinout
 +------------------| |--| |------+
 | ooooooooooooo P1 |C|  |A|      |
 | 1oooooooooooo    +-+  +-+      |
 |    1ooo                        |
 | P5 oooo        +---+          +====
 |                |SoC|          | USB
 |   |D| Pi Model +---+          +====
 |   |S| B  V2.0                  |
 |   |I|                  |C|+======
 |                        |S||   Net
 |                        |I|+======
 =pwr             |HDMI|          |
 +----------------|    |----------+
 
 P1:
    3V3  (1) (2)  5V    
  GPIO2  (3) (4)  5V    
  GPIO3  (5) (6)  GND   
  GPIO4  (7) (8)  GPIO14
    GND  (9) (10) GPIO15
 GPIO17 (11) (12) GPIO18
 GPIO27 (13) (14) GND   
 GPIO22 (15) (16) GPIO23
    3V3 (17) (18) GPIO24
 GPIO10 (19) (20) GND   
  GPIO9 (21) (22) GPIO25
 GPIO11 (23) (24) GPIO8 
    GND (25) (26) GPIO7

GPIO Output

sys-Dateisystem

Als root oder Mitglied der Gruppe gpio:

## get offset
ls /sys/class/gpio/gpiochip*
PIN=$((512+2))

echo $PIN > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio$PIN/direction

echo 1 > /sys/class/gpio/gpio$PIN/value
echo 0 > /sys/class/gpio/gpio$PIN/value

blink.sh

PIN=$((512+2))

echo $PIN > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio$PIN/direction

while true; do
  echo 1 > /sys/class/gpio/gpio$PIN/value
  sleep 1
  echo 0 > /sys/class/gpio/gpio$PIN/value
  sleep 1
done
sh blink.sh

Python

python  ## öffnet eine interaktive Python-Shell
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)

GPIO.setup(2, GPIO.OUT)

GPIO.output(2, True)
GPIO.output(2, False)

GPIO.cleanup()

blink.py

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)

LED1=2
GPIO.setup(LED1, GPIO.OUT)

try:
    while(True):
        GPIO.output(LED1, True)
        time.sleep(1)
        GPIO.output(LED1, False)
        time.sleep(1)
finally:
    GPIO.cleanup()
python blink.py

Aufgaben

  1. Bauen Sie eine Schaltung und schreiben Sie das dazugehörige Programm, um abwechselnd 2 LEDs blinken zu lassen.
  2. Programmieren Sie eine Ampelschaltung, die in der richtigen Reihenfolge zwischen 3 LEDs umschaltet.

Zusatzaufgaben

  1. Programmieren Sie eine Schaltung mit 3 LEDs, welche 3 Bits darstellen, mit denen von 0 bis 7 gezählt wird.
  2. Schreiben Sie ein Programm, um eine 7-Segment-Anzeige anzusteuern.

GPIO Input

sys-Dateisystem

echo 2 > /sys/class/gpio/export
echo in > /sys/class/gpio/gpio2/direction
cat /sys/class/gpio/gpio2/value

read.sh

while true; do
  cat /sys/class/gpio/gpio2/value
  sleep 1
done
sh read.sh

Die für I²C verwendeten GPIO-PINs (BCM GPIO2 und BCM GPIO3) haben einen fest verbauten Pull-Up-Widerstand.

Python

read.py

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)

BUTTON1=2
GPIO.setup(BUTTON1, GPIO.IN)

try:
    while(True):
        print(GPIO.input(BUTTON1))
        time.sleep(1)
finally:
    GPIO.cleanup()

read2.py

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)

BUTTON1=2
GEDRUECKT=0
GPIO.setup(BUTTON1, GPIO.IN)

try:
    while(True):
        if( GPIO.input(BUTTON1) == GEDRUECKT):
            print("Button wurde gedrückt")
        else:
            print("Button wurde nicht gedrückt")
        time.sleep(1)
finally:
    GPIO.cleanup()

read3.py

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)

BUTTON1=2
GEDRUECKT=0
GPIO.setup(BUTTON1, GPIO.IN)

try:
    print("Bitte Button drücken um fortzufahren…")
    while( GPIO.input(BUTTON1) != GEDRUECKT ):
        pass

    print("Bitte Button loslassen um fortzufahren…")
    while( GPIO.input(BUTTON1) == GEDRUECKT ):
        pass
finally:
    GPIO.cleanup()
    print("Das Programm ist beendet")

Beispiel: Ansteuerung mittels Webserver

Aufgaben

Eränzen Sie die Programme aus dem ersten Teil (GPIO Output), so dass jeweils beim Drücken eines Knopfes auf den nächsten Zustand umgeschaltet wird:

  1. Bauen Sie eine Schaltung und schreiben Sie das dazugehörige Programm, um abwechselnd 2 LEDs blinken zu lassen.
  2. Programmieren Sie eine Ampelschaltung, die in der richtigen Reihenfolge zwischen 3 LEDs umschaltet.

Zusatzaufgaben

  1. Programmieren Sie eine Schaltung mit 3 LEDs, welche 3 Bits darstellen, mit denen von 0 bis 7 gezählt wird.
  2. Schreiben Sie ein Programm, um auf einer 7-Segment-Anzeige zu zählen.
  3. Schreiben Sie ein Programm, das die Zeit zählt, wie lange ein Knopf gedrückt wurde.
  4. Entwerfen Sie eine Schaltung, um mit dem Programm von 5. zu messen wie lange es dauert, einen Kondensator über einen Photoresistor zu (ent)laden.

Weitere einfache Sensoren

Helligkeit mit Photoresistor+Kondonsator (oder Boden-Feuchtigkeitssensor)

MotionSensor

HC-SR04 - Ultrasonic Sensor (Entfernungsmesser)

Weitere Aktuatoren/Anzeigen

Multi-character 7-segment display

Parallele Protokolle

16x2 LCD-Display

Serielle Protokolle

UART

minicom -D /dev/ttyUSB0

I²C

  • Displays
  • GPIO-Expander
  • AD/DA-Wandler
  • Microcontroller

SPI

  • Programmer z.B. für Arduino (ATtiny, ESP8266, ESP32)

„1-Wire“ -> „Bit-Banging“

DHT11 / DHT22 / AM2302 (Luftfeuchtigkeit+Temperatur)

Sonstiges

PiCamera

SoundBoard

Internet connection status indicator

Reaction Game

Home Assistant

Raspap

Mikrocontroller

(µController, µC, MCU)

Mikrocontroller vs SoC vs Einplatinencomputer

Erklärung Mikrocontroller in Videoform

Erklärung SoC in Videoform

Microcontroller

Vorteile:

  1. Kostengünstig: Microcontroller werden in kostensensitiven Projekte eingesetzt.
  2. Energieeffizient: Sie verbrauchen wenig Strom, was sie perfekt für batteriebetriebene Anwendungen macht.
  3. Einfache Integration: Microcontroller sind oft leicht in bestehende Systeme zu integrieren und benötigen nur minimale externe Komponenten.

Nachteile:

  1. Begrenzte Rechenleistung: Sie haben weniger Rechenleistung und Speicher im Vergleich zu Einplatinencomputern.
  2. Eingeschränkte Funktionalität: Microcontroller sind für spezifische Aufgaben ausgelegt und bieten weniger Flexibilität für komplexe Anwendungen.
  3. Weniger Peripherieoptionen: Sie haben oft weniger Schnittstellen und Peripheriegeräte im Vergleich zu Einplatinencomputern.

SoC

Vorteile:

  1. Hohe Integration: CPU, GPU, Speicher, und Peripheriegeräte auf einem Chip (kompakte Bauweise).
  2. Energieeffizienz: Optimierter Stromverbrauch durch Integration und geringere Kommunikationsverluste.
  3. Leistungsfähigkeit: Häufig leistungsstärker als Mikrocontroller, geeignet für komplexe Anwendungen (z. B. Multimedia, AI).

Nachteile:

  1. Komplexität: Höhere Anforderungen an Design und Programmierung als bei Mikrocontrollern.
  2. Kosten: Teurer als Mikrocontroller, insbesondere bei kleinen Projekten oder niedrigen Stückzahlen.
  3. Reparatur/Austausch: Fehlfunktion einzelner Komponenten kann den Austausch des gesamten Chips erfordern.

Einplatinencomputer

Vorteile:

  1. Hohe Rechenleistung: Einplatinencomputer wie der Raspberry Pi bieten deutlich mehr Rechenleistung und Speicher.
  2. Vielseitigkeit: Sie können eine Vielzahl von Betriebssystemen ausführen und sind für komplexe Anwendungen geeignet.
  3. Erweiterbarkeit: Einplatinencomputer bieten zahlreiche Schnittstellen und Peripheriegeräte, was sie sehr flexibel macht.

Nachteile:

  1. Höherer Stromverbrauch: Sie verbrauchen mehr Strom als Microcontroller, was sie weniger geeignet für batteriebetriebene Anwendungen macht.
  2. Kosten: Einplatinencomputer sind in der Regel teurer als Microcontroller.
  3. Komplexität: Die Einrichtung und Programmierung kann komplexer sein, was eine steilere Lernkurve bedeutet.

Beispiele bekannter Mikrocontrollern

Für Mikrocontroller häufig verwendete Programmiersprachen

Arduino

Programmer und IDEs für Arduino

pio device list

git clone https://github.com/platformio/platform-espressif8266  ## oder platform-espressif32
cd platform-*/examples/arduino-wifiscan
pio run --target upload -e nodemcuv2  ## für esp8266mod-12-F
pio run --target upload -e esp-wrover-kit  ## für esp-WROOM-32

pio device monitor -b 115200

platformio.ini für die ESPs der Schule

Simulator

Künstliche Intelligenz

KI-Lehrmaterialien von N.Sultova

Vortrag von Klaus Knopper: „Chancen + Risiken generativer KI in Unterricht + Prüfungen

Einführung

„Nur jeder vierte Deutsche überprüft KI-Ergebnisse“

Wofür/Wie kann ich KI einsetzen?

Wo sind derzeit die Grenzen? Was sollte man beachten?

  • Code Generierung (z.B. Copilot)
  • Datenschutz, Bias, Manipulation (z.B. DeepSeek)

Beispiel IHK-AP1 2025KI zur Rechtsberatung???

Technische Grundlagen

Begriffe die man kennen sollte:

Was ist „KI

  • Weak artificial intelligence (weak AI) = Artificial Narrow Intelligence
  • strong AI:
    • Artificial super intelligence (ASI)
    • Artificial general intelligence (AGI)

Unterschied zwischen „Programmieren“ und „Machine Learning

Training und Inferenz

Netz(architektur/struktur) vs. Modell

  • Daten
  • Gewichte

Wie funktioniert maschinelles Lernen?

MultiLayerNeuralNetwork

Sprachmodelle

SOL Sprachmodelle

SOL:
https://media.ccc.de/v/ds23-194-chatgpt-dialoge

Fragen:

  • Wie funktionieren Sprachmodelle (ganz grob)
  • Was können Sprachmodelle aktuell?
  • Was können Sprachmodelle (aktuell noch) nicht?

Zusatzaufgabe:

  • Führt einen Dialog mit einem Sprachmodell, in dem ihr zeigt, wo die Grenzen der KI sind.
  • Welche Fragen zum Thema KI habt ihr?

Retrieval-augmented generation (RAG)

Vortrag + Material von Michael Christen: „Open Data/Freie Daten in KI Chatbots nutzenhttps://github.com/Orbiter/llm-rag-cheat-sheet

Rechtliches

Ausblick / Zukunft (?)

Turing-Test

Spiegeltest

Node-RED

Low-code programming for event-driven applications

Setup

via Docker

docker volume create --name node_red_data
docker run -it -p 1880:1880 -v node_red_data:/data --name mynodered nodered/node-red --dns 8.8.8.8

Documentation

Swagger

Setup

Menü -> User Settings -> Palette -> Install

Benutzung Client

  • openApi-red Node statt http request Node benutzen

Benutzung Documentation Generator

  1. http in Node nutzen und optional Docs Property editieren

  2. http://localhost:1880/http-api/swagger.json

  3. Swagger UI (Live Demo) starten

  • http://localhost:1880/http-api/swagger.json eintragen
  • mit Explore laden

SQL

Grundlagen

NoSQL (Not only SQL)

ACID

  • Atomicity
  • Consistency
  • Isolation
  • Durability

CAP theorem

  • Consistency
  • Availability
  • Partition tolerance

Normalisierung

Ziel: Konsistenzerhöhung durch Redundanzvermeidung

Erste Normalform (1NF)

Jedes Attribut der Relation muss einen atomaren Wertebereich haben, und die Relation muss frei von Wiederholungsgruppen sein

Lösung: atomare Attributwertebereiche

  • Felder (Spalten) mit zusammengesetzten Typen aufspalten -> atomaren Wertebereich
  • -> Aus Datenbankeinträgen mit Listen (Wiederholungsgruppen) können mehrere Einträge werden

Zweite Normalform (2NF)

Nichtschlüsselattribute müssen von allen Schlüsseln vollständig abhängen

Lösung: Tabellen aufteilen

Dritte Normalform (3NF)

Keine funktionalen Abhängigkeiten der Nichtschlüssel-Attribute untereinander (transitive Abhängigkeiten)

Lösung: Tabellen weiter aufteilen

Quick Reference

CREATE TABLE

CREATE TABLE table_name
(
column_name1 data_type,
column_name2 data_type,
column_name3 data_type,
)

INDEX

GRANT / REVOKE

GRANT
    privileges
    ON object
    TO role_specification
  • privilegeds: SELECT | INSERT | UPDATE | … | ALL PRIVILEGES
  • objects: db_name | table_name | …
  • role_specification: user | group | …

INSERT INTO

INSERT INTO table_name
(column1, column2, column3,...)
VALUES (value1, value2, value3,....)

UPDATE

UPDATE table_name
SET column1=value, column2=value,...
WHERE some_column=some_value

SELECT + WHERE

SELECT column_names
FROM table_name
WHERE column_name operator value

SQL Operators

Logical Operators

  • AND, OR, NOT
  • ANY, SOME, IN, ALL

Comparison Operators

  • =, >, <, >=, <=, <>

Arithmetic Operators

  • +, -, *, /, %

Date/Time-Functions

z.B. NOW()

SELECT + WHERE + LIKE

SELECT column_names
FROM table_name
WHERE column_name LIKE pattern

Wildcards

WildcardBedeutung
%Ein oder mehrere beliebige Zeichen
_Ein einzelnes Zeichen
weitere

SELECT + DISTINCT + LIMIT

SELECT (DISTINCT) column_names
FROM table_name
WHERE conditions
(LIMIT n)

SELECT + ORDER BY

SELECT column_names
FROM table_name
WHERE column_name operator value
ORDER BY column1, column2, ... ASC|DESC;

SELECT + GROUP BY (+ HAVING)

SELECT column_names, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
(HAVING condition)

Aggregate Functions

MIN(), MAX(), COUNT(), SUM(), AVG()

JOIN

SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name

Natural Join

SQL Injections