First commit: Weather basic

This commit is contained in:
José Carlos Cuevas 2020-08-31 23:36:47 +02:00
commit 240bcf92f8
5 changed files with 118 additions and 0 deletions

4
.gitignore vendored Normal file
View file

@ -0,0 +1,4 @@
.pyc
.pyo
config.py
__pycache__

7
README.md Normal file
View file

@ -0,0 +1,7 @@
SmallPrint
==========
This project aims to create a ticket generator
for small thermal paper printers (ESC/POS
compatible) so you can take your most interesting
information with you in a small form.

1
__init__.py Normal file
View file

@ -0,0 +1 @@
__version__ = '0.1.0'

9
config.py.example Normal file
View file

@ -0,0 +1,9 @@
# Simple configuration example
config = {
"OWM": "Your OpenWeatherMap token geos here",
"CITY": "City name",
"PRINTER_USB_ID": "",
"PRINTER_INTERFACE": 0,
"PRINTER_ENDPOINT": 0x01,
}

97
smallprint.py Normal file
View file

@ -0,0 +1,97 @@
#! /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")