TapHome

Centrale de alarmă Paradox prin PAI (MQTT)

Packet Parser → MQTT
Trimis de
Ultima actualizare: 11. 2026

Necesită gateway extern

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

Centrale de alarmă Paradox prin PAI (MQTT)

Șablonul Paradox PAI conectează centralele de alarmă Paradox — Spectra SP, Magellan MG și Digiplex EVO — la TapHome prin MQTT, cu ajutorul PAI, Paradox Alarm Interface. PAI este o punte open source, nu un produs Paradox. Rulează pe un calculator mic lângă centrală (de exemplu un Raspberry Pi, un NAS sau un calculator cu Home Assistant), comunică cu centrala prin portul ei serial sau printr-un modul IP150 și publică starea centralei pe un broker MQTT. TapHome citește aceste mesaje și trimite înapoi comenzi de armare. Protocolul pe care îl folosește PAI nu este publicat de Paradox.

Șablonul afișează starea unei partiții și o armează sau o dezarmează, afișează patru zone cu avertizările lor și comută o ieșire PGM. Pentru centralele Digiplex EVO cu modulul PRT3 există un șablon separat, care folosește protocolul oficial Paradox și nu are nevoie de un computer: Paradox Digiplex EVO prin PRT3 (TCP).

Șablon al comunității — încă netestat cu TapHome pe o centrală reală. Șablonul a fost generat în portalul TapHome din documentația PAI și a fost testat doar cu un PAI și o centrală simulate pe un TapHome Core 2025.2 local, nu cu o centrală Paradox reală. Verificați-l pe instalația dumneavoastră înainte de a vă baza pe el pentru securitate; experiența din teren este binevenită. Descărcați fișierul XML de pe această pagină sau din portalul TapHome: Paradox prin PAI — șablon al comunității, și importați-l ca modul nou.

Securitate: cine poate publica pe broker poate dezarma alarma. PAI armează și dezarmează centrala fără codul de utilizator al centralei. Activați pe brokerul MQTT numele de utilizator și parola (brokerul integrat în TapHome suportă acest lucru) și introduceți-le în PAI și în acest șablon.

Centrale suportate

SerieModeleObservații
Spectra SPSP4000, SP5500, SP6000, SP7000, SP65La modelele „+” (SP5500+, SP6000+, SP7000+) portul serial este blocat pentru dispozitivele altor producători. Paradox vinde un cod de deblocare, sau conectați PAI printr-un IP150
Magellan MGMG5000, MG5050, MG5050+, MG5075Și MG5050+ are portul serial blocat. MG6250 este doar experimentală în PAI
Digiplex EVOEVO48, EVO96, EVO192, EVOHDFirmware-ul EVO 7.50 și mai nou criptează portul serial; PAI 3.8 îl suportă cu parola PC. EVO nu are armarea Sleep

Conexiune hardware

PAI se conectează la centrală într-unul dintre aceste moduri:

  • Portul serial al centralei — cu un adaptor USB-TTL la calculatorul cu PAI sau cu o punte serială ESP32 în rețeaua locală.
  • Modulul IP150 în rețeaua locală. Un IP150 acceptă un singur client odată: cât timp PAI este conectat, aplicațiile Paradox Insite Gold și BlueEye nu se pot conecta prin același modul. Un IP150+ cu firmware 6.x și IP180 nu permit conexiunea locală.

Calculatorul cu PAI și TapHome Core trebuie să ajungă la același broker MQTT — de obicei brokerul integrat în TapHome Core.

Configurare

Brokerul MQTT în TapHome

Activați MQTT Broker în TapHome și setați un nume de utilizator și o parolă — vedeți MQTT Broker. PAI și acest șablon se autentifică cu ele la broker.

PAI

În configurația PAI, îndreptați MQTT spre brokerul pe care îl folosește TapHome. Pentru brokerul integrat în TapHome aceasta este adresa IP a TapHome Core — numele taphome.mqtt.broker.local funcționează doar în interiorul Core, nu și pentru 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 poate rămâne la valoarea implicită (False); șablonul citește atât True/False, cât și 1/0.

