2 puntos por GN⁺ 2024-06-09 | 1 comentarios | Compartir por WhatsApp
  • Sol Mate e-Paper Display es un proyecto que genera una ilustración que refleja el clima actual y las condiciones de luz de una ubicación especificada, y la muestra en una pantalla Waveshare e-Paper conectada a una Raspberry Pi
  • El script recibe una ubicación, obtiene el clima y renderiza una imagen de alta calidad usando un prompt creado por gpt-5-mini y gpt-image-1-mini, por lo que requiere un token de la API de OpenAI
  • Se puede ingresar no solo una ubicación real, sino también la ubicación de un amigo o un lugar ficticio; para lugares ficticios, GPT envía al servicio meteorológico la latitud y longitud del lugar más parecido en la Tierra
  • El hardware de referencia es una Raspberry Pi 5 y una Waveshare e-Paper 7.3" display; para usar pantallas de otros tamaños hace falta modificar el código
  • control.py admite mostrar en pantalla, previsualización local y limpiar la pantalla; también hay que considerar la recomendación de Waveshare de no mostrar la misma imagen durante mucho tiempo y la posibilidad de que aumenten los costos de la API

Qué hace Sol Mate e-Paper Display

  • Sol Mate e-Paper Display es un conjunto de código que genera y muestra imágenes de reporte del clima con una Raspberry Pi y una pantalla Waveshare e-Paper
  • Al principio se creó como ☀️ Sol Mate GPT, y luego surgió este proyecto por curiosidad sobre cómo se vería en una pantalla e-Paper
  • La ubicación de entrada puede ser un lugar real, la ubicación de un amigo o incluso un lugar ficticio
    • Si llueve, el clima actual se refleja en la ilustración, por ejemplo incluyendo personas con paraguas
    • Si se ingresa un lugar ficticio, GPT pasa al servicio meteorológico la latitud y longitud del lugar en la Tierra que considera más parecido

Cómo se generan las imágenes

  • La ilustración se renderiza con el modelo gpt-image-1-mini
  • El prompt de imagen lo genera gpt-5-mini, usando una configuración de imagen de alta calidad
  • Debido a este flujo de generación, para ejecutarlo se necesita un token de la API de OpenAI

Hardware necesario

Ejecución y uso

  • El proyecto está pensado para ejecutarse en una Raspberry Pi
  • Para la gestión del entorno de Python se usa uv
    • Como uv gestiona el entorno virtual, no hace falta activarlo manualmente
uv sync
  • En máquinas de desarrollo que no sean macOS ni Linux, las bibliotecas de hardware de Raspberry Pi se omiten de forma predeterminada
  • Hay que definir la variable de entorno OPENAI_API_KEY
    • También puede leer variables de entorno desde un archivo .env en el directorio de trabajo actual
OPENAI_API_KEY=... uv run python control.py show Barcelona
  • Para revisarlo rápidamente en local, se puede ejecutar el comando preview, que usa la visualización de imágenes de iTerm2
    • De forma predeterminada se guarda en el directorio temporal del sistema como sol-mate-preview-<timestamp>.png
OPENAI_API_KEY=... uv run python control.py preview "Barcelona"

Gestión de pantalla y actualización automática

  • Waveshare recomienda_Manual#Precautions) no dejar la misma imagen demasiado tiempo en la pantalla
  • Para limpiar la pantalla, se usa el comando clear
uv run python control.py clear
  • La configuración de ejemplo actualiza la imagen dos veces al día con cron y limpia la pantalla de madrugada
    • Las rutas deben modificarse según el entorno de instalación de cada persona
    • Las ejecuciones repetidas pueden generar costos no menores
0 8 * * * cd ~/src/sol-mate-eink && OPENAI_API_KEY=... uv run python control.py show Barcelona
0 18 * * * cd ~/src/sol-mate-eink && OPENAI_API_KEY=... uv run python control.py show Barcelona
0 2 * * * cd ~/src/sol-mate-eink && uv run python control.py clear

Backend y recursos de referencia

