Skip to main content

Risco smart home integration, free and open source

Risco integration for Gladys Assistant

Risco LightSYS, Agility and WiComm alarms, locally over your network.

This integration connects a Risco alarm panel to Gladys Assistant, locally on your network (TCP), without the Risco cloud.

Never tested on a real panel. The protocol comes from the pyrisco library (the one of the Home Assistant Risco integration), ported to JavaScript and checked against a simulated panel only. Try it first while at home, with the panel disarmed, and report what goes wrong.

Unofficial integration, not affiliated with Risco Group.

Supported panels​

The types pyrisco knows: Agility 4 (RW032), Agility (RW132), WiComm (RW232), WiCommPro (RW332), LightSYS (RP432), LightSYS+ (RP432MP), LightSYS Air (RW432MPV), ProSYS Plus / GT Plus (RP512). The panel needs a network (IP) module that Gladys can reach.

What you get​

  • Risco panel: connected or not, mains power, battery low, box tamper.
  • One device per partition (named after the panel):
    • a read-only State: disarmed, armed (away), armed (stay), armed (group);
    • Alarm in progress and Ready to arm;
    • three buttons: arm away, arm stay, disarm.
  • One device per zone (named after the panel): open or closed (or motion, smoke, leak, depending on the kind you choose), alarm, bypassed, battery low, and two buttons: bypass, unbypass.
  • Scene triggers: alarm triggered (with the zone when the panel tells it), partition armed (mode, asked by Gladys or not), partition disarmed.
  • Scene actions: arm (away or stay), disarm.

No command is a switch: a "turn everything off" from a voice assistant, HomeKit or a scene cannot disarm the alarm. The states are read-only, the commands are buttons.

Configuration​

  1. Address of the panel: the IP address of its network module. Give it a fixed address in your router.
  2. Port: 1000 unless your installer changed it.
  3. Access code of the panel: the remote access code (5678 by default), not a keypad user code. It is a secret field: kept by Gladys in its database, never shown again in the interface, sent only to the panel. It never appears in the logs. See also "The access code" below.
  4. Kind of the zones (optional), for example: 2:motion, 5:smoke, 7-9:motion. Kinds: opening (the default), motion, smoke, leak. Changing the kind of a zone already created in Gladys adds a new feature and keeps the old one (and its history): delete the old one by hand if you no longer want it.
  5. Safety: see below.
  6. Language of the names: French or English.

The Test the connection button connects at once when no connection is in progress, else waits for the one in progress (with "discovery in progress (zone x/n)" if it takes long), and tells the model, the state of the partitions and the number of zones.

The first connection reads every possible zone of the panel (50 for a LightSYS, 512 for a LightSYS+): it can take from a few seconds to a minute. The devices then show in the Discovery tab. Every reconnection reads all the zones again the same way, and the commands are refused meanwhile ("nothing was sent").

The access code​

  • The access code alone is enough to disarm: the panel asks for no user code for the commands it receives over the network.
  • It travels on your local network only scrambled, not protected: the scrambling is undone with the id the panel gives to whoever asks. Any device of your network listening to the traffic can read it.
  • With the default code 5678, any device of your network can control the panel, disarming included, without Gladys. Have your installer change it.
  • Protect your network (a separate guest Wi-Fi for the devices you are not sure of).

Safety​

  • Arming is allowed by default ("Allow arming from Gladys").
  • Disarming is off by default. Once checked, every Gladys user, every scene and the Gladys mobile app can disarm, without any code. Allow it only if your Gladys is well protected (accounts, remote access). Disarming also silences an alarm in progress.
  • Bypassing a zone is off by default: a bypassed zone no longer triggers the alarm.
  • The options are read again right before every send: an option unchecked while a command waits its turn stops that command.
  • Before every command, the integration reads the state from the panel and decides on it, never on what it holds in memory. Commands go one at a time.
  • A command that cannot leave in time (slow panel, state unreadable) is refused with "nothing was sent". A command that left without a clear answer from the panel (no answer, an unexpected or ambiguous one) is reported "sent, without confirmation" and the state is read again two seconds later: it is never reported "not sent". Only an error answer of the panel (N.., B..) is reported "refused".
  • A bypass is a toggle on the panel: once one is sent (accepted or not confirmed), the zone takes no other bypass until the panel shows the result (30 s at most).
  • Every command, sent or refused, is written in the integration logs.

