update präsi

This commit is contained in:
MuedeHydra 2026-05-12 20:48:27 +02:00
parent a4f1a01d24
commit d6a5f37eae
6 changed files with 5476 additions and 1832 deletions

File diff suppressed because it is too large Load Diff

View File

@ -9,13 +9,11 @@
#show: metropolis-theme.with( #show: metropolis-theme.with(
aspect-ratio: "16-9", aspect-ratio: "16-9",
config-info( config-info(
title: [GPS-Tracking und Impact-Detection mit Raspberry Pi], title: [Getränkeautomat mit dem Raspberry Pi],
// title: [Daten mit 4G], // title: [Daten mit 4G],
subtitle: [Mobile Kommunikationsnetze], subtitle: [Mobile Kommunikationsnetze],
author: [NOAH BALSIGER, THOMAS ZWICKER], author: [NOAH BALSIGER, THOMAS ZWICKER],
date: datetime.today(), date: datetime.today(),
// institution: [FHGR],
// logo: image("img/logo.png", width: 2em),
), ),
) )
@ -37,9 +35,9 @@
line((10, -3), (4, -3), mark: (end: ">"), fill: blue, stroke: orange + 10pt) line((10, -3), (4, -3), mark: (end: ">"), fill: blue, stroke: orange + 10pt)
}) })
== 4G / 5G // == 4G / 5G
== 4G vs. 5G: technische Unterschiede
#slide[ #slide[
= 4G vs. 5G: technische Unterschiede
#table( #table(
columns: 3, columns: 3,
@ -55,8 +53,8 @@
5G ist nicht nur „schnelleres 4G“, sondern eine flexiblere Netzarchitektur 5G ist nicht nur „schnelleres 4G“, sondern eine flexiblere Netzarchitektur
für hohe Datenraten, tiefe Latenz und viele gleichzeitige Geräte. für hohe Datenraten, tiefe Latenz und viele gleichzeitige Geräte.
] ]
== 5G NSA vs. SA
#slide[ #slide[
= 5G NSA vs. SA
*Non-Standalone (NSA):* *Non-Standalone (NSA):*
- 5G NR wird zusätzlich zu LTE verwendet - 5G NR wird zusätzlich zu LTE verwendet
@ -77,8 +75,8 @@
`UE -> 5G gNodeB -> 5GC` `UE -> 5G gNodeB -> 5GC`
] ]
] ]
== Mesh, Sidelink und Device-to-Device
#slide[ #slide[
= Mesh, Sidelink und Device-to-Device
Normales 5G ist *kein öffentliches Mesh-Netz*. Normales 5G ist *kein öffentliches Mesh-Netz*.
@ -105,41 +103,105 @@
Smartphones zur Antenne weiter. Smartphones zur Antenne weiter.
] ]
== öffentliche IP
== Carrier-Grade NAT (CGNAT)
=======
== Öffentliche IP & Carrier-Grade NAT (CGNAT) == Öffentliche IP & Carrier-Grade NAT (CGNAT)
>>>>>>> Stashed changes
#grid(columns: (1fr,)*1, gutter: 10pt, #grid(columns: (1fr,)*1, gutter: 10pt,
[#align(center)[#image("img/cgnat.png", width: 80%)]], [#align(center)[#image("img/cgnat.png", width: 80%)]],
) )
== VPN Wireguard / Tailscale == VPN Wireguard / Tailscale
#grid(columns: (1fr,)*1, gutter: 10pt, #grid(columns: (1fr, 1fr), gutter: 10pt,
[#align(center)[#image("img/vpn.png", width: 60%)]], [
*Herausforderung:*
- Pi hat keine öffentliche IPv4-Adresse (CGNAT)
// - Eingehende Verbindungen werden vom Provider blockiert
*Lösung: Wireguard*
- *Peer-to-Peer:* Pi baut Verbindung aktiv nach aussen auf
- *UDP-basiert:* Effizient und schnell auf mobilen Verbindungen
- *Roaming:* Verbindung bleibt stabil, auch wenn die Funkzelle wechselt
],
[#align(center)[#image("img/vpn.png", width: 100%)]],
) )
== Dynamic DNS == Dynamic DNS
#grid(columns: (1fr,)*1, gutter: 10pt, #grid(columns: (1.5fr, 1fr), gutter: 10pt,
[#align(center)[#image("img/dns.png", width: 60%)]], [
- Mobilfunk-IPs sind meist dynamisch und wechseln oft
- *Dynamic DNS (DDNS):* Verknüpft wechselnde IP mit festem Hostnamen
- *Vorteil:* Einfacher Zugriff über `mobkom.xxx.de` statt Kryptischer IP-Adressen
],
[#align(center)[#image("img/dns.png", width: 100%)]],
) )
== Externer Broker
== Security mqtt == MQTT Sicherheit & Externer Broker
#slide[
// = Mehrstufiges Sicherheitskonzept
#grid(columns: (1fr, 1fr), gutter: 15pt,
[
*Transport-Ebene (TLS/SSL)*
- Verschlüsselung des gesamten Kanals
- Schützt auch Metadaten (Topics)
- Zertifikatsmanagement erforderlich
- Sicher gegen Man-in-the-Middle
],
[
*Daten-Ebene (Payload)*
- Verschlüsselung direkt in Python (AES)
- Schutz vor kompromittierten Brokern
- "Zero Trust": Broker sieht nur Chiffre
- Sehr geringer Overhead
]
)
#v(1em)
*Sicherung des externen Brokers:*
- *Authentifizierung:* Kein Zugriff ohne gültige Credentials
- *ACLs (Access Control Lists):* Pi darf nur auf `/getraenke/status` schreiben
- *Vorteil Extern:* Erreichbarkeit ohne Port-Forwarding/VPN-Zwang für Clients
]
== GPS == GPS
#slide[
#grid(columns: (1fr, 1fr), gutter: 15pt,
[
*Ortung via LTE-Modul*
== Aufbau - Integriertes GNSS-Modul auf dem Waveshare HAT
- *Datenformat:* NMEA-0183 (Standard-Textprotokoll)
- *Anwendungsfall:* Tracking des Automaten oder Diebstahlschutz
- *Herausforderung:* GPS-Antenne benötigt meist Sichtkontakt zum Himmel
],
[#align(center)[#image("img/csm_1_Laufzeitmessung_4b22a687fd.png", width: 80%)]],
)
]
// == Aufbau
// 3. Wichtiger technischer Unterschied: USB vs. UART // 3. Wichtiger technischer Unterschied: USB vs. UART
// Hier kommt ein entscheidender Punkt für deine Performance: // Hier kommt ein entscheidender Punkt für deine Performance:
// - Über GPIO (UART): Wenn du den HAT nur oben aufsteckst, ist die Geschwindigkeit auf die serielle Rate begrenzt (meistens max. 115.200 bis 4.000.000 bps). Das ist für Sensordaten okay, aber für "echtes" Surfen sehr langsam. // - Über GPIO (UART): Wenn du den HAT nur oben aufsteckst, ist die Geschwindigkeit auf die serielle Rate begrenzt (meistens max. 115.200 bis 4.000.000 bps). Das ist für Sensordaten okay, aber für "echtes" Surfen sehr langsam.
// - Über USB-Kabel: Wenn du das mitgelieferte USB-Kabel zusätzlich zwischen HAT und Pi einsteckst, wird das Modul als echtes Netzwerkgerät erkannt (WWAN). Damit erreichst du die volle 4G-Geschwindigkeit (bis zu 150 Mbit/s). // - Über USB-Kabel: Wenn du das mitgelieferte USB-Kabel zusätzlich zwischen HAT und Pi einsteckst, wird das Modul als echtes Netzwerkgerät erkannt (WWAN). Damit erreichst du die volle 4G-Geschwindigkeit (bis zu 150 Mbit/s).
== Hardware & Aufbau
#slide[
*Die technischen Tücken*
#table(
columns: (1fr, 1fr),
[*Anbindung via GPIO (UART)*], [*Anbindung via USB*],
[Einfaches Aufstecken], [Zusätzliches Kabel nötig],
[Max. 115'200 Baud (0.1 Mbit/s)], [WWAN-Interface (bis 150 Mbit/s)],
[GPS/LTE teilen sich serielle Ressource], [Parallele Datenströme möglich],
[Nur für kleine Sensordaten (MQTT)], [Massentauglich (Streaming/Updates)],
)
*Wichtig:* Ohne USB-Kabel können GPS und LTE nicht simultan mit voller Performance genutzt werden.
]
== Demo == Demo
#grid(columns: (1fr,)*2, gutter: 10pt, #grid(columns: (1fr,)*1, gutter: 10pt,
// [#align(center)[#image("img/lts.png", width: 80%)]], [#align(center)[#image("img/demo_aufbau.svg", width: 100%)]],
// [#align(center)[#image("img/seitenansicht.png", width: 100%)]], // [#align(center)[#image("img/seitenansicht.png", width: 100%)]],
) )

