Zettler fire alarm panels report their events, states and counters on a serial output. The Weble universal gateway Zettler driver listens to this output, decodes each line, and stores the result in addresses that can be logged, routed, used in logics or read through the API.
The driver is listen-only: it never sends anything to the panel, and writes to its addresses are refused.
The Zettler driver needs a licence on the gateway. Contact support@Weble.ch to enable it.
Connect the serial output of the panel to a serial interface of the gateway (built-in port or USB adapter). The serial parameters of the gateway must match the ones configured on the panel.
The driver opens the line with RTS/CTS hardware flow control and sets the RTS and DTR signals at connection. Data bits are fixed to 8. The text is decoded with code page 850, one frame per line.
The driver creates its addresses itself: %zettler:heartbeat and %zettler:lastMessageObject. Addresses cannot be inserted or imported by hand. They can be removed.
| Label | JSON Key | Description |
|---|---|---|
| Name | name | A descriptive name for this gateway instance. |
| Cluster ID | cluster | Cluster identifier. Use 0 for single-gateway setups. |
| Type | json.type | Keep serial: the driver reads the serial line only. The TCP value is not used by this driver. Default: serial. |
| Serial Port | json.serialPort | The serial interface, picked from the auto-complete list of detected USB/serial interfaces, or a device path. If the field is empty, the driver logs no serial port resolved and restarts. |
| Parity | json.serialPortParity | none, even or odd. Default: none. |
| BaudRate | json.serialPortBaudRade | 9600, 19200, 38400, 57600, 76800 or 115200. Default: 9600. The JSON key is spelled serialPortBaudRade. |
| Stopbit | json.serialPortStopBit | 1 or 2. Default: 1. |
| Heartbeat timeout | json.heartbeatTimeout | Time in milliseconds without any frame from the panel before %zettler:heartbeat goes to 0. Default: 60000. |
JSON example:
{
"serialPort": "/dev/ttyUSB0",
"type": "serial",
"serialPortBaudRade": 9600,
"serialPortParity": "none",
"serialPortStopBit": 1,
"heartbeatTimeout": 60000
}
All addresses start with %zettler:. They are read-only.
| Address | Value |
|---|---|
%zettler:heartbeat |
1 each time the panel sends HEARTBEAT. 0 when no frame at all is received during Heartbeat timeout. |
%zettler:lastMessageObject |
An object describing the last frame received, other than HEARTBEAT. |
Any frame restarts the heartbeat timeout. When it expires, the driver also logs heartbeat error. When frames come back, it logs heartbeat recovered.
The type property of %zettler:lastMessageObject tells which kind of frame was received.
| type | Panel output | Properties |
|---|---|---|
event |
A Cat <n> line followed by two data lines |
category, categoryName, flags, eventText, deviceAddress, deviceType, dateTime, sectorDescription, zoneDescription, pointDescription |
status |
STATUS <name> <value>, for example STATUS NETWORK YES |
name, value |
count |
COUNT <name> <value>, for example COUNT OLD_CO 0 |
name, value (a number when the value is numeric) |
unknown |
Any other line | raw: the line as received |
For an event, flags lists RESET, RESTART and CLEARING when these words appear on the Cat line. When only one data line arrives before the next Cat, STATUS or COUNT line, the event is still reported, with the properties of the missing line empty.
Event categories:
| category | categoryName |
|---|---|
| 0 | Information |
| 1 | Warning |
| 2 | Test Mode |
| 3 | Isolate |
| 4 | Fault |
| 5 | Supervisory |
| 6 | Pre-alarm |
| 7 | Gas Alert |
| 8 | Fire |
Listen to the panel through the peers API and react to fire events:
gateways.on('newValue %zettler:lastMessageObject', function(value, value_string, value_date){
if(value.type == 'event' && value.category == 8){
console.log('FIRE', value.zoneDescription, value.pointDescription, value.dateTime)
}
})
%zettler:lastMessageObject keeps only the last frame. Log the address to keep the history of the events.