In theory HDMI’s CEC feature is great, as it gives HDMI devices the ability to do useful things such as turning on multiple HDMI devices with a single remote control. Of course, such a feature will inevitably feature bugs. A case in point is the Nvidia Shield which has often been reported to turn on other HDMI devices that should stay off. After getting ticked off by such issues one time too many, [Matt] decided to implement a network firewall project to prevent his receiver from getting messed with by the Shield.
The project is a Python-based network service that listens for the responsible rogue HDMI-CEC Zone 2 requests and talks with a Denon/Marantz receiver to prevent it from turning on unnecessarily. Of course, when you want these Zone 2 requests to do their thing you need to disable the script.
That said, HDMI-CEC is such a PITA that people keep running into issues like these over and over again, to the point where people are simply disabling the feature altogether. That said, Nvidia did recently release a Shield update that’s claimed to fix CEC issues, so maybe this is one CEC bug down already.

For a hardware solution, you can simply tape over the CEC pin in your hdmi cable, or buy a cheap “cec blocker” adapter which lacks the pin.
Thank you. I will try than for my LG TV / LG Bluray player. The player turns on, then switches the TV input regardless its settings.
That helped. Just tried now.
My fairly expensive Sony Bravia reportedly does CEC in firmware. The amusing part is evidently it loses it’s mind occasionally and has to reset itself to find it, resulting in a short, but very annoying, audio gap. Sometimes it got so bad that it would power cycle the TV.
So, I disconnected the HDMI cable from my Yamaha AVR and ran aToslink fiber eliminating the issue. I did have to do some Home Assistant magic to be able to control the volume.
I’ll look into the CEC blocker do hicky though.
CEC is so frustrating because it’s a brilliantly simple protocol, and it’s well-thought-out to manage every possible scenario. The standards organization, IMO, did everything right. But no one implements it correctly! The nvidia shield is a special sore point for me…for example if you navigate away from the shield using the TV remote, then 5 minutes later the shield turns off the TV even though it’s not the active device. The protocol has a perfectly wonderful way to deal with this, which i verified using my raspberry pi that the TV supports properly…but this premium TV dongle doesn’t support it!
And a lot of generations of Intel NUC send hardcoded CEC sequences in the BIOS, instead of interacting with the protocol in a robust way. If you aren’t in one of the two scenarios that intel anticipated, it simply doesn’t work. And a lot of HDMI devices just don’t CEC at all. And my HDMI hub (3-in 1-out) doesn’t pass-through CEC correctly, even though CEC perfectly anticipates these devices.
And the raspberry pi!!! The pi legacy vchiq CEC has an abominably braindead implementation in the firmware, and they expose an interface to their dumb implementation instead of exposing the simple protocol itself, and userspace libcec has its own custom hacks to work around the idiocy in the pi firmware…i came up with a better characterization of the bugs, and a better custom hack. And then the moment i was done, of course, raspberry pi rewrote their firmware, making my interface useless. I hate pi so much y’all.
I wonder if you used a CEC blocker, and then a CEC dongle like the SMLight SLWF-08 HDMI-CEC controller running ESPHome or the Pulse-Eight P8-USBCECv1 via USB, then you should be able to send EXACTLY the commands you actually want, and ignore the badly coded manufacturer commands.
I have an issue with my Apple TV, connected to my receiver, who insists on always changing the source back to itself, when I’m just trying to play Xbox or something. And the worst thing is, it doesn’t even happen all the time, sometimes it behaves for weeks and then it randomly strikes again.
yeah replicating the pulse8 (indulging in my not-invented-here disorder) was vaguely on my todo list but the fact of the matter is i trained my 13yo to push the hardware input select buttons instead :)
Sounds like you implemented the most expensive and high-maintenance solution possible 🙂
I went down the same path 😆 just never finished it. Did order the parts and PCB, just didn’t assemble it, let alone the software. This I even ddid before I went down the esohome route, I may add a header for one … But will keep the stm32. But I should make it work first ….
https://gitlab.com/olliver/4beats
I wore my own bit-banged CEC stack for AVR (the microcontroller, not the home theater equipment) which was surprisingly easy and fun and effective. With CEC you can impersonate any device, so it basically gives you full standardized control over everything in your cabinet.
I suppose you know that being ‘ticked off’ has a totally different meaning (with, probably, the same result) in standard British English?
I have a shield, and this issue has happened more since the update that reportedly fixes it than it did before. I guess I can’t expect much from a small indie company like NVIDIA.
Sorry to hear that the update made things worse. Sounds like Nvidia is vibe-coding their Shield firmware updates much like their GPU driver updates. Maybe the hotfix for the hotfix’s hotfix will fix it?
HDMI. Hollywood’s Dammed Multiple Interface. Designed to test and use registered cable lengths to prevent apartment block sharing, amongst other evils.
Huh?