Engineering logbook · systems recordCuaderno de ingeniería · registro de sistemas
Zoel Arias Manchón
I build whole systems, with the security designed in rather than added afterwards.
Construyo sistemas completos, con la seguridad diseñada dentro y no añadida después.
This notebook records thirteen systems built between June and September 2026: firmware, telemetry
pipelines, backend services, security tooling and a Linux distribution compiled from scratch. Each
entry keeps the day it was opened, a real line of the program’s output, and the handful of decisions
holding it up.
Este cuaderno recoge trece sistemas construidos entre junio y septiembre de 2026: firmware,
canalizaciones de telemetría, servicios backend, herramientas de seguridad y una distribución Linux
compilada desde cero. Cada entrada conserva el día en que se abrió, una línea real de la salida del
programa y el puñado de decisiones que la sostienen.
It reads in order, like a notebook. The index below is the shortcut; nothing opens in another tab
unless you ask for it.
Se lee en orden, como un cuaderno. El índice de abajo es el atajo; nada se abre en otra pestaña sin
que se pida.
FIG. 1entry 13 · psychronentrada 13 · psychronESP32 · DHT22 · SSD1306 · MQTT mTLS
A hand over the sensor and the whole chain moves. Real hardware on a breadboard: the node signs its
telemetry with a client certificate and publishes over mutual TLS — humidity climbs on the dashboard as
it climbs on the display.
Una mano sobre el sensor y la cadena entera se mueve. Hardware real sobre protoboard: el nodo firma su
telemetría con un certificado de cliente y publica sobre TLS mutuo — la humedad sube en el panel a la vez
que sube en la pantalla.
FIG. 2entry 08 · maatentrada 08 · maatRust · ratatui · SHA-256
The editor being driven through its four modes. The save it refuses is the point: the file on disk no
longer matches the fingerprint taken when it was opened.
El editor recorriendo sus cuatro modos. Lo interesante es el guardado que rechaza: el fichero en disco ya
no coincide con la huella tomada al abrirlo.
TABLE 1TABLA 1entry 10 · honeytrapentrada 10 · honeytrapMQTT · CoAP
Verbatim classifier output over eight scripted attacks. Severe rows carry the SEVERE mark as well as the
colour, so the severity survives a greyscale print and a colour-blind reader.
Salida literal del clasificador sobre ocho ataques guionizados. Las filas graves llevan la marca GRAVE
además del color, así que la severidad sobrevive a una impresión en gris y a un lector daltónico.
ScenarioEscenario
VerdictVeredicto
NoteNota
credential_bruteforce
BRUTE_FORCE
5 distinct credential pairs, one session5 pares de credenciales distintos, una sesión
wildcard_harvest
WILDCARD_HARVEST
subscription to the full wildcardsuscripción al comodín completo
The verdict belongs to the session, not the packet — and the two CoAP rows returned nothing at all:
answering them would have turned the honeypot into a reflector aimed at a third party.
El veredicto pertenece a la sesión, no al paquete — y las dos filas CoAP no devolvieron nada:
responderlas habría convertido el honeypot en un reflector apuntando a un tercero.
Electrical monitoring over LoRaWAN: the meter transmits, the telemetry stack processes and consumption lands on Grafana dashboards with time-series history. It is the most direct reference for turning a physical installation into an energy-observability service.
Monitorización eléctrica sobre LoRaWAN: el contador emite, la pila de telemetría procesa y el consumo aparece en paneles Grafana con histórico de series temporales. Es la referencia más directa para convertir una instalación física en un servicio de observabilidad energética.
Program outputSalida del programatelemetry — sdm230 · live uplinktelemetría — sdm230 · uplink en vivo
A zero-trust identity platform with a live operations console: passkeys, token rotation, a risk engine and hash-chained audit — plus a ten-scenario attack range for watching the defenses respond.
Plataforma de identidad zero-trust con consola de operaciones en vivo: passkeys, rotación de tokens, motor de riesgo y auditoría encadenada — más un laboratorio con diez ataques para observar cómo responden las defensas.
Program outputSalida del programaaegis — soc console · sse:connectedaegis — consola soc · sse:conectado
A modular network and industrial-protocol scanner that identifies Modbus, IEC-104 and S7comm, discovers hosts, detects services and can capture live traffic. Its hexagonal architecture lets new scan strategies drop in without contaminating the core.
Escáner modular de redes y protocolos industriales que identifica Modbus, IEC-104 y S7comm, descubre hosts, detecta servicios y puede capturar tráfico en vivo. La arquitectura hexagonal permite añadir nuevas estrategias de escaneo sin contaminar el núcleo.
Program outputSalida del programa$ sudo pyscan scan 10.0.8.0/24 --top-ports 100$ sudo pyscan scan 10.0.8.0/24 --top-ports 100
A multi-sensor sentinel node with ML at the edge: air quality, mmWave presence, acoustic events with TinyML and vision with ESP32-CAM. Models run on-device and publish only the verdict — raw audio and images never enter the telemetry. A coherent simulated space drives every channel and fitness functions guard the architecture.
Nodo centinela multisensor con ML en el borde: calidad de aire, presencia mmWave, eventos acústicos con TinyML y visión con ESP32-CAM. Los modelos corren en el dispositivo y solo publican el veredicto — ni audio ni imágenes crudas entran en la telemetría. Un espacio simulado coherente alimenta todos los canales y las funciones de fitness vigilan la arquitectura.
Program outputSalida del programasentinel — room-1 · presence:yes · ml:on-devicesentinel — sala-1 · presencia:sí · ml:on-device
A rural IoT lab that treats the sensor network itself as an attack surface. Every node signs telemetry with HMAC, sequence and nonce; the gateway validates each frame and runs range, replay, stale and rate checks before publishing. Clean data and security alerts travel over separate MQTT streams into two Grafana dashboards: agronomy and SOC.
Laboratorio IoT rural que trata la propia red de sensores como superficie de ataque. Cada nodo firma su telemetría con HMAC, secuencia y nonce; el gateway valida cada frame y ejecuta detección de rango, replay, caducidad y frecuencia antes de publicar. Los datos limpios y las alertas viajan por canales MQTT separados hacia dos dashboards Grafana: agronomía y SOC.
Program outputSalida del programaagrisentinel — signed frame · replay rejectedagrisentinel — frame firmado · replay rechazado
A whole Linux distribution built from scratch with Buildroot: its own toolchain, a hardened kernel and a few-MB immutable userland — no package manager, PIE/RELRO/SSP, KASLR, lockdown+yama LSMs and an nftables default-deny firewall. It ships sentinel, a native Rust tool fusing my pyscan scanner and the AegisVault crypto core into a single static binary: TCP/UDP scanning with OT/ICS recognition plus an argon2id + XChaCha20 vault. Designed to run as the secure MQTT edge gateway.
Una distribución Linux entera compilada desde cero con Buildroot: su propio toolchain, kernel endurecido y un userland inmutable de pocos MB — sin gestor de paquetes, con PIE/RELRO/SSP, KASLR, LSMs lockdown+yama y firewall nftables default-deny. Lleva sentinel, una herramienta nativa en Rust que fusiona mi escáner pyscan y el núcleo cripto de AegisVault en un único binario estático: escaneo TCP/UDP con reconocimiento OT/ICS más un vault argon2id + XChaCha20. Diseñada para correr como pasarela MQTT segura en el borde.
Program outputSalida del programaemberwall — boot · sentinel armed · mqtt tlsemberwall — boot · sentinel armado · mqtt tls
A desktop file-integrity monitor in Rust with an amber-CRT egui interface. It anchors an HMAC-signed SHA-256 baseline and watches a folder in real time; modifications, additions and deletions surface instantly, with native notifications and JSON/CEF export for SIEM.
Monitor de integridad de ficheros de escritorio en Rust con interfaz egui ámbar-CRT. Ancla un baseline SHA-256 firmado con HMAC y vigila una carpeta en tiempo real; cualquier modificación, alta o borrado aparece al instante, con notificación nativa y exportación JSON/CEF para SIEM.
Program outputSalida del programaphosphor — guarding · sha-256 · hmac:onphosphor — vigilando · sha-256 · hmac:on
A retro modal terminal editor written in Rust. Maat fingerprints the file on open, checks the disk before every save, blocks conflicting overwrites, writes atomically and emits JSON/CEF events. It also includes incremental search, undo/redo, line registers and non-interactive verification for scripts and appliances.
Editor modal retro para terminal escrito en Rust. Maat toma una huella SHA-256 al abrir el archivo, comprueba el disco antes de guardar, bloquea sobrescrituras conflictivas, escribe de forma atómica y emite eventos JSON/CEF. Incluye búsqueda incremental, undo/redo, registros de línea y verificación no interactiva para scripts y appliances.
Program outputSalida del programamaat — buffer ≠ disk · write blockedmaat — buffer ≠ disco · guardado bloqueado
A real-time market terminal: Rust backend, live prices over WebSockets, PostgreSQL persistence, hardened authentication and Prometheus/Grafana observability. It demonstrates the same event and telemetry engineering sensor fleets demand, applied to a different domain.
Terminal de mercado en tiempo real: backend Rust, precios en vivo por WebSockets, persistencia PostgreSQL, autenticación endurecida y observabilidad con Prometheus y Grafana. Demuestra la misma ingeniería de eventos y telemetría que exigen las flotas de sensores, aplicada a un dominio distinto.
Program outputSalida del programacrypto-watch — btc/eur · ws:streamingcrypto-watch — btc/eur · ws:streaming
A low-interaction MQTT/CoAP honeypot that emulates believable IoT devices to capture and classify what they attract: default credentials, wildcard harvesting, CoAP enumeration and deliberately malformed packets. The verdict belongs to the session rather than the packet — three isolated CONNECTs are not brute force until you see them together. And over UDP the source address is unverified, so answering would turn the decoy into a DDoS reflector aimed at a third party: an amplification ceiling, a per-source token bucket and a refused Proxy-Uri decide whether a reply goes out. The capture is never lost — the attempt is the signal.
Honeypot MQTT/CoAP de baja interacción que emula dispositivos IoT creíbles para capturar y clasificar lo que atraen: credenciales por defecto, suscripciones comodín, enumeración CoAP y paquetes rotos a propósito. El veredicto vive en la sesión, no en el paquete — tres CONNECT aislados no son fuerza bruta hasta que se ven juntos. Y sobre UDP la dirección de origen no está verificada, así que responder convertiría el señuelo en un reflector de DDoS contra un tercero: un techo de amplificación, un cubo de fichas por origen y el rechazo de Proxy-Uri deciden si la respuesta sale. La captura nunca se pierde: el intento es la señal.
Program outputSalida del programahoneytrap — reply suppressed · factor 4.5honeytrap — respuesta suprimida · factor 4.5
Verdicts at session levelVeredictos a nivel de sesión
A cryptographic identity and OTA control plane for IoT fleets. Keystone collects no telemetry: it issues and revokes X.509 certificates from its own CA, gates enrolment behind single-use tokens, demands proof of possession to rotate, signs firmware with Ed25519 and rolls out in cohorts with a way back. Hexagonal, with the layers as separate Maven modules so the compiler enforces the dependency direction.
Plano de control de identidad criptográfica y OTA para flotas IoT. Keystone no recoge telemetría: emite y revoca certificados X.509 desde su propia CA, limita el enrolamiento a tokens de un solo uso, exige prueba de posesión para rotar, firma el firmware con Ed25519 y despliega por cohortes con vuelta atrás. Hexagonal con las capas como módulos Maven, así que la dirección de dependencias la impone el compilador.
Program outputSalida del programakeystone — cohort 25% · rollback armedkeystone — cohorte 25% · rollback armado
Own root + issuing CACA raíz + emisora propias
Proof-of-possession rotationRotación con prueba de posesión
Multi-tenant industrial telemetry where the boundary between customers is enforced by PostgreSQL with FORCE ROW LEVEL SECURITY rather than by remembering to write a WHERE clause: a query that forgets to set the tenant returns zero rows, never somebody else’s. Gateways speak Modbus, sign every envelope at the edge and publish over MQTT on mTLS — the broker is not in the trust base.
Telemetría industrial multi-tenant donde la frontera entre clientes la impone PostgreSQL con FORCE ROW LEVEL SECURITY, no acordarse de escribir un WHERE: una consulta que olvida fijar el tenant devuelve cero filas, nunca las de otro. Los gateways hablan Modbus, firman cada envoltorio en el borde y publican por MQTT sobre mTLS; el broker queda fuera de la base de confianza.
Program outputSalida del programaferrogate — cross-tenant query · 0 rowsferrogate — consulta entre tenants · 0 filas
RLS FORCE per transactionRLS FORCE por transacción
An end-to-end environmental station. The node does not know the time — only how long it has been running, and after a power cut it counts from zero again. So the wire contract carries uptime, always valid, alongside a wall clock that may legitimately be null: ingestion anchors each boot once and reconstructs the rest. A replayed backlog keeps its shape instead of collapsing onto its arrival instant. Everything else follows from protecting that record: mutual TLS end to end with no plaintext listener to fall back to, (device, boot, seq) as the identity of a reading, and gaps found from the data rather than interpolated away.
Estación ambiental de extremo a extremo. El nodo no sabe qué hora es: solo cuánto lleva encendido, y tras un corte vuelve a contar desde cero. Por eso el contrato de datos lleva el uptime, siempre válido, junto a un reloj de pared que puede ser nulo — la ingesta ancla cada arranque una vez y reconstruye el resto. Un backlog reinyectado conserva su forma en lugar de aplastarse contra el instante de llegada. Todo lo demás sale de proteger ese registro: mTLS de extremo a extremo sin escucha en claro a la que caer, identidad de lectura por (dispositivo, arranque, secuencia) y huecos deducidos de los datos, nunca interpolados.
Program outputSalida del programapsychron — backlog replayed · shape intactpsychron — backlog reinyectado · forma intacta
Boot-anchored timestampsSellado por ancla de arranque
mTLS, no plaintext portmTLS, sin puerto en claro
Digest-verified OTAOTA verificada por hash
Gaps drawn as gapsHuecos dibujados como huecos
CommissionsEncargos
freelancepor encargo
01
Energy monitoringMonitorización energética
Your electrical consumption on a real-time dashboard: from the meter to Grafana, with alerts when something spikes. Know what each line draws, when, and what it costs.
Tu consumo eléctrico en un panel en tiempo real: del contador a Grafana, con alertas cuando algo se dispara. Sabrás qué gasta cada línea, cuándo y cuánto cuesta.
Meter → LoRaWAN/MQTT → dashboardContador → LoRaWAN/MQTT → panel
Consumption alerts and thresholdsAlertas de consumo y umbrales
History and comparisonsHistórico y comparativas
02
Site & field sensingSensorización de nave y campo
Temperature, humidity, irrigation, air quality — self-powered sensors where cables can’t reach, with reliable data on your phone. Built for agriculture, warehouses and greenhouses.
Temperatura, humedad, riego, calidad del aire — sensores autónomos donde no llega el cable, con datos fiables en tu móvil. Pensado para agro, naves e invernaderos.
Custom ESP32/LoRa nodesNodos ESP32/LoRa a medida
Solar-powered where neededAutonomía solar donde haga falta
Dashboard + threshold alertsPanel + avisos por umbral
03
Deployment securitySeguridad del despliegue
I review and harden existing IoT deployments: authentication, encryption, updates, and what’s exposed to the network that shouldn’t be. The part almost nobody offers small businesses.
Reviso y endurezco instalaciones IoT existentes: autenticación, cifrado, actualizaciones y qué está expuesto a la red que no debería. La parte que casi nadie ofrece a pymes.
Network & OT protocol auditAuditoría de red y protocolos OT
Encryption & credentials done rightCifrado y credenciales bien hechos
A clear report, no fluffInforme claro, sin humo
Every installation can include a monthly maintenance plan — monitoring, updates and support — so it
keeps working after I leave.
Toda instalación puede incluir plan de mantenimiento mensual — monitorización, actualizaciones y
soporte — para que siga funcionando cuando yo ya no esté.