Skip to content
View dscioli's full-sized avatar
  • Argentina

Block or report dscioli

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
dscioli/README.md

Daniel Scioli

SCADA & Industrial Automation Specialist – PLC, Modbus TCP, Python. I design, build, and operate industrial control systems that run 24/7 in real production.

For the past 8 years I've been Head of Systems & Communications at a municipal water utility in Argentina. I built the city's water telemetry and control system there from scratch, and I still operate it today: 19 pumping stations under remote manual and automatic control (driven by schedule and by tank level), storage cisterns on ultrasonic level sensors, Schneider M221 PLCs programmed with EcoStruxure over Modbus TCP. The SCADA layer on top is my own code end to end: server and backend built on Python, Linux and Docker, plus the web frontend. Operators run their shift from a mobile PWA on top of that, every day. Grafana and Prometheus sit alongside for infrastructure observability across servers, network and DVRs. Nothing vendor-supplied underneath it; the dashboard isn't a skin over someone else's stack. I'm currently pursuing a university degree in Cyber Defense, focused on OT/ICS security.

The portfolio: a complete telemetry system, in public

The production system belongs to the utility and stays private, as it should. So I rebuilt its core architecture from scratch as a sanitized, fictional, fully working demo you can run with one command.

The demo is deliberately a minimal skeleton. The production system it mirrors goes considerably further: a full operator web application with user management and per-role permissions; thresholds, schedules and alert rules an operator changes without a redeploy; report types for consumption, pump runtime and starts, and incidents, all exportable; per-station electrical telemetry (motor current and voltage) both live and historical; an audit log of every command issued; years of accumulated data that people query daily. The register-range design also keeps growth cheap: commissioning a new station is a config entry, not a project.

Repo What it demonstrates
modbus-collector The core. A Modbus TCP server for stations behind cellular CGNAT that connect in, which inverts the classic poll-the-field pattern. Identity by register range, time series, control engine, alerting, REST/WS API, Prometheus metrics.
pump-station-simulator The field side: a realistic PLC simulator built on a physical model (tank, pump, electrical faults), with scenario-driven fault injection, reconnect/backoff and reverse-watchdog behavior. One codebase, N stations.
pump-fleet-dashboard What the operator actually uses: an installable PWA covering fleet overview, pump commands with honest pending→confirmed feedback, live levels and the overnight event log.
industrial-monitoring-stack The engineering view. Prometheus, Grafana and Alertmanager, pre-provisioned for OT workloads, where silence is the signal.

Run the whole simulated utility (collector + 3 stations + Grafana + operator dashboard):

git clone https://github.com/dscioli/modbus-collector
git clone https://github.com/dscioli/pump-station-simulator
git clone https://github.com/dscioli/industrial-monitoring-stack
git clone https://github.com/dscioli/pump-fleet-dashboard
cd modbus-collector && docker compose -f docker-compose.demo.yml up --build -d

Demo fleet: active alarm on one station, command in flight on another, live

How I work

Written-first, async-friendly (GMT-3, full overlap with US business hours). I scope in detail before quoting and document decisions as I go. Code ships commented. Handovers are complete. The READMEs in the repos above are a fair sample of the documentation you'd get.

📫 dscioli@nodoaustral.ar

Pinned Loading

  1. modbus-collector modbus-collector Public

    Modbus TCP collector for pump stations behind CGNAT: stations connect in, identified by register range. Time series, control, alerting, REST/WS API, Prometheus metrics.

    Python

  2. pump-station-simulator pump-station-simulator Public

    Realistic pump-station PLC simulator: Modbus TCP client with physics model, fault injection scenarios, and reconnect/watchdog behavior. One codebase, N stations.

    Python

  3. pump-fleet-dashboard pump-fleet-dashboard Public

    Operator-facing PWA for the modbus-collector: fleet at a glance, commands with confirmed feedback, live levels, event log.

    TypeScript 1

  4. industrial-monitoring-stack industrial-monitoring-stack Public

    Prometheus + Grafana + Alertmanager pre-provisioned for small industrial/OT deployments. Silence is the signal.