Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
142 commits
Select commit Hold shift + click to select a range
770ca42
feat: modular sensor architecture
Pablomonte Nov 11, 2025
8a7a44a
feat(rs485): add RS485 connectivity
Pablomonte Nov 11, 2025
a085c04
feat(sensors): multi-sensor support + web configuration interface
Pablomonte Nov 11, 2025
6989e07
style: AlterMundi branding and enhanced UI aesthetics
Pablomonte Nov 11, 2025
c9ac559
feat(espnow): auto-discovery mesh network implementation
Pablomonte Nov 12, 2025
61871df
fix(espnow): resolve sensor-gateway handshake issues
Pablomonte Nov 13, 2025
e323614
style: standardize serial log formatting for better readability
Pablomonte Nov 13, 2025
02c3908
feat: add AlterMundi favicon to web interfaces
Pablomonte Nov 14, 2025
b234bbf
security: move credentials to private file excluded from repo
Pablomonte Nov 14, 2025
435b675
feat: add comprehensive Grafana dashboard for sensor monitoring
Pablomonte Nov 14, 2025
3a4a71e
feat: add default sensor config and management buttons
Pablomonte Nov 14, 2025
4263aad
fix: enable mesh data forwarding from sensors to Grafana
Pablomonte Nov 18, 2025
8677241
fix(ci): resolve build failures in PR checks
Pablomonte Nov 19, 2025
db93858
fix(ci): skip release creation on pull requests
Pablomonte Nov 19, 2025
52c161f
feat(sensors): add Modbus TH and HD38 sensor support
Pablomonte Dec 4, 2025
2b2ca81
add suport to 485 tyh sensor (wip)
javierbrk Dec 4, 2025
cd74f8f
add wiring and fix register address
javierbrk Dec 5, 2025
56d9237
add sensor id, device id, and measurement text, fixes #3
javierbrk Dec 5, 2025
fd904ad
Merge pull request #4 from javierbrk/feature/add_sensor_id
Pablomonte Dec 9, 2025
91a2a7d
report wrong measurements when not able to read
javierbrk Dec 9, 2025
c1c89b4
esp32now device id and sensor id
javierbrk Dec 9, 2025
4ef8daf
fix esp now messages and id from devices
javierbrk Dec 10, 2025
09c2bb3
update WiFi channel labels and enable ap in sensors
javierbrk Dec 10, 2025
f4a0e88
Merge pull request #9 from javierbrk/fix/espnowdeviceid
Pablomonte Dec 10, 2025
2f13d86
Merge pull request #10 from Pablomonte/485_ESP-Now
Pablomonte Dec 10, 2025
9259a60
enable mesh mode
javierbrk Dec 10, 2025
07abb29
feat(ui): add HD38 sensor config and reorder sections
Pablomonte Dec 12, 2025
4aebd4e
feat(data): improve /data page with modern multi-sensor UI
Pablomonte Dec 12, 2025
a4f9497
Merge pull request #12 from Pablomonte/feature/improved-data-page
Pablomonte Dec 12, 2025
a99a19e
feat(tools): add modbus-util diagnostic utility for Slicetex sensors
Pablomonte Dec 12, 2025
feb7a58
Merge pull request #11 from javierbrk/fix/espnowdeviceid
Pablomonte Dec 12, 2025
26f7443
fix(HD38): use Soil_HUM field name for Grafana compatibility
Pablomonte Dec 12, 2025
e1f6957
Merge pull request #16 from Pablomonte/485_ESP-Now
Pablomonte Dec 12, 2025
2a509d6
fix(HD38): use soilHum field name for Grafana compatibility
Pablomonte Dec 12, 2025
0148fdd
datasheet
javierbrk Dec 12, 2025
247a587
Merge pull request #17 from javierbrk/datasheets
Pablomonte Dec 12, 2025
fb5b229
copy the script to the corresponding folder
javierbrk Dec 16, 2025
856305c
add 2400 as possible baud rate
javierbrk Dec 16, 2025
1f09337
strong modbus
javierbrk Dec 17, 2025
cb30506
Merge pull request #20 from javierbrk/fix/toolinstaller
Pablomonte Dec 18, 2025
7156da1
Merge pull request #21 from javierbrk/javi/fix/modbus-read-error
Pablomonte Dec 18, 2025
271d611
feat(ModbusTHSensor): add failure and inactivity counters for improve…
javierbrk Dec 18, 2025
01dfe24
implement ModbusManager for shared bus management and refactor Modbus…
javierbrk Dec 19, 2025
bcb0be3
feat(RelayModule2CH): enhance Modbus callback logging and increase fa…
javierbrk Dec 19, 2025
3fdb01e
fix(rs485): implement runtime toggle for RS485 transmission
Pablomonte Dec 19, 2025
79e5c71
feat(RS485): implement unified RS485 bus configuration and raw sendin…
javierbrk Dec 19, 2025
23cbc88
Merge pull request #22 from Pablomonte/fix/rs485-runtime-toggle
Pablomonte Dec 19, 2025
a5bae1e
Add post-build size reporting script for memory usage analysis
javierbrk Dec 19, 2025
88f07d7
copy the script to the corresponding folder
javierbrk Dec 16, 2025
079cf81
add 2400 as possible baud rate
javierbrk Dec 16, 2025
7b5b7b0
Merge pablo/main, keeping local changes
javierbrk Dec 19, 2025
005092c
Merge pull request #23 from javierbrk/add-2ch-relay-support
Pablomonte Dec 19, 2025
b0dee72
add csv for hd38
javierbrk Jan 9, 2026
5ba6761
fix hum error
javierbrk Jan 10, 2026
701e917
new release
javierbrk Jan 10, 2026
50f4478
Merge pull request #27 from javierbrk/add-2ch-relay-support
Pablomonte Jan 13, 2026
06585c3
organizo Grafana/ agrego plantinera-dashboard.json y elimino build_re…
Pablomonte Jan 14, 2026
7e6b8f3
chore: remove old files moved to Grafana/
Pablomonte Jan 14, 2026
31d2494
docs(api): update API.md with real device responses
Pablomonte Jan 15, 2026
f4f938f
docs(api): add /settings and /favicon.svg test results
Pablomonte Jan 15, 2026
e601d67
Merge pull request #29 from Pablomonte/docs/api-real-responses
Pablomonte Jan 15, 2026
978e79b
docs(api): add OpenAPI/Swagger 3.0.3 specification
Pablomonte Jan 15, 2026
73b42ca
Merge pull request #31 from Pablomonte/docs/api-real-responses
Pablomonte Jan 15, 2026
3dabe93
feat: add configurable delay between Modbus sensor readings
Pablomonte Feb 1, 2026
2f40f62
Merge pull request #33 from Pablomonte/feature/bus-delay
Pablomonte Feb 2, 2026
a37b228
feat(ui): add navigation buttons and capacitive sensor calibration
Pablomonte Feb 2, 2026
25cbef6
feat(ota): add ArduinoOTA support for development builds
Pablomonte Feb 2, 2026
7c23f9a
refactor(ota): optimize initialization and clean up code
Pablomonte Feb 2, 2026
3c63805
fix(config): increase modbus delay to 50ms for stability
Pablomonte Feb 2, 2026
f11d7df
Update constants_private.h creation in CI workflow
Pablomonte Feb 4, 2026
cfd7568
Update GitHub Actions workflow for firmware build
Pablomonte Feb 4, 2026
c9d3a24
fix new fw name
javierbrk Feb 4, 2026
160c60a
Fix paths for firmware and SPIFFS binaries
Pablomonte Feb 4, 2026
09fa6f6
Merge remote-tracking branch 'origin/main' into feature/ota-support
Pablomonte Feb 4, 2026
b9107bd
test new version compilation and deploy
javierbrk Feb 4, 2026
6a6401e
Merge pull request #37 from Pablomonte/javierbrk-patch-6
javierbrk Feb 4, 2026
7ee1cbe
Fix typo in firmware.bin output path
Pablomonte Feb 4, 2026
b8603d6
Merge remote-tracking branch 'origin/main' into feature/ota-support
Pablomonte Feb 4, 2026
157332e
eleimino config.json.example, ya que se puede adquirir por api eligie…
Pablomonte Feb 4, 2026
ad17810
removemos funcion localOTA del main.cpp
Pablomonte Feb 4, 2026
6aad6f9
Merge pull request #35 from Pablomonte/feature/ota-support
Pablomonte Feb 5, 2026
6a7b507
Update firmware version to 0.2.11
Pablomonte Feb 5, 2026
44e7d3d
feat(web): add landing page with system information
Pablomonte Feb 5, 2026
a9ad115
add old size files
javierbrk Feb 6, 2026
e91f285
fix postbuild to generate git version
javierbrk Feb 6, 2026
7a04b32
add build report to the binaries
javierbrk Feb 6, 2026
312e78d
Merge pull request #40 from javierbrk/add_old_build_reports
Pablomonte Feb 11, 2026
e7227c5
Refactor: Web Interface overhaul (CSR, Localization, Embed Assets)
Pablomonte Feb 11, 2026
bbcdd45
Merge remote-tracking branch 'origin/main' into feature/landing-page
Pablomonte Feb 11, 2026
47b232b
feat: Add custom partition table for larger firmware
Pablomonte Feb 11, 2026
6b10281
partition size correction
Pablomonte Feb 11, 2026
9cd4da1
Merge pull request #39 from Pablomonte/feature/landing-page
javierbrk Feb 11, 2026
0130f5d
add ds datasheet
javierbrk Mar 26, 2026
1aa6d35
Merge pull request #41 from javierbrk/fixdocs
Pablomonte Apr 3, 2026
29e766e
Pin PlatformIO version to 6.1.16
javierbrk Apr 28, 2026
60b2f2e
feat: add SecretManager for NVS-backed admin password
Pablomonte Apr 28, 2026
bc4e63f
feat: Basic Auth gate + POST /api/admin/password + WiFi pass length c…
Pablomonte Apr 28, 2026
6091d61
feat: admin password UI in /settings + show/hide toggle on password i…
Pablomonte Apr 28, 2026
902212b
test: cover wifi pass length + admin password rules; unbreak native_test
Pablomonte Apr 28, 2026
2dad004
feat: mediator-control — rule engine, actuators, dual timing, rules w…
javierbrk Apr 28, 2026
b59748b
refactor: stable sensorId, counter-based readings, esp_timer, daily t…
javierbrk Apr 29, 2026
affca22
add test for mediator
javierbrk Apr 30, 2026
baf2466
Pin PlatformIO version to 6.1.16
javierbrk Apr 28, 2026
a0a8074
add analog output to analog sensors, fix adqusition settings
javierbrk Apr 26, 2026
833f6ab
fix readme for hd38
javierbrk Apr 26, 2026
429555b
Update digital output voltage specification in HD38Sensor
javierbrk Apr 28, 2026
0479318
Update SensorCapacitive.h
javierbrk Apr 28, 2026
398246e
feat: mediator-control — rule engine, actuators, dual timing, rules w…
javierbrk Apr 28, 2026
3aa96a6
refactor: stable sensorId, counter-based readings, esp_timer, daily t…
javierbrk Apr 29, 2026
68e62d9
fix relays and imrpove docs
javierbrk Apr 30, 2026
2915c0e
fix rebase error
javierbrk Apr 30, 2026
051a997
control funcionando, con reglas
javierbrk Apr 30, 2026
4b51c8a
rules are working
javierbrk Apr 30, 2026
f199e9a
add auto mode and prevent manual lock
javierbrk Apr 30, 2026
0fa5af8
same interface, and list actuator channels
javierbrk Apr 30, 2026
b9abea3
fix rule auto and comand for multiple relays
javierbrk Apr 30, 2026
255db05
add gpio actuator
javierbrk May 1, 2026
d14a0ab
add modbus timer activation and avoid actuator id colition
javierbrk May 1, 2026
f55160a
improve grafana tests and add examples
javierbrk May 1, 2026
4157ad4
include native tests into ci workflow
javierbrk May 1, 2026
c8e24ab
adde testall
javierbrk May 1, 2026
93753cc
support debug messages for tests
javierbrk May 1, 2026
196d5c9
improve testing, add rule file parsing testing
javierbrk May 1, 2026
84c3704
add max on time and min of time
javierbrk May 1, 2026
b4a5c49
fix sdc30 calibration feature, improve tests
javierbrk May 1, 2026
df011f9
check actual device status to resend commands
javierbrk May 2, 2026
e4d0f23
added internal sensor as a sensor
javierbrk May 2, 2026
8b2b2a0
Merge pull request #2 from AlterMundi-MonitoreoyControl/javi/feature/…
javierbrk May 2, 2026
b5b5526
Merge remote-tracking branch 'altermundi/feature/admin-password-manag…
javierbrk May 3, 2026
fa69426
add requireAdminAuth to new critical endpoints
javierbrk May 3, 2026
8a40e0b
report relay status
javierbrk May 3, 2026
2890728
Merge pull request #3 from AlterMundi-MonitoreoyControl/altermundi-main
javierbrk May 3, 2026
c8345dd
create a new version
javierbrk May 3, 2026
04fffbb
Merge pull request #4 from AlterMundi-MonitoreoyControl/altermundi-main
javierbrk May 3, 2026
890b861
add release notes
javierbrk May 3, 2026
bda9ecf
Merge remote-tracking branch 'altermundi/main' into altermundi-main
javierbrk May 3, 2026
f529330
Merge pull request #5 from AlterMundi-MonitoreoyControl/altermundi-main
javierbrk May 3, 2026
3c7d560
docs: update and sync API reference to firmware v0.2.12
Pablomonte May 5, 2026
150b575
Merge pull request #6 from AlterMundi-MonitoreoyControl/docs/api-sync
Pablomonte May 7, 2026
0dee8f5
publish raw en grafana
javierbrk May 13, 2026
a557a55
send raw data to grafana
javierbrk May 13, 2026
ed02c01
add build reports
javierbrk May 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 25 additions & 5 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,15 +22,33 @@ jobs:
python-version: '3.x'

