1
0
Fork 0

Add files via upload

master
Christopher Mancilla 2023-12-26 13:40:39 -03:00 committed by GitHub
parent 0d9f958762
commit 8d77225bee
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 124 additions and 20 deletions

View File

@ -3,6 +3,7 @@ from scripts.Poster.BusPoster import BusPoster
from scripts.Poster.TimeAnnouncement import TimeAnnouncement from scripts.Poster.TimeAnnouncement import TimeAnnouncement
import numpy as np import numpy as np
from datetime import datetime, timedelta from datetime import datetime, timedelta
from import_data import export_data
from PIL import Image from PIL import Image
def reescalar_imagen(input_path, output_path, nuevo_ancho, nuevo_alto): def reescalar_imagen(input_path, output_path, nuevo_ancho, nuevo_alto):
@ -47,7 +48,7 @@ def approx_km(data):
return approx_km return approx_km
def calc_remaining_time(data): def calc_remaining_time(data):
arrival_time = data["timeLabel"] arrival_time = data["timeLabel"][:-3]
target_time = datetime.strptime(arrival_time, "%H:%M").time() target_time = datetime.strptime(arrival_time, "%H:%M").time()
current_time = datetime.now().time() current_time = datetime.now().time()
@ -87,18 +88,25 @@ def obtain_min_max_time(remaining_time):
def main(): def main():
# Carga los datos # Carga los datos
data = load_data() #data = load_data()
data = export_data()
data1 = data[0]
data2 = data[1]
print(data)
# Calcula el tiempo restante a la llegada # Calcula el tiempo restante a la llegada
remaining_time = calc_remaining_time(data) remaining_time1 = calc_remaining_time(data1)
remaining_time2 = calc_remaining_time(data2)
# Obtiene valores máximos y mínimo de rangos para desplegar en pantalla # Obtiene valores máximos y mínimo de rangos para desplegar en pantalla
min_time, max_time = obtain_min_max_time(remaining_time) min_time1, max_time1 = obtain_min_max_time(remaining_time1)
min_time2, max_time2 = obtain_min_max_time(remaining_time2)
# Selecciona el tema # Selecciona el tema
theme = 'day' theme = 'night'
# Alto y ancho de la imagen en pixeles # Alto y ancho de la imagen en pixeles
# height, width = 40, 160 #height, width = 40, 160
height, width = 200, 800 height, width = 200, 800
# Inicia el dibujo y setea el tema # Inicia el dibujo y setea el tema
@ -112,7 +120,7 @@ def main():
time_anmc1.start_draw() time_anmc1.start_draw()
# time_anmc1.set_background() # time_anmc1.set_background()
# time_anmc1.set_base_text() # time_anmc1.set_base_text()
time_anmc1.set_min_max_text(min_time=min_time, max_time=max_time) time_anmc1.set_min_max_text(min_time=min_time1, max_time=max_time1)
# Agrega el anuncio de los minutos restante al arribo # Agrega el anuncio de los minutos restante al arribo
time_anmc2 = TimeAnnouncement(aprox((2/5)*height), aprox((1/3)*width)) time_anmc2 = TimeAnnouncement(aprox((2/5)*height), aprox((1/3)*width))
@ -120,8 +128,8 @@ def main():
time_anmc2.start_draw() time_anmc2.start_draw()
# time_anmc2.set_background() # time_anmc2.set_background()
# time_anmc2.set_base_text() # time_anmc2.set_base_text()
time_anmc2.set_min_max_text(min_time=3, max_time=5) time_anmc2.set_min_max_text(min_time=min_time2, max_time=max_time2)
# Genera la imagen de la linea del bus # Genera la imagen de la linea del bus
poster1 = BusPoster(aprox(1.1*(1/3)*height), aprox(1.1*(1/3)*width)) poster1 = BusPoster(aprox(1.1*(1/3)*height), aprox(1.1*(1/3)*width))
poster1.set_theme(theme) poster1.set_theme(theme)
@ -140,9 +148,10 @@ def main():
poster1.set_params(bus_announcement_1) poster1.set_params(bus_announcement_1)
poster1.load_barlow() poster1.load_barlow()
poster1.set_colors() poster1.set_colors()
# Se setea la ruta y la direccion en la que va # Se setea la ruta y la direccion en la que va
poster1.set_bus_number(bus_number=data["route"]) poster1.set_bus_number(bus_number=data1["route"])
poster1.set_bus_letter(bus_letter=data["direction"]) poster1.set_bus_letter(bus_letter=data1["direction"])
# Genera la imagen de la linea del bus # Genera la imagen de la linea del bus
poster2 = BusPoster(aprox(1.1*(1/3)*height), aprox(1.1*(1/3)*width)) poster2 = BusPoster(aprox(1.1*(1/3)*height), aprox(1.1*(1/3)*width))
@ -163,27 +172,24 @@ def main():
poster2.load_barlow() poster2.load_barlow()
poster2.set_colors() poster2.set_colors()
# Se setea la ruta y la direccion en la que va # Se setea la ruta y la direccion en la que va
poster2.set_bus_number(bus_number="16") poster2.set_bus_number(bus_number=data2["route"])
poster2.set_bus_letter(bus_letter="H") poster2.set_bus_letter(bus_letter=data2["direction"])
# Se agregan todas las imagenes al canvas # Se agregan todas las imagenes al canvas
full_panel.add_image(time_anmc1, (aprox((0.6)*width), aprox(0.05*height))) full_panel.add_image(time_anmc1, (aprox((0.6)*width), aprox(0.05*height)))
full_panel.add_image(time_anmc2, (aprox((0.6)*width), aprox(0.45*height))) full_panel.add_image(time_anmc2, (aprox((0.6)*width), aprox(0.45*height)))
full_panel.add_image(poster1, (aprox((0.05)*width), aprox((0.1)*height))) full_panel.add_image(poster1, (aprox((0.05)*width), aprox((0.1)*height)))
full_panel.add_image(poster2, (aprox((0.05)*width), aprox((0.5)*height))) full_panel.add_image(poster2, (aprox((0.05)*width), aprox((0.5)*height)))
# full_panel.add_image(bm, (aprox(0.02*width),aprox((1/6)*height))) #full_panel.add_image(bm, (aprox(0.02*width),aprox((1/6)*height)))
full_panel.get_image() full_panel.get_image()
input_path = f'/app/example/poster_{height}_{width}.png' full_panel.save_image('/app/example/poster.png')
full_panel.save_image(input_path)
# Ejemplo de uso:
nuevo_alto = 40 # Reemplaza con el alto deseado en píxeles nuevo_alto = 40 # Reemplaza con el alto deseado en píxeles
nuevo_ancho = 160 # Reemplaza con el ancho deseado en píxeles nuevo_ancho = 160 # Reemplaza con el ancho deseado en píxeles
input_path = f'/app/example/poster.png'
output_path = f'/app/example/poster_{nuevo_alto}_{nuevo_ancho}.png' output_path = f'/app/example/poster_{nuevo_alto}_{nuevo_ancho}.png'
reescalar_imagen(input_path, output_path, nuevo_ancho, nuevo_alto) reescalar_imagen(input_path, output_path, nuevo_ancho, nuevo_alto)
if __name__ == '__main__': if __name__ == '__main__':
main() main()

