2015-05-06, 02:20
I have a service script which turns on/ off my Rotel amp when Kodi is playing using xbmc.Player class. All was working fine until I added an xbmc.Monitor class to turn the amp off when the Kodi screensaver was activated. Refer to the python exception in the following log.
http://pastebin.com/GBSpH7GC
Assistance would be greatly appreciated.
http://pastebin.com/GBSpH7GC
Assistance would be greatly appreciated.
Code:
import rotel
import xbmc
import xbmcgui
import xbmcaddon
_addon_ = xbmcaddon.Addon()
class Main:
def __init__(self):
self.Player = XBMCPlayer()
self.Monitor = XBMCMonitor()
class XBMCPlayer( xbmc.Player ):
def __init__( self, *args ):
pass
def onPlayBackStarted( self ):
# Will be called when xbmc starts playing a file
log( 'playback started' )
powerOn()
def onPlayBackEnded( self ):
# Will be called when xbmc stops playing a file
log( "playback ended" )
delayedPowerOff()
def onPlayBackStopped( self ):
# Will be called when user stops xbmc playing a file
log( "playback stopped" )
delayedPowerOff()
class XBMCMonitor( xbmc.Monitor ):
def __init__( self, *args, **kwargs ):
log( 'XBMCMonitor called' )
#pass
def onScreensaverActivated( self ):
# Will be called when xbmc screensaver is activated
log( 'screensaver activated' )
powerOff()
def powerOn():
if rotel.ReadWrite( 'get_current_power!' ) == "power=standby!":
if rotel.ReadWrite( 'power_on!' ):
notification( 'Power on ' )
else:
notification( 'Power already on ' )
def powerOff():
if rotel.ReadWrite( 'get_current_power!' ) == "power=on!":
if rotel.ReadWrite( 'power_off!' ):
notification( 'Power off ' )
else:
notification( 'Power already off ' )
def delayedPowerOff():
min_idle_time = int(_addon_.getSetting('delaytime')) # seconds
idle_time = 0
xbmc.sleep(100) # Delay required to allow time for isPlaying to change state
while not xbmc.Player().isPlaying():
remaining_time = min_idle_time - idle_time
if remaining_time == 0:
if rotel.ReadWrite( 'power_off!' ):
notification( 'Power off ' )
return
xbmc.sleep(1000) # 1 second
idle_time += 1
def log(msg):
#log_level = int(_addon_.getSetting( 'loglevel' ))
xbmc.log('Rotel auto on/off: %s' % msg , 1 )
def notification(msg):
dialog = xbmcgui.Dialog()
icon = _addon_.getAddonInfo('icon')
dialog.notification('Rotel', msg , icon , 3000)
Main()
while not xbmc.abortRequested:
xbmc.sleep(1000)