- name: Install PlatformIO
run: pip install platformio
run: pip install platformio==6.1.16

- name: Create constants_private.h from secrets
run: |
cat > include/constants_private.h << 'EOF'
#ifndef CONSTANTS_PRIVATE_H
#define CONSTANTS_PRIVATE_H

// Configuración privada - generado automáticamente en CI

const char* URL = "${{ secrets.GRAFANA_URL }}";
const char* TOKEN_GRAFANA = "${{ secrets.GRAFANA_TOKEN }}";

#endif
EOF

- name: Run Unit Tests
run: pio test -e native_test

- name: Build Firmware
run: |
mkdir -p binarios
pio run -e esp32dev # Compila todo, incluyendo firmware.bin
pio run -e esp32dev --target buildfs # También el SPIFFS
cp .pio/build/esp32dev/firmware.bin binarios/SendToGrafana.ino.bin
cp .pio/build/esp32dev/spiffs.bin binarios/ || echo "No se generó spiffs.bin"
pio run -e esp32dev_multi # Compila todo, incluyendo firmware.bin
pio run -e esp32dev_multi --target buildfs # También el SPIFFS
cp .pio/build/esp32dev_multi/firmware.bin binarios/firmware.bin
cp .pio/build/esp32dev_multi/spiffs.bin binarios/ || echo "No se generó spiffs.bin"
cp build_reports/size_report_esp32dev_multi.txt binarios/ || echo "No se generaron reportes de build"

