From faf029b9d9a5f3aab753794ce5e9a92b120ca6fd Mon Sep 17 00:00:00 2001 From: Anson Date: Thu, 18 Jul 2019 13:36:15 -0700 Subject: [PATCH] added a ton of code to work with bdfparse --- stock.py | 108 ++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 80 insertions(+), 28 deletions(-) diff --git a/stock.py b/stock.py index 97f95aa..02ae15f 100644 --- a/stock.py +++ b/stock.py @@ -1,22 +1,37 @@ -# Display a runtext with double-buffering. -from rgbmatrix import graphics, RGBMatrix, RGBMatrixOptions -import time import sys +import time +from math import ceil + +import numpy as np import requests +from bdfparse import Font +from keys import IEX_TOKEN + +from rgbmatrix import RGBMatrix, RGBMatrixOptions, graphics + + +font_file = "matrix\\fonts\\9x18.bdf" +font = Font(font_file) +matrix_shape = (16, 32) # rows, cols +stocks = ["tsla", "psec", "aapl"] + options = RGBMatrixOptions() -options.rows = 16 -options.cols = 32 options.chain_length = 1 options.parallel = 1 options.hardware_mapping = "regular" +options.rows, options.cols = matrix_shape + + +red = (255, 51, 51) +green = (51, 255, 51) +white = (255, 255, 255) def symbolData(symbol: str): """ Takes a list of symbol and returns a dictionary of strings with information about the symbol. """ - IEX_TOKEN = "TOKEN HERE" IEXurl = "https://cloud.iexapis.com/stable/stock/{symbol}/quote?token={IEX}".format( symbol=symbol, IEX=IEX_TOKEN ) @@ -31,44 +46,81 @@ def symbolData(symbol: str): # Determine wording of change text change = round(IEXData["changePercent"] * 100, 2) if change > 0: - message += ", the stock is currently **up {change}%**".format(change=change) + message += ", the stock is currently up {change}%".format(change=change) + color = green elif change < 0: - message += ", the stock is currently **down {change}%**".format( - change=change - ) + message += ", the stock is currently down {change}%".format(change=change) + color = red else: message += ", the stock hasn't shown any movement today." + color = white else: message = "The symbol: {symbol} was not found.".format(symbol=symbol) + color = white - return message + return (message, color) -def run(): +def run(pos): matrix = RGBMatrix(options=options) - offscreen_canvas = matrix.CreateFrameCanvas() - font = graphics.Font() - font.LoadFont("../../../fonts/7x13.bdf") - textColor = graphics.Color(255, 255, 0) - pos = offscreen_canvas.width - my_text = "loading" + canvas = matrix.CreateFrameCanvas() - while True: - offscreen_canvas.Clear() - len = graphics.DrawText(offscreen_canvas, font, pos, 10, textColor, my_text) - pos -= 1 - if pos + len < 0: - my_text = symbolData("tsla") - pos = offscreen_canvas.width + for row in range(options.rows): + for col in range(options.cols): + canvas.SetPixel(x, y, 255, 1, 1) - time.sleep(0.05) - offscreen_canvas = matrix.SwapOnVSync(offscreen_canvas) + canvas = matrix.SwapOnVSync(canvas) + time.sleep(1) try: print("Press CTRL-C to stop.") + pos = 0 while True: - run() + run(pos) + pos += 1 + + except KeyboardInterrupt: sys.exit(0) + +def color_message(message, color): + message_arr = font.word(message) + + r = np.multiply(np.full(message_arr.shape, color[0]), message_arr) + g = np.multiply(np.full(message_arr.shape, color[1]), message_arr) + b = np.multiply(np.full(message_arr.shape, color[2]), message_arr) + + array = np.zeros((message_arr.shape[0], message_arr.shape[1], 3), dtype=int) + array[:, :, 0] = np.add(array[:, :, 0], r) + array[:, :, 1] = np.add(array[:, :, 1], g) + array[:, :, 2] = np.add(array[:, :, 2], b) + + return array + + +def fit_array(array, shape, operation="centered", fill_value=0): + rows = np.subtract(shape, array.shape)[0] + cols = shape[1] + offset = (rows, cols) + + if operation is "centered": + top = ceil(rows / 2) + top_fill = np.full((top, cols), fill_value) + + bottom = rows // 2 + bottom_fill = np.full((bottom, cols), fill_value) + + return np.concatenate((top_fill, array, bottom_fill), axis=0) + + elif operation is "top": + fill = np.full(offset, fill_value) + return np.concatenate((fill, array), axis=0) + + elif operation is "bottom": + fill = np.full(offset, fill_value) + return np.concatenate((array, fill), axis=0) + + else: + raise Exception("Invalid Operation. Must be either centered, top, or bottom.")