I spent years repairing embedded PCs and writing the test software that checked them. Today I build the things around that work, from the test bench to the server:
- Test automation — Python instrument control over SCPI / serial / USB, production test sequences with limits and reports
- Embedded Linux — Raspberry Pi and panel-PC kiosk systems that boot into your app, recover on their own and keep themselves updated
- Self-hosting — Docker stacks with reverse proxy and TLS, fail2ban, backups, monitoring and push alerts
- Web tools — small FastAPI + React apps with a clear scope
| Project | What it shows |
|---|---|
| scpi-sim | Simulated SCPI lab instruments over raw TCP, VXI-11 and HiSLIP, with profiles of fifteen real models (R&S, Keysight, Keithley, Siglent, Rigol, Tektronix), oscilloscopes included: instruments wired into a bench in YAML, fault injection at runtime, pytest plugin, CI on Linux/Windows/macOS; on PyPI and as a Docker image · try it in your browser |
| hart-sim | Simulated HART field devices (pressure and temperature transmitter) over HART-IP on TCP and UDP: universal and common-practice commands, 4-20 mA loop current with NAMUR NE 43 alarm currents, YAML device profiles, fault injection at runtime, pytest plugin, cross-checked against the Wireshark HART-IP dissector in CI; on PyPI |
| modbus-sim | Simulated Modbus devices that behave like real ones, including profiles after the published register maps of an Eastron SDM630 meter, an Omron E5CC temperature controller and a SunSpec PV inverter; Modbus TCP, RTU over TCP and serial RTU, word orders, scaling and register gaps from YAML profiles, fault injection at runtime (timeouts, exceptions, bad CRC, dropped connections, device faults), pytest plugin, cross-checked against pymodbus, sdm_modbus and pysunspec2; wiki, on PyPI · try it in your browser |
| opcua-sim | Simulated OPC UA devices that behave and fail, for testing SCADA, HMI and gateway code without a plant: NE 107 health, alarms as real events with Acknowledge and ConditionRefresh, fault injection at runtime (status codes, frozen values, refused calls, dropped links, server restarts), layouts after public documents for S7-1500, TwinCAT, PLCnext, CODESYS, Omron NX and Leuze BCL 300, pytest plugin, cross-checked with asyncua and node-opcua; wiki, on PyPI · try it in your browser |
| boot-log-diff | Compares the serial boot log of an embedded board with a golden log: masks timestamps, addresses and other boot-to-boot noise, ignores driver probe order, compares RAM/CPU/versions, names known faults with a repair diagnosis and writes JUnit/HTML reports for CI; on PyPI |
| interface-test-kit | Guided interface test that runs on the embedded PC itself: serial ports including every handshake line, USB test sticks (port, speed, throughput), Ethernet and CAN, one YAML profile per product variant, Y/N prompts for operators and an equipment self-test for worn loopback plugs; on PyPI |
| test-protocol | Turns raw test results (bench and interface test JSON, JUnit XML from pytest or boot-log-diff, CSV incl. German Excel exports) into a printable test protocol for one unit: limits from a TOML file, PASS/FAIL verdict with failed checks on top, SHA-256 of every input for traceability, signature boxes, HTML/PDF in English or German; on PyPI |
| scpi-replay | Records the SCPI traffic between test software and a real instrument through a transparent proxy, then replays it: as a stand-in instrument so the test software runs in CI without hardware, or as a regression check against the real instrument or scpi-sim with tolerance rules and JUnit output; pytest fixture included; on PyPI |
| bench-automation | End-of-line test station for an embedded PC, with simulated SCPI instruments, fault injection and HTML reports |
| kiosk-kit | Unattended touch kiosk for Debian/GNOME: touch-wake display service, update-proof Chromium, Wayland touch calibration |
| vaultwarden-for-android | Firefox for Android add-on for self-hosted Vaultwarden, signed by Mozilla |
Stack: Python · PyVISA · pyserial · pytest · HART-IP · Linux · systemd · Docker · FastAPI · React · TypeScript
📫 Available for freelance work — remote, fixed-price where possible.
