From b494c9a4bd296450d238875cff58d624cd220124 Mon Sep 17 00:00:00 2001 From: mrwunderbar666 Date: Tue, 1 Aug 2017 17:13:45 +0800 Subject: [PATCH] Weather Forecast Example Script (#239) * Example Weather forecast script Used Adafruits example as base and adapted it for python-escpos Weather icons taken from http://adamwhitcroft.com/climacons/ * Weather Icons from Adam Whitcroft Weather Icons from http://adamwhitcroft.com/climacons/ * update authors * Minor improvements * Weather Script Debugged Added one more Icon Attributed Icons in readme.md changed folder structure * Change formatting * Fixed pathing to graphics issue * fixed image size * autopep8 to clean up the code --- AUTHORS | 1 + examples/graphics/climacons/clear-day.png | Bin 0 -> 5142 bytes examples/graphics/climacons/clear-night.png | Bin 0 -> 21442 bytes examples/graphics/climacons/cloudy.png | Bin 0 -> 22565 bytes examples/graphics/climacons/fog.png | Bin 0 -> 20413 bytes .../graphics/climacons/partly-cloudy-day.png | Bin 0 -> 6088 bytes .../climacons/partly-cloudy-night.png | Bin 0 -> 5106 bytes examples/graphics/climacons/rain.png | Bin 0 -> 4771 bytes examples/graphics/climacons/readme.md | 10 ++ examples/graphics/climacons/sleet.png | Bin 0 -> 5091 bytes examples/graphics/climacons/snow.png | Bin 0 -> 5045 bytes examples/graphics/climacons/wind.png | Bin 0 -> 3136 bytes examples/weather.py | 127 ++++++++++++++++++ 13 files changed, 138 insertions(+) create mode 100644 examples/graphics/climacons/clear-day.png create mode 100644 examples/graphics/climacons/clear-night.png create mode 100644 examples/graphics/climacons/cloudy.png create mode 100644 examples/graphics/climacons/fog.png create mode 100644 examples/graphics/climacons/partly-cloudy-day.png create mode 100644 examples/graphics/climacons/partly-cloudy-night.png create mode 100644 examples/graphics/climacons/rain.png create mode 100644 examples/graphics/climacons/readme.md create mode 100644 examples/graphics/climacons/sleet.png create mode 100644 examples/graphics/climacons/snow.png create mode 100644 examples/graphics/climacons/wind.png create mode 100644 examples/weather.py diff --git a/AUTHORS b/AUTHORS index d0ab9b0..f5f64a5 100644 --- a/AUTHORS +++ b/AUTHORS @@ -15,6 +15,7 @@ ldos Manuel F Martinez Michael Billington Michael Elsdörfer +mrwunderbar666 Nathan Bookham Patrick Kanzler Qian Linfeng diff --git a/examples/graphics/climacons/clear-day.png b/examples/graphics/climacons/clear-day.png new file mode 100644 index 0000000000000000000000000000000000000000..b0cadc9d958f101a166c979a11504c283dfa2909 GIT binary patch literal 5142 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 literal 0 HcmV?d00001 diff --git a/examples/graphics/climacons/cloudy.png b/examples/graphics/climacons/cloudy.png new file mode 100644 index 0000000000000000000000000000000000000000..867f2329a48c599a6596cea5a1d00e670d3f51e6 GIT binary patch literal 22565 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 literal 0 HcmV?d00001 diff --git a/examples/graphics/climacons/fog.png b/examples/graphics/climacons/fog.png new file mode 100644 index 0000000000000000000000000000000000000000..c90bc6f6d43de7408f8d01045706f87dcefcbec5 GIT binary patch literal 20413 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 CM6zK3 literal 0 HcmV?d00001 diff --git a/examples/graphics/climacons/partly-cloudy-day.png b/examples/graphics/climacons/partly-cloudy-day.png new file mode 100644 index 0000000000000000000000000000000000000000..d33b56b0f642c42889578b4957da78c8a87f4cfd GIT binary patch literal 6088 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�V_aUv_G4%ceH|TUw_HSWB_TkWST>J+XLXk=?76M# zB9-->+>A&8I+BX#E5?Qj^+1!cl;2|sk#-guz_E!#!X5TB#q3rtNrPF+!nMVn5<(o{ z{nBL+18PB9_!Y}B>sxq?#yU_NjEA0+Q*c{0Hvc8Qbwm8$kY{j0pAxa`bS9}uaZy*i zv=E1Vl<6FkJDLMJ%NA;F8|WpZ!Ow(?++xOTyDcOfsmm=v@kB30i)Qt(qvAcGnEPus zW=o(^D3W`(#D})7?oaS&r*;%TJ6rg@++h?>Y1#8Bzn&YCGFBr z?LcRX(O%RR*R`lM=oYh?}#L2gzSa@SF;2a(|IcPn1cpU)e0PU)u-t+3ffD^;iRlfRpsiOE1Lh4kvT|i zsd%@C&`Gqlci6~=ef~OIvY&>T{)qMeB|#h>Dw9TW+Z2#!31*=@VN;1fZ9s{HY2vSo zKwmIEYm5h;cL=0d{K?d()Fxa*MS(KIl&*|kDQjBIgIUar>yBIwIiCm<+puBLky|f6 zHeXVh(iU(mEB;xnanU`=jD$rgSX-+2@bN_89je6KQRVF3*!M#bG`k+2-|0Qh{L83* z9>T~dC^DMp(0xw7RQY5G^^NcV2_cjcpZs0T-kt8EN~Oxl+I5l1;LvaEU^~_tUnq`d zY|TTM#9a%MkL3$xv3b*6*-YEZ<~yH>#1O`?-mOds#XsqHY}4{A=a~$f=kG^(UO+2X zEvPSGhv3xO*!(A5W1=$v9$PZOySh{J*o;X9q>+u7bUGBhTm72MHgRf}(yW&;U%LLW z-!T}EcK%1QaoR~HiaVr!$&Jx;;nqeZ|oFDq}hp(#i3pLJ7nxln_8SomoT+Q_64>x#%?dpfF zr|=^c02IKr$m%8kQKiiAMbGkJ1AQxo_gJ3xv1QFXmS%r$Zyz>O?nb%ve^{|C!7iaG!Q literal 0 HcmV?d00001 diff --git a/examples/graphics/climacons/partly-cloudy-night.png b/examples/graphics/climacons/partly-cloudy-night.png new file mode 100644 index 0000000000000000000000000000000000000000..66eaa88aa11e9ac9fb5b5de2292be9302b809063 GIT binary patch literal 5106 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 literal 0 HcmV?d00001 diff --git a/examples/graphics/climacons/readme.md b/examples/graphics/climacons/readme.md new file mode 100644 index 0000000..d610a00 --- /dev/null +++ b/examples/graphics/climacons/readme.md @@ -0,0 +1,10 @@ +# Climacons by Adam Whitcroft + +75 climatically categorised pictographs for web and UI design by [@adamwhitcroft](http://www.twitter.com/#!/adamwhitcroft). + +Visit the [Climacons](http://adamwhitcroft.com/climacons/) website for more information. + +Visit [Adam Whitcroft on GitHub](https://github.com/AdamWhitcroft) + +## License +You are free to use any of the Climacons Icons (the "icons") in any personal or commercial work without obligation of payment (monetary or otherwise) or attribution, however a credit for the work would be appreciated. **Do not** redistribute or sell and **do not** claim creative credit. Intellectual property rights are not transferred with the download of the icons. \ No newline at end of file diff --git a/examples/graphics/climacons/sleet.png b/examples/graphics/climacons/sleet.png new file mode 100644 index 0000000000000000000000000000000000000000..1cf53159403509594f7557c236f7c2d21611a4e8 GIT binary patch literal 5091 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 literal 0 HcmV?d00001 diff --git a/examples/graphics/climacons/wind.png b/examples/graphics/climacons/wind.png new file mode 100644 index 0000000000000000000000000000000000000000..f410f7fe1a42be203216022fd179e07a34dfadde GIT binary patch literal 3136 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 literal 0 HcmV?d00001 diff --git a/examples/weather.py b/examples/weather.py new file mode 100644 index 0000000..fe9f0af --- /dev/null +++ b/examples/weather.py @@ -0,0 +1,127 @@ +#!/usr/bin/python + + +# Adapted script from Adafruit +# Weather forecast for Raspberry Pi w/Adafruit Mini Thermal Printer. +# Retrieves data from DarkSky.net's API, prints current conditions and +# forecasts for next two days. +# Weather example using nice bitmaps. +# Written by Adafruit Industries. MIT license. +# Adapted and enhanced for escpos library by MrWunderbar666 + +# Icons taken from http://adamwhitcroft.com/climacons/ +# Check out his github: https://github.com/AdamWhitcroft/climacons + + +from __future__ import print_function +from datetime import datetime +import calendar +import urllib +import json +import time +import os + +from escpos.printer import Usb + +""" Setting up the main pathing """ +this_dir, this_filename = os.path.split(__file__) +GRAPHICS_PATH = os.path.join(this_dir, "graphics/climacons/") + +# Adapt to your needs +printer = Usb(0x0416, 0x5011, profile="POS-5890") + +# You can get your API Key on www.darksky.net and register a dev account. +# Technically you can use any other weather service, of course :) +API_KEY = "YOUR API KEY" + +LAT = "22.345490" # Your Location +LONG = "114.189945" # Your Location + + +def forecast_icon(idx): + icon = data['daily']['data'][idx]['icon'] + image = GRAPHICS_PATH + icon + ".png" + return image + + +# Dumps one forecast line to the printer +def forecast(idx): + date = datetime.fromtimestamp(int(data['daily']['data'][idx]['time'])) + day = calendar.day_name[date.weekday()] + lo = data['daily']['data'][idx]['temperatureMin'] + hi = data['daily']['data'][idx]['temperatureMax'] + cond = data['daily']['data'][idx]['summary'] + print(date) + print(day) + print(lo) + print(hi) + print(cond) + time.sleep(1) + printer.set( + font='a', + height=2, + align='left', + bold=False, + double_height=False) + printer.text(day + ' \n ') + time.sleep(5) # Sleep to prevent printer buffer overflow + printer.text('\n') + printer.image(forecast_icon(idx)) + printer.text('low ' + str(lo)) + printer.text(deg) + printer.text('\n') + printer.text(' high ' + str(hi)) + printer.text(deg) + printer.text('\n') + # take care of pesky unicode dash + printer.text(cond.replace(u'\u2013', '-').encode('utf-8')) + printer.text('\n \n') + + +def icon(): + icon = data['currently']['icon'] + image = GRAPHICS_PATH + icon + ".png" + return image + + +deg = ' C' # Degree symbol on thermal printer, need to find a better way to use a proper degree symbol + +# if you want Fahrenheit change units= to 'us' +url = "https://api.darksky.net/forecast/" + API_KEY + "/" + LAT + "," + LONG + \ + "?exclude=[alerts,minutely,hourly,flags]&units=si" # change last bit to 'us' for Fahrenheit +response = urllib.urlopen(url) +data = json.loads(response.read()) + +printer.print_and_feed(n=1) +printer.control("LF") +printer.set(font='a', height=2, align='center', bold=True, double_height=True) +printer.text("Weather Forecast") +printer.text("\n") +printer.set(align='center') + + +# Print current conditions +printer.set(font='a', height=2, align='center', bold=True, double_height=False) +printer.text('Current conditions: \n') +printer.image(icon()) +printer.text("\n") + +printer.set(font='a', height=2, align='left', bold=False, double_height=False) +temp = data['currently']['temperature'] +cond = data['currently']['summary'] +printer.text(temp) +printer.text(' ') +printer.text(deg) +printer.text(' ') +printer.text('\n') +printer.text('Sky: ' + cond) +printer.text('\n') +printer.text('\n') + +# Print forecast +printer.set(font='a', height=2, align='center', bold=True, double_height=False) +printer.text('Forecast: \n') +forecast(0) +forecast(1) +printer.cut +printer.control("LF")