TapHome

Alarmové ústředny Paradox přes PAI (MQTT)

Packet Parser → MQTT
Přidal
Poslední aktualizace: 11. 2026

Vyžaduje externí bránu

PAI (Paradox Alarm Interface, open-source MQTT bridge) — stránka produktu

Alarmové ústředny Paradox přes PAI (MQTT)

Šablona Paradox PAI propojuje alarmové ústředny Paradox — Spectra SP, Magellan MG a Digiplex EVO — s TapHome přes MQTT pomocí PAI, Paradox Alarm Interface. PAI je open-source most, ne produkt Paradoxu. Běží na malém počítači u ústředny (například Raspberry Pi, NAS nebo počítač s Home Assistant), s ústřednou komunikuje přes její sériový port nebo modul IP150 a stav ústředny publikuje do brokeru MQTT. TapHome tyto zprávy čte a posílá zpět příkazy k armování. Protokol, který PAI používá, Paradox nezveřejňuje.

Šablona ukazuje stav jedné oblasti a oblast armuje nebo disarmuje, ukazuje čtyři zóny s jejich upozorněními a spíná jeden výstup PGM. Pro ústředny Digiplex EVO s modulem PRT3 je samostatná šablona, která používá oficiální protokol Paradoxu a nepotřebuje počítač: Paradox Digiplex EVO přes PRT3 (TCP).

Komunitní šablona — zatím neotestovaná s TapHome na skutečné ústředně. Šablona vznikla v portálu TapHome z dokumentace PAI a otestovaná byla jen se simulátorem PAI a ústředny na lokálním TapHome Core 2025.2, ne se skutečnou ústřednou Paradox. Ověřte ji na své instalaci dříve, než se na ni budete spoléhat při zabezpečení; zkušenosti z praxe jsou vítané. XML stáhnete na této stránce nebo v portálu TapHome: Paradox přes PAI — komunitní šablona, a importujete ho jako nový modul.

Bezpečnost: kdo může publikovat do brokeru, může alarm disarmovat. PAI armuje a disarmuje ústřednu bez uživatelského kódu ústředny. Zapněte na brokeru MQTT jméno a heslo (vestavěný broker TapHome to podporuje) a zadejte je v PAI i v této šabloně.

Podporované ústředny

ŘadaModelyPoznámky
Spectra SPSP4000, SP5500, SP6000, SP7000, SP65Na modelech „+“ (SP5500+, SP6000+, SP7000+) je sériový port zamčený pro zařízení jiných výrobců. Paradox prodává odemykací kód, nebo PAI připojte přes IP150
Magellan MGMG5000, MG5050, MG5050+, MG5075Také MG5050+ má zamčený sériový port. MG6250 je v PAI jen experimentálně
Digiplex EVOEVO48, EVO96, EVO192, EVOHDFirmware EVO 7.50 a novější šifruje sériový port; PAI 3.8 to zvládá s heslem pro PC. EVO nemá armování Sleep

Hardwarové zapojení

PAI se k ústředně připojí jedním z těchto způsobů:

  • Sériový port ústředny — převodníkem USB na TTL k počítači s PAI nebo sériovým mostem ESP32 v lokální síti.
  • Modul IP150 v lokální síti. IP150 přijme najednou jen jednoho klienta: dokud je připojené PAI, aplikace Paradoxu Insite Gold a BlueEye se přes stejný modul nepřipojí. IP150+ s firmwarem 6.x a IP180 lokální připojení neumožňují.

Počítač s PAI i TapHome Core musí dosáhnout na stejný broker MQTT — obvykle broker vestavěný v TapHome Core.

Konfigurace

Broker MQTT v TapHome

Zapněte v TapHome MQTT Broker a nastavte jméno a heslo — viz MQTT Broker. PAI i tato šablona se jimi přihlašují k brokeru.

PAI

V konfiguraci PAI nasměrujte MQTT na broker, který používá TapHome. Pro broker vestavěný v TapHome je to IP adresa TapHome Core — název taphome.mqtt.broker.local funguje jen uvnitř Core, ne pro 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 může zůstat na výchozí hodnotě (False); šablona čte True/False i 1/0.

Klíče oblasti, zón a PGM

PAI pojmenuje každou oblast, zónu a PGM podle jejího názvu v ústředně, přičemž mezery a speciální znaky nahradí znakem _ (například Front door → Front_door). Klíče přečtěte z brokeru po spuštění PAI, například:

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

Část za partitions/, zones/ a outputs/ je klíč. Klíče rozlišují velká a malá písmena.

Parametry importu

Parametr importuPopisVýchozí hodnota
Adresa brokeru MQTTtaphome.mqtt.broker.local pro broker vestavěný v TapHome, nebo adresa jiného brokerutaphome.mqtt.broker.local
Port brokeru MQTTPort brokeru1883
Jméno a heslo brokeru MQTTÚčet na brokeru(prázdné)
Základní téma PAIMQTT_BASE_TOPIC v PAIparadox
Klíč oblastiKlíč oblastiArea_1
Klíče zón 1–4Klíče čtyř zónZone_1 … Zone_4
Klíč výstupu PGMKlíč jednoho výstupu PGMPGM_1

Pro další oblasti nebo zóny importujte šablonu znovu s jinými klíči a zařízení, která nepotřebujete, smažte.

Funkce zařízení

Oblast

Ukazuje stav oblasti a oblast armuje nebo disarmuje.

StavPAI current_statePo výběru v TapHome
Disarmovanýdisarmedpošle disarm
Armovanýarmed_awaypošle arm
Armovaný Stayarmed_homepošle arm_stay
Armovaný Sleeparmed_nightpošle arm_sleep (jen SP a MG)
Armováníarming (odchodové zpoždění)nepošle nic
Poplachtriggerednepošle nic

