6.2 KiB
🏠 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
nach verbundenen WLAN-Clients — werden die iPhones erkannt, setzt es die HomeMatic-Systemvariablen
auf „zu Hause".
🏗️ Architektur
┌─────────────────────────────────────┐
│ MikroTik RB5009UPr+S+ │
│ 192.168.252.254 │
│ Kabelrouter + CAPsMAN-Controller │
│ (kein eigenes WLAN) │
└────────────┬────────────────────────┘
│ CAPsMAN (kabelgebunden)
│ Registration Table hier
▼
┌────────────────────────────┐
│ MikroTik RBcAPGi-5acD2nD │
│ 192.168.252.253 │
│ WLAN-Accesspoint │
│ SSID: Aironet (2,4+5 GHz) │
└──────┬─────────────────┬───┘
│ WiFi │ WiFi
▼ ▼
📱 RP iPhone 📱 Kerstins iPhone
┌─────────────────┐ REST API /interface/wifi/ ┌──────────────────┐
│ ebesch-docker │ ──────────registration-table──►│ Router .254 │
│ 192.168.252.10 │ ◄─────────────────────────────│ (CAPsMAN ctrl.) │
│ Cronjob 1 min │ └──────────────────┘
└────────┬────────┘
│ statechange.cgi (XML-API)
▼
┌─────────────────────────┐
│ HomeMatic CCU2 │
│ 192.168.252.12 │
│ │
│ Zone RPiPhone (1828)│
│ Zone K. iPhone (4730)│
│ Anwesenheit (950)│
└─────────────────────────┘
Hinweis: Der Router selbst hat kein WLAN. Die WLAN-Clients verbinden sich mit dem separaten AP (.253). Der Router agiert als CAPsMAN-Controller und kennt über die Registration Table alle am AP eingebuchten Geräte.
⚙️ Erkennungslogik
1. WiFi Registration Table (primär)
GET /rest/interface/wifi/registration-table — ROS 7.x (neues WiFi-System)
Zeigt alle aktuell aktiv verbundenen WLAN-Clients des CAPsMAN-APs.
2. CAPsMAN Registration Table (Fallback API)
GET /rest/caps-man/registration-table — ROS 6 / frühe ROS-7-Versionen
Automatischer Fallback falls der neue Pfad keine Daten liefert.
3. ARP-Tabelle (letzter Fallback)
GET /rest/ip/arp — enthält zuletzt gesehene MAC/IP-Zuordnungen.
Hilft wenn das iPhone kurz vom WLAN getrennt ist (Display aus / Sleepmode).
iOS MAC-Randomisierung (iOS 14+)
iPhones nutzen pro SSID eine stabile private MAC-Adresse.
Diese bleibt für dieselbe SSID konstant — wir tragen genau diese ein.
MAC-Adresse ablesen:
iPhone → Einstellungen → WLAN → ⓘ neben "Aironet" → WLAN-Adresse
📋 Voraussetzungen
| Komponente | Gerät | IP |
|---|---|---|
| Script-Host | ebesch-docker | 192.168.252.10 |
| Router (CAPsMAN-Ctrl.) | MikroTik RB5009UPr+S+ | 192.168.252.254 |
| WLAN-AP | MikroTik RBcAPGi-5acD2nD | 192.168.252.253 |
| HomeMatic | CCU2 | 192.168.252.12 |
Software auf ebesch-docker: Python 3.8+, requests (via pip/venv)
🚀 Installation
1. Repo auf ebesch-docker klonen
ssh ebesch-docker
cd /opt
git clone https://git.rwolff.homelinux.net/rpwolff/homematic-anwesenheit.git
cd homematic-anwesenheit
2. config.ini anlegen und MACs eintragen
cp config.ini.example config.ini
nano config.ini
# mac = XX:XX:XX:XX:XX:XX ← private WLAN-MAC je iPhone eintragen
3. Installation ausführen
bash install.sh
Richtet Python-venv, Cronjob und Log-Rotation ein.
4. Testen
/opt/homematic-presence/venv/bin/python3 \
/opt/homematic-presence/presence_check.py --dry-run --verbose
5. Log beobachten
tail -f /var/log/homematic-presence.log
📊 HomeMatic Systemvariablen
| Variable | ISE-ID | false |
true |
|---|---|---|---|
| Zone RPiPhone | 1828 | außer Haus | zu Hause |
| Zone Kerstins iPhone | 4730 | außer Haus | zu Hause |
| Anwesenheit | 950 | nicht anwesend | anwesend |
Anwesenheit wird true wenn mindestens eine Person zuhause ist.
📁 Dateien
| Datei | Beschreibung |
|---|---|
presence_check.py |
Hauptscript |
config.ini.example |
Konfigurationsvorlage (ohne Passwörter, im Repo) |
config.ini |
Aktive Konfiguration (in .gitignore, nicht im Repo) |
install.sh |
Einmalige Installation auf ebesch-docker |
🔍 Troubleshooting
# WiFi-Clients direkt abfragen:
curl -u admin:<pw> http://192.168.252.254/rest/interface/wifi/registration-table
# HomeMatic-Variable manuell setzen:
curl "http://192.168.252.12/config/xmlapi/statechange.cgi?ise_id=1828&new_val=true"
# Cronjob-Log:
tail -50 /var/log/homematic-presence.log
# Systemd / Cron status:
systemctl status cron
🔒 Sicherheit
config.inienthält Passwörter → in.gitignore, nicht committen- Credentials liegen in Bitwarden / Obsidian Firma
Netz: Ebesch · 192.168.252.0/24 · SSID: Aironet · RouterOS: 7.20.6
Repo: git.rwolff.homelinux.net/rpwolff/homematic-anwesenheit