This post may contain affiliate links. As an Amazon Associate we earn from qualifying purchases. Disclosure.

TL;DR

Your media setup and your smart home should talk to each other -- but most people run them as two completely separate systems. Connecting Plex, Kodi, or Jellyfin to Home Assistant takes under an hour and unlocks automations that actually change how you use a room.

Most smart home guides treat media as an afterthought. That's a mistake. Your TV time is probably the most predictable behavior pattern in your entire home. And predictable behavior is exactly what Home Assistant automations feed on, an idea our broader smart home automation guide (linked below in Related Articles) covers in more depth.

TL;DR: Connecting Plex, Kodi, or Jellyfin to Home Assistant turns playback state into an automation trigger. According to the Home Assistant 2024 survey (home-assistant.io, 2024), media player integrations rank among the top 10 most-used integrations. One automation, dim lights when a movie starts, justifies the whole setup.

How Does the Plex Integration Work in Home Assistant?

The official Plex integration ships with Home Assistant Core starting from version 2021.3 and requires no add-on installation. You authorize it once via the Plex OAuth flow, and every active Plex Media Server on your account appears as a device. Each connected player (Apple TV, Roku, a browser tab) becomes its own media_player entity with states like playing, paused, and idle (Plex developer docs, 2024).

Worth saying what "my Home Assistant" actually is here, because it changes what you should expect from any of this. Mine is Home Assistant OS on a Raspberry Pi 5 that sits on a DIN rail inside the electrical panel, fed by a Mean Well MDR-60-5 supply putting out 5 V at 10 A. It isn't a box on a shelf behind the TV. That decision has a price tag I accepted with my eyes open: when Home Assistant is down, the lights in this house don't work at all. So every integration I bolt on gets judged as something the electrical panel now depends on, not as a toy.

The most useful automation in this category: when the player state changes to playing and the time is after 7 PM, set the living room lights to 15% brightness. When it hits paused or idle, restore them to 80%. That's four lines of YAML. No third-party apps, no Webhooks, no IFTTT.

Pause Plex When the Doorbell Rings

This one surprises people. In Home Assistant 2024.x, you can call media_player.media_pause as a service action in any automation. Set your doorbell sensor as the trigger, add a condition checking that a player is currently in state playing, and the action pauses playback.

The doorbell on this build is a Reolink Video Doorbell PoE with the matching Chime. I picked the PoE version over the battery one deliberately, and I'd make the same call again: a doorbell that never needs charging is a doorbell you can put an automation behind. A battery unit that sleeps to save power reports its button press late, and late is useless when the point is to pause playback before the second ring. The Chime is the part people skip and then miss, because it keeps the "someone is at the door" signal working even when the automation layer is having a bad day.

It works. Takes under five minutes to configure.

What About Jellyfin, the Self-Hosted Alternative?

Jellyfin is free, open source, and runs entirely on your own hardware. It doesn't need an account, a subscription, or an internet connection. The Home Assistant integration isn't in the official core yet. You install it through HACS (Home Assistant Community Store) by searching for "Jellyfin" under Integrations. It's been actively maintained since 2021 (Jellyfin HACS integration repo, 2024).

HACS installation guide

Once installed, Jellyfin shows up exactly like Plex, each player session becomes a media_player entity. The state tracking is slightly less granular than Plex (no per-episode metadata in HA 2024.x), but for automation purposes it behaves identically.

Hardware-wise, Jellyfin is happy on any small x86 machine with a recent integrated GPU. A direct-play library needs almost nothing. Transcoding is what costs you, and that depends far more on your file formats than on the server badge.

One thing worth flagging: a Raspberry Pi running Home Assistant OS is not the right host for a media server. Mine is on a DIN rail with a single job, and I'd rather it stayed that way. Put the library on separate hardware and let Home Assistant talk to it over the network.

Kodi: Lights Out When the Movie Starts

Kodi has had a Home Assistant integration since HA version 0.75, one of the oldest media integrations in the project (Home Assistant Kodi integration docs, 2024). It uses the Kodi JSON-RPC API over your local network. No cloud, no tokens. Just Kodi's IP address and port (default: 8080).

The classic automation: when media_player.kodi changes to state playing and media_content_type equals movie, turn off all lights in the room. When it changes to paused, set lights to 30%. When idle, restore to full brightness.

Kodi's media_content_type attribute is more specific than Plex's equivalent when you need to tell a movie apart from a TV episode, which matters if your automation should only fire for feature-length playback.

What I actually prefer about Kodi for automation: it exposes media_duration and media_position as attributes. You can build a sunset-style automation that gradually dims lights as the movie progresses, hitting minimum brightness by the 20-minute mark.

Multi-Room Audio: Sonos, Chromecast, and Home Assistant Cast

For music throughout the house, you don't need a single media server. Home Assistant supports Sonos (official integration), Chromecast/Google Home speakers (official, auto-discovered), and Home Assistant Cast (streams to Chromecast-capable devices directly from HA).

smart home audio guide

A Sonos Era 100 (launched 2023, roughly 250 EUR at list) appears as a media_player entity automatically once you add the Sonos integration. You can group multiple Sonos speakers using the media_player.join service call and target the group in automations. Volume sync across rooms works without any extra configuration.

The speakers I actually own are Google: a Nest Mini and a Nest Hub Max, both carried over from the flat. They earned their way into the house plan, and I'm buying more rather than switching brands, which is not something I say about much of the older gear. The casting target on the TV side is a Philips set running Android TV, so Home Assistant Cast and the Google speakers land on the same discovery layer with no bridge in between. The honest limitation: Google speakers are a cloud-attached ecosystem, and a house whose logic lives on a local Raspberry Pi treats them as an output surface, never as the thing holding the automation.

