← Back to the Workshop

Wakewand

Open this page and the televisions on your HDMI-CEC hardware are told to wake up, over the HDMI cable itself. No remote, no smart-TV app, no cloud: just the CEC pin doing what it was designed for.

Reaching for wake channels…

USB-CEC adapter

A Pulse-Eight USB-CEC adapter plugged into this computer, HDMI side into the TV. The page speaks its serial protocol directly through Web Serial. Pair it once; every later visit wakes the TV the moment the page opens.

checking…

Local CEC bridge

For screens wired to another machine: a Raspberry Pi behind the TV wall, a signage box, a media PC. Run the tiny bridge next to the hardware and this page drives it over ws://127.0.0.1:3308 (3308 = 0xCEC).

connecting…

pip install websockets
python cec-bridge.py
Download cec-bridge.py

Traffic log

How it works

  1. HDMI-CEC is a one-wire bus inside every HDMI cable. The command Image View On (opcode 0x04) is "one-touch play": a TV in standby that receives it turns itself on. TVs keep listening on that pin even when they look off.
  2. The adapter channel talks to the Pulse-Eight adapter's serial protocol (the same one libCEC uses) and puts f0:04 and f0:0d on the wire. If the transmit is acknowledged, that ack came from the TV itself.
  3. The bridge channel is a ~200 line Python script that binds to 127.0.0.1 only and shells out to cec-ctl (Linux kernel CEC, Raspberry Pi) or cec-client (libCEC) for every CEC output it finds.

The honest bit

A browser cannot reach the HDMI port of the machine it runs on: no web API exposes the CEC pin, and laptop HDMI outputs usually do not wire it up at all. That is why Wakewand needs one of the two channels above. Also, the very first adapter pairing needs one click (the browser demands a gesture before granting serial access); every visit after that is hands-free.

Web Serial works in Chrome and Edge on desktop. Firefox, Safari and phones can still use the bridge channel.