TapHome

Paradox Alarmzentralen über PAI (MQTT)

Packet Parser → MQTT
Eingereicht von
Zuletzt aktualisiert: 11. 2026

Erfordert externes Gateway

PAI (Paradox Alarm Interface, open-source MQTT bridge) — Produktseite

Paradox Alarmzentralen über PAI (MQTT)

Die Vorlage Paradox PAI verbindet Paradox Alarmzentralen — Spectra SP, Magellan MG und Digiplex EVO — über MQTT mit TapHome, und zwar über PAI, das Paradox Alarm Interface. PAI ist eine Open-Source-Bridge, kein Produkt von Paradox. Es läuft auf einem kleinen Computer neben der Zentrale (zum Beispiel einem Raspberry Pi, einem NAS oder einem Rechner mit Home Assistant), spricht mit der Zentrale über deren serielle Schnittstelle oder ein IP150-Modul und veröffentlicht den Zustand der Zentrale an einen MQTT-Broker. TapHome liest diese Nachrichten und sendet Befehle zum Scharfschalten zurück. Das Protokoll, das PAI verwendet, veröffentlicht Paradox nicht.

Die Vorlage zeigt den Zustand eines Bereichs und schaltet ihn scharf oder unscharf, zeigt vier Zonen mit ihren Warnungen und schaltet einen PGM-Ausgang. Für Digiplex-EVO-Zentralen mit dem Modul PRT3 gibt es eine eigene Vorlage, die das offizielle Protokoll von Paradox nutzt und keinen Computer braucht: Paradox Digiplex EVO über PRT3 (TCP).

Community-Vorlage — noch nicht mit TapHome an einer echten Zentrale getestet. Die Vorlage wurde im TapHome-Portal aus der Dokumentation von PAI erstellt und nur mit einem simulierten PAI und einer simulierten Zentrale auf einem lokalen TapHome Core 2025.2 getestet, nicht mit einer echten Paradox Zentrale. Prüfen Sie sie an Ihrer Installation, bevor Sie sich bei der Sicherheit auf sie verlassen; Erfahrungen aus der Praxis sind willkommen. Laden Sie das XML auf dieser Seite herunter oder holen Sie es im TapHome-Portal: Paradox über PAI — Community-Vorlage, und importieren Sie es als neues Modul.

Sicherheit: Wer an den Broker veröffentlichen kann, kann die Alarmanlage unscharf schalten. PAI schaltet die Zentrale ohne den Benutzercode der Zentrale scharf und unscharf. Schalten Sie am MQTT-Broker Benutzername und Passwort ein (der in TapHome eingebaute Broker unterstützt das) und tragen Sie sie in PAI und in dieser Vorlage ein.

Unterstützte Zentralen

SerieModelleHinweise
Spectra SPSP4000, SP5500, SP6000, SP7000, SP65Bei den Modellen „+“ (SP5500+, SP6000+, SP7000+) ist die serielle Schnittstelle für Geräte anderer Hersteller gesperrt. Paradox verkauft einen Freischaltcode, oder verbinden Sie PAI über ein IP150
Magellan MGMG5000, MG5050, MG5050+, MG5075Auch die MG5050+ hat die gesperrte serielle Schnittstelle. Die MG6250 ist in PAI nur experimentell
Digiplex EVOEVO48, EVO96, EVO192, EVOHDEVO-Firmware 7.50 und neuer verschlüsselt die serielle Schnittstelle; PAI 3.8 unterstützt das mit dem PC-Passwort. EVO hat kein Scharfschalten Sleep

Hardware-Anschluss

PAI verbindet sich auf eine dieser Arten mit der Zentrale:

  • Serielle Schnittstelle der Zentrale — mit einem USB-TTL-Adapter am Computer mit PAI oder mit einer seriellen ESP32-Bridge im lokalen Netzwerk.
  • IP150-Modul im lokalen Netzwerk. Ein IP150 nimmt nur einen Client gleichzeitig an: Solange PAI verbunden ist, können sich die Paradox-Apps Insite Gold und BlueEye nicht über dasselbe Modul verbinden. Ein IP150+ mit Firmware 6.x und das IP180 erlauben keine lokale Verbindung.

Der Computer mit PAI und der TapHome Core müssen denselben MQTT-Broker erreichen — meist den im TapHome Core eingebauten Broker.

Konfiguration

MQTT-Broker in TapHome

Schalten Sie in TapHome den MQTT Broker ein und legen Sie Benutzername und Passwort fest — siehe MQTT Broker. PAI und diese Vorlage melden sich damit am Broker an.

