so wrote python code on rpi create digital poster talks crestron control processor. reason code stops responding after while. dont know why. i dont know if pi going sleep if point out in code cause please let me know.
edit: figured out on own. many commented.
i creating new fbi process every time went through loop, , ended using of pi's ram until came halt because didnt have left. kill fbi process after loading image fixed that. everyones help.
my functions , setup stuff:
import socket import os import thread import sys import urllib time import ctime pil import image import time import random import logging framebuffercommand = "sudo fbi -a -t 1 -d /dev/fb0 -noverbose " movieposterlocation = "/home/pi/movieposters/" openblackimage = "/home/pi/movieposters/special/black.jpg" killframebuffer = "sudo killall fbi" turnoffscreen = "sudo /opt/vc/bin/tvservice -o" turnonscreen = "sudo /opt/vc/bin/tvservice -p" def splitstring(input): stringlist = input.split("/x00/") return stringlist def displayrandomposter(): displayingposter = false filecount = next(os.walk(movieposterlocation))[2] #get number of available posters print('current # of posters in directory: ' + str(len(filecount))) attemptnumber = 0 while not displayingposter: postertodisplay = random.randint(0, len(filecount)) print('trying display random poster') attemptnumber += 1 try: image = image.open(movieposterlocation + filecount[postertodisplay]) #open current image width, height = image.size except indexerror msg: print("encountered indexerror while opening image") width = 0 height = 0 except ioerror msg: print(msg) try: conn.send(msg) except socket.error msg: print("socket error") if width > height: if attemptnumber > 5: print("too many attempts, stopping") break else: print("we think isnt poster, trying again") continue else: try: conn.send(" displaying poster: " + str(filecount[postertodisplay])) except socket.error msg: print msg os.system(framebuffercommand + movieposterlocation + filecount[postertodisplay]) displayingposter = true return
the thread listening, , main loop:
#-- client thread -- def client(conn): try: conn.send("connected raspberry pi") os.system(framebuffercommand + openblackimage) except socket.error msg: print(msg) print(str(bindsuccess)) while 1: datareceived = conn.recv(1024) reply = "ok.. " conn.send(reply + datareceived) datalist = splitstring(datareceived) print(datalist) if datalist[6] == "": print("datalist[6] empty, displaying random poster") displayrandomposter() else: try: movieposterurl = datalist[6] splitposterurl = movieposterurl.split("%") movieposterfilename = splitposterurl[7] urllib.urlretrieve(movieposterurl, movieposterlocation + movieposterfilename) conn.send("xbmc movie poster downloading") conn.send("movie poster saved as: " + movieposterlocation + movieposterfilename) print("movie poster saved as: " + movieposterlocation + movieposterfilename) except socket.error: print("encountered socket error while downloading poster - line 80") try: os.system(framebuffercommand + movieposterlocation + movieposterfilename) print('opening downloaded poster') except oserror msg: print(str(msg[0]) + str(msg[1])) if not datareceived: break time.sleep(1) #-- main function -- host = '' communicationport = 5005 bindsuccess = false crestronsocket = socket.socket(socket.af_inet, socket.sock_stream) print("socket created successfully") try: crestronsocket.bind((host, communicationport)) bindsuccess = true except socket.error msg: bindsuccess = false print("socket bind error" + msg) sys.exit() crestronsocket.listen(1) print("crestron socket listening") while bindsuccess == true: #wait accept connection - blocking call conn, addr = crestronsocket.accept() print('connected client: ' + addr[0] + ':' + str(addr[1])) thread.start_new_thread(client , (conn,)) crestronsocket.close()
i creating new fbi process every time went through loop, , ended using of pi's ram until came halt because didnt have left. kill fbi process after loading image fixed that. everyones help.
i figured out other things make operate better/more seamlessly.