Skip to main content

Legrand adorne LC7001

Local-LAN driver for the Legrand adorne LC7001 whole-house lighting hub. Talks the LC7001 JSON protocol on TCP port 2112 — the same channel the Legrand Home+ Control mobile app uses. Enumerates zones (Room Controllers, Switches, Dimmers, Outlets), sets power / dim level, and folds hub-pushed change events onto the corresponding GEM zone attributes. Scenes stored in RAM on the hub can be triggered by ID.

No cloud round-trip. If the LC7001 and the GEM controller are on the same subnet, control latency is under 100 ms even on large deployments.

Prerequisites

  • LC7001 commissioned via the Legrand Home+ Control app and reporting online in the app.
  • The LC7001 given a reserved DHCP lease or a static IP — the GEM device row stores an IP, not a hostname.
  • Optional: if the installer set a system password in Home+ (Settings → Hub → Password), capture it now. It is the value passed to the driver as password. Default installs have no password.
  • TCP 2112 reachable from the GEM controller. On the same subnet by default; if the hub sits behind a subnet boundary, open 2112/tcp on the intervening firewall.

Setup

  1. Get the LC7001 IP from your router or from the Home+ app → Settings → Hub.
  2. In GEM, open Admin → Devices → Add Device and pick driver legrand_adorne_lc7001.
  3. Enter ip. Leave port on 2112 unless you have a TCP proxy in front of the hub.
  4. If a system password is set on the hub, paste it into password. Otherwise leave blank.
  5. On connect the driver runs ListZones, then ReportZoneProperties for every zone id to prime state. Look for the log line legrand lc7001 discovered zones: <id> <name> <N>.
  6. Run the list_zones command to see every discovered zone. Each row is {address, name, power, power_level}.
  7. Create one GEM zone per LC7001 zone. Use the numeric ZID as the GEM zone address.

Attribute reference

Device (required)

AttributeDescription
ipLAN IP of the LC7001. Reserve a DHCP lease.

Device (optional)

AttributeDefaultDescription
port2112LC7001 protocol port. Hardcoded in firmware.
password(blank)Home+ system password. Required only if the installer set one; the driver satisfies the hub's MD5 challenge automatically when present.
default_ramp_rate0RampRate value passed on set_level (0 = instant, higher = slower crossfade). Ignored by switch and outlet zones.
request_timeout5000 msPer-request timeout on ListZones, ReportZoneProperties, SetZoneProperties.

Zone

AttributeDescription
address (required)LC7001 zone id (ZID) as a small integer, e.g. 1, 2, 17. Run list_zones to enumerate.

Zone address format

Zone addresses are numeric ZIDs exactly as the hub reports them, as strings — "1", "17". Do not use the hub's user-facing zone name; it is not a stable identifier.

Commands

CommandArgsNotes
onaddressSetZoneProperties with Power=true.
offaddressSetZoneProperties with Power=false.
set_leveladdress, levelPowerLevel 0..100. level==0 implicitly sets Power=false; level>0 implicitly sets Power=true. RampRate is added from default_ramp_rate when > 0.
get_statusaddressReportZoneProperties for one ZID.
list_zonesEnumerate all zones (returns [{address, name, power, power_level}]).
list_scenesEnumerate RAM scenes on the hub.
trigger_scenescene_idFire a RAM scene by numeric ID.
raw_commandservice, bodyEscape hatch: send an arbitrary Service with body (JSON object) merged in. The driver adds ID.

State surfaced onto the zone

When the hub pushes a ZonePropertiesChanged event (or the driver polls with get_status):

Zone attributeHub propertyNotes
statePoweron / off.
levelPowerLevelInteger 0..100. Written even on switch/outlet zones so debugging is easier.
Device attribute hub_macBroadcastMemory.MACCaptured once on the initial BroadcastMemory hello frame.

Known limitations

  • Single active client — the LC7001 does not gracefully share a session with the Home+ app; state can drift briefly when both are connected. Prefer commissioning in Home+ and delegating day-to-day control to GEM.
  • Zone type is not always reported. On older firmware, the hub does not label a zone as switch vs. dimmer vs. outlet. The driver treats PowerLevel == 0 / 100 as switch-like and everything else as dimmer-like; if a zone type matters to your macro, set an integrator-visible device_type_hint on the GEM zone.
  • Scene authoring is out of scope. trigger_scene fires a RAM-stored scene by ID only. Create and edit scenes in Home+.
  • RampRate is best-effort. Some dimmer models ignore it, and the hub does not report back which do.
  • No mesh discovery. The LC7001 does not auto-discover newly-paired devices without user pairing through Home+.

Troubleshooting

SymptomCheck
Socket connect refusedThe hub is unreachable on 2112 — check IP, firewall, and hub power. After a power-cycle the hub takes ~60 s to bring up the TCP listener.
Hub sends a Hello Challenge and the driver disconnectsA system password is set on the hub but password is unset (or wrong) on the device. Get the value from Home+ → Settings → Hub → Password.
list_zones returns an empty listThe hub has no commissioned zones. Add zones in Home+ first — the LC7001 does not auto-discover.
Wall-switch presses do not update GEM stateThe hub only pushes ZonePropertiesChanged for changes that originated inside the mesh. Switches on directly-wired loads (no adorne network module) are invisible to the hub.
set_level lands but the zone stays offZone was off before the level write and the dimmer requires an explicit Power=true. The driver already includes it when level > 0 — if the behavior persists, the dimmer model is treating PowerLevel as a floor, not a target. Send on first, then set_level.

A protocol-level Legrand adorne integration overview under Integrations is pending.