- name: Get Version
id: get_version
Expand All @@ -39,10 +57,12 @@ jobs:
echo "version=$VERSION" >> $GITHUB_ENV

- name: Create Release
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
uses: ncipollo/release-action@v1
with:
artifacts: "binarios/*"
tag: "${{ env.version }}"
name: Release "${{ env.version }}"
body: "Binarios de firmware generados automáticamente"
generateReleaseNotes: true
token: ${{ secrets.GITHUB_TOKEN }}
16 changes: 15 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,18 @@
.vscode/c_cpp_properties.json
.vscode/launch.json
.vscode/ipch
build_simulation.bat
build_simulation.bat

# Archivos privados con credenciales
include/constants_private.h

# Generados por PlatformIO/IDE
compile_commands.json

# Claude Code
.claude/

# Build reports (generados por CI) deben ser incluidos no descomentar esta línea
# build_reports/
tools/venv
tools/__pycache__
122 changes: 122 additions & 0 deletions Grafana/DASHBOARD_GRAFANA.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
# Dashboard de Grafana - Monitoreo de Sensores

Dashboard de Grafana para visualizar datos de sensores de temperatura, humedad y CO2.

## Características

**Variables dinámicas:**
- Dispositivo: filtra por dispositivo específico o todos
- Tipo de sensor: SCD30, BME280, DHT22, mesh_XXX, etc.