Cheile partiției, zonelor și PGM

PAI denumește fiecare partiție, zonă și PGM după numele său din centrală, înlocuind spațiile și caracterele speciale cu _ (de exemplu Front door → Front_door). Citiți cheile de pe broker după pornirea PAI, de exemplu:

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

Partea de după partitions/, zones/ și outputs/ este cheia. Cheile fac distincție între majuscule și minuscule.

Parametri de import

Parametru de importDescriereImplicit
Adresa brokerului MQTTtaphome.mqtt.broker.local pentru brokerul integrat în TapHome sau adresa altui brokertaphome.mqtt.broker.local
Portul brokerului MQTTPortul brokerului1883
Numele de utilizator și parola brokerului MQTTContul de pe broker(gol)
Subiectul de bază PAIMQTT_BASE_TOPIC din PAIparadox
Cheia partițieiCheia partițieiArea_1
Cheile zonelor 1–4Cheile a patru zoneZone_1 … Zone_4
Cheia ieșirii PGMCheia unei ieșiri PGMPGM_1

Pentru alte partiții sau zone, importați din nou șablonul cu alte chei și ștergeți dispozitivele de care nu aveți nevoie.

Funcțiile dispozitivelor

Partiție

Afișează starea partiției și o armează sau o dezarmează.

StarePAI current_stateCând este selectată în TapHome
Dezarmatdisarmedtrimite disarm
Armatarmed_awaytrimite arm
Armat Stayarmed_hometrimite arm_stay
Armat Sleeparmed_nighttrimite arm_sleep (doar SP și MG)
Armarearming (întârziere la ieșire)nu trimite nimic
Alarmătriggerednu trimite nimic

Comenzile se publică pe paradox/control/partitions/<key> fără indicatorul retain, așa cum cere PAI. Armare și Alarmă sunt stări raportate de centrală și nu trimit niciodată o comandă. La pornirea TapHome Core, partiția își preia starea din mesajul păstrat (retained) al PAI și nu trimite nimic.

Zonele 1–4

Fiecare zonă arată dacă este deschisă sau închisă. Avertizările apar când zona este în alarmă, sabotată sau ocolită ori când o zonă wireless are bateria descărcată. Fiecare avertizare rămâne până când PAI raportează că starea a încetat.

Ieșire PGM

Pornește sau oprește o ieșire PGM a centralei și îi afișează starea. Dacă un PGM poate fi comutat depinde de centrală și de felul în care l-a programat instalatorul. La pornirea TapHome Core, PGM-ul își preia starea de la PAI și nu este comutat.

Modul

Modulul afișează o eroare când PAI se raportează offline (paradox/interface/availability), de exemplu când PAI a pierdut conexiunea cu centrala sau s-a oprit.

Fără PAI

O ieșire PGM a centralei conectată la o intrare TapHome (armat, alarmă) și un releu TapHome conectat la o zonă cu cheie a centralei funcționează cu orice centrală Paradox, cu mai puține stări și fără detaliile zonelor.

Depanare

Nicio stare în TapHome

Verificați că PAI rulează și publică (mosquitto_sub … -t 'paradox/#'), că subiectul de bază și cheile se potrivesc exact și că MQTT_RETAIN este activat în PAI.

Armarea nu face nimic

Verificați că PAI și TapHome folosesc același broker și citiți răspunsul PAI în paradox/interface/command_status. Pe EVO armarea Sleep nu este disponibilă.

Eroare de modul „PAI reports offline”

PAI a pierdut centrala sau s-a oprit; consultați jurnalul PAI.

PAI nu se conectează la centrală

La SP5500+, SP6000+, SP7000+ și MG5050+ portul serial este blocat — cereți de la Paradox codul de deblocare sau conectați-vă printr-un IP150. Cât timp PAI este conectat printr-un IP150, închideți Insite Gold și BlueEye. Un IP150+ cu firmware 6.x și un IP180 nu permit conexiunea locală a PAI.

Dispozitive disponibile

