ComelitFire
Comelit Logifire 41CPE118 and 41CPE212 are addressable fire detection panels, with up to 8 loops of 250 devices each and up to 200 zones.
The integration with HSYCO is accomplished via a standard MODBUS TCP/IP connection. This I/O Server was developed following the Comelit documentation "Description of the modbus registers - Logifire 41CPE118, 41CPE212", version 1.10.1, and tested with panel firmware 1.1.9.
Panel firmware 1.1.9 or later is required.
Communication
The panel must be connected to the ethernet network and a valid IP address must be assigned to it. The panel listens to TCP port 502 for MODBUS requests. Please refer to the panel manual for detailed instructions about the network configuration.
The MODBUS base address of the panel must be set to 0.
The panel closes the connection after every single MODBUS command, so the time needed to read the panel status is dominated by the network round trip time rather than by the number of registers read. To keep each polling cycle short on large systems, the I/O Server reads the panel in blocks, within a time budget per cycle, and completes the reading of the loop devices over the following cycles.
HSYCO Configuration
Add a ComelitFire I/O Server in the I/O Servers section of the Settings and set its parameters:
Communication
- Address: IP address of the Comelit Logifire panel
- Port: TCP/IP port for MODBUS communication (default 502)
High Availability
- Shutdown when inactive: defaults to true.
Options
| ID | Default | Values | Description |
|---|---|---|---|
| gui | true | true | enable the UISET actions |
| false | disable UI support | ||
| startupevents | true | true | generate IO events also during the driver’s start-up phase |
| false | start generating events only after HSYCO is aligned with the current status of the system, that is after the first complete read of the panel status, zones and loop devices | ||
| unitid | 1 | 0 ... 255 | MODBUS unit id of the panel |
| zonesnumber | 200 | 1 ... 200 | set to the highest zone number configured in the panel |
| devicesnumber | 250 | 1 ... 250 | set to the highest device address configured on any loop. Devices are not necessarily at contiguous addresses, so the value must be the highest address in use, not the number of devices. E.g. if loop 1 has devices at addresses 2, 3 and 65, and loop 2 has a device at address 10, set devicesnumber = 65 |
| detectors | true | true | read the status of the loop devices |
| false | do not read the status of the loop devices. As the device status is the only information that reports which devices are present, the inputsoutputs, dust and temperature options are ignored and handled as false | ||
| inputsoutputs | true | true | read the status of the inputs and outputs of the loop devices |
| false | do not read the inputs and outputs | ||
| dust | false | true | read the dust level of the optical detectors |
| false | do not read the dust level | ||
| temperature | false | true | read the temperature of the thermal and multi-criteria detectors |
| false | do not read the temperature | ||
| pollinterval | 2500 | 100 ... 30000 | time interval in milliseconds added at the end of each driver loop cycle, when there are no pending reads. At each cycle the I/O Server checks if the panel status changed: the panel requires this check every 3 seconds, and the time taken by the check itself adds to this interval, so values above the default are not recommended. While reading the loop devices the check is repeated at this same interval, limited to 2500 ms |
| readpause | 0 | 0 ... 1000 | time interval in milliseconds added after each MODBUS read. Use this parameter carefully: on systems with many loops, setting a value close to 1000 ms may significantly extend the time needed to read the whole system |
| refreshinterval | 60 | 5 ... 3600 | time interval in seconds between two complete reads of the panel status, zones and loop devices, performed even when the panel does not report any change |
| slowinterval | 600 | 30 ... 86400 | time interval in seconds between two reads of the dust level and temperature |
| maxlooptime | 5000 | 1000 ... 15000 | maximum time in milliseconds spent reading the panel in each driver loop cycle. The reads that do not fit in a cycle are continued in the following ones |
| blocksize | 50 | 1 ... 125 | maximum number of MODBUS registers requested with a single read |
| swapbytes | false | true | swap the two bytes of each MODBUS register. Only to be used if the panel returns the registers with the least significant byte first, a condition reported in the log as an unexpected value of register 596 |
| false | standard MODBUS byte order |
When the panel reports a status change, the I/O Server reads the panel status and all the zones first, before continuing with the loop devices. The connection datapoint is set to online as soon as the panel status and all the zones have been read, while the loop devices of a large system may take a few more cycles to be read for the first time.
After a communication error the connection datapoint is set to offline, and it goes back to online only after the panel status and all the zones have been read again. A complete read of the panel always follows.
All the zones up to zonesnumber and all the devices found on the loops generate datapoints: a fully loaded panel, with 8 loops of 250 devices and 200 zones, generates around 29000 datapoints. Use the zonesnumber, devicesnumber, inputsoutputs, dust and temperature options to limit them to what is actually needed.
Datapoints
In the following table, <n> is the zone number (1 ... 200), <l> the loop number (1 ... 8), <d> the device address on the loop (1 ... 250) and <c> the input or output channel (1 ... 4).
Loop device datapoints are only generated for the devices that are present in the panel configuration. If a device, or its whole loop, is no longer reported by the panel, its status datapoint is set to 0, its description to "not present" and its alarm, fault and disabled datapoints to 0, while its inputs, outputs, dust and temperature datapoints keep their last value.
The writable datapoints only accept the values listed in the table: commands with any other value, or addressed to a zone, loop, device or channel out of range, are ignored and reported in the log.
| ID | Value | R/W | Description |
|---|---|---|---|
| connection | online | R | connection established |
| offline | R | HSYCO can't connect to the panel | |
| version | <n> | R | panel version, as a decimal number |
| status | 0 ... 8 | R | panel status numeric value. 0=idle, 1=scanning, 2=system error, 3=saving, 4=night mode, 5=day mode, 6=scanning, 7=first step delay, 8=second step delay |
| status.description | idle | R | panel idle |
| scanning | R | panel scanning | |
| system error | R | panel in system error | |
| saving | R | panel saving the configuration | |
| night mode | R | panel in night mode | |
| day mode | R | panel in day mode | |
| first step delay | R | first step delay running | |
| second step delay | R | second step delay running | |
| unknown | R | status value not documented | |
| command.reset | 1 | W | panel reset |
| command.evacuate | 1 | W | evacuate |
| command.silence.buzzer | 1 | W | silence buzzer |
| command.silence.sounder | 1 | W | silence sounders |
| command.delay.override | 1 | W | delay override |
| command.reset.all | 1 | W | reset all |
| command.evacuate.all | 1 | W | evacuate all |
| command.silence.buzzer.all | 1 | W | silence buzzer all |
| command.silence.sounder.all | 1 | W | silence sounders all |
| 0 | R | the command datapoints are set to 1 when the panel has accepted the command, and back to 0 after 1 second | |
| daymode | 1 | W | enable day mode |
| 0 | W | disable day mode. The current mode is reported by the status datapoint | |
| sounder.on | 0 / 1 | R | sounders on |
| buzzer.on | 0 / 1 | R | buzzer on |
| sounder.delay.on | 0 / 1 | R | sounder delay on |
| sounder.delay.started | 0 / 1 | R | sounder delay started |
| firebrigade.on | 0 / 1 | R | fire brigade output on |
| firebrigade.delay.on | 0 / 1 | R | fire brigade output delay on |
| firebrigade.delay.started | 0 / 1 | R | fire brigade output delay started |
| fireprotection.on | 0 / 1 | R | fire protection output on |
| fireprotection.delay.on | 0 / 1 | R | fire protection output delay on |
| fireprotection.delay.started | 0 / 1 | R | fire protection output delay started |
| fault.output.on | 0 / 1 | R | fault output on |
| zone.disabled | 0 / 1 | R | at least one zone disabled |
| sounder.disabled | 0 / 1 | R | sounder output disabled |
| 1 | W | disable sounder output | |
| 0 | W | enable sounder output | |
| firebrigade.disabled | 0 / 1 | R | fire brigade output disabled |
| 1 | W | disable fire brigade output | |
| 0 | W | enable fire brigade output | |
| fireprotection.disabled | 0 / 1 | R | fire protection / extinguish output disabled |
| 1 | W | disable fire protection / extinguish output | |
| 0 | W | enable fire protection / extinguish output | |
| fault.output.disabled | 0 / 1 | R | fault output disabled |
| 1 | W | disable fault output | |
| 0 | W | enable fault output | |
| common.fire | 0 / 1 | R | common fire |
| common.prealarm | 0 / 1 | R | common prealarm |
| common.fault | 0 / 1 | R | common fault |
| common.system.fault | 0 / 1 | R | common system fault |
| common.disable | 0 / 1 | R | common disable |
| common.test | 0 / 1 | R | common test |
| common.sounder.fault | 0 / 1 | R | common sounder fault |
| common.fireprotection.fault | 0 / 1 | R | common fire protection fault |
| common.firebrigade.fault | 0 / 1 | R | common fire brigade fault |
| system.silence | 0 / 1 | R | system silence |
| evacuate | 0 / 1 | R | evacuate |
| ac.loss | 0 / 1 | R | AC power loss |
| battery.low | 0 / 1 | R | battery low |
| battery.loss | 0 / 1 | R | battery loss |
| led.fire.alarm | off / on / blink | R | fire alarm LED. All the LED datapoints are set to "unknown" if the panel returns a value that is not documented |
| led.prealarm | off / on / blink | R | prealarm LED |
| led.general.fault | off / on / blink | R | general fault LED |
| led.system.fault | off / on / blink | R | system fault LED |
| led.system.silence | off / on / blink | R | system silence LED |
| led.delay | off / on / blink | R | delay LED |
| led.disable | off / on / blink | R | disable LED |
| led.test | off / on / blink | R | test LED |
| led.technical | off / on / blink | R | technical LED |
| led.fire.confirmed | off / on / blink | R | fire confirmed LED |
| led.fault.output.disabled | off / on / blink | R | fault output disabled LED |
| led.fireprotection.confirmed | off / on / blink | R | fire protection confirmed LED |
| led.fireprotection.fault | off / on / blink | R | fire protection fault LED |
| zone.<n>.status | 0,1,2,5 | R | zone <n> status numeric value. 0=normal, 1=prealarm, 2=alarm, 5=fault. Any other value returned by the panel is reported as is, with the normal, prealarm, alarm and fault datapoints all set to 0 |
| zone.<n>.normal | 0 | R | zone <n> is not in normal state |
| 1 | R | zone <n> is in normal state | |
| zone.<n>.prealarm | 0 | R | zone <n> is not in prealarm |
| 1 | R | zone <n> is in prealarm | |
| zone.<n>.alarm | 0 | R | zone <n> is not in alarm |
| 1 | R | zone <n> is in alarm | |
| zone.<n>.fault | 0 | R | zone <n> is not faulty |
| 1 | R | zone <n> is faulty | |
| zone.<n>.disabled | 0 | R | zone <n> is enabled |
| 1 | R | zone <n> is disabled | |
| 1 | W | disable zone <n> | |
| 0 | W | enable zone <n> | |
| loop.<l>.status | 0 ... 4 | R | loop <l> status numeric value. 0=not present, 1=normal, 2=loop fault, 3=type error, 4=new device |
| loop.<l>.description | not present | R | no loop present at this slot |
| normal | R | normal operation of the loop | |
| loop fault | R | loop fault | |
| type error | R | a device on the loop has a wrong type selected | |
| new device | R | a new device on the loop has not been saved | |
| unknown | R | status value not documented | |
| loop.<l>.devices | <n> | R | number of devices connected to loop <l> |
| loop.<l>.device.<d>.status | <n> | R | device status numeric value, see the description datapoint below |
| loop.<l>.device.<d>.description | not present | R | the device was present and is no longer reported by the panel (0x00) |
| new | R | new device, not active (0x01) | |
| alarm | R | alarm or prealarm (0x02) | |
| device fault | R | device fault (0x03) | |
| type error | R | type error (0x04) | |
| double address | R | double address (0x05) | |
| normal | R | normal (0x06) | |
| chamber fault | R | chamber fault (0x07) | |
| clean me now | R | the detector needs cleaning (0x08) | |
| drift alert | R | drift alert (0x09) | |
| signal blockage | R | signal blockage (0x0A) | |
| hi signal | R | high signal (0x0B) | |
| input fault | R | input fault (0x0C) | |
| output fault | R | output fault (0x0D) | |
| power fault | R | power fault (0x0F) | |
| gas alarm | R | gas alarm (0x10) | |
| panic alarm | R | panic alarm (0x11) | |
| input/output fault | R | input/output fault (0x12) | |
| output type error | R | output type error (0x13) | |
| disabled | R | device disabled (0x80) | |
| unknown | R | status value not documented | |
| loop.<l>.device.<d>.alarm | 0 | R | device not in alarm |
| 1 | R | device in alarm, prealarm, gas alarm or panic alarm. The panel reports alarm and prealarm of a device with the same value | |
| loop.<l>.device.<d>.fault | 0 | R | device not faulty |
| 1 | R | device in device fault, type error, double address, chamber fault, input fault, output fault, power fault, input/output fault or output type error. The clean me now, drift alert, signal blockage and hi signal conditions are only reported by the status and description datapoints | |
| loop.<l>.device.<d>.disabled | 0 | R | device enabled |
| 1 | R | device disabled | |
| 1 | W | disable detector | |
| 0 | W | enable detector | |
| loop.<l>.module.<d>.disabled | 1 | W | disable module |
| 0 | W | enable module | |
| loop.<l>.device.<d>.input.<c> | normal | R | input <c> in normal condition |
| active | R | input <c> active | |
| break | R | input <c> line break | |
| short | R | input <c> line short circuit | |
| loop.<l>.device.<d>.output.<c> | normal | R | output <c> in normal condition |
| active | R | output <c> active | |
| break | R | output <c> line break | |
| short | R | output <c> line short circuit | |
| 1 | W | turn output <c> on. Channel 1 is the sounder channel | |
| 0 | W | turn output <c> off | |
| loop.<l>.device.<d>.dust | <n> | R | dust level of the optical detector, in percent. Only with dust = true |
| loop.<l>.device.<d>.temperature | <n> | R | temperature of the thermal or multi-criteria detector, in °C. Negative values are read as signed 16 bit numbers. Only with temperature = true |
Detectors and modules are enabled and disabled with two different MODBUS commands. The loop.<l>.device.<d>.disabled datapoint sends the command for detectors, while loop.<l>.module.<d>.disabled sends the command for modules. The module command is write only.
The value of the module command, as defined by the panel documentation, does not identify the module in a unique way for device addresses from 100 up: for instance loop 1 device 150 and loop 2 device 50 result in the same command. Verify the effect of loop.<l>.module.<d>.disabled on the panel before using it with these addresses.
User Interface
UISET Actions
| ID | Attribute | Value | Set to |
|---|---|---|---|
| connection | visible | true | when datapoint connection = offline |
| false | when datapoint connection = online | ||
| <datapoint_id>.1 | visible | true | when datapoint with ID <datapoint_id> has value '1'. Applies to the normal, prealarm, alarm, fault and disabled datapoints of zones and loop devices, and to the zone.disabled datapoint |
| false | when datapoint with ID <datapoint_id> has value '0' | ||
| <datapoint_id>.0 | visible | true | when datapoint with ID <datapoint_id> has value '0'. Same datapoints as above |
| false | when datapoint with ID <datapoint_id> has value '1' |
Release Notes
4.1.0
- initial release
Comelit and Logifire are registered trademarks of Comelit Group S.p.A.