The Home Assistant Kodi Integration is nice, but as of writing it becomes slower the longer Home Assistant runs. This sucks, especially when automations (like turning on a power hungry receiver) don’t run because of it.

This is a hack around that desynchronization, allowing much faster updates with a new Now Playing state. Usually under a second.

You will need:

Put those into this python script, and you’re off to the races:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import requests, time

KODI_URL = "http://192.168.1.14:8585"
HOME_ASSISTANT_LONG_LIVED_API_KEY = "ABCD"
HOME_ASSISTANT_URL = "http://192.168.1.6:8123"

counter = 0
state = 0
head = {'Authorization': 'Bearer ' + HOME_ASSISTANT_LONG_LIVED_API_KEY}

while True:
	try:
		r = requests.get(KODI_URL+'/jsonrpc?request=%7B%22jsonrpc%22%3A%20%222.0%22%2C%20%22method%22%3A%20%22Player.GetActivePlayers%22%2C%20%22id%22%3A%201%7D')
		newState = len(r.json()['result'])

		if newState is not state or counter is 30:
			state = newState
			counter = 0
			r = requests.post(HOME_ASSISTANT_URL + "/api/states/binary_sensor.kodi_is_playing", json={"state": "on" if state is not 0 else "off", "attributes": { "friendly_name": "Kodi is Playing" }}, headers=head)

		counter += 1

	except Exception as e:
		print(e)

	time.sleep(0.25)