231 lines
4.3 KiB
Markdown
231 lines
4.3 KiB
Markdown
# Raspberry Pi Babycam
|
||
|
||
**Hardware:** Raspberry Pi 3 + Camera Module 3 NoIR Wide + USB WLAN Stick
|
||
**OS:** Raspberry Pi OS Trixie Lite (arm64)
|
||
|
||
---
|
||
|
||
## Schnellstart
|
||
|
||
```bash
|
||
git clone <repo-url> babycam
|
||
cd babycam
|
||
sudo bash setup.sh
|
||
```
|
||
|
||
Nach dem Neustart:
|
||
- Webinterface: http://babycam.local
|
||
- SSH: `ssh pi@babycam.local`
|
||
- AP-SSID: `BabyCam` / Passwort: `babycam123`
|
||
- AP-Webinterface: http://192.168.50.1
|
||
|
||
---
|
||
|
||
## Projektstruktur
|
||
|
||
```
|
||
babycam/
|
||
├── setup.sh # Komplettes Install- und Konfigurationsscript
|
||
├── app/
|
||
│ ├── main.py # Flask Webinterface (Stream, WLAN, Status)
|
||
│ └── templates/
|
||
│ └── index.html # Web-UI
|
||
├── scripts/
|
||
│ └── network_state.py # State Machine (Modus A/B/C)
|
||
├── config/
|
||
│ ├── hostapd.conf # Access Point Konfiguration
|
||
│ └── dnsmasq.conf # DHCP Server Konfiguration
|
||
└── systemd/
|
||
├── babycam-web.service # Flask als Systemdienst
|
||
└── babycam-network.service # State Machine als Systemdienst
|
||
```
|
||
|
||
---
|
||
|
||
## Gesamtplan (Pi 3 + Camera Module 3 NoIR)
|
||
|
||
## 1. Zielarchitektur
|
||
|
||
Der Raspberry Pi arbeitet in drei Betriebsmodi.
|
||
|
||
---
|
||
|
||
## Modus A – Heimnetz (Normalbetrieb)
|
||
|
||
Handy und Raspberry Pi befinden sich im gleichen WLAN:
|
||
|
||
- Raspberry Pi verbindet sich über wlan0 mit dem Heimrouter
|
||
- Zugriff über:
|
||
- http://babycam.local
|
||
- oder IP-Adresse im Heimnetz
|
||
- Kein Access Point aktiv
|
||
- Internet für alle Geräte verfügbar
|
||
|
||
---
|
||
|
||
## Modus B – Kein WLAN verfügbar (Fallback Access Point)
|
||
|
||
Der Raspberry Pi erstellt ein eigenes WLAN:
|
||
|
||
- SSID: BabyCam
|
||
- IP: 192.168.50.1
|
||
- Gerät fungiert als Access Point über wlan1
|
||
|
||
Funktion:
|
||
- Handy verbindet sich direkt mit dem Pi
|
||
- Webinterface ist lokal erreichbar
|
||
- Kamera-Stream läuft unabhängig vom Internet
|
||
|
||
---
|
||
|
||
## Modus C – Fremdes WLAN konfigurieren (Setup-Modus)
|
||
|
||
Über den Access Point:
|
||
|
||
- Verbindung zum WLAN „BabyCam“
|
||
- Zugriff auf Webinterface unter 192.168.50.1
|
||
- Anzeige verfügbarer WLANs (Scan)
|
||
- Eingabe von Passwort
|
||
- Verbindung wird gespeichert und aufgebaut
|
||
|
||
---
|
||
|
||
## 2. Hardware
|
||
|
||
- Raspberry Pi 3
|
||
- Raspberry Pi Camera Module 3 NoIR Wide
|
||
- USB WLAN Stick mit AP-Unterstützung
|
||
- optional IR-LEDs für Nachtbetrieb
|
||
|
||
---
|
||
|
||
## 3. Betriebssystem
|
||
|
||
Raspberry Pi OS Lite
|
||
https://www.raspberrypi.com/software/operating-systems/
|
||
|
||
Begründung:
|
||
- minimaler Ressourcenverbrauch
|
||
- stabil für Dauerbetrieb
|
||
- ideal für Headless-Systeme
|
||
|
||
---
|
||
|
||
## 4. Netzwerk-Stack
|
||
|
||
Verwendete Komponenten:
|
||
|
||
- NetworkManager → WLAN Verwaltung
|
||
- hostapd → Access Point (BabyCam)
|
||
- dnsmasq → DHCP Server
|
||
- iptables → optional NAT
|
||
|
||
---
|
||
|
||
## 5. Interface-Rollen
|
||
|
||
- wlan0 = Client (Heim- oder Fremd-WLAN)
|
||
- wlan1 = Access Point (BabyCam)
|
||
|
||
---
|
||
|
||
## 6. Betriebslogik (State Machine)
|
||
|
||
Beim Start:
|
||
|
||
1. Prüfen ob bekanntes WLAN verfügbar ist
|
||
2. Wenn ja → Verbindung über wlan0
|
||
3. Wenn nein → Start Access Point über wlan1
|
||
|
||
Optional:
|
||
- Access Point kann dauerhaft aktiv bleiben
|
||
|
||
---
|
||
|
||
## 7. Access Point Konfiguration
|
||
|
||
- SSID: BabyCam
|
||
- Netzwerk: 192.168.50.0/24
|
||
- Gateway: 192.168.50.1
|
||
|
||
---
|
||
|
||
## 8. DHCP (dnsmasq)
|
||
|
||
- IP-Bereich:
|
||
192.168.50.20 – 192.168.50.200
|
||
|
||
- DNS optional:
|
||
- 1.1.1.1
|
||
- 8.8.8.8
|
||
|
||
---
|
||
|
||
## 9. Internet Sharing (optional)
|
||
|
||
Wenn der Pi im Heimnetz ist:
|
||
|
||
- wlan0 = Internet
|
||
- wlan1 = Hotspot
|
||
|
||
Erfordert:
|
||
- IP-Forwarding aktiv
|
||
- NAT via iptables
|
||
|
||
Ergebnis:
|
||
- Geräte im Hotspot erhalten Internet über den Pi
|
||
|
||
---
|
||
|
||
## 10. Kamera-Stream
|
||
|
||
Empfohlene Konfiguration:
|
||
|
||
rpicam-vid (ehemals libcamera-vid):
|
||
- Auflösung: 1280x720
|
||
- Framerate: 20 fps
|
||
- Codec: MJPEG
|
||
- Ausgabe: stdout → Flask MJPEG-Stream
|
||
|
||
---
|
||
|
||
## 11. Webinterface
|
||
|
||
Zugriff:
|
||
|
||
- http://192.168.50.1 (AP Mode)
|
||
- http://babycam.local (Heimnetz)
|
||
|
||
Funktionen:
|
||
|
||
### Kamera
|
||
- Live-Stream
|
||
|
||
### WLAN Management
|
||
- WLAN Scan
|
||
- Netzwerke anzeigen
|
||
- Passwort eingeben
|
||
- Verbindung über nmcli herstellen
|
||
|
||
### Status
|
||
- Aktives WLAN
|
||
- IP-Adresse
|
||
- AP Status
|
||
|
||
---
|
||
|
||
## 12. Systemdienste
|
||
|
||
- `babycam-web.service` → Flask Webserver (Port 80, autostart)
|
||
- `babycam-network.service` → State Machine (prüft alle 30s den WLAN-Status)
|
||
|
||
---
|
||
|
||
## 13. Gesamtkonzept
|
||
|
||
Das System ist eine IoT-ähnliche Architektur:
|
||
|
||
- Dual-Mode Netzwerk (STA + AP)
|
||
- automatische Zustandslogik
|
||
- Webbasierte Konfiguration
|
||
- permanenter Zugriff auf Kamera und Setup |