From c6ffd9c26ade63a3e41ae1b332e992692a782475 Mon Sep 17 00:00:00 2001 From: Ralf-Peter Wolff Date: Wed, 20 May 2026 12:59:53 +0200 Subject: [PATCH] docs: README mit Architektur, Installation und Konfiguration --- README.md | 208 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 208 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..2f2e6f5 --- /dev/null +++ b/README.md @@ -0,0 +1,208 @@ +# 🏠 HomeMatic Anwesenheitserkennung via MikroTik + +Automatische Anwesenheitserkennung fΓΌr 2 iPhones im Heimnetz **Ebesch** (192.168.252.0/24). +Ein Python-Script lΓ€uft minΓΌtlich auf `ebesch-docker` und fragt den MikroTik-Router per REST-API ab β€” sind die iPhones im WLAN eingebucht, werden die HomeMatic-Systemvariablen auf *β€žzu Hause"* gesetzt. + +--- + +## πŸ—οΈ Architektur + +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” REST API β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ ebesch-docker β”‚ ────────────────► β”‚ MikroTik RB5009 β”‚ +β”‚ 192.168.252.10 β”‚ /caps-man/ β”‚ 192.168.252.254 β”‚ +β”‚ (Cronjob 1min) β”‚ registration- β”‚ CAPsMAN β†’ AP .253 β”‚ +β”‚ β”‚ table β”‚ SSID: Aironet β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ β–² + β”‚ statechange.cgi β”‚ WiFi + β–Ό β”‚ +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ HomeMatic CCU2 β”‚ β”‚ πŸ“± RP iPhone β”‚ +β”‚ 192.168.252.12 β”‚ β”‚ πŸ“± Kerstins iPhone β”‚ +β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ +β”‚ Systemvariablenβ”‚ +β”‚ β€’ Zone RPiPhone (1828) +β”‚ β€’ Zone Kerstins iPhone (4730) +β”‚ β€’ Anwesenheit (950) +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ +``` + +--- + +## πŸ“‹ Voraussetzungen + +| Komponente | GerΓ€t | IP | +|---|---|---| +| Script-Host | ebesch-docker | 192.168.252.10 | +| Router | MikroTik RB5009UPr+S+ | 192.168.252.254 | +| WLAN-AP | MikroTik RBcAPGi-5acD2nD (CAPsMAN) | 192.168.252.253 | +| HomeMatic | CCU2 | 192.168.252.12 | + +**Software auf ebesch-docker:** +- Python 3.8+ +- `requests` Bibliothek (via pip/venv) + +--- + +## βš™οΈ Erkennung + +### PrimΓ€r: CAPsMAN Registration Table +Zeigt alle **aktuell aktiv verbundenen** WLAN-Clients des APs. +β†’ ZuverlΓ€ssigste Methode, da in Echtzeit. + +### Fallback: ARP-Tabelle +EnthΓ€lt zuletzt gesehene MAC/IP-Zuordnungen. +β†’ Greift wenn das iPhone kurz vom WLAN getrennt ist (Sleepmode). + +### iOS MAC-Randomisierung (iOS 14+) +iPhones nutzen **pro SSID eine stabile private MAC-Adresse** (nicht die echte Hardware-MAC). +Diese bleibt fΓΌr dieselbe SSID konstant, ist aber netzwerkspezifisch. + +**MAC-Adresse herausfinden:** +``` +iPhone β†’ Einstellungen β†’ WLAN β†’ β“˜ neben "Aironet" β†’ WLAN-Adresse +``` +Diese Adresse in `config.ini` eintragen. + +--- + +## πŸš€ Installation + +### 1. Repo auf ebesch-docker klonen + +```bash +ssh ebesch-docker +cd /opt +git clone https://git.rwolff.homelinux.net/rpwolff/homematic-anwesenheit.git +cd homematic-anwesenheit +``` + +### 2. MAC-Adressen eintragen + +```bash +nano config.ini +# [device.rp_iphone] β†’ mac = XX:XX:XX:XX:XX:XX +# [device.kerstin_iphone] β†’ mac = XX:XX:XX:XX:XX:XX +``` + +### 3. Installation ausfΓΌhren + +```bash +bash install.sh +``` + +Das Script: +- Legt `/opt/homematic-presence/` an +- Erstellt ein Python-venv mit `requests` +- Installiert einen Cronjob (`/etc/cron.d/homematic-presence`) +- Konfiguriert Log-Rotation + +### 4. Testen + +```bash +/opt/homematic-presence/venv/bin/python3 /opt/homematic-presence/presence_check.py \ + --dry-run --verbose +``` + +### 5. Log beobachten + +```bash +tail -f /var/log/homematic-presence.log +``` + +--- + +## πŸ“Š HomeMatic Systemvariablen + +| Variable | ISE-ID | Typ | `false` | `true` | +|---|---|---|---|---| +| Zone RPiPhone | 1828 | LOGIC | außer Haus | zu Hause | +| Zone Kerstins iPhone | 4730 | LOGIC | außer Haus | zu Hause | +| Anwesenheit | 950 | LOGIC | nicht anwesend | anwesend | + +Die Variable **Anwesenheit** wird auf `true` gesetzt wenn mindestens eine Person zuhause ist. + +--- + +## πŸ”§ Konfiguration (`config.ini`) + +```ini +[mikrotik] +host = 192.168.252.254 +user = admin +password = + +[homematic] +host = 192.168.252.12 +combined_ise_id = 950 # Kombinierte Anwesenheit + +[device.rp_iphone] +mac = XX:XX:XX:XX:XX:XX # Private WLAN-MAC fΓΌr SSID "Aironet" +ise_id = 1828 +label = RP iPhone + +[device.kerstin_iphone] +mac = XX:XX:XX:XX:XX:XX # Private WLAN-MAC fΓΌr SSID "Aironet" +ise_id = 4730 +label = Kerstins iPhone +``` + +--- + +## πŸ” Troubleshooting + +**CAPsMAN zeigt 0 Clients obwohl GerΓ€t verbunden:** +```bash +# Router-Seite prΓΌfen: +curl -u admin: http://192.168.252.254/rest/caps-man/registration-table +``` + +**HomeMatic-Variable Γ€ndert sich nicht:** +```bash +# XML-API direkt testen: +curl "http://192.168.252.12/config/xmlapi/statechange.cgi?ise_id=1828&new_val=true" +``` + +**Script manuell ausfΓΌhren:** +```bash +/opt/homematic-presence/venv/bin/python3 \ + /opt/homematic-presence/presence_check.py --verbose +``` + +**Cronjob-Status:** +```bash +systemctl status cron +grep homematic /var/log/syslog | tail -20 +``` + +--- + +## πŸ“ Dateien + +| Datei | Beschreibung | +|---|---| +| `presence_check.py` | Hauptscript: Router abfragen β†’ HomeMatic setzen | +| `config.ini` | Konfiguration (MACs, IPs, Credentials) | +| `install.sh` | Einmalige Installation auf ebesch-docker | +| `README.md` | Diese Dokumentation | + +--- + +## πŸ”’ Sicherheitshinweise + +- `config.ini` enthΓ€lt PasswΓΆrter β†’ **nicht ΓΆffentlich committen** +- Das Repo ist ΓΆffentlich β€” `config.ini` ist in `.gitignore` +- PasswΓΆrter liegen in Bitwarden / Obsidian Firma + +--- + +## πŸ“… Wartung + +- RouterOS-Updates kΓΆnnen CAPsMAN-API-Pfade Γ€ndern β†’ Script ggf. anpassen +- iOS-Updates kΓΆnnen MAC-Randomisierung beeinflussen β†’ MACs ggf. neu auslesen +- HomeMatic-Firmware-Updates: ISE-IDs bleiben stabil + +--- + +*Netz: Ebesch Β· 192.168.252.0/24 Β· SSID: Aironet Β· Repo: [git.rwolff.homelinux.net/rpwolff/homematic-anwesenheit](https://git.rwolff.homelinux.net/rpwolff/homematic-anwesenheit)*