Příkazy se publikují do paradox/control/partitions/<key> bez příznaku retain, jak to PAI vyžaduje. Armování a Poplach jsou stavy, které hlásí ústředna, a nikdy nepošlou příkaz. Při startu TapHome Core převezme oblast stav z uchované (retained) zprávy PAI a nic nepošle.

Zóny 1–4

Každá zóna ukazuje, zda je otevřená nebo zavřená. Upozornění se zobrazí, když je zóna v poplachu, sabotovaná nebo přemostěná, nebo když má bezdrátová zóna slabou baterii. Každé upozornění zůstane, dokud PAI nenahlásí, že stav pominul.

Výstup PGM

Zapíná a vypíná jeden výstup PGM ústředny a ukazuje jeho stav. Zda lze PGM spínat, závisí na ústředně a na tom, jak ho naprogramoval instalatér. Při startu TapHome Core převezme PGM stav z PAI a nespíná se.

Modul

Modul ukáže chybu, když PAI nahlásí, že je offline (paradox/interface/availability), například když PAI ztratilo spojení s ústřednou nebo se zastavilo.

Bez PAI

Výstup PGM ústředny zapojený na vstup TapHome (armováno, poplach) a relé TapHome zapojené na zónu ústředny s klíčovým spínačem fungují s každou ústřednou Paradox, jen s menším počtem stavů a bez podrobností o zónách.

Řešení problémů

TapHome neukazuje žádné stavy

Zkontrolujte, že PAI běží a publikuje (mosquitto_sub … -t 'paradox/#'), že základní téma a klíče přesně sedí a že je v PAI zapnuté MQTT_RETAIN.

Armování nic neudělá

Zkontrolujte, že PAI a TapHome používají stejný broker, a v paradox/interface/command_status si přečtěte odpověď PAI. Na EVO armování Sleep není k dispozici.

Chyba modulu „PAI reports offline“

PAI ztratilo ústřednu nebo se zastavilo; podívejte se do logu PAI.

PAI se k ústředně nepřipojí

Na SP5500+, SP6000+, SP7000+ a MG5050+ je sériový port zamčený — vyžádejte si od Paradoxu odemykací kód, nebo se připojte přes IP150. Dokud je PAI připojené přes IP150, zavřete Insite Gold a BlueEye. IP150+ s firmwarem 6.x ani IP180 lokální připojení PAI neumožňují.

Dostupná zařízení

Most Paradox PAI MQTT Modul
Vlastní proměnné
baseTopic (string)Základní téma PAI (MQTT_BASE_TOPIC v konfiguraci PAI), výchozí 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
Oblast Vícestavový přepínač

Stav jedné oblasti ústředny a její armování nebo disarmování; Armování a Poplach se jen zobrazují a nic neposílají

enum string
Hodnoty / Stavy: Disarmovaný · Armovaný · Armovaný Stay · Armovaný Sleep · Armování · Poplach
Proměnná: partitionKey — Klíč oblasti, jak ho PAI publikuje v paradox/states/partitions/<klíč>, například Area_1

Oblast

Čtení stavu přepínače
RETURN(Mu);
Zápis stavu přepínače
# 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
Zóna 1 Jazýčkový kontakt Pouze ke čtení

Stav zóny ústředny (otevřená nebo zavřená) s upozorněními na poplach, sabotáž, slabou baterii bezdrátové zóny a přemostění

boolean
Proměnná: zoneKey — Klíč zóny, jak ho PAI publikuje v paradox/states/zones/<klíč>, například Front_door

Zóna 1

Čtení
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
Zóna 2 Jazýčkový kontakt Pouze ke čtení

Stav zóny ústředny (otevřená nebo zavřená) s upozorněními na poplach, sabotáž, slabou baterii bezdrátové zóny a přemostění

boolean
Proměnná: zoneKey — Klíč zóny, jak ho PAI publikuje v paradox/states/zones/<klíč>, například Front_door

Zóna 2

Čtení
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
Zóna 3 Jazýčkový kontakt Pouze ke čtení

Stav zóny ústředny (otevřená nebo zavřená) s upozorněními na poplach, sabotáž, slabou baterii bezdrátové zóny a přemostění

boolean
Proměnná: zoneKey — Klíč zóny, jak ho PAI publikuje v paradox/states/zones/<klíč>, například Front_door

Zóna 3

Čtení
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
Zóna 4 Jazýčkový kontakt Pouze ke čtení

Stav zóny ústředny (otevřená nebo zavřená) s upozorněními na poplach, sabotáž, slabou baterii bezdrátové zóny a přemostění

boolean
Proměnná: zoneKey — Klíč zóny, jak ho PAI publikuje v paradox/states/zones/<klíč>, například Front_door

Zóna 4

Čtení
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
Výstup PGM Přepínač

Zapíná a vypíná jeden programovatelný výstup (PGM) ústředny a zobrazuje jeho stav

boolean
Hodnoty / Stavy: ON · OFF
Proměnná: outputKey — Klíč výstupu PGM, jak ho PAI publikuje v paradox/states/outputs/<klíč>

Výstup PGM

Čtení stavu přepínače
RETURN(St);
Zápis stavu přepínače
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
Připojení: Packet Parser → MQTT
Možná vylepšení (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.

Zdroje

  • 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

Našli jste problém s touto šablonou zařízení?

Napište nám, co nefunguje, co chybí, nebo jak by se měla šablona chovat. Vaše zpětná vazba nám pomáhá udržet katalog přesný.

Komunita — neověřeno

Chcete to použít ve svém TapHome jádře?

Otevřete tuto šablonu v zákaznickém portálu a použijte ji ve svém domově, nebo navrhněte úpravu a odešlete ji zpět do katalogu.

Otevřít v portálu