xbmc.Monitor class help needed
#1
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)
Reply
#2
indentation error. make sure

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

Logout Mark Read Team Forum Stats Members Help
xbmc.Monitor class help needed0