Connection and refused code​

  • The panel accepts one local connection at a time: stop any other software connected to it (Home Assistant, a Risco bridge). If the panel closes the connection right after each opening, the integration says so and spaces its tries (5 minutes).
  • After a cut, the new tries are spaced: 10 s, 30 s, 1 min, 2 min, then every 5 minutes. Two connections are always at least 6 seconds apart (the time the panel needs to reset).
  • If the panel refuses the access code, or closes the connection while checking it (twice in a row), the integration stops and does not try again by itself, even after a restart (a wrong code tried in a loop could lock the panel). Fix the code then save, or click "Test the connection". The file /data/risco-state.json keeps only the address concerned, never the code.

Known limits​

  • Never tested on a real panel (see above); the status letters read are the ones pyrisco documents.
  • Local only: the Risco cloud is not supported in this version. Depending on your panel's setup, the Risco cloud connection and the local one may get in each other's way (not checked).
  • Arming by group (A to D) is shown, not commanded.
  • An alarm already in progress when the integration starts fires no scene (only the changes seen do).
  • Zone names are read as UTF-8; other encodings of the panel may give replaced characters.

Privacy​

Everything stays on your network: the integration only talks to the panel.

Licence​

Apache-2.0. Protocol logic ported from pyrisco (MIT, On Freund): see THIRD_PARTY_NOTICES.md.

Configuration settings​

These are the settings Risco asks for in its configuration screen in Gladys.

SettingTypeRequiredDescription
Your Risco panelsectionNoFor Risco LightSYS, LightSYS+, Agility, WiComm and ProSYS Plus alarm panels with a network (IP) module, on your network, without the Risco cloud: the state of each partition (disarmed, armed away or stay, in alarm, ready), the zones (open or closed, bypassed, alarm, battery), the panel troubles (mains, battery, tamper), arm and disarm buttons, scene triggers. The panel accepts one local connection at a time: stop any other software using it (Home Assistant, a Risco bridge). Never tested on a real panel. Unofficial, not affiliated with Risco Group.
Address of the panelstringYesThe IP address of its network module (give it a fixed address in your router).
PortnumberNo1000 unless your installer changed it.
Access code of the panelsecretYesThe remote access code of the panel (5678 unless your installer changed it), not a keypad user code. It alone lets any device of your network control the panel, disarming included: with 5678, have your installer change it. It travels on your network only scrambled, not protected. Kept by Gladys in its database, never shown again, sent only to the panel.
Kind of the zonesstringNoOptional: how the zones show in Gladys, e.g. "2:motion, 5:smoke, 7-9:motion" (opening, motion, smoke, leak). A zone not listed is an opening. Names come from the panel.
SafetysectionNoAnyone who can control the devices in Gladys (dashboard, scenes, the Gladys app) can use the alarm through this integration. Arming is allowed by default. Disarming and bypassing zones are off by default: allow them only if your Gladys is well protected. Every command is written in the integration logs; the access code never is.
Allow arming from GladysbooleanNo
Allow disarming from GladysbooleanNoOnce checked, every Gladys user, every scene and the Gladys mobile app can disarm, without any code: the panel asks for no user code, the access code is enough. Disarming also silences an alarm in progress.
Allow bypassing zones from GladysbooleanNoA bypassed zone no longer triggers the alarm.
Language of the namesselectNoUsed for the names of the devices and features added from now on, and for the partition state.

How to install Risco in Gladys​

  1. In Gladys, open Integrations: Risco appears in the catalog, next to the native integrations, with a community badge.
  2. Click Install. Gladys pulls the Docker image (ghcr.io/lm1lc3n7/gladys-risco:0.1.1), starts it in a sandbox isolated from the core, and generates the integration's interface (devices, discovery and configuration).
  3. Open the Configuration screen of the integration, fill in the settings, and save.
  4. You can also install it directly from its repository URL: https://github.com/LM1LC3N7/gladys-risco.

Risco requires Gladys >=5.1.0. The catalog inside Gladys refreshes every hour, so a new version becomes available at most one hour after its release.

Not running Gladys yet? It is free and open source: follow the installation guide to get started.

About external integrations​

Risco is an external integration: a community integration packaged as a Docker container and published on GitHub, that Gladys installs in one click and runs in a sandbox isolated from its core. It is published and maintained by LM1LC3N7, not by the Gladys core team.

Subscribe to the Gladys Assistant newsletter

A few emails per month about new releases and project news. Sent by Pierre-Gilles Leymarie, founder of the project. Unsubscribe anytime 🙂