TapHome

Centrale alarmowe Paradox przez PAI (MQTT)

Packet Parser → MQTT
Dodane przez
Ostatnia aktualizacja: 11. 2026

Wymaga zewnętrznej bramki

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

Centrale alarmowe Paradox przez PAI (MQTT)

Szablon Paradox PAI łączy centrale alarmowe Paradox — Spectra SP, Magellan MG i Digiplex EVO — z TapHome przez MQTT za pomocą PAI, czyli Paradox Alarm Interface. PAI to otwartoźródłowy mostek, a nie produkt firmy Paradox. Działa na małym komputerze obok centrali (na przykład Raspberry Pi, NAS lub komputerze z Home Assistant), komunikuje się z centralą przez jej port szeregowy lub moduł IP150 i publikuje stan centrali do brokera MQTT. TapHome odczytuje te wiadomości i odsyła polecenia uzbrojenia. Protokołu, którego używa PAI, Paradox nie publikuje.

Szablon pokazuje stan jednej partycji oraz ją uzbraja lub rozbraja, pokazuje cztery strefy z ich ostrzeżeniami i przełącza jedno wyjście PGM. Dla central Digiplex EVO z modułem PRT3 jest osobny szablon, który korzysta z oficjalnego protokołu firmy Paradox i nie wymaga komputera: Paradox Digiplex EVO przez PRT3 (TCP).

Szablon społeczności — jeszcze nie przetestowany z TapHome na prawdziwej centrali. Szablon powstał w portalu TapHome na podstawie dokumentacji PAI i przetestowano go tylko z symulatorem PAI i centrali na lokalnym TapHome Core 2025.2, a nie z prawdziwą centralą Paradox. Sprawdź go w swojej instalacji, zanim zaczniesz na nim polegać w kwestii bezpieczeństwa; doświadczenia z praktyki są mile widziane. Pobierz XML z tej strony lub z portalu TapHome: Paradox przez PAI — szablon społeczności, i zaimportuj go jako nowy moduł.

Bezpieczeństwo: kto może publikować do brokera, może rozbroić alarm. PAI uzbraja i rozbraja centralę bez kodu użytkownika centrali. Włącz na brokerze MQTT nazwę użytkownika i hasło (wbudowany broker TapHome to obsługuje) i wpisz je w PAI oraz w tym szablonie.

Obsługiwane centrale

SeriaModeleUwagi
Spectra SPSP4000, SP5500, SP6000, SP7000, SP65W modelach „+” (SP5500+, SP6000+, SP7000+) port szeregowy jest zablokowany dla urządzeń innych producentów. Paradox sprzedaje kod odblokowujący, albo połącz PAI przez IP150
Magellan MGMG5000, MG5050, MG5050+, MG5075Również MG5050+ ma zablokowany port szeregowy. MG6250 jest w PAI tylko eksperymentalna
Digiplex EVOEVO48, EVO96, EVO192, EVOHDFirmware EVO 7.50 i nowszy szyfruje port szeregowy; PAI 3.8 obsługuje to z hasłem PC. EVO nie ma uzbrojenia Sleep

Podłączenie sprzętu

PAI łączy się z centralą na jeden z tych sposobów:

  • Port szeregowy centrali — przejściówką USB–TTL do komputera z PAI albo szeregowym mostkiem ESP32 w sieci lokalnej.
  • Moduł IP150 w sieci lokalnej. IP150 przyjmuje naraz tylko jednego klienta: gdy PAI jest połączony, aplikacje Paradox Insite Gold i BlueEye nie mogą połączyć się przez ten sam moduł. IP150+ z firmware 6.x i IP180 nie pozwalają na połączenie lokalne.

Komputer z PAI i TapHome Core muszą mieć dostęp do tego samego brokera MQTT — zwykle brokera wbudowanego w TapHome Core.

Konfiguracja

Broker MQTT w TapHome

Włącz w TapHome MQTT Broker i ustaw nazwę użytkownika i hasło — zobacz MQTT Broker. PAI i ten szablon logują się nimi do brokera.

PAI

W konfiguracji PAI skieruj MQTT na broker, którego używa TapHome. Dla brokera wbudowanego w TapHome jest to adres IP TapHome Core — nazwa taphome.mqtt.broker.local działa tylko wewnątrz Core, nie dla 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 może pozostać na wartości domyślnej (False); szablon odczytuje zarówno True/False, jak i 1/0.