**Paneles:**
- Stats de resumen (dispositivos activos, promedios)
- Gráficas temporales por dispositivo (temp, hum, CO2)
- Tabla de estado actual con colores según rangos
- Mapa de calor de CO2

## Umbrales

| Métrica | Verde | Amarillo | Naranja | Rojo |
|---------|-------|----------|---------|------|
| Temp | 18-25°C | 25-30°C | - | <18 o >30°C |
| Hum | 40-70% | 30-40% o 70-80% | - | <30 o >80% |
| CO2 | <800 ppm | 800-1000 | 1000-1500 | >1500 |

## Instalación

1. Acceder a `https://grafana.altermundi.net`
2. Ir a **Dashboards** → **Import**
3. Subir `grafana-dashboard.json`
4. Seleccionar fuente de datos **InfluxDB**
5. Click en **Import**

## Configuración de Fuente de Datos

| Parámetro | Valor |
|-----------|-------|
| Tipo | InfluxDB |
| URL | `http://localhost:8086` |
| Database | `cto` |
| HTTP Method | GET |

Query de prueba:
```sql
SELECT * FROM "medicionesCO2" WHERE time > now() - 1h
```

## Estructura de Datos

**Measurement:** `medicionesCO2`

**Tags:**
- `device`: ID del dispositivo (ej: `moni-80F3DAAD`)
- `sensor`: Tipo de sensor (ej: `SCD30`, `BME280`)