PAI

Richten Sie MQTT in der PAI-Konfiguration auf den Broker, den TapHome verwendet. Für den in TapHome eingebauten Broker ist das die IP-Adresse des TapHome Core — der Name taphome.mqtt.broker.local funktioniert nur innerhalb des Core, nicht für PAI:

1
2
3
4
5
6
7
MQTT_ENABLE: true
MQTT_HOST: 192.168.1.10        # IP address of the TapHome Core with the built-in broker
MQTT_PORT: 1883
MQTT_USERNAME: pai
MQTT_PASSWORD: 'replace-me'
MQTT_BASE_TOPIC: paradox
MQTT_RETAIN: true              # default: the broker keeps the last state for TapHome

MQTT_USE_NUMERIC_STATES kann auf dem Standardwert (False) bleiben; die Vorlage liest sowohl True/False als auch 1/0.

Schlüssel von Bereich, Zonen und PGM

PAI benennt jeden Bereich, jede Zone und jeden PGM nach seiner Bezeichnung in der Zentrale und ersetzt Leerzeichen und Sonderzeichen durch _ (zum Beispiel Front door → Front_door). Lesen Sie die Schlüssel nach dem Start von PAI aus dem Broker, zum Beispiel:

1
mosquitto_sub -h 192.168.1.10 -u pai -P 'replace-me' -t 'paradox/states/#' -v
1
2
3
paradox/states/partitions/Area_1/current_state disarmed
paradox/states/zones/Front_door/open False
paradox/states/outputs/Gate/on False

Der Teil nach partitions/, zones/ und outputs/ ist der Schlüssel. Schlüssel unterscheiden Groß- und Kleinschreibung.

Importparameter

ImportparameterBeschreibungStandard
Adresse des MQTT-Brokerstaphome.mqtt.broker.local für den in TapHome eingebauten Broker oder die Adresse eines anderen Brokerstaphome.mqtt.broker.local
Port des MQTT-BrokersPort des Brokers1883
Benutzername und Passwort des MQTT-BrokersDas Konto am Broker(leer)
Basis-Topic von PAIMQTT_BASE_TOPIC von PAIparadox
Schlüssel des BereichsSchlüssel des BereichsArea_1
Schlüssel der Zonen 1–4Schlüssel von vier ZonenZone_1 … Zone_4
Schlüssel des PGM-AusgangsSchlüssel eines PGM-AusgangsPGM_1

Für weitere Bereiche oder Zonen importieren Sie die Vorlage erneut mit anderen Schlüsseln und löschen die Geräte, die Sie nicht benötigen.

Gerätefunktionen

Bereich

Zeigt den Zustand des Bereichs und schaltet ihn scharf oder unscharf.

ZustandPAI current_stateBei Auswahl in TapHome
Unscharfdisarmedsendet disarm
Scharfarmed_awaysendet arm
Scharf Stayarmed_homesendet arm_stay
Scharf Sleeparmed_nightsendet arm_sleep (nur SP und MG)
Scharfschaltung läuftarming (Ausgangsverzögerung)sendet nichts
Alarmtriggeredsendet nichts

Befehle werden ohne Retain-Flag an paradox/control/partitions/<key> veröffentlicht, wie PAI es verlangt. „Scharfschaltung läuft“ und „Alarm“ sind Zustände, die die Zentrale meldet, und senden nie einen Befehl. Beim Start des TapHome Core übernimmt der Bereich seinen Zustand aus der gespeicherten (retained) Nachricht von PAI und sendet nichts.

Zonen 1–4

Jede Zone zeigt, ob sie offen oder geschlossen ist. Warnungen erscheinen, wenn die Zone im Alarm, sabotiert oder überbrückt ist oder wenn eine Funkzone eine schwache Batterie hat. Jede Warnung bleibt, bis PAI den Zustand als beendet meldet.

PGM-Ausgang

Schaltet einen PGM-Ausgang der Zentrale ein oder aus und zeigt seinen Zustand. Ob ein PGM geschaltet werden kann, hängt von der Zentrale ab und davon, wie der Errichter ihn programmiert hat. Beim Start des TapHome Core übernimmt der PGM seinen Zustand von PAI und wird nicht geschaltet.

Modul

Das Modul zeigt einen Fehler, wenn PAI sich als offline meldet (paradox/interface/availability), zum Beispiel wenn PAI die Verbindung zur Zentrale verloren hat oder angehalten wurde.

