2020-08-31 23:36:47 +02:00
|
|
|
#! /usr/bin/env python
|
|
|
|
|
|
|
|
# python imports
|
|
|
|
import logging
|
|
|
|
import datetime
|
2020-09-01 19:25:27 +02:00
|
|
|
import os.path
|
2020-08-31 23:36:47 +02:00
|
|
|
|
|
|
|
# 3rd party imports
|
|
|
|
import requests
|
|
|
|
from escpos.printer import Usb, Dummy, File
|
|
|
|
|
|
|
|
from config import config
|
|
|
|
|
|
|
|
|
|
|
|
# Enable logging
|
|
|
|
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
|
|
|
|
level=logging.INFO)
|
|
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
|
|
|
|
def initialize():
|
|
|
|
"""
|
|
|
|
Initializes the printer and returns a printer object to
|
|
|
|
generate the print
|
|
|
|
"""
|
|
|
|
printer_id = config.get("PRINTER_USB_ID")
|
|
|
|
|
|
|
|
if not printer_id:
|
|
|
|
logger.error("Please configure your printer")
|
|
|
|
|
|
|
|
prid1, prid2 = printer_id.split(":")
|
|
|
|
|
|
|
|
printer_interface = config.get("PRINTER_INTERFACE") or 0
|
|
|
|
printer_endpoint = config.get("PRINTER_ENDPOINT") or 0x01
|
|
|
|
|
|
|
|
# return Usb(prid1, prid2, printer_interface, printer_endpoint)
|
|
|
|
return File("/dev/usb/lp2")
|
|
|
|
|
|
|
|
|
|
|
|
def reset_defaults(printer):
|
|
|
|
"""
|
|
|
|
Reset the printer to the defaults
|
|
|
|
"""
|
2020-09-01 19:25:27 +02:00
|
|
|
printer.set(align='left', font='a', width=1, text_type="normal",
|
2020-08-31 23:36:47 +02:00
|
|
|
height=1, density=9, invert=False, smooth=False, flip=False)
|
|
|
|
|
|
|
|
|
|
|
|
def print_weather(printer):
|
|
|
|
reset_defaults(printer)
|
|
|
|
appkey = config.get("OWM")
|
|
|
|
if not appkey:
|
|
|
|
logger.error("Open Weather key not set!")
|
|
|
|
return
|
|
|
|
|
|
|
|
city = config.get("CITY")
|
|
|
|
|
|
|
|
if not city:
|
|
|
|
logger.error("No city set")
|
|
|
|
|
|
|
|
params = {"q": city, "APPID": appkey, "units": "metric"}
|
|
|
|
|
|
|
|
weatherdata = requests.get('http://api.openweathermap.org/data/2.5/weather', params=params)
|
|
|
|
|
|
|
|
if "weather" in weatherdata.json():
|
|
|
|
weather = weatherdata.json()
|
|
|
|
today = datetime.datetime.now()
|
|
|
|
current_day = today.strftime("%a, %d %b, %Y")
|
|
|
|
|
|
|
|
printer.set(align="center",
|
2020-09-01 19:25:27 +02:00
|
|
|
font="a",
|
|
|
|
text_type="b")
|
2020-08-31 23:36:47 +02:00
|
|
|
printer.text(f"{current_day}\n\n{city}\n")
|
|
|
|
|
|
|
|
reset_defaults(printer)
|
|
|
|
printer.set(align="center", font="b")
|
|
|
|
|
|
|
|
description = weather['weather'][0]['description']
|
2020-09-01 19:25:27 +02:00
|
|
|
printer.text(f"{description}\n\n")
|
2020-08-31 23:36:47 +02:00
|
|
|
icon_code = weather['weather'][0]['icon']
|
2020-09-01 19:25:27 +02:00
|
|
|
|
|
|
|
if not os.path.exists(f"icons/weather/{icon_code}.png"):
|
|
|
|
icon_path = "icons/weather/any.png"
|
|
|
|
|
|
|
|
else:
|
|
|
|
icon_path = f"icons/weather/{icon_code}.png"
|
|
|
|
|
|
|
|
printer.image(icon_path,
|
|
|
|
impl="bitImageColumn")
|
|
|
|
printer.text("\n")
|
2020-08-31 23:36:47 +02:00
|
|
|
# TODO: Print a nice icon based on the codes here: https://openweathermap.org/weather-conditions
|
|
|
|
temperature = weather['main']['temp']
|
|
|
|
humidity = weather['main']['humidity']
|
|
|
|
wind = weather['wind']['speed']
|
|
|
|
|
|
|
|
printer.text(f"Temperature: {temperature}C\n")
|
|
|
|
printer.text(f"Humidity: {humidity}%\n")
|
|
|
|
printer.text(f"Wind: {wind}km\\h\n")
|
|
|
|
|
|
|
|
else:
|
|
|
|
logger.error("No weather info available")
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
printer = initialize()
|
|
|
|
print_weather(printer)
|
|
|
|
printer.text("\n\n")
|