Hi everyone! ![]()
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
NRK TV Integration
- 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/nrk1ormedia-source://nrk_tv/episode/{id}in automations - Services —
nrk_tv.play_channelandnrk_tv.resolve_streamfor scripts and automations - WebSocket API — backend for custom cards
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
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:
- HACS → Custom repositories → add the GitHub URL → Install
- 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
. 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!
Til alle nordmenn med Home Assistant — håper dette er nyttig!
