NRK TV — Stream Norwegian Broadcasting directly in Home Assistant

Hi everyone! :wave:

I’ve built a custom integration for streaming NRK TV (Norwegian Broadcasting Corporation) content directly in Home Assistant. NRK is Norway’s public broadcaster — think of it as the Norwegian BBC.

What it does

:electric_plug: NRK TV Integration

GitHub: filipferris/ha-nrk-tv

  • Live TV streaming — NRK1, NRK2, NRK3, NRK Super
  • Live radio — NRK P3 Musikk (more channels easy to add)
  • Media browser integration — browse on-demand content (children’s shows, seasons, episodes) through HA’s built-in media browser and cast menu
  • Media source URIs — use media-source://nrk_tv/channel/nrk1 or media-source://nrk_tv/episode/{id} in automations
  • Servicesnrk_tv.play_channel and nrk_tv.resolve_stream for scripts and automations
  • WebSocket API — backend for custom cards

:art: NRK TV Card

GitHub: filipferris/ha-nrk-tv-card

A custom Lovelace card that replicates the tv.nrk.no browsing experience:

  • Profile switching with avatars (adult/children profiles)
  • Live channel buttons (NRK1, NRK2, NRK3, NRK Super)
  • Scrollable show grid with thumbnails from NRK’s API
  • Click a show → browse seasons → pick an episode → plays on your TV
  • Responsive design for tablets and phones

:key: NRK Token Helper (optional)

GitHub: filipferris/nrk-token-helper

Standalone Node.js tool that opens a browser for NRK login and extracts your account profiles. Paste the output into the HA integration config to enable personalized profile switching.

How it works

The integration connects to NRK’s public Playback Services API (PSAPI) to resolve HLS .m3u8 stream URLs on demand. Your HA server must be in Norway (or using a Norwegian IP) since NRK content is geo-blocked. Streams are sent to any media player entity — Chromecast, Android TV, smart TVs, etc.

No NRK account is required for basic streaming and browsing. An optional account adds personalized profiles and recommendations.

Installation

All projects are HACS-compatible:

  1. HACS → Custom repositories → add the GitHub URL → Install
  2. Or copy custom_components/nrk_tv/ manually

Example automation

Wake-up radio that fades in over 5 minutes:

automation:
  - alias: "Morning kids radio"
    trigger:
      - trigger: time
        at: "06:45:00"
    conditions:
      - condition: time
        weekday: [mon, tue, wed, thu, fri]
    actions:
      - action: media_player.turn_on
        target:
          entity_id: media_player.kids_room_tv
      - delay: "00:00:05"
      - action: media_player.volume_set
        target:
          entity_id: media_player.kids_room_tv
        data:
          volume_level: 0.0
      - action: media_player.play_media
        target:
          entity_id: media_player.kids_room_tv
        data:
          media_content_id: media-source://nrk_tv/channel/p3musikk
          media_content_type: music
      - repeat:
          count: 25
          sequence:
            - action: media_player.volume_set
              target:
                entity_id: media_player.kids_room_tv
              data:
                volume_level: "{{ repeat.index / 100 }}"
            - delay: "00:00:12"

Feedback welcome!

This is my first custom integration, and I’ll be honest — it was largely vibe-coded with AI assistance :robot:. It works well on my setup, but there are definitely rough edges. Consider it a beta.

Would love to hear from other Norwegian HA users, and happy to add more channels or features. Issues and PRs very welcome on GitHub!

:norway: Til alle nordmenn med Home Assistant — håper dette er nyttig!