weather updates
@ -245,6 +245,8 @@ def updateWeather(location, api_key):
|
|||||||
current_weather['wind_direction'] = weather['wind']['deg']
|
current_weather['wind_direction'] = weather['wind']['deg']
|
||||||
current_weather['visibility'] = weather['visibility']
|
current_weather['visibility'] = weather['visibility']
|
||||||
current_weather['uv'] = r.json()['current']['uvi']
|
current_weather['uv'] = r.json()['current']['uvi']
|
||||||
|
current_weather['rain_chance'] = r.json()['hourly'][0]['pop']
|
||||||
|
|
||||||
|
|
||||||
json.dump( current_weather, open( "csv/current_weather.json", 'w+' ))
|
json.dump( current_weather, open( "csv/current_weather.json", 'w+' ))
|
||||||
|
|
||||||
@ -260,7 +262,6 @@ def updateWeather(location, api_key):
|
|||||||
dct['max_temp'] = day['temp']['max']
|
dct['max_temp'] = day['temp']['max']
|
||||||
daily_weather.append(dct)
|
daily_weather.append(dct)
|
||||||
|
|
||||||
|
|
||||||
json.dump( daily_weather, open( "csv/daily_weather.json", 'w+' ))
|
json.dump( daily_weather, open( "csv/daily_weather.json", 'w+' ))
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
symbol,name,base,current,24hr change
|
symbol,name,base,current,24hr change
|
||||||
BTC,bitcoin,usd,35668,-0.37786061371520613
|
BTC,bitcoin,usd,32887,-7.6081007271389165
|
||||||
ETH,ethereum,gbp,1923.94,1.8341326495198176
|
ETH,ethereum,gbp,1768.04,-8.205044425803774
|
||||||
|
|
@ -1 +1 @@
|
|||||||
{"main_weather": "Clouds", "description": "overcast clouds", "temp": 18.69, "min_temp": 15.77, "max_temp": 20.06, "feels_like": 18.44, "humidity": 70, "clouds": 100, "wind_speed": 2.44, "wind_direction": 228, "visibility": 10000, "uv": 0}
|
{"main_weather": "Clouds", "description": "overcast clouds", "temp": 19.73, "min_temp": 15.55, "max_temp": 21.01, "feels_like": 19.27, "humidity": 58, "clouds": 100, "wind_speed": 1.84, "wind_direction": 249, "visibility": 10000, "uv": 0, "rain_chance": 0}
|
@ -1 +1 @@
|
|||||||
[{"main_weather": "Clouds", "description": "few clouds", "min_temp": 12.92, "max_temp": 22.21}, {"main_weather": "Clouds", "description": "scattered clouds", "min_temp": 12.67, "max_temp": 22.49}, {"main_weather": "Clouds", "description": "few clouds", "min_temp": 13.03, "max_temp": 23.86}, {"main_weather": "Clouds", "description": "scattered clouds", "min_temp": 14.72, "max_temp": 24.46}, {"main_weather": "Clear", "description": "clear sky", "min_temp": 15.5, "max_temp": 25.79}, {"main_weather": "Clear", "description": "clear sky", "min_temp": 16.59, "max_temp": 28.09}, {"main_weather": "Clouds", "description": "few clouds", "min_temp": 16.34, "max_temp": 27.22}, {"main_weather": "Rain", "description": "light rain", "min_temp": 17.53, "max_temp": 28.72}]
|
[{"main_weather": "Clouds", "description": "overcast clouds", "min_temp": 13.24, "max_temp": 23.67}, {"main_weather": "Clouds", "description": "few clouds", "min_temp": 12.23, "max_temp": 23.89}, {"main_weather": "Rain", "description": "light rain", "min_temp": 14.69, "max_temp": 22.98}, {"main_weather": "Rain", "description": "light rain", "min_temp": 14.9, "max_temp": 24.55}, {"main_weather": "Clouds", "description": "scattered clouds", "min_temp": 15.43, "max_temp": 25.91}, {"main_weather": "Clear", "description": "clear sky", "min_temp": 16.26, "max_temp": 27.68}, {"main_weather": "Rain", "description": "light rain", "min_temp": 17.66, "max_temp": 29.24}, {"main_weather": "Clouds", "description": "overcast clouds", "min_temp": 16.08, "max_temp": 23.33}]
|
@ -1 +1 @@
|
|||||||
07/06/2021 16:09:41
|
08/06/2021 16:13:48
|
||||||
|
|
40
csv/news.csv
@ -1,21 +1,21 @@
|
|||||||
headline,source,date,time
|
headline,source,date,time
|
||||||
macOS 12 Monterey announced - here's what's coming to MacBooks later in 2021 - TechRadar,TechRadar,2021-06-07,18:30:46Z
|
Reduce your salt intake to boost your immunity - Times of India,The Times of India,2021-06-08,18:30:00Z
|
||||||
COVID vaccine: Period changes could be a short-term side effect - Times of India,The Times of India,2021-06-07,18:30:00Z
|
Geostationary Earth Orbit Hyperspectral Infrared Radiation Data Improves Local Severe Storm Forecasts - Space Bollyinside - BollyInside,Bollyinside.com,2021-06-08,18:27:29Z
|
||||||
Today’s coronavirus news: Ontario reporting 525 COVID-19 cases; Ontario to begin reopening Friday; Toronto announces new outdoor fitness programs starting this weekend - Toronto Star,Toronto Star,2021-06-07,18:20:11Z
|
Carbon dioxide levels hit 50 percent higher than preindustrial time - NBC News,NBC News,2021-06-08,18:23:31Z
|
||||||
Arctic micro-animal survives 24000 years in Siberian permafrost - eNCA,eNCA,2021-06-07,18:20:10Z
|
Annual Solar Eclipse Tomorrow^ People of THESE Places in India Will be Able to Watch - India.com,India.com,2021-06-08,18:23:07Z
|
||||||
Live updates: Harris warns Guatemalans they will be turned back if they come to the U.S. border illegally - The Washington Post,The Washington Post,2021-06-07,18:18:00Z
|
National Indigenous leaders plan Vatican visit to call for long-awaited papal apology - CBC.ca,CBC News,2021-06-08,18:15:57Z
|
||||||
Leveraging past flu pandemics helps build universal flu vaccine - The Science Board,Scienceboard.net,2021-06-07,18:16:01Z
|
N.B. says another 29000 people need to get vaccine before health orders are relaxed - NiagaraFallsReview.ca,Toronto Star,2021-06-08,18:11:50Z
|
||||||
iPadOS 15 announced at WWDC^ features improved multitasking and surprising Swift Playgrounds features - Yahoo Singapore News,Yahoo Entertainment,2021-06-07,18:12:11Z
|
Coroner determines Upper Hutt toddler's playground death was the result of 'tragic accident' - Stuff.co.nz,Stuff.co.nz,2021-06-08,18:06:00Z
|
||||||
Apple announces watchOS 8 with new health features - The Verge,The Verge,2021-06-07,18:11:38Z
|
Controversial scheme to collect and share patient data delayed - The Independent,Independent,2021-06-08,18:05:12Z
|
||||||
17 areas now COVID hotspots in UK cases as surge 53% in a week - Yahoo Philippines News,Yahoo Entertainment,2021-06-07,18:11:15Z
|
Minecraft updates with Cliffs and Caves Part 1^ adds goats and copper - Polygon,Polygon,2021-06-08,18:04:21Z
|
||||||
Apple’s Siri will finally work without an internet connection thanks to on-device processing - The Verge,The Verge,2021-06-07,18:07:17Z
|
Utah Jazz rule PG Mike Conley out for Game 1 vs. LA Clippers with hamstring strain - ESPN,ESPN,2021-06-08,17:57:46Z
|
||||||
tvOS is getting spatial audio support for AirPods Pro and Max - Yahoo Singapore News,Yahoo Entertainment,2021-06-07,18:07:02Z
|
'This was a terrorist attack': Trudeau condemns London hit-and-run that left four Muslim family members dead - CBC.ca,CBC News,2021-06-08,17:56:14Z
|
||||||
2nd dose vaccine eligibility expands^ 2 new deaths linked to Alpha COVID-19 variant - Global News,Global News,2021-06-07,18:04:33Z
|
Zidansek and Pavlyuchenkova reach French Open semis after epic battles - The Guardian,The Guardian,2021-06-08,17:51:00Z
|
||||||
iPadOS 15 announced at WWDC^ features improved multitasking and surprising Swift Playgrounds features - Yahoo Movies Canada,Yahoo Entertainment,2021-06-07,18:04:33Z
|
New dinosaur species found in Australia was as long as a basketball court - NBC News,NBC News,2021-06-08,17:36:11Z
|
||||||
Skin in the game: Video chat apps tout 'inclusive' AI features | Global Banking & Finance Review - Global Banking And Finance Review,Global Banking And Finance Review,2021-06-07,18:00:27Z
|
Julio Jones declines to take No. 11 from Tennessee Titans' A.J. Brown - ESPN,ESPN,2021-06-08,17:35:03Z
|
||||||
Covid 19 coronavirus: Fiji crisis - 147 cases in two days^ patient dies - New Zealand Herald,New Zealand Herald,2021-06-07,18:00:00Z
|
EXCLUSIVE: Listen to the full 40-minute Rudy Giuliani phone call with a Ukrainian presidential aide - CNN ,CNN,2021-06-08,17:35:00Z
|
||||||
FDA approves Alzheimer's drug from Biogen^ against experts' advice - NBC News,NBC News,2021-06-07,17:59:36Z
|
Waterford dog attack: Dog that attacked and killed three-month-old baby girl is put down as post mortem carried out on child - Independent.ie,Independent.ie,2021-06-08,17:31:00Z
|
||||||
Covid: Euro 2020 fan zone in Glasgow an 'absolute slap' for hospitality - BBC News,BBC News,2021-06-07,17:47:18Z
|
Missing bundles of joy: Govt can't find woman who gave birth to 10 babies - Eyewitness News,EWN,2021-06-08,17:25:17Z
|
||||||
As AMC Entertainment stock surges 20%^ SEC says it's watching memes for 'disruptions of the market^ manipulative trading^ or other misconduct' - MarketWatch,MarketWatch,2021-06-07,17:47:00Z
|
UK housing market is on fire^ warns Bank of England chief economist - The Guardian,The Guardian,2021-06-08,17:22:00Z
|
||||||
Stream of stars extends thousands of light-years across the Milky Way - Phys.org,Phys.Org,2021-06-07,17:46:34Z
|
Chris Harrison: The Bachelor host leaves for good over racism row - BBC News,BBC News,2021-06-08,17:19:39Z
|
||||||
New Brunswick fails to meet vaccination target^ delays first phase of reopening plan - HalifaxToday.ca,HalifaxToday.ca,2021-06-07,17:45:58Z
|
COVID-19 Update: Three-day vaccination blitz at Telus Convention Centre | Delta variant outbreaks confirmed at Foothills | Alberta urges Ottawa to drop hotel quarantines - Calgary Herald,Calgary Herald,2021-06-08,17:15:00Z
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
name,current,opening
|
name,current,opening
|
||||||
MSFT,253.81,249.98
|
MSFT,252.57,255.16
|
||||||
NFLX,494.66,492.9169
|
NFLX,492.39,497
|
||||||
GOOG,2466.09,2451.32
|
GOOG,2482.85,2479.9
|
||||||
|
|
BIN
display_image
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
display_image.ppm
Executable file
After Width: | Height: | Size: 2.1 KiB |
BIN
final1.ppm
BIN
logos/weather_icons/small_icons/01.png
Normal file
After Width: | Height: | Size: 165 B |
BIN
logos/weather_icons/small_icons/02.png
Normal file
After Width: | Height: | Size: 189 B |
BIN
logos/weather_icons/small_icons/03.png
Normal file
After Width: | Height: | Size: 162 B |
BIN
logos/weather_icons/small_icons/04.png
Normal file
After Width: | Height: | Size: 187 B |
BIN
logos/weather_icons/small_icons/09.png
Normal file
After Width: | Height: | Size: 210 B |
BIN
logos/weather_icons/small_icons/10.png
Normal file
After Width: | Height: | Size: 199 B |
BIN
logos/weather_icons/small_icons/11.png
Normal file
After Width: | Height: | Size: 215 B |
BIN
logos/weather_icons/small_icons/13.png
Normal file
After Width: | Height: | Size: 168 B |
BIN
logos/weather_icons/small_icons/50.png
Normal file
After Width: | Height: | Size: 157 B |
229
stockTicker.py
@ -64,8 +64,15 @@ class StockTicker():
|
|||||||
image = image.convert('RGB')
|
image = image.convert('RGB')
|
||||||
return image
|
return image
|
||||||
|
|
||||||
|
def degreesToCompass(self, deg):
|
||||||
|
|
||||||
def setImage(self, image, offset_x = 0, offset_y = 0, unsafe=False):
|
dirs = ['N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW']
|
||||||
|
|
||||||
|
return dirs[int((deg+22.5)//45)%8]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def setImage(self, image, offset_x = 0, offset_y = 0, unsafe=False, min_x = 0, max_x = 128, min_y = 0, max_y = 32):
|
||||||
|
|
||||||
|
|
||||||
if (image.mode != "RGB"):
|
if (image.mode != "RGB"):
|
||||||
@ -86,11 +93,12 @@ class StockTicker():
|
|||||||
# C functions can certainly be faster.
|
# C functions can certainly be faster.
|
||||||
img_width, img_height = image.size
|
img_width, img_height = image.size
|
||||||
pixels = image.load()
|
pixels = image.load()
|
||||||
for x in range(max(0, -offset_x), min(img_width, self.matrix.width - offset_x)):
|
for x in range(max(0,-offset_x), min(img_width, self.matrix.width - offset_x)):
|
||||||
|
|
||||||
for y in range(max(0, -offset_y), min(img_height, self.matrix.height - offset_y)):
|
for y in range(max(0, -offset_y), min(img_height, self.matrix.height - offset_y)):
|
||||||
(r, g, b) = pixels[x, y]
|
(r, g, b) = pixels[x, y]
|
||||||
|
if min_x <= x + offset_x <= max_x and min_y <= y + offset_y <= max_y:
|
||||||
self.matrix.SetPixel(x + offset_x, y + offset_y, r*self.brightness, g*self.brightness, b*self.brightness)
|
self.matrix.SetPixel(x + offset_x, y + offset_y, r*self.brightness, g*self.brightness, b*self.brightness)
|
||||||
|
|
||||||
def scrollImage(self, image, offset_x = 0, offset_y = 0):
|
def scrollImage(self, image, offset_x = 0, offset_y = 0):
|
||||||
img_width, img_height = image.size
|
img_width, img_height = image.size
|
||||||
@ -550,7 +558,8 @@ class StockTicker():
|
|||||||
large_font = ImageFont.load("./fonts/10x20.pil")
|
large_font = ImageFont.load("./fonts/10x20.pil")
|
||||||
|
|
||||||
|
|
||||||
location_img = self.textImage(location, small_font)
|
location_img = self.textImage(location, small_font, r = 255, g = 255, b = 0)
|
||||||
|
|
||||||
|
|
||||||
img.paste(location_img, (5,0))
|
img.paste(location_img, (5,0))
|
||||||
|
|
||||||
@ -566,10 +575,10 @@ class StockTicker():
|
|||||||
weather_img = Image.open(weather_dir + '/weather_type_icons/' + weather_ids[main] + '.png')
|
weather_img = Image.open(weather_dir + '/weather_type_icons/' + weather_ids[main] + '.png')
|
||||||
img.paste(weather_img, (5,12))
|
img.paste(weather_img, (5,12))
|
||||||
|
|
||||||
temp_img = self.textImage(str("{0:.0f}".format(current_weather['temp'])), large_font)
|
temp_img = self.textImage(str("{0:.0f}".format(current_weather['temp'])), large_font, r = 200, g = 0, b = 255)
|
||||||
img.paste(temp_img, (50,9))
|
img.paste(temp_img, (50,9))
|
||||||
|
|
||||||
deg_img = self.textImage('o', small_font)
|
deg_img = self.textImage('o', small_font, r = 200, g = 0, b = 255)
|
||||||
print(temp_img.size)
|
print(temp_img.size)
|
||||||
img.paste(deg_img, (70, 8))
|
img.paste(deg_img, (70, 8))
|
||||||
|
|
||||||
@ -577,7 +586,7 @@ class StockTicker():
|
|||||||
main_img = self.textImage(main, small_font)
|
main_img = self.textImage(main, small_font)
|
||||||
img.paste(main_img, (45, 26))
|
img.paste(main_img, (45, 26))
|
||||||
|
|
||||||
feels_img = self.textImage('Feels like:' + str("{0:.0f}".format(current_weather['feels_like'])), small_font)
|
feels_img = self.textImage('Feels like:' + str("{0:.0f}".format(current_weather['feels_like'])), small_font, r = 200, g = 0, b = 255)
|
||||||
img.paste(feels_img, (41, 0))
|
img.paste(feels_img, (41, 0))
|
||||||
|
|
||||||
min_img = self.textImage( "{0:.0f}".format(current_weather['min_temp']), small_font, r=0, g=0, b=255)
|
min_img = self.textImage( "{0:.0f}".format(current_weather['min_temp']), small_font, r=0, g=0, b=255)
|
||||||
@ -593,10 +602,10 @@ class StockTicker():
|
|||||||
img.paste(htext_img, (120, 10))
|
img.paste(htext_img, (120, 10))
|
||||||
|
|
||||||
uv_img = Image.open(weather_dir + '/uv.png')
|
uv_img = Image.open(weather_dir + '/uv.png')
|
||||||
img.paste(uv_img, ( 109, 20))
|
img.paste(uv_img, ( 107, 20))
|
||||||
|
|
||||||
utext_img = self.textImage(str(current_weather['uv']) , small_font)
|
utext_img = self.textImage(str(current_weather['uv']) , small_font)
|
||||||
img.paste(utext_img, (120, 23))
|
img.paste(utext_img, (118, 23))
|
||||||
|
|
||||||
weekdays = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
|
weekdays = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
|
||||||
months =['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
|
months =['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
|
||||||
@ -608,14 +617,14 @@ class StockTicker():
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
date_img = self.textImage(month + ' ' + date + ', ' + weekday, small_font)
|
date_img = self.textImage(month + ' ' + date + ',' + weekday, small_font)
|
||||||
img.paste(date_img, (132, 0))
|
img.paste(date_img, (132, 0))
|
||||||
|
|
||||||
rain_img = Image.open(weather_dir + '/rain-chance.png')
|
rain_img = Image.open(weather_dir + '/rain-chance.png')
|
||||||
img.paste(rain_img, (143,8))
|
img.paste(rain_img, (143,8))
|
||||||
|
|
||||||
|
|
||||||
rtext_img = self.textImage(str(current_weather['clouds']) + '%', small_font)
|
rtext_img = self.textImage(str(current_weather['rain_chance']) + '%', small_font)
|
||||||
img.paste(rtext_img, (156, 10))
|
img.paste(rtext_img, (156, 10))
|
||||||
|
|
||||||
cloud_img = Image.open(weather_dir + '/clouds.png')
|
cloud_img = Image.open(weather_dir + '/clouds.png')
|
||||||
@ -625,58 +634,141 @@ class StockTicker():
|
|||||||
img.paste(ctext_img, (156, 22))
|
img.paste(ctext_img, (156, 22))
|
||||||
|
|
||||||
wind_img = Image.open(weather_dir + '/wind.png')
|
wind_img = Image.open(weather_dir + '/wind.png')
|
||||||
img.paste(wind_img, (177,8))
|
img.paste(wind_img, (179,8))
|
||||||
|
|
||||||
wtext_img = self.textImage(str(current_weather['wind_speed']) + 'm/s', small_font)
|
wtext_img = self.textImage("{0:.0f}".format(current_weather['wind_speed']) + 'm/s', small_font)
|
||||||
img.paste(wtext_img, (190, 10))
|
img.paste(wtext_img, (192, 10))
|
||||||
|
|
||||||
|
wdir_img = self.textImage(self.degreesToCompass(current_weather['wind_direction']), small_font)
|
||||||
|
img.paste(wdir_img, (212, 10))
|
||||||
|
|
||||||
vis_img = Image.open(weather_dir + '/visibility.png')
|
vis_img = Image.open(weather_dir + '/visibility.png')
|
||||||
img.paste(vis_img, (177,20))
|
img.paste(vis_img, (179,20))
|
||||||
|
|
||||||
vtext_img = self.textImage(str(current_weather['visibility']/1000) + 'km', small_font)
|
vtext_img = self.textImage(str(current_weather['visibility']/1000) + 'km', small_font)
|
||||||
img.paste(vtext_img, (190, 22))
|
img.paste(vtext_img, (192, 22))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return img
|
return img
|
||||||
|
|
||||||
def getDailyWeatherImage(self):
|
def getDailyWeatherImage(self):
|
||||||
|
|
||||||
|
|
||||||
location = 'London'
|
location = 'London'
|
||||||
img = Image.new('RGB', (1000, 32))
|
img = Image.new('RGB', (128, 32))
|
||||||
|
|
||||||
|
current_weather = json.load(open('csv/current_weather.json', 'r'))
|
||||||
daily_weather = json.load(open('csv/daily_weather.json', 'r'))
|
|
||||||
|
|
||||||
small_font = ImageFont.load("./fonts/5x7.pil")
|
small_font = ImageFont.load("./fonts/5x7.pil")
|
||||||
|
extra_small_font = ImageFont.load("./fonts/4x6.pil")
|
||||||
large_font = ImageFont.load("./fonts/10x20.pil")
|
large_font = ImageFont.load("./fonts/10x20.pil")
|
||||||
|
|
||||||
|
|
||||||
location_img = self.textImage(location, small_font)
|
location_img = self.textImage(location, small_font, r = 255, g = 255, b = 0)
|
||||||
|
|
||||||
#img.paste(location_img, (20,0))
|
|
||||||
|
|
||||||
|
main = current_weather['main_weather']
|
||||||
|
if main == 'Clouds':
|
||||||
|
main = current_weather['description']
|
||||||
|
weather_ids = {'Clear': '01', 'few clouds': '02', 'scattered clouds': '03', 'broken clouds':'04', 'overcast clouds':'04', 'Drizzle':'09',
|
||||||
|
'Rain':'10', 'Thunderstorm':'11', 'Snow':'13', 'Mist': '50', 'Smoke': '50', 'Haze': '50', 'Dust': '50', 'Fog': '50',
|
||||||
|
'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')
|
||||||
|
|
||||||
|
|
||||||
|
temp_img = self.textImage(str("{0:.0f}".format(current_weather['temp'])), large_font)
|
||||||
|
|
||||||
|
|
||||||
|
deg_img = self.textImage('o', small_font)
|
||||||
|
|
||||||
|
min_img = self.textImage( "{0:.0f}".format(current_weather['min_temp']), small_font, r=0, g=0, b=255)
|
||||||
|
|
||||||
|
|
||||||
|
max_img = self.textImage( "{0:.0f}".format(current_weather['max_temp']), small_font, r=255, g=0, b=0)
|
||||||
|
|
||||||
|
|
||||||
|
main = current_weather['main_weather']
|
||||||
|
main_img = self.textImage(main, small_font)
|
||||||
|
|
||||||
weekdays = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
|
weekdays = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
|
||||||
months =['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
|
months =['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
|
||||||
month = months[int(datetime.now().strftime('%m'))]
|
month = months[int(datetime.now().strftime('%m'))]
|
||||||
date = str(int(datetime.now().strftime('%d')))
|
date = str(int(datetime.now().strftime('%d')))
|
||||||
|
|
||||||
|
|
||||||
weekday = weekdays[datetime.today().weekday()]
|
weekday = weekdays[datetime.today().weekday()]
|
||||||
|
|
||||||
|
date_img = self.textImage(month + ' ' + date + ',' + weekday, extra_small_font)
|
||||||
|
|
||||||
|
rain_img = Image.open(weather_dir + '/rain-chance.png')
|
||||||
|
|
||||||
|
|
||||||
date_img = self.textImage(month + ' ' + date + ', ' + weekday, small_font)
|
|
||||||
|
rtext_img = self.textImage(str(current_weather['rain_chance']) + '%', extra_small_font)
|
||||||
|
|
||||||
|
|
||||||
|
hum_img = Image.open(weather_dir + '/humidity.png')
|
||||||
|
|
||||||
|
|
||||||
|
htext_img = self.textImage(str(current_weather['humidity']) + '%', extra_small_font)
|
||||||
|
|
||||||
|
|
||||||
|
uv_img = Image.open(weather_dir + '/uv.png')
|
||||||
|
|
||||||
|
|
||||||
|
utext_img = self.textImage(str(current_weather['uv']) , extra_small_font)
|
||||||
|
|
||||||
|
wind_img = Image.open(weather_dir + '/wind.png')
|
||||||
|
|
||||||
|
wtext_img = self.textImage(str(current_weather['wind_speed']) + 'm/s', extra_small_font)
|
||||||
|
|
||||||
|
print(temp_img.size)
|
||||||
|
img.paste(location_img, (0,0))
|
||||||
|
img.paste(weather_img, (0,12))
|
||||||
|
img.paste(temp_img, (30,9))
|
||||||
|
img.paste(deg_img, (50, 8))
|
||||||
|
img.paste(min_img, (56, 10))
|
||||||
|
img.paste(main_img, (30, 26))
|
||||||
|
img.paste(max_img, (56, 20))
|
||||||
|
img.paste(date_img, (location_img.size[0], 1))
|
||||||
|
|
||||||
|
|
||||||
|
img.paste(rain_img, (75,0))
|
||||||
|
img.paste(rtext_img, (88, 1))
|
||||||
|
img.paste(hum_img, (102, 0))
|
||||||
|
img.paste(htext_img, (113, 1))
|
||||||
|
|
||||||
|
#img.paste(uv_img, ( 96, 0))
|
||||||
|
#img.paste(utext_img, (109, 0))
|
||||||
|
#img.paste(wind_img, (96,0))
|
||||||
|
#img.paste(wtext_img, (109,0))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
img0 = img
|
||||||
|
|
||||||
|
img = Image.new('RGB', (1000, 32))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
daily_weather = json.load(open('csv/daily_weather.json', 'r'))
|
||||||
|
|
||||||
#img.paste(date_img, (70, 0))
|
#img.paste(date_img, (70, 0))
|
||||||
|
|
||||||
|
|
||||||
print(len(daily_weather))
|
x_offset = 64
|
||||||
weather_dir = './logos/weather_icons'
|
|
||||||
|
|
||||||
weather_ids = {'Clear': '01', 'few clouds': '02', 'scattered clouds': '03', 'broken clouds':'04', 'overcast clouds':'04', 'Drizzle':'09',
|
for i in range(0,len(daily_weather)-1):
|
||||||
'Rain':'10', 'Thunderstorm':'11', 'Snow':'13', 'Mist': '50', 'Smoke': '50', 'Haze': '50', 'Dust': '50', 'Fog': '50',
|
|
||||||
'Sand': '50', 'Ash': '50', 'Squall': '50', 'Tornado': '50'}
|
|
||||||
|
|
||||||
x_offset = 4
|
|
||||||
|
|
||||||
for i in range(len(daily_weather)):
|
weekday = weekdays[(datetime.today().weekday() + i)%7]
|
||||||
|
|
||||||
|
day_img = self.textImage( weekday, small_font)
|
||||||
weather = daily_weather[i]
|
weather = daily_weather[i]
|
||||||
main = weather['main_weather']
|
main = weather['main_weather']
|
||||||
|
|
||||||
@ -684,21 +776,24 @@ class StockTicker():
|
|||||||
if main == 'Clouds':
|
if main == 'Clouds':
|
||||||
main = weather['description']
|
main = weather['description']
|
||||||
|
|
||||||
weather_img = Image.open(weather_dir + '/weather_type_icons/' + weather_ids[main] + '.png')
|
weather_img = Image.open(weather_dir + '/small_icons/' + weather_ids[main] + '.png')
|
||||||
min_img = self.textImage( "{0:.0f}".format(weather['min_temp']), small_font, r=0, g=0, b=255)
|
min_img = self.textImage( "{0:.0f}".format(weather['min_temp']), small_font, r=0, g=0, b=255)
|
||||||
|
|
||||||
|
|
||||||
max_img = self.textImage( "{0:.0f}".format(weather['max_temp']), small_font, r=255, g=0, b=0)
|
max_img = self.textImage( "{0:.0f}".format(weather['max_temp']), small_font, r=255, g=0, b=0)
|
||||||
|
|
||||||
img.paste(weather_img, (x_offset, 0))
|
img.paste(day_img, (x_offset +5, 9))
|
||||||
img.paste(min_img, (x_offset, 26))
|
img.paste(weather_img, (x_offset +5, 16))
|
||||||
img.paste(max_img, (x_offset + 12, 26))
|
img.paste(min_img, (x_offset + 25, 10))
|
||||||
|
img.paste(max_img, (x_offset + 25, 21))
|
||||||
|
|
||||||
x_offset += weather_img.size[0] + 5
|
x_offset += 35
|
||||||
|
|
||||||
img = img.crop((0,0,x_offset,32))
|
img1 = img.crop((64,0,x_offset ,32))
|
||||||
|
|
||||||
return img
|
img1.save('weather.ppm')
|
||||||
|
|
||||||
|
return img0, img1
|
||||||
|
|
||||||
#Send the final stitched image to the display for set amount of time
|
#Send the final stitched image to the display for set amount of time
|
||||||
def displayStocks(self):
|
def displayStocks(self):
|
||||||
@ -779,6 +874,48 @@ class StockTicker():
|
|||||||
self.running = False
|
self.running = False
|
||||||
print('MATRIX DISPLAY STOP CALLED')
|
print('MATRIX DISPLAY STOP CALLED')
|
||||||
|
|
||||||
|
def displayDailyWeather(self):
|
||||||
|
img0, img1 = self.getDailyWeatherImage()
|
||||||
|
#img = stock_ticker.getTodayWeatherImage()
|
||||||
|
|
||||||
|
|
||||||
|
while True:
|
||||||
|
|
||||||
|
self.setImage(img0, offset_x = 0, offset_y = 0)
|
||||||
|
image = img1
|
||||||
|
|
||||||
|
img_width, img_height = image.size
|
||||||
|
|
||||||
|
offset_x = 64
|
||||||
|
offset_y = 0
|
||||||
|
|
||||||
|
while offset_x > 64-img_width:
|
||||||
|
offset_x -= 1
|
||||||
|
|
||||||
|
|
||||||
|
self.setImage(image, offset_x = offset_x, offset_y = offset_y, min_x = 64, min_y = 9)
|
||||||
|
if offset_x + img_width < self.matrix.width: # if the image is ending
|
||||||
|
self.setImage(image, offset_x = offset_x + img_width, offset_y = offset_y, min_x = 64, min_y = 9)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
try:
|
||||||
|
msg = getInput()
|
||||||
|
if msg == 'K':
|
||||||
|
self.resetMatrix()
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
self.process_msg(msg)
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
sys.stdout.flush()
|
||||||
|
pass
|
||||||
|
|
||||||
|
time.sleep(self.delay)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def process_msg(self, msg):
|
def process_msg(self, msg):
|
||||||
|
|
||||||
if msg == 'S': # stocks
|
if msg == 'S': # stocks
|
||||||
@ -829,12 +966,10 @@ class StockTicker():
|
|||||||
elif msg == 'W': # weather
|
elif msg == 'W': # weather
|
||||||
img = stock_ticker.getTodayWeatherImage()
|
img = stock_ticker.getTodayWeatherImage()
|
||||||
img.save('weather.ppm')
|
img.save('weather.ppm')
|
||||||
self.scrollImageTransition(['weather.ppm', 'weather.ppm'])
|
self.scrollImageTransition(['weather.ppm', 'weather.ppm'], stocks = False)
|
||||||
|
|
||||||
elif msg == 'D': # daily weather
|
elif msg == 'D': # daily weather
|
||||||
img = stock_ticker.getDailyWeatherImage()
|
self.displayDailyWeather()
|
||||||
img.save('weather.ppm')
|
|
||||||
self.scrollImageTransition(['weather.ppm', 'weather.ppm'])
|
|
||||||
|
|
||||||
elif msg == 'K': # kill
|
elif msg == 'K': # kill
|
||||||
self.resetMatrix()
|
self.resetMatrix()
|
||||||
@ -848,10 +983,16 @@ if __name__ == '__main__':
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
#img = stock_ticker.getDailyWeatherImage()
|
#img0, img1 = stock_ticker.getDailyWeatherImage()
|
||||||
#img = stock_ticker.getTodayWeatherImage()
|
#img = stock_ticker.getTodayWeatherImage()
|
||||||
#img.save('weather.ppm')
|
#img.save('weather.ppm')
|
||||||
#stock_ticker.scrollImageTransition(['weather.ppm', 'weather.ppm'])
|
#stock_ticker.process_msg('S')
|
||||||
|
#stock_ticker.process_msg('W')
|
||||||
|
#stock_ticker.displayDailyWeather()
|
||||||
|
|
||||||
|
|
||||||
|
#stock_ticker.delay = 10
|
||||||
|
#stock_ticker.scrollImageTransition(['weather.ppm', 'weather.ppm'], stocks = False)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|