Ohne PAI

Ein PGM-Ausgang der Zentrale an einem Eingang von TapHome (scharf, Alarm) und ein Relais von TapHome an einer Schlüsselschalterzone der Zentrale funktionieren mit jeder Paradox Zentrale, mit weniger Zuständen und ohne Details zu den Zonen.

Fehlerbehebung

Keine Zustände in TapHome

Prüfen Sie, dass PAI läuft und veröffentlicht (mosquitto_sub … -t 'paradox/#'), dass Basis-Topic und Schlüssel genau übereinstimmen und dass MQTT_RETAIN in PAI eingeschaltet ist.

Scharfschalten bewirkt nichts

Prüfen Sie, dass PAI und TapHome denselben Broker verwenden, und lesen Sie in paradox/interface/command_status die Antwort von PAI. Bei EVO ist Scharf Sleep nicht verfügbar.

Modulfehler „PAI reports offline“

PAI hat die Zentrale verloren oder wurde angehalten; siehe das Protokoll von PAI.

PAI verbindet sich nicht mit der Zentrale

Bei SP5500+, SP6000+, SP7000+ und MG5050+ ist die serielle Schnittstelle gesperrt — fragen Sie bei Paradox nach dem Freischaltcode oder verbinden Sie über ein IP150. Solange PAI über ein IP150 verbunden ist, schließen Sie Insite Gold und BlueEye. Ein IP150+ mit Firmware 6.x und ein IP180 erlauben PAI keine lokale Verbindung.

Verfügbare Geräte

Paradox PAI MQTT-Bridge Modul
Benutzerdefinierte Variablen
baseTopic (string)Basis-Topic von PAI (MQTT_BASE_TOPIC in der PAI-Konfiguration), Standard paradox
Enter the same value as MQTT_BASE_TOPIC in the PAI configuration as the import parameter PAI base topic.

Paradox PAI MQTT Bridge

Listener
IF RECEIVEDMSG.TOPIC = baseTopic + "/interface/availability"
    paiStatus := TOSTRING(RECEIVEDMSG.PAYLOAD);
END
# PAI publishes availability as a retained message: offline = PAI lost the panel or stopped
IF paiStatus = "offline"
    ADDERROR(1, "PAI reports offline - no updates from the alarm panel. Check PAI and its connection to the panel.");
END
Bereich Mehrwertschalter

Zustand eines Bereichs der Zentrale und dessen Scharf- oder Unscharfschaltung; Scharfschaltung läuft und Alarm werden nur angezeigt und senden nichts

enum string
Werte / Zustände: Unscharf · Scharf · Scharf Stay · Scharf Sleep · Scharfschaltung läuft · Alarm
Variable: partitionKey — Schlüssel des Bereichs, wie PAI ihn in paradox/states/partitions/<Schlüssel> veröffentlicht, zum Beispiel Area_1

Bereich

Schaltzustand lesen
RETURN(Mu);
Schaltzustand schreiben
# Only the four commands are sent. Arming and Alarm are states reported by the panel, never commands.
VAR cmd := SWITCH(Mu, 0, "disarm", 1, "arm", 2, "arm_stay", 3, "arm_sleep", "");
IF cmd != ""
    MQTTPUBLISH(baseTopic + "/control/partitions/" + partitionKey, cmd);
END
Listener
IF RECEIVEDMSG.TOPIC = baseTopic + "/states/partitions/" + partitionKey + "/current_state"
    VAR state := TOSTRING(RECEIVEDMSG.PAYLOAD);
    # PAI current_state: disarmed, arming (exit delay), armed_away, armed_home (stay), armed_night (sleep), triggered
    IF state = "disarmed"
        Mu := 0;
    ELSEIF state = "armed_away"
        Mu := 1;
    ELSEIF state = "armed_home"
        Mu := 2;
    ELSEIF state = "armed_night"
        Mu := 3;
    ELSEIF state = "arming"
        Mu := 4;
    ELSEIF state = "triggered"
        Mu := 5;
    END
END
Zone 1 Reed-Kontakt Nur lesen

Zustand einer Zone der Zentrale (offen oder geschlossen) mit Warnungen bei Alarm, Sabotage, schwacher Batterie einer Funkzone und Überbrückung

boolean
Variable: zoneKey — Schlüssel der Zone, wie PAI ihn in paradox/states/zones/<Schlüssel> veröffentlicht, zum Beispiel Front_door

Zone 1