Klucze partycji, stref i PGM

PAI nazywa każdą partycję, strefę i PGM według jej nazwy w centrali, zastępując spacje i znaki specjalne znakiem _ (na przykład Front door → Front_door). Odczytaj klucze z brokera po uruchomieniu PAI, na przykład:

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

Część po partitions/, zones/ i outputs/ to klucz. Klucze rozróżniają wielkość liter.

Parametry importu

Parametr importuOpisDomyślnie
Adres brokera MQTTtaphome.mqtt.broker.local dla brokera wbudowanego w TapHome albo adres innego brokerataphome.mqtt.broker.local
Port brokera MQTTPort brokera1883
Nazwa użytkownika i hasło brokera MQTTKonto na brokerze(puste)
Temat bazowy PAIMQTT_BASE_TOPIC w PAIparadox
Klucz partycjiKlucz partycjiArea_1
Klucze stref 1–4Klucze czterech strefZone_1 … Zone_4
Klucz wyjścia PGMKlucz jednego wyjścia PGMPGM_1

Dla kolejnych partycji lub stref zaimportuj szablon ponownie z innymi kluczami i usuń urządzenia, których nie potrzebujesz.

Funkcje urządzeń

Partycja

Pokazuje stan partycji oraz ją uzbraja lub rozbraja.

StanPAI current_statePo wybraniu w TapHome
Rozbrojonydisarmedwysyła disarm
Uzbrojonyarmed_awaywysyła arm
Uzbrojony Stayarmed_homewysyła arm_stay
Uzbrojony Sleeparmed_nightwysyła arm_sleep (tylko SP i MG)
Uzbrajaniearming (opóźnienie na wyjście)nic nie wysyła
Alarmtriggerednic nie wysyła

Polecenia są publikowane do paradox/control/partitions/<key> bez flagi retain, tak jak wymaga PAI. Uzbrajanie i Alarm to stany zgłaszane przez centralę i nigdy nie wysyłają polecenia. Przy starcie TapHome Core partycja przejmuje stan z zachowanej (retained) wiadomości PAI i nic nie wysyła.

Strefy 1–4

Każda strefa pokazuje, czy jest otwarta, czy zamknięta. Ostrzeżenia pojawiają się, gdy strefa jest w alarmie, sabotowana lub obejściona albo gdy strefa bezprzewodowa ma słabą baterię. Każde ostrzeżenie pozostaje, dopóki PAI nie zgłosi, że stan minął.

Wyjście PGM

Włącza lub wyłącza jedno wyjście PGM centrali i pokazuje jego stan. To, czy PGM da się przełączać, zależy od centrali i od tego, jak zaprogramował go instalator. Przy starcie TapHome Core PGM przejmuje stan z PAI i nie jest przełączane.

Moduł

Moduł pokazuje błąd, gdy PAI zgłasza, że jest offline (paradox/interface/availability), na przykład gdy PAI utracił połączenie z centralą lub się zatrzymał.

Bez PAI

Wyjście PGM centrali podłączone do wejścia TapHome (uzbrojony, alarm) i przekaźnik TapHome podłączony do strefy centrali z przełącznikiem kluczykowym działają z każdą centralą Paradox, z mniejszą liczbą stanów i bez szczegółów stref.

Rozwiązywanie problemów

Brak stanów w TapHome

Sprawdź, czy PAI działa i publikuje (mosquitto_sub … -t 'paradox/#'), czy temat bazowy i klucze dokładnie się zgadzają oraz czy w PAI jest włączone MQTT_RETAIN.

Uzbrajanie nic nie robi

Sprawdź, czy PAI i TapHome używają tego samego brokera, i odczytaj odpowiedź PAI w paradox/interface/command_status. Na EVO uzbrojenie Sleep nie jest dostępne.

Błąd modułu „PAI reports offline”

PAI utracił centralę lub się zatrzymał; zajrzyj do logu PAI.

PAI nie łączy się z centralą

W SP5500+, SP6000+, SP7000+ i MG5050+ port szeregowy jest zablokowany — poproś firmę Paradox o kod odblokowujący albo połącz się przez IP150. Gdy PAI jest połączony przez IP150, zamknij Insite Gold i BlueEye. IP150+ z firmware 6.x i IP180 nie pozwalają PAI na połączenie lokalne.

Dostępne urządzenia

