Go to file
Óscar M. Lage 9f8af1c290 Fix: CET timestamps in the bot command
When some hour was set via bot, it stored it as GMT, not as CET.
Fixed for that cases:

- ON 20:00
- ON 2024-12-04 20:00
2024-12-04 20:44:16 +01:00
cmd Add: ability to delete events 2024-11-28 22:51:41 +01:00
internal Fix: CET timestamps in the bot command 2024-12-04 20:44:16 +01:00
.air.bot.toml Fix: Docker unify all the builds (air and production) within tmp/ 2024-11-28 23:02:41 +01:00
.air.web.toml Fix: Docker unify all the builds (air and production) within tmp/ 2024-11-28 23:02:41 +01:00
.gitignore Fix: Docker unify all the builds (air and production) within tmp/ 2024-11-28 23:02:41 +01:00
docker-compose.yml Add: Docker 2024-11-28 22:53:45 +01:00
Dockerfile.bot Fix: Docker unify all the builds (air and production) within tmp/ 2024-11-28 23:02:41 +01:00
Dockerfile.web Fix: Docker unify all the builds (air and production) within tmp/ 2024-11-28 23:02:41 +01:00
env.sample Add: Docker 2024-11-28 22:53:45 +01:00
go.mod Initial commit 2024-11-28 13:52:58 +01:00
go.sum Initial commit 2024-11-28 13:52:58 +01:00
Makefile Add: Docker 2024-11-28 22:53:45 +01:00
README.md Cosmetics 2024-11-28 23:06:30 +01:00
TODO.md Initial commit 2024-11-28 13:52:58 +01:00

Proyecto Heating Monitor

Este proyecto gestiona eventos relacionados con el encendido y apagado de sistemas de calefacción, ofreciendo tres funcionalidades principales:

  • Una aplicación web
  • Un bot de Telegram
  • Un comando para importar datos desde un archivo CSV a la base de datos.

Configuración

  1. Copia el archivo env.sample a .env y configura las variables de entorno necesarias:
$ cp env.sample .env

Luego edita el archivo .env con los valores correspondientes:

# Docker
DOCKER_ENV=production
PROJECT_NAME=heating-monitor

# Telegram Bot Configuration
TELEGRAM_TOKEN=xxx:yyy
TELEGRAM_CHATID=123123123

# Web Server Configuration
WEB_PORT=9900
  1. Base de Datos: el proyecto utiliza una base de datos SQLite para almacenar los eventos de calefacción. La configuración de la base de datos se gestiona automáticamente a través del código en el archivo internal/config/db.go. Asegúrate de que el archivo de la base de datos se encuentra en la ubicación correcta para que la conexión funcione correctamente.

Docker

Este proyecto puede ejecutarse fácilmente con Docker. Se han configurado dos entornos: local y production. En el entorno local, se utiliza Air para recargar automáticamente el código durante el desarrollo, mientras que en production se compila el binario y se ejecuta directamente. Asegúrate de tener Docker y Docker compose instalados en tu sistema.

El Makefile ha sido configurado para facilitar la construcción y ejecución de Docker con el argumento --build-arg, que pasará la variable de entorno DOCKER_ENV para que determine el mismo. Dicha variable se lee del archivo .env:

--build-arg DOCKER_ENV=${DOCKER_ENV}: Utiliza esta variable para determinar el entorno de ejecución (local o production), lo que afecta tanto la construcción de los binarios como el comportamiento del contenedor.

$ make build
$ make rebuild
$ make start

Comandos disponibles

1. Comando Web

Este comando inicia un servidor web que permite visualizar los eventos de calefacción a través de una interfaz web.

Uso:

$ go run cmd/web/main.go

Opciones:

  • WEB_PORT: Puerto en el que se ejecuta el servidor web. Puedes configurarlo en el archivo .env.

2. Comando Bot

Este comando inicia un bot de Telegram que permite interactuar con el sistema de calefacción a través de mensajes.

Uso:

$ go run cmd/bot/main.go

Opciones:

  • TELEGRAM_TOKEN: Token de acceso del bot de Telegram.
  • TELEGRAM_CHATID: ID del chat de Telegram donde el bot enviará los mensajes.

3. Comando Import

Este comando importa los datos de un archivo CSV (con formato específico) a la base de datos SQLite, creando eventos de encendido y apagado en función de la información proporcionada en el archivo.

Uso:

$ go run cmd/import/main.go -f /ruta/al/archivo.csv
    -f, --file: Especifica la ruta del archivo CSV a importar.
    --dry-run:  Muestra los datos que se importarían sin hacer cambios en la base de datos
                (útil para verificar la información antes de insertarla).

Dependencias

Este proyecto utiliza varias dependencias de Go. Asegúrate de tenerlas instaladas y configuradas correctamente:

$ go mod tidy

Estructura del Proyecto

.
├── cmd
│   ├── web           # Comando para la aplicación web
│   ├── bot           # Comando para el bot de Telegram
│   └── import        # Comando para importar CSV a la base de datos
├── internal
│   ├── config        # Configuración de la base de datos y otros parámetros
│   └── model         # Modelos y lógica de negocio
├── .env.sample       # Archivo de ejemplo para configuración del entorno
└── README.md         # Este archivo

Contribución

Si deseas contribuir a este proyecto, por favor sigue estos pasos:

  1. Haz un fork del proyecto.
  2. Crea una nueva rama (git checkout -b feature-nueva-caracteristica).
  3. Realiza tus cambios y haz commit de ellos (git commit -am 'Añadir nueva característica').
  4. Haz push a la rama (git push origin feature-nueva-caracteristica).
  5. Crea un pull request describiendo tus cambios.