Binary file not shown.

Before

Width:  |  Height:  |  Size: 944 B

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@ -0,0 +1,98 @@
#!/usr/bin/env python3
import requests
import json
from datetime import datetime, timedelta
def api_request():
# URL de la API para "autentificación"
url_auth = 'https://transporte.hz.kursor.cl/api/auth/'
# Datos para autentificar
auth = '''{
"username": "usuario1",
"password": "usuario1"
}'''
# Request
token = requests.post(url_auth, data=auth)
token = token.json()['token']
# URL de la API para info del paradero
url_whoami = 'https://transporte.hz.kursor.cl/api/dispositivos/whoami/'
# Datos de la solicitud
data_whoami = {
"whoami": {
"idDispositivo": "pled30-gtr",
"KeyAuthorizacion": "token"
}
}
#Aquí se ingresa el token obtenido anteriormente
headers_whoami = {
'Authorization': f'Bearer {token}',
'Content-Type': 'application/json'
}
response_whoami = requests.post(url_whoami, json=data_whoami, headers=headers_whoami) #Request
Paradero = response_whoami.json()
url_getinfodevice = 'https://transporte.hz.kursor.cl/api/dispositivos/getInfoDevice/' # URL de la API para obtener los datos de los recorridos
# Datos para la solicitud
data_getinfodevice = {
"GetInfoDevice": {
"idDispositivo": "00000000160f3b42b8:27:eb:0f:3b:42",
"KeyAuthorizacion": "tokenSinUso"
}
}
#Aquí se ingresa el token obtenido anteriormente
headers_getinfodevice = {
'Authorization': f'Bearer {token}',
'Content-Type': 'application/json'
}
# Request
response_getinfodevice = requests.post(url_getinfodevice, json=data_getinfodevice, headers=headers_getinfodevice)
info = response_getinfodevice.json()
return info
#--------------------------------------------------------------------------------------------------------------------------
#Haciendo una lista de todos los buses de este paradero
def lista_buses(info):
data_main = []
hora_actual = datetime.now().time()
for i in range(len(info["GetInfoDeviceResponse"]["DetalleLineas"])):
data = info["GetInfoDeviceResponse"]["DetalleLineas"][i]
bus_info = {}
bus_info["distance"] = data["Llegadas"][0]["DistanciaGPS"] if data["Llegadas"][0]["DistanciaGPS"] is not None else "-"
bus_info["timeLabel"] = data["Llegadas"][0]["EstimadaGPS"] if data["Llegadas"][0]["EstimadaGPS"] is not None else "-"
bus_info["route"] = data["Descripcion"][:-1] if data["Descripcion"] is not None else "-"
bus_info["direction"] = data["Descripcion"][-1] if data["Descripcion"] is not None else "-"
bus_info["number_background_color"] = data["colorFondo"]
bus_info["letter_background_color"] = data["colorTexto"]
bus_info["patente"] = data["Llegadas"][0]["patente"]
diff = timedelta(hours = datetime.strptime(bus_info["timeLabel"], "%H:%M:%S").time().hour - hora_actual.hour,minutes = datetime.strptime(bus_info["timeLabel"], "%H:%M:%S").time().minute - hora_actual.minute,seconds=datetime.strptime(bus_info["timeLabel"], "%H:%M:%S").time().second - hora_actual.second)
bus_info["timeRemaining"] = int(abs(diff.total_seconds() // 60))
data_main.append(bus_info)
return data_main
#--------------------------------------------------------------------------------------------------------------------------------
#Exportando datos
def export_data():
X = api_request()
data_main = lista_buses(X)
data_time = sorted(data_main, key=lambda x: x['timeRemaining'],reverse=True)
data_x = (data_time[0],data_time[1])
return data_x