🗄️ Das Projekt hap-homematic ist seit dem 29.05.2026 archiviert (nur noch lesbar, keine Updates). Was das bedeutet

🧮Port- und Bridge-Planer

Jede HAP-Instanz ist eine eigene Bridge mit eigenem Port. Der Planer rechnet aus, welche Ports dein Aufbau belegt, liefert die Liste für die Firewall der Zentrale und warnt, wenn eine Bridge zu voll wird.

🧱Planer

HAP-Instanzen (Reihenfolge = Reihenfolge in der config.json)
Port 9877in HomeKit: „HomeMatic Wohnzimmer“
Port 9878in HomeKit: „HomeMatic Kueche“
Port 9879in HomeKit: „HomeMatic Flur“
Belegte Ports
9874Config-WebUIConfig-WebUI (Browser)
9875RPC-EreignisseRPC-Ereignisserver (XML-RPC, CCU → Addon)
9877BridgeHAP-Instanz 0: HomeMatic Wohnzimmer
9878BridgeHAP-Instanz 1: HomeMatic Kueche
9879BridgeHAP-Instanz 2: HomeMatic Flur
5
Ports gesamt
9877–9879
HAP-Ports
2
zusammenhängende Bereiche
Portliste für die Firewall der Zentrale
9874
9875
9877
9878
9879

Die Firewall der Zentrale führt eine Liste benutzerdefinierter Ports. Welches Trennzeichen das Eingabefeld deiner WebUI-Version erwartet, ließ sich für diese App nicht belegen – deshalb mehrere Schreibweisen zur Auswahl. Die Portnummern selbst folgen README und Quelltext.

Verteilen: zu viele Geräte für eine Bridge?
Musterhaus 1: 90Musterhaus 2: 90

Rechenregel: Anzahl der Bridges = aufgerundet (Geräte ÷ 149), gleichmäßig verteilt. In der Praxis ergibt sich die Aufteilung meist von selbst, weil man ohnehin je Raum eine Instanz anlegt.

💡 Woher die 149 kommt
Die Grenze steht in HAP-NodeJS: MAX_ACCESSORIES = 149 – „Maximum number of bridged accessories per bridge“. Mit der Bridge selbst sind das die 150 Zubehör-Kennungen, die auch die Home-Assistant-Dokumentation als Grenze der HAP-Spezifikation nennt. In der Dokumentation des Addons wird die Grenze nicht erwähnt.
⚠️ Ports verschieben sich
Die Ports werden bei jedem Start der Reihe nach vergeben. Fällt eine Instanz weg, rücken die folgenden nach. HomeKit findet die Bridges über mDNS wieder (allgemeines HAP-Verhalten, im Projekt nicht dokumentiert) – die Freigabe in der Firewall muss aber weiterhin alle benutzten Ports abdecken. Am einfachsten gibt man gleich einen Bereich mit Reserve frei.

📐Die Regel dahinter

Das README fasst es als „9877..n HAP Instance 0 .. n“ zusammen. Im Quelltext sieht die Vergabe so aus (sinngemäß):
currentPortNum = 9877
für jede Instanz (in der Reihenfolge der config.json):
    für jedes nicht gebridgte Gerät der Instanz:   Port = currentPortNum;  currentPortNum + 1
    Bridge der Instanz:                            Port = currentPortNum;  currentPortNum + 1

Ohne Einzelgeräte gilt also schlicht Port = 9877 + Nummer der Instanz. Das einzige Gerät, das sich im Quelltext als „nicht gebridgt“ ausweist, ist die Video-Türklingel (HomeMaticSPVideoDoorBellAccessory): Sie wird als eigenständiges Zubehör veröffentlicht und verbraucht einen Port vor ihrer Bridge. Die festen Ports 9874 (Konfigurationsseite) und 9875 (Ereignisserver) stehen direkt im Quelltext; der CUxD-Server nimmt den Ereignisport plus eins.