-
Notifications
You must be signed in to change notification settings - Fork 99
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #79 from brentru/integrate-darkskies
Integrate Dark Sky Weather Forecasts
- Loading branch information
Showing
5 changed files
with
160 additions
and
60 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
__version__ = "2.0.18" | ||
__version__ = "2.0.19" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,125 @@ | ||
""" | ||
Example of using the Adafruit IO MQTT Client | ||
for subscribing to the Adafruit IO Weather Service | ||
Note: This feature is avaliable for IO Plus Subscribers ONLY | ||
API Documentation: https://io.adafruit.com/services/weather | ||
Author: Brent Rubell for Adafruit Industries | ||
""" | ||
|
||
# Import standard python modules. | ||
import sys | ||
import json | ||
|
||
# Import Adafruit IO MQTT client. | ||
from Adafruit_IO import MQTTClient | ||
|
||
# Set to your Adafruit IO key. | ||
# Remember, your key is a secret, | ||
# so make sure not to publish it when you publish this code! | ||
ADAFRUIT_IO_KEY = 'KEY' | ||
|
||
# Set to your Adafruit IO username. | ||
# (go to https://accounts.adafruit.com to find your username) | ||
ADAFRUIT_IO_USERNAME = 'USER' | ||
|
||
# Set to ID of the forecast to subscribe to for updates | ||
forecast_id = 2153 | ||
|
||
# Set to the ID of the feed to subscribe to for updates. | ||
""" | ||
Valid forecast types are: | ||
current | ||
forecast_minutes_5 | ||
forecast_minutes_30 | ||
forecast_hours_1 | ||
forecast_hours_2 | ||
forecast_hours_6 | ||
forecast_hours_24 | ||
forecast_days_1 | ||
forecast_days_2 | ||
forecast_days_5 | ||
""" | ||
# Subscribe to the current forecast | ||
forecast_today = 'current' | ||
# Subscribe to tomorrow's forecast | ||
forecast_two_days = 'forecast_days_2' | ||
# Subscribe to forecast in 5 days | ||
forecast_in_5_days = 'forecast_days_5' | ||
|
||
# Define callback functions which will be called when certain events happen. | ||
# pylint: disable=redefined-outer-name | ||
def connected(client): | ||
# Connected function will be called when the client is connected to Adafruit IO. | ||
# This is a good place to subscribe to feed changes. The client parameter | ||
# passed to this function is the Adafruit IO MQTT client so you can make | ||
# calls against it easily. | ||
print('Connected to Adafruit IO! Listening to forecast: {0}...'.format(forecast_id)) | ||
# Subscribe to changes on the current forecast. | ||
client.subscribe_weather(forecast_id, forecast_today) | ||
|
||
# Subscribe to changes on tomorrow's forecast. | ||
client.subscribe_weather(forecast_id, forecast_two_days) | ||
|
||
# Subscribe to changes on forecast in 5 days. | ||
client.subscribe_weather(forecast_id, forecast_in_5_days) | ||
|
||
# pylint: disable=unused-argument | ||
def disconnected(client): | ||
# Disconnected function will be called when the client disconnects. | ||
print('Disconnected from Adafruit IO!') | ||
sys.exit(1) | ||
|
||
# pylint: disable=unused-argument | ||
def message(client, topic, payload): | ||
"""Message function will be called when any subscribed forecast has an update. | ||
Weather data is updated at most once every 20 minutes. | ||
""" | ||
# forecast based on mqtt topic | ||
if topic == 'current': | ||
# Print out today's forecast | ||
today_forecast = payload | ||
print('\nCurrent Forecast') | ||
parseForecast(today_forecast) | ||
elif topic == 'forecast_days_2': | ||
# Print out tomorrow's forecast | ||
two_day_forecast = payload | ||
print('\nWeather in Two Days') | ||
parseForecast(two_day_forecast) | ||
elif topic == 'forecast_days_5': | ||
# Print out forecast in 5 days | ||
five_day_forecast = payload | ||
print('\nWeather in 5 Days') | ||
parseForecast(five_day_forecast) | ||
|
||
def parseForecast(forecast_data): | ||
"""Parses and prints incoming forecast data | ||
""" | ||
# incoming data is a utf-8 string, encode it as a json object | ||
forecast = json.loads(forecast_data) | ||
# Print out the forecast | ||
try: | ||
print('It is {0} and {1}F.'.format(forecast['summary'], forecast['temperature'])) | ||
except KeyError: | ||
# future weather forecasts return a high and low temperature, instead of 'temperature' | ||
print('It will be {0} with a high of {1}F and a low of {2}F.'.format( | ||
forecast['summary'], forecast['temperatureLow'], forecast['temperatureHigh'])) | ||
print('with humidity of {0}%, wind speed of {1}mph, and {2}% chance of precipitation.'.format( | ||
forecast['humidity'], forecast['windSpeed'], forecast['precipProbability'])) | ||
|
||
# Create an MQTT client instance. | ||
client = MQTTClient(ADAFRUIT_IO_USERNAME, ADAFRUIT_IO_KEY) | ||
|
||
# Setup the callback functions defined above. | ||
client.on_connect = connected | ||
client.on_disconnect = disconnected | ||
client.on_message = message | ||
|
||
# Connect to the Adafruit IO server. | ||
client.connect() | ||
|
||
# Start a message loop that blocks forever waiting for MQTT messages to be | ||
# received. Note there are other options for running the event loop like doing | ||
# so in a background thread--see the mqtt_client.py example to learn more. | ||
client.loop_blocking() |