**Fields:**
- `temp`: Temperatura en °C
- `hum`: Humedad en %
- `co2`: CO2 en ppm

Ejemplo:
```
medicionesCO2,device=moni-80F3DAAD,sensor=SCD30 temp=23.5,hum=60.2,co2=450 1699876543000000000
```

## Alertas

Alerta pre-configurada de CO2:
- Condición: CO2 promedio > 1000 ppm durante 5 minutos
- Frecuencia: 1 minuto

Configurar notificaciones en **Alerting** → **Notification channels**.

## Personalización

Modificar umbrales de CO2 en el JSON:
```json
"thresholds": {
"steps": [
{"value": null, "color": "green"},
{"value": 800, "color": "yellow"},
{"value": 1000, "color": "orange"},
{"value": 1500, "color": "red"}
]
}
```

Variables adicionales (ej: ubicación):
```json
{
"name": "ubicacion",
"type": "query",
"query": "SHOW TAG VALUES FROM \"medicionesCO2\" WITH KEY = \"ubicacion\""
}
```

## Troubleshooting

**No aparecen datos:**

1. Verificar fuente de datos:
```bash
curl "http://grafana.altermundi.net:8086/query?db=cto&q=SELECT * FROM medicionesCO2 LIMIT 10"
```

2. Verificar sensores:
- Logs del ESP32
- Conectividad WiFi
- URL en `constants_private.h`

3. Query vacío: ajustar rango de tiempo, verificar filtros y nombres de tags/fields.

## Backup

```bash
curl -H "Authorization: Bearer YOUR_API_KEY" \
https://grafana.altermundi.net/api/dashboards/uid/DASHBOARD_UID \
> backup-dashboard-$(date +%Y%m%d).json
```

---

**Versión**: 1.0 | **Grafana**: 7.4+ | **DB**: InfluxDB 1.x
Loading
Loading