Kodi Community Forum

Full Version: xbmc.Monitor class help needed
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
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.

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)
indentation error. make sure

1) you're not mixing tabs and spaces
2) use the same indent for all blocks.
Thanks for the response. There were spaces mixed with the tabs. All fixed.