smallprint/smallprint.py

97 lines
2.5 KiB
Python

#! /usr/bin/env python
# python imports
import logging
import sys
import datetime
import random
# 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
"""
printer.set(align='left', font='a', width=1,
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",
font="a")
printer.text(f"{current_day}\n\n{city}\n")
reset_defaults(printer)
printer.set(align="center", font="b")
description = weather['weather'][0]['description']
printer.text(f"{description}\n")
icon_code = weather['weather'][0]['icon']
# 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")