Mostek Paradox PAI MQTT Moduł
Zmienne niestandardowe
baseTopic (string)Temat bazowy PAI (MQTT_BASE_TOPIC w konfiguracji PAI), domyślnie paradox
Enter the same value as MQTT_BASE_TOPIC in the PAI configuration as the import parameter PAI base topic.

Paradox PAI MQTT Bridge

Nasłuchiwanie
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
Partycja Przełącznik wielowartościowy

Stan jednej partycji centrali oraz jej uzbrajanie lub rozbrajanie; Uzbrajanie i Alarm są tylko wyświetlane i niczego nie wysyłają

enum string
Wartości / Stany: Rozbrojony · Uzbrojony · Uzbrojony Stay · Uzbrojony Sleep · Uzbrajanie · Alarm
Zmienna: partitionKey — Klucz partycji, tak jak PAI publikuje go w paradox/states/partitions/<klucz>, na przykład Area_1

Partycja

Odczyt stanu przełącznika
RETURN(Mu);
Zapis stanu przełącznika
# 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
Nasłuchiwanie
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
Strefa 1 Kontakt reed Tylko do odczytu

Stan strefy centrali (otwarta lub zamknięta) z ostrzeżeniami o alarmie, sabotażu, słabej baterii strefy bezprzewodowej i obejściu

boolean
Zmienna: zoneKey — Klucz strefy, tak jak PAI publikuje go w paradox/states/zones/<klucz>, na przykład Front_door

Strefa 1

Odczyt
RETURN(Rc);
Nasłuchiwanie
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
Strefa 2 Kontakt reed Tylko do odczytu

Stan strefy centrali (otwarta lub zamknięta) z ostrzeżeniami o alarmie, sabotażu, słabej baterii strefy bezprzewodowej i obejściu

boolean
Zmienna: zoneKey — Klucz strefy, tak jak PAI publikuje go w paradox/states/zones/<klucz>, na przykład Front_door

Strefa 2

Odczyt
RETURN(Rc);
Nasłuchiwanie
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
Strefa 3 Kontakt reed Tylko do odczytu

Stan strefy centrali (otwarta lub zamknięta) z ostrzeżeniami o alarmie, sabotażu, słabej baterii strefy bezprzewodowej i obejściu

boolean
Zmienna: zoneKey — Klucz strefy, tak jak PAI publikuje go w paradox/states/zones/<klucz>, na przykład Front_door

Strefa 3

Odczyt
RETURN(Rc);
Nasłuchiwanie
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
Strefa 4 Kontakt reed Tylko do odczytu

Stan strefy centrali (otwarta lub zamknięta) z ostrzeżeniami o alarmie, sabotażu, słabej baterii strefy bezprzewodowej i obejściu

boolean
Zmienna: zoneKey — Klucz strefy, tak jak PAI publikuje go w paradox/states/zones/<klucz>, na przykład Front_door

Strefa 4

Odczyt
RETURN(Rc);
Nasłuchiwanie
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
Wyjście PGM Przełącznik

Włącza lub wyłącza jedno programowalne wyjście (PGM) centrali i pokazuje jego stan

boolean
Wartości / Stany: ON · OFF
Zmienna: outputKey — Klucz wyjścia PGM, tak jak PAI publikuje go w paradox/states/outputs/<klucz>

Wyjście PGM

Odczyt stanu przełącznika
RETURN(St);
Zapis stanu przełącznika
MQTTPUBLISH(baseTopic + "/control/outputs/" + outputKey, IF(St = 1, "on", "off"));
Nasłuchiwanie
IF RECEIVEDMSG.TOPIC = baseTopic + "/states/outputs/" + outputKey + "/on"
    VAR payload := TOSTRING(RECEIVEDMSG.PAYLOAD);
    St := IF(payload = "True" OR payload = "1", 1, 0);
END
Połączenie: Packet Parser → MQTT
Możliwe ulepszenia (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.

Źródła

  • 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

Znalazłeś problem z tym szablonem urządzenia?

Napisz nam, co nie działa, czego brakuje lub jak powinien zachowywać się szablon. Twoja opinia pomaga nam utrzymać katalog dokładnym.

Społeczność — niezweryfikowane

Chcesz tego użyć w swoim TapHome Core?

Otwórz ten szablon w portalu klienta, aby zastosować go w swoim domu, lub zaproponuj modyfikację i wyślij ją z powrotem do katalogu.

Otwórz w portalu