186 lines
6.2 KiB
Markdown
186 lines
6.2 KiB
Markdown
# 🏠 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:<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](https://git.rwolff.homelinux.net/rpwolff/homematic-anwesenheit)*
|