Bridge MQTT Paradox PAI Modul
Variabile personalizate
baseTopic (string)Subiectul de bază PAI (MQTT_BASE_TOPIC în configurația PAI), implicit paradox
Enter the same value as MQTT_BASE_TOPIC in the PAI configuration as the import parameter PAI base topic.

Paradox PAI MQTT Bridge

Ascultător
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
Partiție Comutator cu mai multe valori

Starea unei partiții a centralei și armarea sau dezarmarea ei; Armare și Alarmă sunt doar afișate și nu trimit nimic

enum string
Valori / Stări: Dezarmat · Armat · Armat Stay · Armat Sleep · Armare · Alarmă
Variabilă: partitionKey — Cheia partiției așa cum o publică PAI în paradox/states/partitions/<cheie>, de exemplu Area_1

Partiție

Citirea stării comutatorului
RETURN(Mu);
Scrierea stării comutatorului
# 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
Ascultător
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
Zona 1 Contact reed Doar citire

Starea unei zone a centralei (deschisă sau închisă), cu avertizări pentru alarmă, sabotaj, baterie descărcată a unei zone wireless și ocolire

boolean
Variabilă: zoneKey — Cheia zonei așa cum o publică PAI în paradox/states/zones/<cheie>, de exemplu Front_door

Zona 1

Citire
RETURN(Rc);
Ascultător
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
Zona 2 Contact reed Doar citire

Starea unei zone a centralei (deschisă sau închisă), cu avertizări pentru alarmă, sabotaj, baterie descărcată a unei zone wireless și ocolire

boolean
Variabilă: zoneKey — Cheia zonei așa cum o publică PAI în paradox/states/zones/<cheie>, de exemplu Front_door

Zona 2

Citire
RETURN(Rc);
Ascultător
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
Zona 3 Contact reed Doar citire

Starea unei zone a centralei (deschisă sau închisă), cu avertizări pentru alarmă, sabotaj, baterie descărcată a unei zone wireless și ocolire

boolean
Variabilă: zoneKey — Cheia zonei așa cum o publică PAI în paradox/states/zones/<cheie>, de exemplu Front_door

Zona 3

Citire
RETURN(Rc);
Ascultător
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
Zona 4 Contact reed Doar citire

Starea unei zone a centralei (deschisă sau închisă), cu avertizări pentru alarmă, sabotaj, baterie descărcată a unei zone wireless și ocolire

boolean
Variabilă: zoneKey — Cheia zonei așa cum o publică PAI în paradox/states/zones/<cheie>, de exemplu Front_door

Zona 4

Citire
RETURN(Rc);
Ascultător
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
Ieșire PGM Comutator

Pornește sau oprește o ieșire programabilă (PGM) a centralei și îi afișează starea

boolean
Valori / Stări: ON · OFF
Variabilă: outputKey — Cheia ieșirii PGM așa cum o publică PAI în paradox/states/outputs/<cheie>

Ieșire PGM

Citirea stării comutatorului
RETURN(St);
Scrierea stării comutatorului
MQTTPUBLISH(baseTopic + "/control/outputs/" + outputKey, IF(St = 1, "on", "off"));
Ascultător
IF RECEIVEDMSG.TOPIC = baseTopic + "/states/outputs/" + outputKey + "/on"
    VAR payload := TOSTRING(RECEIVEDMSG.PAYLOAD);
    St := IF(payload = "True" OR payload = "1", 1, 0);
END
Conexiune: Packet Parser → MQTT
Îmbunătățiri posibile (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.

Surse

  • 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

Ați găsit o problemă la acest șablon de dispozitiv?

Spuneți-ne ce nu funcționează, ce lipsește sau cum ar trebui să se comporte șablonul. Feedbackul dvs. ne ajută să păstrăm catalogul corect.

Comunitate — neverificat

Doriți să folosiți acest șablon în TapHome Core?

Deschideți acest șablon în Customer Portal pentru a-l aplica într-una dintre locuințele dvs. sau pentru a propune o îmbunătățire și a o trimite înapoi în catalog.

Deschideți în portal