I'm terrible at python and need your help with two questions
#61
Hi there.

I got the 5020L DLink camera and I would like to apply this script to it. SO I downloaded the doorbell.py and change it to:

Code:
import xbmc, xbmcgui, time, urllib

#inherit from WindowDialog instead of Window so that it's shown on top of
#what's onscreen instead of replacing it entirely
class CamView(xbmcgui.WindowDialog):

    def __init__(self):
        #Define image location and size
        self.image = xbmcgui.ControlImage(870, 438, 380, 253, "")
        self.addControl(self.image)

viewer = CamView()
viewer.show()
start_time = time.time()
while(time.time() - start_time <= 14):
    #set url to ip cam image, password auth not supported
    urllib.urlretrieve("http://10.1.1.50/mjpeg.cgi", 'C:\Users\Loki\AppData\Roaming\XBMC\addons\script.doorbell

\bell_icon.png')
    viewer.image.setImage("")
    viewer.image.setImage("bell_icon.png")
    #Define image transparency
    viewer.image.setAnimations([('conditional', 'effect=fade start=90 end=90 time=0 condition=true',)])
    xbmc.sleep(500)
viewer.close()
del viewer

When I press launch it gives me an error.

What am I doing wrong?
Reply
#62
I've made a bunch of modifications to the script, which I'm posting below. Python isn't my first (or second, or third, or fourth) language, so please excuse if things aren't as tight as they could/should be. Some changes:

- Accept parameter for cameraID and cameraName. Use case: I call this from BlueIris, which results in XBMC pulling a stream from BlueIris based on the camID.
- The existing image refresh didn't work for me (Window 8, on Gotham). So I made each image pulled have a unique name
- Cleanup the contents of the temp directory after it's done
- urlretrieve didn't work on my pc for some reason. So I switched out to urlopen
- Corrected some paths for images etc.

Code:
# Import the XBMC/XBMCGUI modules.
import xbmc, xbmcgui, time, urllib2, xbmcvfs, xbmcaddon, os, glob
__addon__   = xbmcaddon.Addon()
__addonid__ = __addon__.getAddonInfo('id')




#############
#Grab (/ set default) parameters
#############
args = ['CamID','CamName']
dbvar = {'CamID': 'cam1',
    'CamName': 'Camera 1'}

for item in sys.argv:
    arg = item.split('=')
    i = arg[0]
    if arg[0] in args:
        j = arg[1]
        dbvar.update({arg[0]:arg[1]})



#############
# Global Vars
#############
url='http://IPADDRESS/image/'+str(dbvar['CamID'])
path = xbmc.translatePath('special://profile/addon_data/%s' % __addonid__)
imagefile_template = os.path.join(path, 'camera_'+str(dbvar['CamID'])+'_image')
imagefile_ext = '.jpg'
imagefile = imagefile_template+imagefile_ext
video_length = 14
notification_length = 13800


#############
#If path to temp files doesn't exist, create it
#############
if not xbmcvfs.exists(path):
    xbmcvfs.mkdir(path)



####################################################################################
#Retrieves a file from a given URL
####################################################################################
def getFile(file_name,file_mode,base_url):

    #create the url and the request
    req = urllib2.Request(base_url)

    # Open the url
    try:
        f = urllib2.urlopen(req)

        # Open our local file for writing
        local_file = open(file_name, "wb" + file_mode)
        #Write to our local file
        local_file.write(f.read())
        local_file.close()
        f.close()
        del local_file
        del f

    #handle errors
    except urllib2.HTTPError, e:
        print "HTTP Error:",e.code , url
        f.close()
        del local_file
        del f
    except urllib2.URLError, e:
        print "URL Error:",e.reason , url
        f.close()
        del local_file
        del f



####################################################################################
#Deletes all files matching the mask that we have created in this call of the script
####################################################################################
def delFiles():
    del_mask = imagefile_template+'*'+imagefile_ext
    for del_filename in glob.glob(del_mask) :
        os.remove( del_filename )


####################################################################################
#Main class and function
####################################################################################

class CamView(xbmcgui.WindowDialog):        

    def __init__(self):
        #set the initial image before the window is shown
        imagefile = imagefile_template+imagefile_ext
        getFile(imagefile,"",url)
        self.image = xbmcgui.ControlImage(870, 383, 380, 253, "")
        self.addControl(self.image)


viewer = CamView()
viewer.show()
start_time = time.time()
firstimage = True
while(time.time() - start_time <= video_length):
    curr_time = round(time.time() - start_time, 0)
    imagefile = imagefile_template+'_'+str(curr_time)+imagefile_ext
    getFile(imagefile,"",url)
    viewer.image.setImage("")
    viewer.image.setImage(imagefile)
    if firstimage:
        nowtime=time.strftime("%I:%M %p")
        
        xoptions="Notification(\"IP Camera "+str(dbvar['CamName'])+" alert\",%s, notification_length, special://home/addons/script.doorbell/bell_icon.png)" % (nowtime)
        xbmc.executebuiltin(xoptions)
        
        viewer.image.setAnimations([('conditional', 'effect=fade start=0 end=90 time=250 delay=125 condition=true',), ('conditional', 'effect=slide start=0,400 end=0,0 time=250 condition=true',)])
        firstimage = False
    elif curr_time == video_length:
        viewer.image.setAnimations([('conditional', 'effect=fade start=90 end=90 time=0 condition=true',), ('conditional', 'effect=slide start=0,0 end=0,400 time=250 condition=true',)])
        #print "catch"
    else:
        viewer.image.setAnimations([('conditional', 'effect=fade start=90 end=90 time=0 condition=true',)])
        #print curr_time
    xbmc.sleep(500)


viewer.close()
delFiles()
del viewer
Reply
#63
thread split, you may want to continue here:
http://forum.xbmc.org/showthread.php?tid=182540
Do not PM or e-mail Team-Kodi members directly asking for support.
Always read the Forum rules, Kodi online-manual, FAQ, Help and Search the forum before posting.
Reply

Logout Mark Read Team Forum Stats Members Help
I'm terrible at python and need your help with two questions0