Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

Python versions GitHub Actions Workflow Status PyPI version

pytexalarm

This repository contains python code to speak to (and impersonate) a Texecom alarm panel, via. the proprietary 'UDL protocol' over either UART serial or TCP ports. The project implements some of the functionality of Wintex, the manufacturer's windows-based configuration tool. It can dump the configuration from a panel, decode it and expose through a web browser.

Quickstart - Reading config from panel over IP

You will need the UDL Password for the alarm system, and either a IPCom or SmartCom installed (or some 3rd party ser2net compatible device) on your local network:

$ pip install pytexalarm
$ python -m pytexalarm.udlclient --password MYPASSWORD --host 192.168.1.243 --mem home.panel
$ python -m pytexalarm.webapp --mem home.panel

Then open up a web browser to http://localhost:8080 to view the panel config

Web screenshot

Advanced - Running a virtual panel

  1. Install Wintex (on linux works well with playonlinux wrapper)

  2. Setup a new 'Account' with these settings:

     Panel type:        Elite 24
     Software version:  4.x
     UDL password:      1234
     Network details:   127.0.0.1  port 10001
    
  3. start udl-server.py running:

     $ git clone https://github.com/shuckc/pytexalarm.git
     $ cd pialarm
     $ python3 -m venv venv
     $ . venv/bin/activate
     $ pip install -r requirements.txt
     $ python udl-server.py
     Panel type 'Elite 24    V4.02.01' with UDL password 1234 backed by file /home/chris/alarmpanel.cfg
     Serving UDL on ('::', 10001, 0, 0), ('0.0.0.0', 10001)
     Serving web interface on 10002
     (eval) >
    
  4. In wintex hit Connect -> Connect via. Network (127.0.0.1 on Port 10001). Wintex will prompt to reset the fake panel. You will see some output like:

     udl_server 0: connected
     Sending login prompt
     Recieved UDL login [49, 50, 51, 52]. Sending panel identification
     Configuration read addr=00649b sz=10 data=0x2f,0xfc,0x56,0x50,0x85,0x90,0x48,0x44,0x76,0x11,0x43,0x39,0xce,0xc4,0x19,0x76
     Configuration read addr=005d04 sz=10 data=0x57,0x1,0x7,0x94,0x71,0x49,0x45,0x5,0x9f,0xea,0x6c,0xe7,0xe7,0x1b,0xa8,0x64
     Configuration read addr=001678 sz=1 data=0x0
     Configuration read addr=001fca sz=7 data=0x0,0x0,0x0,0x0,0x0,0x0,0x0
     Configuration read addr=00167e sz=1 data=0x0
     Configuration read addr=005c55 sz=2 data=0x0,0x0
     (eval) >
    
  5. Open up a web browser to http://localhost:10002 to see the decoded panel configuration

Serial connection

It it not necessary to buy a SmartCom, Comm-IP, or Com300 board to use this software. You can use e.g. a FTDI USB-RS232 cable (5V), or with a breakout board and a few resistors, a FTDI 3.3V cable.

If your device has a built in hardware UART, e.g. a Raspberry Pi, this can be interfaced to the alarm panel with only a couple of resistors, plus a 12-15V DC to 5V DC power adapter to power it. In the hardware directory you can see how to connect it to the Texecom main board.

The COM port does not need to be configured as any particular device, the panel allows UDL access on all unconfigured ports by default.

Protocol

See captured examples and dissections of the "simple" protocol and the Wintex protocol.

This project is not affiliated with Texecom. The protocols were reversed engineered using a Salae Logic8 logic probe, and later by capturing traffic using the ser2net tool, and custom scripts to convert trace files to memory maps. See the protocol directory for these. For the fine details, a panel was emulated with udl-server.py and WinTex used to change settings individually. No author or contributor has signed the Texecom NDA agreement.

If you use the configuration system to change panel settings, this is done at your own risk. It is not beyond the realm of possibility that a panel might need NVM reset to recover or the use of a firmware flasher.

See also

  • Mike Stirling's @mikestir implementation of an Alarm Receiving Centre ARC, expecting messages over TCP, so requires e.g. ComIP communicator module
  • @kieranmjones who first freely documented the Cestron protocol
  • @stuartyio who runs the Selfmon site for Honeywell panels
  • Nexmo text-to-speech a very reliable and low cost way to send calls and SMS messages over IP
  • Telegram bot API for sending events to a chat group that can be setup on mobile phones.
  • Gw0udm's blog which details serial port connectivity information as well as COM3 and various communicator systems.
  • Leo Crawford's brute forcing of the UDL login.
  • RoganDawes' ESPHome_Wintex which can bridge Zone status to Home Assistant.
  • RoganDawes' Java WintexProtocol decoder

Release files for pytexalarm 0.1a2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pytexalarm 0.1a2
File Size Uploaded
pytexalarm-0.1a2.tar.gz 647.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pytexalarm 0.1a2
File Interpreter ABI Platform
pytexalarm-0.1a2-py3-none-any.whl Python 3 none any Details

Total release size: 675.0 kB

Release files / pytexalarm-0.1a2.tar.gz

Download URL pytexalarm-0.1a2.tar.gz
Size 647.8 kB
Tags Source
SHA-256 checksum
How to use checksums
1cc769c26981f47cae920034571540d7e817e6feb5dc0ae1ec9283c0d5319a32
BLAKE2b-256 checksum
How to use checksums
6fc87d6ff4f3d12e57ff29a68162e50aff17d00a89e1ed4640c51a96bc616e90
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.9

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 22, 2025.

Transparency log

Release files / pytexalarm-0.1a2-py3-none-any.whl

Download URL pytexalarm-0.1a2-py3-none-any.whl
Size 27.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
63b20fa584480aa8e6f93086e19a0f1c620a09bd095d3ccb572ce9f64fb273f7
BLAKE2b-256 checksum
How to use checksums
edcfe9d44d23fd72d8e03fd28938447d8b9d4f07c2768896246e7d714454692a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.9

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 22, 2025.

Transparency log

Release history Release notifications | RSS feed

0.1b0

2 release files

This release

0.1a2 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page