From 77fb96e4dc43e43f7641654623dec66872c1573a Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 20 Jan 2022 18:40:52 +0000 Subject: [PATCH] startup logo added and dynamic weather layout --- logos/startup_logo_1.gif | Bin 0 -> 51493 bytes server.py | 1 + stockTicker.py | 127 ++++++++++++++++++++------------------- 3 files changed, 65 insertions(+), 63 deletions(-) create mode 100644 logos/startup_logo_1.gif diff --git a/logos/startup_logo_1.gif b/logos/startup_logo_1.gif new file mode 100644 index 0000000000000000000000000000000000000000..e3924a44e6df12121a9a25ad1e978a8453ebfc4b GIT binary patch literal 51493 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

;%}b9kQxhb;Ln!tP)xAR7-Jt9s4w+$OagPzdVI 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

*+_$l4PBC={C+J!K2B->)mlwV&EUrb*pVY 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 BVgdjF literal 0 HcmV?d00001 diff --git a/server.py b/server.py index b502504..07cb676 100755 --- a/server.py +++ b/server.py @@ -44,6 +44,7 @@ ALLOWED_EXTENSIONS = {'csv', 'png'} ticker = pexpect.spawn("sudo -E python3 stockTicker.py") ticker.sendline('*') # run by default +time.sleep(1) ticker.sendline('A') # run by default def allowed_file(filename): diff --git a/stockTicker.py b/stockTicker.py index 86be734..051d0da 100755 --- a/stockTicker.py +++ b/stockTicker.py @@ -728,19 +728,19 @@ class StockTicker(): return imgs - def displayGIF(self, gif): + def displayGIF(self, gif, delay = 0.5, repeat = True): # To iterate through the entire gif i = 0 while True: try: gif.seek(i) except EOFError: - + if not repeat: break i = 0 gif.seek(i) # do something to im self.setImage(gif.convert('RGB')) - time.sleep(0.5) + time.sleep(delay) i += 1 try: msg = getInput() @@ -1804,17 +1804,12 @@ class StockTicker(): for i, location in enumerate(locations): try: - img = Image.new('RGB', (208, 32)) - current_weather = current_weathers[location] small_font = ImageFont.load("./fonts/5x7.pil") large_font = ImageFont.load("./fonts/10x20.pil") location_img = self.textImage(location.upper(), small_font, r = 255, g = 255, b = 0) - - img.paste(location_img, (5,0)) - main = current_weather['main_weather'] if main == 'Clouds': main = current_weather['description'] @@ -1823,12 +1818,7 @@ class StockTicker(): 'Sand': '50', 'Ash': '50', 'Squall': '50', 'Tornado': '50'} weather_dir = './logos/weather_icons' - weather_img = Image.open(weather_dir + '/weather_type_icons/' + weather_ids[main] + '.png') - img.paste(weather_img, (5,9)) - - - temp = current_weather['temp'] feels_temp = current_weather['feels_like'] if all_settings['temp'] == 'kelvin': @@ -1838,82 +1828,88 @@ class StockTicker(): temp = current_weather['temp']*9/5 + 32 temp_img = self.textImage(str("{0:.0f}".format(temp)), large_font) - img.paste(temp_img, (39,9)) - deg_img = self.textImage('o', small_font) - - img.paste(deg_img, (59, 8)) - main = current_weather['main_weather'] main_img = self.textImage(main.upper(), small_font) - img.paste(main_img, (35, 26)) - - feels_img = self.textImage('Feels like:'.upper() + str("{0:.0f}".format(feels_temp)), small_font) - img.paste(feels_img, (location_img.size[0] + 10, 0)) - min_img = self.textImage( "{0:.0f}".format(current_weather['min_temp']), small_font, r=0, g=0, b=255) - img.paste(min_img, (66, 12)) - max_img = self.textImage( "{0:.0f}".format(current_weather['max_temp']), small_font, r=255, g=0, b=0) - img.paste(max_img, (66, 21)) - hum_img = Image.open(weather_dir + '/humidity.png') - img.paste(hum_img, ( 82, 8)) - htext_img = self.textImage(str(current_weather['humidity']) + '%', small_font) - img.paste(htext_img, (95, 10)) - uv_img = Image.open(weather_dir + '/uv.png') - img.paste(uv_img, ( 82, 22)) - utext_img = self.textImage(str(round(current_weather['uv'], 1)) , small_font) - img.paste(utext_img, (95, 23)) - weekdays = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] months =['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] month = months[int(datetime.now().strftime('%m'))-1] date = str(int(datetime.now().strftime('%d'))) - weekday = weekdays[datetime.today().weekday()] - date_img = self.textImage((month + ' ' + date + ',' + weekday).upper(), small_font) - img.paste(date_img, (132, 0)) - rain_img = Image.open(weather_dir + '/rain-chance.png') - img.paste(rain_img, (118,8)) - - rtext_img = self.textImage(str(int(current_weather['rain_chance']*100)) + '%', small_font) - img.paste(rtext_img, (131, 10)) - cloud_img = Image.open(weather_dir + '/clouds.png') - img.paste(cloud_img, (118,20)) - ctext_img = self.textImage(str(current_weather['clouds']) + '%', small_font) - img.paste(ctext_img, (131, 22)) - wind_img = Image.open(weather_dir + '/wind.png') - img.paste(wind_img, (154,8)) - - w_speed = current_weather['wind_speed']*3.6 w_unit = 'K/H' if all_settings["wind_speed"] == "miles/hour": w_speed = current_weather['wind_speed']*2.236936 w_unit = 'M/H' - wtext_img = self.textImage("{0:.0f}".format(w_speed) + w_unit, small_font) - img.paste(wtext_img, (168, 10)) - wdir_img = self.textImage(self.degreesToCompass(current_weather['wind_direction']).upper(), small_font) - img.paste(wdir_img, (195, 10)) - vis_img = Image.open(weather_dir + '/visibility.png') - img.paste(vis_img, (154,20)) - vtext_img = self.textImage(str(round(current_weather['visibility']/1000, 1)) + 'km'.upper(), small_font) - img.paste(vtext_img, (168, 22)) + + + + '------------------------------------------' + img = Image.new('RGB', (1000, 32)) + + img.paste(weather_img, (5,9)) + x_offset = 5 + weather_img.size[0] + 1 + + img.paste(main_img, (x_offset, 26)) + img.paste(temp_img, (x_offset + main_img.size[0]//2 - temp_img.size[0]//2,9)) + + img.paste(deg_img, (x_offset + main_img.size[0]//2 - temp_img.size[0]//2 + temp_img.size[0], 8)) + + x_offset += max( main_img.size[0], temp_img.size[0] + deg_img.size[0]) + + + img.paste(min_img, (x_offset - 1, 12)) + img.paste(max_img, (x_offset - 1, 21)) + + x_offset += max(min_img.size[0], max_img.size[0]) + 2 + img.paste(hum_img, ( x_offset, 8)) + img.paste(uv_img, ( x_offset, 22)) + + img.paste(htext_img, (x_offset + hum_img.size[0], 10)) + img.paste(utext_img, (x_offset + uv_img.size[0], 23)) + x_offset += max(hum_img.size[0], uv_img.size[0]+2) + x_offset += max(htext_img.size[0], utext_img.size[0]) + 6 + + + img.paste(rain_img, (x_offset,8)) + img.paste(cloud_img, (x_offset,20)) + img.paste(ctext_img, (x_offset + cloud_img.size[0] + 2, 22)) + img.paste(rtext_img, (x_offset + rain_img.size[0]+ 2, 10)) + x_offset += max(cloud_img.size[0], rain_img.size[0])+6 + x_offset += max(ctext_img.size[0], rtext_img.size[0])+6 + img.paste(wind_img, (x_offset,8)) + img.paste(vis_img, (x_offset,20)) + img.paste(wtext_img, (x_offset + wind_img.size[0] + 2, 10)) + img.paste(vtext_img, (x_offset + vis_img.size[0] + 2, 22)) + x_offset += wind_img.size[0] + wtext_img.size[0] + 4 + img.paste(wdir_img, (x_offset, 10)) + + + + img = img.crop((0,0,x_offset +wdir_img.size[0] + 4 ,32)) + + img.paste(location_img, (5,0)) + img.paste(feels_img, (location_img.size[0] + 10, 0)) + img.paste(date_img, (location_img.size[0] + feels_img.size[0] + 15, 0)) + + imgs.append(img) imgs.append(self.blank) @@ -1925,7 +1921,7 @@ class StockTicker(): self.logf.write('. line: ' + str(exc_tb.tb_lineno)) self.logf.write('. type: ' + str(exc_type)) self.logf.write('\n ' + "".join(traceback.format_exception(sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2]))) - + raise e return self.stitchImage(imgs) @@ -2705,11 +2701,16 @@ if __name__ == '__main__': stock_ticker.logf = log start_image = Image.open('./logos/startup_logo.png') + start_GIF = Image.open('./logos/startup_logo_1.gif') msg = getInput() if msg =='*': - stock_ticker.setImage(start_image) - time.sleep(1) + # + # + + stock_ticker.displayGIF(start_GIF, delay = 0.02, repeat = False) + #stock_ticker.setImage(start_image) + time.sleep(2) stock_ticker.resetMatrix() #stock_ticker.getLeagueImage('NHL', 'future') @@ -2720,7 +2721,7 @@ if __name__ == '__main__': #stock_ticker.process_msg('G') #stock_ticker.process_msg('f') #stock_ticker.process_msg('W') - #stock_ticker.process_msg('A') + stock_ticker.process_msg('A')