Hi all,
Super cool to see this post — I’ve been wrestling for a while with how to take my own attempt at this further. I’m inexperienced when it comes to developing apps, but I have to say: it’s a wonderfully fun hobby, if a “slightly” time-consuming one.
My RM5 Plus adventure
A very kind community member has lent me an RM5 Plus so I could hook my own app, candlelight, up to it — thanks again Danny! The idea was to chain two flow cards together, so that something like a pronto hex string can travel from my (or a) app over to the Broadlink app and out into the world.
@Sharkys — I’ve made a fork (branch bugfix/rm5-plus), but no clue whether I did that correctly. The app works… but it still needs to be tested properly, and since I’m new to this whole forking thing I genuinely have no idea what the best way forward is, so I’d love your thoughts. In short, what’s in there:
- Auto discovery, unicast-first so it also works where broadcasts are blocked — which is exactly what happens under Docker while debugging with the CLI (
homey app run). There’s an IP override viaenv.jsonas a fallback. - The room-assignment problem. Once you assign a room in the Broadlink app, the device stops responding and the app never told you why. It turns out the hello/discovery response carries a lock byte in its payload (packet offset
0x7F,0x01= locked). Discovery now reads that flag, and instead of silently failing the device raises a warning — with a repair function to go with it. - IR/Pronto. I only just spotted that the sending side is now covered in your main branch and works in test version 3.1.69 of 15 July 2026 — nice! What I added on top of that is sending RC5 and NEC, and exposing the raw Broadlink hex on learn as well, with the idea that users can share codes through the community. Broadlink hex in Base64 format seems to be the default format in Home Assistant. FYI: a tool like Sensus makes it easy to convert between the formats, and to Tuya as well. My conversion sits in
IrConverter.js, separate from the driver, so it’s reusable. - TypeScript. I’ve migrated the protocol layer (
Communicate.ts, plus a typed packet model underlib/BroadLink/protocol) as this seems to be more sticked. - SVGs. Because apparently my idea of relaxation is questionable, I straightened them all out while I was at it.
- General clean-up, to the point where it also passes
homey app validate --level verified— stricter than this app actually needs, but it seemed a sensible bar to work towards.
If it helps, I’m happy to cut this into separate pull requests so the small ones can go in quickly and we can discuss the big one on its own. Just let me know what works best.
@Sharkys / @Guust_Flater — a question for you both: would it make sense to pull the protocol layer out into its own npm-package, so that both apps could depend on the same implementation instead of each maintaining their own? Right now Guust uses kiwicam-broadlinkjs-rm, Sharkys has a fully custom stack, and I’ve now written a third — which is more or less exactly the fragmentation this thread has been discussing, just one level further down. Curious whether you two think that’s worth doing, or more trouble than it’s worth.
@Guust_Flater — I started building a data model for the protocol. The basics are in place, but I got stuck halfway: the protocol definitions I could find online fall a bit short for the newer models, and writing a new lib while decoding the protocol at the same time was tough going. So I started a separate repo instead, based on a fork of an existing broadlink-dissector project, and wrote fairly elaborate protocol descriptions in markdown files there. Then I got slightly carried away by my own enthusiasm and hyperfocus, and somehow ended up in Broadlink’s cloud protocol and backend. That’s roughly where I ran out of steam, as other priorities took over. Today I read myself back into it and I’m properly up to speed again. So I’d be very happy to co-develop with you guys, if that’s something you’re open to.
@Doekse — where’s the best place to drop a few feature requests for Homey-native things? Two examples: you can send Pronto hex natively, but not from a satellite. And it would be absolutely sexy if other (non-Homey) devices could act as IR/RF satellites too. As came up earlier in this thread, Homey hasn’t had an IR receiver since the 2023 model and native local learning is not an option, an easy way to share IR/RF-codes like via proton hex is very welcome.
Anyway, here’s what I’ve been playing with (all on GitHub), in the order it happened:
- candlelight — a lightweight Homey Pro app to control IR-based LED candle lights
- com.broadlink — my fork of the Broadlink app
- broadlink-dissector — a Wireshark LUA dissector for the Broadlink protocol
