The bridge wants a certificate, and it wants yours too
Controls Lutron Caseta over the bridge's own LEAP protocol — mutually authenticated TLS, with the legacy telnet protocol kept behind the same interface for hardware that cannot do it.
Not in the HomeSeer store yet — running here daily, and heading for the store as a beta.
Lutron Caseta is genuinely good hardware, and the bridge speaks a protocol called LEAP directly on the local network. Talking to it that way means no cloud round trip and no dependence on somebody else's service staying up — a lesson the Wemo work made vivid.
The protocol
LEAP is newline-delimited JSON over mutually authenticated TLS on port 8081. Mutual being the operative word: the bridge presents a certificate and demands one back, which you obtain by pairing — a process that is exactly as entertaining as it sounds the first time and completely uneventful afterwards.
The message shapes were captured from a live bridge running LEAP 1.123 and recorded in the repository as a baseline file. Any change gets validated against that capture rather than against my memory of what the bridge said last month.
Two transports, deliberately
Lutron's older Integration Protocol is plain telnet on port 23. It is less capable and long superseded, and it is still supported here — behind the same interface as LEAP, so that nothing above that interface is allowed to know which one is in use.
The reason is not nostalgia. Some firmware and hardware combinations cannot do LEAP pairing at all, and a plugin that supports only the modern path simply does not work for those people, with no useful diagnostic. Two transports behind one interface costs an afternoon; explaining to somebody that their bridge is unsupported costs more.
Scenes and schedules, from the bridge
Scenes are discovered from the bridge's own virtual-button list rather than reinvented in the plugin, so a scene set up in the Lutron app is the same scene HomeSeer fires. There is one source of truth and it is not this code.
Schedules are listed too, which matters mostly for the moment a light changes and you are certain nothing in HomeSeer did it.
The lesson it paid for
Device addresses cannot change after release. Every event a user has written points at one, and an address scheme that shifts orphans all of them — silently, because an event pointing at nothing does not throw, it simply never fires again.
This plugin learned that the expensive way. The AV plugin's addressing was consequently settled before a single line depended on it, with a comment naming exactly which earlier project paid for the rule.