For beat-reactive lighting with WiZ or WLED strips, you'll need a local audio analysis tool like the "Music Assistant" HACS integration (version 2.0+, released 2024). It supports Spotify Connect, local files, and streams, and can fire HA events on beat detection that WLED responds to via its JSON API.

Building a "Movie Night" Scene

A Home Assistant scene named movie_night can hold the entire state: lights at 8%, blinds closed, TV input switched to HDMI-2, the player queued up. You trigger it with one tap on a dashboard button, a voice command, or automatically when you sit down. For that last trigger I'd point you at ceiling-mounted mmWave sensors rather than a PIR, and I have those plus a 24 GHz presence sensor on the Zigbee mesh here. A PIR sees motion; a person watching a film stops producing motion about four minutes in.

Home Assistant dashboard customization

Here's where I have to be straight with you, because this is the part most guides quietly gloss over. This house has twelve Somfy io blind motors and a Dexxo Smart io on the garage door, and they all run through a TaHoma Switch. The TaHoma is not connected to Home Assistant. So the cover.living_room_blinds line in a scene like this describes the architecture I'm building toward, not something that fires in my hallway tonight. Anyone telling you their blinds drop on a movie trigger should be able to name the integration doing it, because the bridge is the hard part, not the YAML.

The scene config itself is straightforward. Set the cover entity to position 0, set all light entities to brightness 20 and color temperature 2700K, and set the player entity to the idle state. Home Assistant won't start playback from a scene, but you can add a media_player.play_media service call in an accompanying script.

Don't overthink the first version. Start with just lights. Add cover control in a second pass, once you've actually verified your blind motors are reachable from Home Assistant rather than assuming they are.

The Media Player Dashboard Card

Every media_player entity you add, Plex, Jellyfin, Kodi, Sonos, Chromecast, shows up in the Home Assistant media player card automatically. The card displays album art, track title, playback controls, and a volume slider. No custom card from HACS required.

Home Assistant add-ons guide

You can place multiple media player cards on a single dashboard view and arrange them by room. In HA 2024.3+, the card also shows the media source (Plex library name, Jellyfin server name) which helps when you have more than one server running.

That's the whole system. Plex, Kodi, and Jellyfin each take about 20 minutes to connect. The automations that come out the other side. Lights that respond to what you're watching, a doorbell that politely pauses your show. Are the kind of thing that make guests ask "wait, how did you do that?"

Which Media Add-ons Actually Earn a Slot

Not every media add-on earns a permanent slot. Plenty get installed, admired for a week, then quietly removed once the novelty wears off and nothing in the house depends on them.

Here's the short list worth starting from, in rough order of how often it fires in a typical setup:

  • Music Assistant: the backbone. It ties Spotify Connect, local files, and lighting scenes together so a track change can nudge a light.
  • Plex or Jellyfin integration: powers "movie mode," the one automation that justifies the rest of this article.
  • Cast integration: lets automations push a doorbell snapshot or a weather briefing to a Google speaker or display.
  • Mini Media Player card: not an add-on exactly, but the Lovelace card that makes all of the above readable in one place.

Why bother wiring media into Home Assistant at all? Because viewing and listening habits are among the most predictable signals a house produces, far more repeatable than door sensors or weather. Once you know a film usually starts after dark, that moment becomes a reliable trigger for lighting, climate, and a "do not disturb" flag that silences non-urgent notifications.

A word of caution on beat-reactive lighting. It looks incredible in demo videos and gets old fast in a living room. Honestly, I think beat-reactive lighting is the single most overrated feature in the media-automation space, it demos beautifully and gets switched off by week two in almost every setup that tries it. If you want to keep it, scope it to one accent fixture and trigger it only during music playback, never during dialogue-heavy shows. Run it house-wide and you'll disable it within a week.

If you're starting fresh, install Music Assistant first, get one solid "movie mode" automation working, and stop there for a month. Add the next piece only when you catch yourself reaching for a remote that an automation could have replaced. That restraint is the difference between a media setup you use and a pile of add-ons you forgot you installed.

The thread running through all of this is restraint. Media automation rewards the person who adds one piece, lives with it, and only then reaches for the next. Build it that way and the result feels invisible, which is exactly the point.

Frequently Asked Questions

Does the Plex integration work without a Plex Pass subscription?

Yes. The Home Assistant Plex integration works with a free Plex account for local server discovery and basic state tracking. You'll see what's playing, pause or resume, and use playback state as an automation trigger. Plex Pass is only required for some Plex features like mobile sync and hardware transcoding -- not for the Home Assistant side. A free account is enough for everything the integration exposes to automations.

Can I use Jellyfin as a trigger for Home Assistant automations?

Yes. Once you install the Jellyfin integration (available through HACS), Home Assistant tracks each player's state as a media_player entity. You can trigger automations when state changes to "playing", "paused", or "idle". The usual pattern is a "playing" trigger that dims the lights and an "idle" trigger, delayed by about ten minutes, that restores them. The Jellyfin integration in HACS has been maintained since 2021.

How do I add multi-room audio with Chromecast and Home Assistant?

Set up each Chromecast or Google Home speaker as a media_player entity in Home Assistant -- they're auto-discovered if they're on the same network. Then create a media_player group using the media_player.join service to link multiple speakers. You can target that group in automations or the media player card on your dashboard. Sonos works similarly via the official Sonos integration, which supports grouping and volume sync natively without extra HACS packages.