# 🏠 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)*