Files

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.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