Lesen
RETURN(Rc);
Listener
VAR prefix := baseTopic + "/states/zones/" + zoneKey + "/";
VAR topic := RECEIVEDMSG.TOPIC;
IF INDEXOF(topic, prefix) = 0
    VAR payload := TOSTRING(RECEIVEDMSG.PAYLOAD);
    VAR isOn := IF(payload = "True" OR payload = "1", 1, 0);
    IF topic = prefix + "open"
        Rc := isOn;
    ELSEIF topic = prefix + "tamper"
        zoneTamper := isOn;
    ELSEIF topic = prefix + "rf_low_battery_trouble"
        zoneLowBattery := isOn;
    ELSEIF topic = prefix + "bypassed"
        zoneBypassed := isOn;
    ELSEIF topic = prefix + "alarm"
        zoneAlarm := isOn;
    END
END
# Warnings are rebuilt from the stored zone states on every message, so they stay until the panel clears them
IF zoneAlarm = 1
    ADDWARNING(1, "Zone in alarm");
END
IF zoneTamper = 1
    ADDWARNING(2, "Zone tampered");
END
IF zoneLowBattery = 1
    ADDWARNING(3, "Wireless zone: low battery");
END
IF zoneBypassed = 1
    ADDWARNING(4, "Zone bypassed");
END
Zone 2 Reed-Kontakt Nur lesen

Zustand einer Zone der Zentrale (offen oder geschlossen) mit Warnungen bei Alarm, Sabotage, schwacher Batterie einer Funkzone und Überbrückung

boolean
Variable: zoneKey — Schlüssel der Zone, wie PAI ihn in paradox/states/zones/<Schlüssel> veröffentlicht, zum Beispiel Front_door

Zone 2

Lesen
RETURN(Rc);
Listener
VAR prefix := baseTopic + "/states/zones/" + zoneKey + "/";
VAR topic := RECEIVEDMSG.TOPIC;
IF INDEXOF(topic, prefix) = 0
    VAR payload := TOSTRING(RECEIVEDMSG.PAYLOAD);
    VAR isOn := IF(payload = "True" OR payload = "1", 1, 0);
    IF topic = prefix + "open"
        Rc := isOn;
    ELSEIF topic = prefix + "tamper"
        zoneTamper := isOn;
    ELSEIF topic = prefix + "rf_low_battery_trouble"
        zoneLowBattery := isOn;
    ELSEIF topic = prefix + "bypassed"
        zoneBypassed := isOn;
    ELSEIF topic = prefix + "alarm"
        zoneAlarm := isOn;
    END
END
# Warnings are rebuilt from the stored zone states on every message, so they stay until the panel clears them
IF zoneAlarm = 1
    ADDWARNING(1, "Zone in alarm");
END
IF zoneTamper = 1
    ADDWARNING(2, "Zone tampered");
END
IF zoneLowBattery = 1
    ADDWARNING(3, "Wireless zone: low battery");
END
IF zoneBypassed = 1
    ADDWARNING(4, "Zone bypassed");
END
Zone 3 Reed-Kontakt Nur lesen

Zustand einer Zone der Zentrale (offen oder geschlossen) mit Warnungen bei Alarm, Sabotage, schwacher Batterie einer Funkzone und Überbrückung

boolean
Variable: zoneKey — Schlüssel der Zone, wie PAI ihn in paradox/states/zones/<Schlüssel> veröffentlicht, zum Beispiel Front_door

Zone 3

Lesen
RETURN(Rc);
Listener
VAR prefix := baseTopic + "/states/zones/" + zoneKey + "/";
VAR topic := RECEIVEDMSG.TOPIC;
IF INDEXOF(topic, prefix) = 0
    VAR payload := TOSTRING(RECEIVEDMSG.PAYLOAD);
    VAR isOn := IF(payload = "True" OR payload = "1", 1, 0);
    IF topic = prefix + "open"
        Rc := isOn;
    ELSEIF topic = prefix + "tamper"
        zoneTamper := isOn;
    ELSEIF topic = prefix + "rf_low_battery_trouble"
        zoneLowBattery := isOn;
    ELSEIF topic = prefix + "bypassed"
        zoneBypassed := isOn;
    ELSEIF topic = prefix + "alarm"
        zoneAlarm := isOn;
    END
END
# Warnings are rebuilt from the stored zone states on every message, so they stay until the panel clears them
IF zoneAlarm = 1
    ADDWARNING(1, "Zone in alarm");
END
IF zoneTamper = 1
    ADDWARNING(2, "Zone tampered");