Binary file not shown.

After

Width:  |  Height:  |  Size: 360 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 KiB

120
img/demo_aufbau.drawio Normal file
View File

@ -0,0 +1,120 @@
<mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/29.6.1 Chrome/142.0.7444.265 Electron/39.8.10 Safari/537.36" version="29.6.1">
<diagram name="Seite-1" id="gKl-JJAu4m5QpsmeQUmM">
<mxGraphModel dx="1425" dy="988" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="1654" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="fu6FnLP_hD63TvWQ5mC9-20" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=none;dashed=1;strokeWidth=2;" value="" vertex="1">
<mxGeometry height="480" width="400" x="1000" y="280" as="geometry" />
</mxCell>
<mxCell id="fu6FnLP_hD63TvWQ5mC9-1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=none;dashed=1;strokeWidth=2;" value="" vertex="1">
<mxGeometry height="480" width="400" x="120" y="280" as="geometry" />
</mxCell>
<mxCell id="fu6FnLP_hD63TvWQ5mC9-2" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="&lt;font style=&quot;font-size: 24px;&quot;&gt;Raspberry PI&lt;/font&gt;" vertex="1">
<mxGeometry height="100" width="170" x="130" y="260" as="geometry" />
</mxCell>
<mxCell id="fu6FnLP_hD63TvWQ5mC9-5" edge="1" parent="1" source="fu6FnLP_hD63TvWQ5mC9-3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" target="fu6FnLP_hD63TvWQ5mC9-4" value="">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="fu6FnLP_hD63TvWQ5mC9-7" edge="1" parent="1" source="fu6FnLP_hD63TvWQ5mC9-3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;dashed=1;strokeWidth=1;" target="fu6FnLP_hD63TvWQ5mC9-6" value="">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="220" y="600" />
<mxPoint x="320" y="600" />
<mxPoint x="320" y="670" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="fu6FnLP_hD63TvWQ5mC9-9" edge="1" parent="1" source="fu6FnLP_hD63TvWQ5mC9-3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" target="fu6FnLP_hD63TvWQ5mC9-8" value="">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="fu6FnLP_hD63TvWQ5mC9-3" parent="1" style="rounded=0;whiteSpace=wrap;html=1;" value="Python" vertex="1">
<mxGeometry height="60" width="120" x="160" y="500" as="geometry" />
</mxCell>
<mxCell id="fu6FnLP_hD63TvWQ5mC9-4" parent="1" style="whiteSpace=wrap;html=1;rounded=0;" value="Sens Hat" vertex="1">
<mxGeometry height="60" width="120" x="160" y="640" as="geometry" />
</mxCell>
<mxCell id="fu6FnLP_hD63TvWQ5mC9-6" parent="1" style="rounded=0;whiteSpace=wrap;html=1;" value="LTE Hat" vertex="1">
<mxGeometry height="60" width="120" x="360" y="640" as="geometry" />
</mxCell>
<mxCell id="fu6FnLP_hD63TvWQ5mC9-11" edge="1" parent="1" source="fu6FnLP_hD63TvWQ5mC9-8" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" target="fu6FnLP_hD63TvWQ5mC9-10" value="">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="fu6FnLP_hD63TvWQ5mC9-8" parent="1" style="whiteSpace=wrap;html=1;rounded=0;" value="Mqtt Broker" vertex="1">
<mxGeometry height="60" width="120" x="160" y="360" as="geometry" />
</mxCell>
<mxCell id="fu6FnLP_hD63TvWQ5mC9-13" edge="1" parent="1" source="fu6FnLP_hD63TvWQ5mC9-10" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" target="fu6FnLP_hD63TvWQ5mC9-6" value="">
<mxGeometry relative="1" as="geometry">
<mxPoint x="420" y="500" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="fu6FnLP_hD63TvWQ5mC9-10" parent="1" style="whiteSpace=wrap;html=1;rounded=0;" value="VPN&lt;br&gt;Wireguard" vertex="1">
<mxGeometry height="60" width="120" x="360" y="360" as="geometry" />
</mxCell>
<mxCell id="fu6FnLP_hD63TvWQ5mC9-15" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=none;dashed=1;strokeWidth=2;" value="" vertex="1">
<mxGeometry height="480" width="400" x="560" y="280" as="geometry" />
</mxCell>
<mxCell id="fu6FnLP_hD63TvWQ5mC9-16" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="&lt;font style=&quot;font-size: 24px;&quot;&gt;WG&lt;/font&gt;" vertex="1">
<mxGeometry height="100" width="170" x="530" y="260" as="geometry" />
</mxCell>
<mxCell id="fu6FnLP_hD63TvWQ5mC9-19" edge="1" parent="1" source="fu6FnLP_hD63TvWQ5mC9-17" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" target="fu6FnLP_hD63TvWQ5mC9-18" value="">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="fu6FnLP_hD63TvWQ5mC9-17" parent="1" style="rounded=1;whiteSpace=wrap;html=1;" value="Raspberry PI&lt;br&gt;VPN Server" vertex="1">
<mxGeometry height="60" width="120" x="700" y="480" as="geometry" />
</mxCell>
<mxCell id="fu6FnLP_hD63TvWQ5mC9-18" parent="1" style="rounded=1;whiteSpace=wrap;html=1;" value="Modem" vertex="1">
<mxGeometry height="60" width="120" x="700" y="620" as="geometry" />
</mxCell>
<mxCell id="fu6FnLP_hD63TvWQ5mC9-21" parent="1" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;rounded=0;" value="&lt;span style=&quot;font-size: 24px;&quot;&gt;FHGR&lt;/span&gt;" vertex="1">
<mxGeometry height="100" width="170" x="980" y="260" as="geometry" />
</mxCell>
<mxCell id="fu6FnLP_hD63TvWQ5mC9-24" edge="1" parent="1" source="fu6FnLP_hD63TvWQ5mC9-22" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" target="fu6FnLP_hD63TvWQ5mC9-23" value="">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="fu6FnLP_hD63TvWQ5mC9-22" parent="1" style="rounded=1;whiteSpace=wrap;html=1;" value="Laptop" vertex="1">
<mxGeometry height="60" width="120" x="1140" y="360" as="geometry" />
</mxCell>
<mxCell id="fu6FnLP_hD63TvWQ5mC9-29" edge="1" parent="1" source="fu6FnLP_hD63TvWQ5mC9-23" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" target="fu6FnLP_hD63TvWQ5mC9-28" value="">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="fu6FnLP_hD63TvWQ5mC9-23" parent="1" style="rounded=1;whiteSpace=wrap;html=1;" value="VPN&lt;br&gt;Wireguard" vertex="1">
<mxGeometry height="60" width="120" x="1140" y="500" as="geometry" />
</mxCell>
<mxCell id="fu6FnLP_hD63TvWQ5mC9-25" parent="1" style="rounded=0;whiteSpace=wrap;html=1;" value="Funkmast&lt;br&gt;Swisscom" vertex="1">
<mxGeometry height="60" width="120" x="360" y="797" as="geometry" />
</mxCell>
<mxCell id="fu6FnLP_hD63TvWQ5mC9-26" edge="1" parent="1" source="fu6FnLP_hD63TvWQ5mC9-25" style="shape=flexArrow;endArrow=classic;startArrow=classic;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" target="fu6FnLP_hD63TvWQ5mC9-6" value="">
<mxGeometry height="100" relative="1" width="100" as="geometry">
<mxPoint x="700" y="700" as="sourcePoint" />
<mxPoint x="800" y="600" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="fu6FnLP_hD63TvWQ5mC9-27" parent="1" style="rounded=0;whiteSpace=wrap;html=1;" value="Internet" vertex="1">
<mxGeometry height="60" width="120" x="700" y="797" as="geometry" />
</mxCell>
<mxCell id="fu6FnLP_hD63TvWQ5mC9-28" parent="1" style="rounded=1;whiteSpace=wrap;html=1;" value="Eduroam" vertex="1">
<mxGeometry height="60" width="120" x="1140" y="640" as="geometry" />
</mxCell>
<mxCell id="fu6FnLP_hD63TvWQ5mC9-30" edge="1" parent="1" source="fu6FnLP_hD63TvWQ5mC9-25" style="shape=flexArrow;endArrow=classic;startArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" target="fu6FnLP_hD63TvWQ5mC9-27" value="">
<mxGeometry height="100" relative="1" width="100" as="geometry">
<mxPoint x="700" y="790" as="sourcePoint" />
<mxPoint x="800" y="690" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="fu6FnLP_hD63TvWQ5mC9-31" edge="1" parent="1" source="fu6FnLP_hD63TvWQ5mC9-27" style="shape=flexArrow;endArrow=classic;startArrow=classic;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" target="fu6FnLP_hD63TvWQ5mC9-18" value="">
<mxGeometry height="100" relative="1" width="100" as="geometry">
<mxPoint x="700" y="790" as="sourcePoint" />
<mxPoint x="800" y="690" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="fu6FnLP_hD63TvWQ5mC9-32" edge="1" parent="1" source="fu6FnLP_hD63TvWQ5mC9-27" style="shape=flexArrow;endArrow=classic;startArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" target="fu6FnLP_hD63TvWQ5mC9-28" value="">
<mxGeometry height="100" relative="1" width="100" as="geometry">
<mxPoint x="700" y="790" as="sourcePoint" />
<mxPoint x="800" y="690" as="targetPoint" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

4
img/demo_aufbau.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 159 KiB