# 🏠 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 ```bash 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 ```bash 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 bash install.sh ``` Richtet Python-venv, Cronjob und Log-Rotation ein. ### 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 | `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 ```bash # WiFi-Clients direkt abfragen: curl -u admin: 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.ini` enthΓ€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](https://git.rwolff.homelinux.net/rpwolff/homematic-anwesenheit)*