Skip to content
View steitec's full-sized avatar

Block or report steitec

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
steitec/README.md

steitec

Hi, I'm Ralf — test & automation engineer 👋

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

Selected projects

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.

Pinned Loading

  1. scpi-sim scpi-sim Public

    Simulated SCPI lab instruments (DMM, power supply, multiplexer) on a raw TCP socket — test instrument automation without hardware

    Python 1

  2. hart-sim hart-sim Public

    HART field-device simulator over HART-IP: universal and common-practice commands, YAML device profiles, fault injection, pytest plugin

    Python

  3. opcua-sim opcua-sim Public

    Simulated OPC UA devices with behaviour, NE 107 health, real alarms and fault injection, for testing SCADA, HMI and gateway code

    Python

  4. bench-automation bench-automation Public

    End-of-line test station for an embedded PC in Python, with simulated SCPI instruments (PyVISA, pyserial)

    Python

  5. kiosk-kit kiosk-kit Public

    Turn a Debian/GNOME machine into an unattended touch kiosk: touch-wake display service, Chromium that survives updates, Wayland touch calibration

    Python

  6. interface-test-kit interface-test-kit Public

    Operator-guided interface test for Linux embedded and panel PCs: serial with handshake, USB, Ethernet, CAN - with an equipment self-test and a hardware-free demo

    Python