🏠 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+
requestsBibliothek (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
ssh ebesch-docker
cd /opt
git clone https://git.rwolff.homelinux.net/rpwolff/homematic-anwesenheit.git
cd homematic-anwesenheit
2. MAC-Adressen eintragen
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 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
/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 | 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)
[mikrotik]
host = 192.168.252.254
user = admin
password = <siehe Bitwarden / Obsidian>
[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:
# Router-Seite prüfen:
curl -u admin:<pw> http://192.168.252.254/rest/caps-man/registration-table
HomeMatic-Variable ändert sich nicht:
# XML-API direkt testen:
curl "http://192.168.252.12/config/xmlapi/statechange.cgi?ise_id=1828&new_val=true"
Script manuell ausführen:
/opt/homematic-presence/venv/bin/python3 \
/opt/homematic-presence/presence_check.py --verbose
Cronjob-Status:
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.inienthält Passwörter → nicht öffentlich committen- Das Repo ist öffentlich —
config.iniist 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