Óscar M. Lage
9f8af1c290
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 |
||
---|---|---|
cmd | ||
internal | ||
.air.bot.toml | ||
.air.web.toml | ||
.gitignore | ||
docker-compose.yml | ||
Dockerfile.bot | ||
Dockerfile.web | ||
env.sample | ||
go.mod | ||
go.sum | ||
Makefile | ||
README.md | ||
TODO.md |
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
- 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
- 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 archivointernal/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:
- Haz un fork del proyecto.
- Crea una nueva rama (git checkout -b feature-nueva-caracteristica).
- Realiza tus cambios y haz commit de ellos (git commit -am 'Añadir nueva característica').
- Haz push a la rama (git push origin feature-nueva-caracteristica).
- Crea un pull request describiendo tus cambios.