END
IF zoneLowBattery = 1
    ADDWARNING(3, "Wireless zone: low battery");
END
IF zoneBypassed = 1
    ADDWARNING(4, "Zone bypassed");
END
Zone 4 Reed-Kontakt Nur lesen

Zustand einer Zone der Zentrale (offen oder geschlossen) mit Warnungen bei Alarm, Sabotage, schwacher Batterie einer Funkzone und Überbrückung

boolean
Variable: zoneKey — Schlüssel der Zone, wie PAI ihn in paradox/states/zones/<Schlüssel> veröffentlicht, zum Beispiel Front_door

Zone 4

Lesen
RETURN(Rc);
Listener
VAR prefix := baseTopic + "/states/zones/" + zoneKey + "/";
VAR topic := RECEIVEDMSG.TOPIC;
IF INDEXOF(topic, prefix) = 0
    VAR payload := TOSTRING(RECEIVEDMSG.PAYLOAD);
    VAR isOn := IF(payload = "True" OR payload = "1", 1, 0);
    IF topic = prefix + "open"
        Rc := isOn;
    ELSEIF topic = prefix + "tamper"
        zoneTamper := isOn;
    ELSEIF topic = prefix + "rf_low_battery_trouble"
        zoneLowBattery := isOn;
    ELSEIF topic = prefix + "bypassed"
        zoneBypassed := isOn;
    ELSEIF topic = prefix + "alarm"
        zoneAlarm := isOn;
    END
END
# Warnings are rebuilt from the stored zone states on every message, so they stay until the panel clears them
IF zoneAlarm = 1
    ADDWARNING(1, "Zone in alarm");
END
IF zoneTamper = 1
    ADDWARNING(2, "Zone tampered");
END
IF zoneLowBattery = 1
    ADDWARNING(3, "Wireless zone: low battery");
END
IF zoneBypassed = 1
    ADDWARNING(4, "Zone bypassed");
END
PGM-Ausgang Schalter

Schaltet einen programmierbaren Ausgang (PGM) der Zentrale ein oder aus und zeigt seinen Zustand

boolean
Werte / Zustände: ON · OFF
Variable: outputKey — Schlüssel des PGM-Ausgangs, wie PAI ihn in paradox/states/outputs/<Schlüssel> veröffentlicht

PGM-Ausgang

Schaltzustand lesen
RETURN(St);
Schaltzustand schreiben
MQTTPUBLISH(baseTopic + "/control/outputs/" + outputKey, IF(St = 1, "on", "off"));
Listener
IF RECEIVEDMSG.TOPIC = baseTopic + "/states/outputs/" + outputKey + "/on"
    VAR payload := TOSTRING(RECEIVEDMSG.PAYLOAD);
    St := IF(payload = "True" OR payload = "1", 1, 0);
END
Verbindung: Packet Parser → MQTT
Mögliche Verbesserungen (6)
  • Zone bypass control — The template shows the bypass state of a zone as a warning but does not bypass a zone.
  • Force arming and EVO instant arming — arm_instant exists on EVO panels only; EVO has no Sleep arming, so Armed Sleep does nothing there.
  • Panic alarms — Left out on purpose: a panic command triggers a real alarm report.
  • System trouble flags — Trouble flags of the panel that PAI publishes under states/system/troubles.
  • Event stream — Live panel events PAI publishes as JSON when MQTT_PUBLISH_RAW_EVENTS is on.
  • More partitions, zones and PGM outputs — The template has one partition, four zones and one PGM. Import it again with other keys for more.

Quellen

  • PAI — Paradox Alarm Interface, project README (version 3.8.1)
    github.com 2026-11-04
  • PAI wiki — MQTT Interface (topics, states, control commands)
    github.com 2026-11-04
  • PAI — example configuration pai.conf.example
  • PAI wiki — Compatibility (panels, firmware, connections)
    github.com 2026-11-04
  • PAI wiki — Connection methods (serial, IP150, ESP32 bridge)
    github.com 2026-11-04

Haben Sie ein Problem mit dieser Gerätevorlage gefunden?

Sagen Sie uns, was nicht funktioniert, was fehlt oder wie sich die Vorlage verhalten sollte. Ihr Feedback hilft uns, den Katalog genau zu halten.

Community — ungeprüft

Möchtest du das in deinem TapHome Core verwenden?

Öffne diese Vorlage im Kundenportal, um sie auf eine deiner Wohnungen anzuwenden, oder entwirf eine Anpassung und reiche sie an den Katalog ein.

Im Portal öffnen