1 comentarios

 
GN⁺ 2024-06-09
Opiniones de Hacker News
  • Estoy usando Inkplate 6Color en un proyecto parecido.
    Como trae un controlador ESP32 integrado, no hace falta una Pi, y puede funcionar solo con batería.
    Si se planifica bien el esquema de deep sleep/despertar, puede durar varias semanas con una sola carga.
    Lo que más me gusta es un letrero rojo de On Air que tengo colgado en la puerta de la oficina: cuando ejecuto un atajo en la Mac durante reuniones o grabaciones, el estado se actualiza automáticamente y los dispositivos se silencian.
    También hay ejemplos open source para mostrar el clima, noticias y Google Calendar.
    https://soldered.com/product/inkplate-6color-color-e-paper-b...
    Los proyectos baratos con tinta electrónica son realmente divertidos y útiles.

    • Hice un proyecto parecido.
      Una pantalla de tinta electrónica conectada a una Pi Zero muestra solo Yes/No según si va a llover en las próximas 3 horas.
      Pensándolo de nuevo, quizá ni siquiera haga falta una pantalla de 7 colores.
      La pantalla que uso es https://shop.pimoroni.com/products/inky-impression-7-3?varia... y parece más barata.
    • El uso es ingenioso y genial.
      Es tan divertido que dan ganas de poner pantallas de estas por toda la casa.
    • Me sorprendió que fuera algo que cumple con todos los requisitos que necesitaba, y me volvió a sorprender el precio.
  • De forma independiente, hace una semana hice casi lo mismo con la misma pantalla.
    https://imgz.org/iBLADkCU.jpg
    Es un marco que obtiene el clima actual y la hora de una ubicación específica, y muestra una foto generada por IA que incluye ese lugar.
    Me parece curioso cómo ambos llegamos hasta aquí de forma independiente.
    Probablemente era el uso más obvio.

    • Es uno de esos casos en que la idea está por todos lados.
      Es un buen ejemplo para mostrarle a un fundador nuevo que su idea no es la única; de hecho, casi ninguna idea lo es.
      Lo importante es la ejecución.
      Se siente como el Uber y Lyft de los paneles meteorológicos de tinta electrónica; en HN ya había etiquetado más cosas parecidas.
      Cuando tenga tiempo, pienso hacer uno también, y todo esto me inspira para desarrollo con ESP32 y automatización del hogar libre y open source.
  • El proyecto de hardware y la idea son geniales, pero no quiero tocar ni de lejos usar la API de OpenAI en un dispositivo siempre encendido.
    Si algún día hago algo así por diversión, quizá cree una versión con OpenStreetMap y Stable Diffusion alojado en la LAN, así que vale la pena guardarlo en favoritos.

    • Me da curiosidad por qué la combinación de la API de OpenAI y un dispositivo siempre encendido sería un problema.
  • Después de ver proyectos parecidos, compré dos pantallas iguales.

    • "A WiFi color eInk picture frame" https://news.ycombinator.com/item?id=35689706
    • "Color E-Ink Display Photo Frame Pranks [Mom]" https://news.ycombinator.com/item?id=26977747
      Originalmente pensaba hacer un display de fotos a color como esos dos ejemplos, pero esta aplicación también se ve interesante.
    • Me gusta que en el segundo post también haya un primer plano microscópico de la pantalla mientras cambia.
      Espero que te vaya bien con el hackeo, y ojalá pronto podamos ver por aquí el proyecto que armes.
  • En la imagen, Barcelona aparece con 26 °C y 2 °C.
    He estado varias veces en Barcelona, pero me cuesta imaginar que alcance ambas temperaturas el mismo día.
    Me pregunto si los datos del clima son confiables, o si todo es una alucinación y solo hay que disfrutar la animación.
    O quizá no conozco tan bien el clima de Barcelona como pensaba, y sí es posible una máxima de 26 y una mínima de 2.

    • Este es un caso en el que Dall-E no logra escribir texto de forma limpia.
      Los 2 °C son simplemente una alucinación derivada de los 26 °C.
      Como es un proyecto hobby, prioricé que el texto se vea distinto cada vez y normalmente más artístico, en lugar de renderizarlo de la forma tradicional.
      Pero si se quisiera convertir en un producto serio, los modelos de generación de imágenes todavía no son suficientemente buenos para este uso.
  • Me pregunto cuál es la razón de “no dejar la misma imagen en la pantalla durante demasiado tiempo”.
    ¿Es un problema propio de la tinta electrónica a color?

    • La recomendación de Waveshare es “refrescar al menos una vez cada 24 horas”[1].
      En la práctica no creo que sea un problema tan grande, pero quizá exista el riesgo de que los píxeles se queden pegados si permanecen activos demasiado tiempo.
      [1]: https://www.waveshare.com/wiki/7.3inch_e-Paper_HAT_(F)_Manua...
    • Me pregunto si será por burn-in o porque los colores se desvanecen.
  • Me pregunto si, a diferencia de la tinta electrónica común en blanco y negro, hay alguna diferencia en el método de visualización que haga necesaria la advertencia de no dejar la misma imagen durante mucho tiempo.
    Si no recuerdo mal, las pantallas estándar de tinta electrónica en blanco y negro no tenían burn-in.

  • Me pregunto por qué este tipo de proyectos siempre especifican usar una computadora pequeña y de bajo consumo, como una Raspberry Pi, para controlar la pantalla
    Ya hay muchas computadoras comunes que corren Debian GNU/Linux
    Si quisiera usar este código en una de esas computadoras para controlar una pantalla de papel electrónico con un cable USB común, ¿no sería posible?
    No parece haber una razón para tener que usar necesariamente algo como una Raspberry Pi

    • Las computadoras pequeñas como la Raspberry Pi facilitan el acceso a GPIO y a periféricos de bajo nivel como SPI, que usa esta pantallita
      En una computadora grande también podrías usarla igual si el sistema operativo permite acceder a esos periféricos
      Antes de que estas computadoras pequeñas se volvieran comunes, se podía usar un puerto paralelo y un programita para comunicarse directamente con periféricos usando las mismas señales de bajo nivel
    • No hace falta en absoluto
      La Raspberry Pi tiene mucha documentación y código para bootstrap, así que es cómoda para que alguien que haya tocado un poco Linux la encienda, instale paquetes y haga algo
      Si tienes tiempo y conocimientos, también se puede hacer con un microcontrolador muy pequeño
      La pantalla en sí no tiene nada mágico, salvo que a veces necesita voltajes de alimentación raros
      El problema más común es que estas pantallas no se comunican directamente por USB
      Para configurar los píxeles reciben SPI o una interfaz digital paralela, así que hace falta una interfaz intermedia y software que dibuje la pantalla
      Por eso mucha gente simplemente conecta una Raspberry Pi y le habla usando un protocolo más común
    • Porque es barata y la batería dura mucho
      Mantener encendida una computadora común solo para prender esta pantalla es ineficiente
  • Como suele pasar con los buenos proyectos, este permite que alguien avance hacia la personalización
    Además de las recomendaciones de hardware, vale la pena ver epaper.py[1] como referencia
    [1]: https://github.com/blixt/sol-mate-eink/blob/main/epaper.py

  • No termino de entender por qué usan IA para obtener el clima
    Hay decenas de APIs gratuitas de clima que se pueden llamar directamente

    • Usan IA para algunas cosas difíciles de hacer con APIs gratuitas
      Convertir el nombre coloquial de un barrio en latitud y longitud exactas es algo que alguna API puede hacer hasta cierto punto, pero no conozco una API gratuita tan precisa como GPT
      Además, si ingresas “Hogwarts” o “Tatooine”, gracias a la IA también te inventa diligentemente el clima de ese lugar[1]
      Lo más importante es que escribe un prompt para Dall-E para generar una imagen que refleje las condiciones meteorológicas reales, el sol, la luna, etc.
      [1]: https://x.com/blixt/status/1724099967361462714
    • Queda como una línea excelente para poner en el currículum
    • También puedes simplemente mirar por la ventana