def main_loop(bg=None, fg=None): update_display_period = 1 # number of seconds to wait before updating display floor = math.floor # minor optimization if bg is None: bg = BackgroundColours.BLACK if fg is None: fg = TextColours.GREEN line_num = 3 d = LCDSysInfo() d.clear_lines(TextLines.ALL, bg) d.dim_when_idle(False) d.set_brightness(127) d.save_brightness(127, 255) d.set_text_background_colour(bg) class Data(object): def __init__(self, d): self.d = d self.count = 0 data = Data(owner) def onbuttondown(data): data.count += 1 data.d.display_text_on_line(line_num, str(data.count), False, None, fg) read_wait(onbuttondown=functools.partial(onbuttondown, owner))
def clock_loop(bg=None, fg=None): update_display_period = 1 # number of seconds to wait before updating display floor = math.floor # minor optimization if bg is None: bg = BackgroundColours.BLACK if fg is None: fg = TextColours.GREEN line_num = 3 d = LCDSysInfo() d.clear_lines(TextLines.ALL, bg) d.dim_when_idle(False) d.set_brightness(127) d.save_brightness(127, 255) d.set_text_background_colour(bg) while 1: clock_str = str(datetime.datetime.now()).split('.')[0] d.display_text_on_line(line_num, clock_str, False, None, fg) # Work out when to wake up for the next round/whole (non-fractional) time start_time = time.time() future_time = floor(start_time) + update_display_period # pure float math sleep_time = future_time - start_time time.sleep(sleep_time)
def showSimplifiedScreen(firstTime, summary): # extract just the data we want from the API result hardwareErrors = str(summary['SUMMARY'][0]['Hardware Errors']) avg = int(summary['SUMMARY'][0]['MHS av']) avgStr = convertSize(avg * 1000000.0) avgMhs = "Average: " + avgStr # set up to write to the LCD screen # # Init the LCD screen display = LCDSysInfo() display.dim_when_idle(False) display.set_brightness(255) display.save_brightness(100, 255) if (firstTime == True): display.clear_lines(TextLines.ALL, BackgroundColours.BLACK) display.display_text_on_line(1, str(poolURL), True, (TextAlignment.LEFT), TextColours.LIGHT_BLUE) display.display_text_on_line(2, "Uptime: \t" + upTime, True, (TextAlignment.LEFT, TextAlignment.RIGHT), TextColours.LIGHT_BLUE) display.display_text_on_line(3, avgMhs + "h/s", True, TextAlignment.LEFT, TextColours.LIGHT_BLUE) display.display_text_on_line(4, "HW Errors: " + hardwareErrors, True, TextAlignment.LEFT, TextColours.LIGHT_BLUE)
def __init__(self, path): super(EventHandler, self).__init__() self.lcd = LCDSysInfo() self.lcd.set_brightness(BRIGHTNESS) self.lcd.dim_when_idle(False) self.lcd.clear_lines(TextLines.ALL, BGCOLOR) self.old_lines = [''] * 6 self.path = path
def displayErrorScreen(e): # set up to write to the LCD screen # # Init the LCD screen display = LCDSysInfo() display.dim_when_idle(False) display.set_brightness(255) display.save_brightness(100, 255) # Always clear the whole screen display.clear_lines(TextLines.ALL, BackgroundColours.BLACK) display.display_text_on_line(3, "Error: Check Miner", True, (TextAlignment.LEFT), TextColours.RED) display.display_text_on_line(4, e, True, (TextAlignment.LEFT), TextColours.RED)
#!/usr/bin/env python # -*- coding: UTF-8 -*- import sys from pylcdsysinfo import LCDSysInfo, TextAlignment, TextColours try: if int(sys.argv[1]) < 1 or int(sys.argv[1]) > 180: raise ValueError("Out of bounds") except ValueError: print >> sys.stderr, "Syntax: %s <1-42>" % (sys.argv[0]) sys.exit(1) d = LCDSysInfo() d.display_icon(0, int(sys.argv[1]))
def showDefaultScreen(firstTime, summary): # extract just the data we want from the API result and # build up display strings for each using the data avg = float(summary['SUMMARY'][0]['MHS av']) avgMhs = convertSize(avg*1000000.0) foundBlocks = str(int(summary['SUMMARY'][0]['Found Blocks'])) difficultyAccepted = "A:" + str(int(summary['SUMMARY'][0]['Difficulty Accepted'])) if 'Pool Rejected%' in summary['SUMMARY'][0]: rej = str(summary['SUMMARY'][0]['Pool Rejected%']) if (rej == '0'): rejp = rej + "%" else: rejp = rej.split('.')[0] + "." + rej.split('.')[1][:2] + "%" else: rejp = str(int(summary['SUMMARY'][0]['Difficulty Rejected'])) reject = "R:" + rejp if 'Device Hardware%' in summary['SUMMARY'][0]: hw = str(summary['SUMMARY'][0]['Device Hardware%']) if (hw == '0'): hwp = hw + "%" else: hwp = hw.split('.')[0] + "." + hw.split('.')[1][:2] + "%" else: hwp = str(int(summary['SUMMARY'][0]['Hardware Errors'])) hardware = "HW:" + hwp bestShare = "S:" + convertSize(int(summary['SUMMARY'][0]['Best Share'])) workUtility = "WU:" + str(summary['SUMMARY'][0]['Work Utility']) + "/m" # get current time, and format it per user selection theTime = "" time.ctime() # formatted like this: 'Mon Oct 18 13:35:29 2010' if timeDisplayFormat == '12': theTime = time.strftime("%I:%M%p") # 12 hour display else: theTime = time.strftime("%H:%M:%S") # default to 24 hour display # strip common prefixes and suffixes off of the pool URL (to save display space) commonStringPattern = ['stratum+tcp://', 'stratum.', 'www.', '.com', 'mining.', ':3333', ':3334'] shortPoolURL = str(poolURL) for i in commonStringPattern: shortPoolURL = shortPoolURL.replace(i, '', 1).rstrip() # build the display strings line1String = shortPoolURL + "\t" + theTime line2String = "Uptime: " + upTime line3String = "Avg:" + avgMhs + "h/s" + " B:" + foundBlocks #line3String = "Avg:" + avgMhs + "\tB:" + foundBlocks line4String = difficultyAccepted + " " + bestShare line5String = reject + " " + hardware line6String = workUtility # set up to write to the LCD screen # # Init the LCD screen display = LCDSysInfo() display.dim_when_idle(False) display.set_brightness(255) display.save_brightness(100, 255) if (firstTime == True): # clear screen display.clear_lines(TextLines.ALL, BackgroundColours.BLACK) # write all lines display.display_text_on_line(1, line1String, True, (TextAlignment.LEFT, TextAlignment.RIGHT), TextColours.YELLOW) display.display_text_on_line(2, line2String, True, (TextAlignment.LEFT, TextAlignment.RIGHT), TextColours.LIGHT_BLUE) display.display_text_on_line(3, line3String, True, (TextAlignment.LEFT), TextColours.GREEN) display.display_text_on_line(4, line4String, True, (TextAlignment.LEFT), TextColours.GREEN) display.display_text_on_line(5, line5String, True, (TextAlignment.LEFT), TextColours.GREEN) display.display_text_on_line(6, line6String, True, (TextAlignment.LEFT), TextColours.GREEN)
def getArrivalTime(stationcode, stationname): url = 'https://smrtfd18.herokuapp.com/webhook' payload = { 'stationcode': stationcode, 'key': 'MEtSAm6Tzl5PPT3bmLq1JqkFvcpXmKL2M7EWbq15' } r = requests.post(url, data=payload) output = json.loads(r.content) nextTrain = '' subTrain = '' nextTrainFinalDtn = '' j = 0 d = LCDSysInfo() d.clear_lines(TextLines.ALL, BackgroundColours.BLACK) d.dim_when_idle(False) d.set_brightness(127) d.save_brightness(127, 255) d.set_text_background_colour(BackgroundColours.BLACK) for rows in output['Arrivals']: for x in output['Arrivals'][rows]: if x > 0: for y in output['Arrivals'][rows][x]: print x, ':', y, ':', output['Arrivals'][rows][x][y] if (y == 'nextTrainFinalDtn'): nextTrainFinalDtn = output['Arrivals'][rows][x][ y].strip() j += 1 if (y == 'nextTrain'): str_ = str(output['Arrivals'][rows][x][y]) nextTrain = filter(str.isdigit, str_) j += 1 if (y == 'subTrain'): str_ = str(output['Arrivals'][rows][x][y]) subTrain = filter(str.isdigit, str_) j += 1 if (j == 3): print 'To: ', nextTrainFinalDtn, '> ', nextTrain, ' ', subTrain if (nextTrainFinalDtn != ''): clock_str = str( datetime.datetime.now()).split('.')[0] d.display_text_on_line(1, stationname, False, TextAlignment.CENTRE, TextColours.PINK) d.display_text_on_line( 2, '---------------------------------------', False, TextAlignment.CENTRE, TextColours.PINK) d.display_text_on_line(3, 'To ' + nextTrainFinalDtn, False, TextAlignment.CENTRE, TextColours.GREEN) d.display_text_on_line( 4, 'Next train: ' + nextTrain + ' min(s)', False, TextAlignment.LEFT, TextColours.YELLOW) d.display_text_on_line( 5, 'Sub. train: ' + subTrain + ' min(s)', False, TextAlignment.LEFT, TextColours.CYAN) d.display_text_on_line(6, clock_str, False, TextAlignment.CENTRE, TextColours.WHITE) time.sleep(5) d.clear_lines(TextLines.ALL, BackgroundColours.BLACK) j = 0
def showDefaultScreen(firstTime, summary, mtgoxLastPrice, mtgoxDirectionCode, toggleSinceLast, mtgoxToggleState): # extract just the data we want from the API result and # build up display strings for each using the data avg = float(summary['SUMMARY'][0]['MHS av']) avgMhs = convertSize(avg * 1000000.0) foundBlocks = str(int(summary['SUMMARY'][0]['Found Blocks'])) difficultyAccepted = "A:" + str( int(summary['SUMMARY'][0]['Difficulty Accepted'])) if 'Pool Rejected%' in summary['SUMMARY'][0]: rej = str(summary['SUMMARY'][0]['Pool Rejected%']) if (rej == '0'): rejp = rej + "%" else: rejp = rej.split('.')[0] + "." + rej.split('.')[1][:2] + "%" else: rejp = str(int(summary['SUMMARY'][0]['Difficulty Rejected'])) reject = "R:" + rejp if 'Device Hardware%' in summary['SUMMARY'][0]: hw = str(summary['SUMMARY'][0]['Device Hardware%']) if (hw == '0'): hwp = hw + "%" else: hwp = hw.split('.')[0] + "." + hw.split('.')[1][:2] + "%" else: hwp = str(int(summary['SUMMARY'][0]['Hardware Errors'])) hardware = "HW:" + hwp bestShare = "S:" + convertSize(int(summary['SUMMARY'][0]['Best Share'])) workUtility = "WU:" + str(summary['SUMMARY'][0]['Work Utility']) + "/m" # get current time, and format it per user selection theTime = "" time.ctime() # formatted like this: 'Mon Oct 18 13:35:29 2010' if timeDisplayFormat == '12': theTime = time.strftime("%I:%M%p") # 12 hour display else: theTime = time.strftime("%H:%M:%S") # 24 hour display # strip common prefixes and suffixes off of the pool URL (to save display space) # TODO add code to remove all ":dddd" instead of adding port numbers to ignore commonStringPattern = [ 'http://', 'stratum+tcp://', 'stratum.', 'www.', '.com', 'mining.', ':3333', ':3334', ':8330' ] shortPoolURL = str(poolURL) for i in commonStringPattern: shortPoolURL = shortPoolURL.replace(i, '', 1).rstrip() # build the display strings line1String = shortPoolURL + "\t" + theTime line2String = "Uptime: " + upTime line3String = "Avg:" + avgMhs + "h/s" + " B:" + foundBlocks if int(foundBlocks) > 0: line3Colour = TextColours.RED else: line3Colour = TextColours.GREEN #line3String = "Avg:" + avgMhs + "\tB:" + foundBlocks line4String = difficultyAccepted + " " + bestShare line5String = reject + " " + hardware if mtgoxToggleState: # if we have MtGox data, get ready to display it line6String = "MtGox: " + mtgoxLastPrice else: line6String = workUtility # set up to write to the LCD screen # # Init the LCD screen display = LCDSysInfo() display.dim_when_idle(False) display.set_brightness(255) display.save_brightness(100, 255) if (firstTime == True): # clear screen display.clear_lines(TextLines.ALL, BackgroundColours.BLACK) # write all lines display.display_text_on_line(1, line1String, True, (TextAlignment.LEFT, TextAlignment.RIGHT), TextColours.YELLOW) display.display_text_on_line(2, line2String, True, (TextAlignment.LEFT, TextAlignment.RIGHT), TextColours.LIGHT_BLUE) display.display_text_on_line(3, line3String, True, (TextAlignment.LEFT), line3Colour) display.display_text_on_line(4, line4String, True, (TextAlignment.LEFT), TextColours.GREEN) display.display_text_on_line(5, line5String, True, (TextAlignment.LEFT), TextColours.GREEN) # check to see if the mtgoxDisplay just toggled, if so, display black text to remove traces of previous icon if toggleSinceLast == True: display.display_text_anywhere(0, 197, ' ', TextColours.BLACK) if mtgoxToggleState == True: display.display_icon( 41, mtgoxDirectionCode ) # directionCode should contain the icon number for up or down arrow display.display_text_anywhere(95, 200, line6String, TextColours.GREEN) else: display.display_text_on_line(6, line6String, True, (TextAlignment.LEFT), TextColours.GREEN)