forked from ideasasylum/DarkPi
-
Notifications
You must be signed in to change notification settings - Fork 0
/
darksky-dot3k.py
120 lines (112 loc) · 3.95 KB
/
darksky-dot3k.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# This script will get the current weather forecast from #
# Dark Sky and display a variety of stats on Pimoroni's #
# Display-o-Tron 3000, including temperature, humidity, #
# chance of rain and the UV index. The backlight colour will #
# change depending on the UV index and the bar graph will #
# increase as the chance of rain does. You can also exit the #
# script by pressing the joystick button too! #
# Created by Wesley Archer (@raspberrycoulis) #
from dot3k import joystick as nav
from dot3k import lcd
from dot3k import backlight as backlight
backlight.use_rbg() # Required for early-batch DOT3K's as the RGB LEDs are RBG.
from time import sleep
import os
from ConfigParser import ConfigParser
# Import details from config file to save typing
config = ConfigParser()
config.read('config/config.ini')
api_key = config.get('darksky', 'key')
latitude = config.get('darksky', 'latitude')
longitude = config.get('darksky', 'longitude')
units = config.get('darksky', 'units')
try:
import darksky
except ImportError:
exit("This script requires the Dark Sky Python API Wrapper\nInstall with: git clone https://github.com/raspberrycoulis/dark-sky-python.git\nThen run sudo python setup.py install in the directory")
def rainWarning():
forecast = darksky.Forecast(api_key, latitude, longitude, units=units)
hourly = forecast.hourly
rain = hourly[1].precipProbability*100
if rain ==0:
backlight.set_graph(0)
elif (rain >1) and (rain <=9):
backlight.set_graph(0.1)
elif (rain >= 10) and (rain <=19):
backlight.set_graph(0.2)
elif (rain >= 20) and (rain <=29):
backlight.set_graph(0.3)
elif (rain >= 30) and (rain <=39):
backlight.set_graph(0.4)
elif (rain >= 40) and (rain <=49):
backlight.set_graph(0.5)
elif (rain >= 50) and (rain <=59):
backlight.set_graph(0.6)
elif (rain >= 60) and (rain <=69):
backlight.set_graph(0.7)
elif (rain >= 70) and (rain <=79):
backlight.set_graph(0.8)
elif (rain >= 80) and (rain <=89):
backlight.set_graph(0.9)
else:
backlight.set_graph(1.0)
def display():
forecast = darksky.Forecast(api_key, latitude, longitude, units=units)
current = forecast.currently
temp = current.temperature
temp = str(temp)
humidity = current.humidity*100
humidity = str(humidity)
rain = current.precipProbability*100
rain = str(rain)
uvIndex = current.uvIndex
uv = str(uvIndex)
if uvIndex <=2.9:
backlight.rgb(90, 148, 35) # Green (low)
elif (uvIndex >=3) and (uvIndex <=5.9):
backlight.rgb(241, 227, 54) # Yellow (moderate)
elif (uvIndex >=6) and (uvIndex <=7.9):
backlight.rgb(217, 90, 18) # Orange (high)
elif (uvIndex >=8) and (uvIndex <=10.9):
backlight.rgb(185, 2, 34) # Red (very high)
else:
backlight.rgb(99, 74, 195) # Violet (extreme)
try:
lcd.clear()
lcd.set_cursor_position(0, 0)
print("Temperture: "+temp+" C")
lcd.write("Temp: "+temp+"\xf2C")
lcd.set_cursor_position(0, 1)
print("Humidity: "+humidity+"%")
lcd.write("Humidity: "+humidity+"%")
lcd.set_cursor_position(0, 2)
print("Rain: "+rain+"%")
lcd.write("Rain: "+rain+"%")
print("UV Index: "+uv+"")
except:
lcd.write("Connection Error")
# Press the button on the joystick to exit
@nav.on(nav.BUTTON)
def handle_button(pin):
lcd.clear()
backlight.rgb(0, 0, 0)
backlight.set_graph(0)
os._exit(1)
try:
while True:
rainWarning()
display()
sleep(300) # 5 minutes
except (KeyboardInterrupt, SystemExit):
lcd.clear()
lcd.set_cursor_position(0, 0)
lcd.write("Exiting...")
lcd.set_cursor_position(0, 1)
lcd.write("Goodbye!")
sleep(2)
lcd.clear()
backlight.rgb(0, 0, 0)
backlight.set_graph(0)
os._exit(1)