Wiring diagrams for my house using QGIS. Currently using 3.44.4-Solothurn release.
See also: https://github.com/jantman/my-house
See SETUP.md.
- Select the panels layer (Layers panel).
- Click Toggle Editing (pencil), then Add Point Feature.
- Click where the panel is located and fill in:
id(e.g.,P1)location(e.g.,Basement east wall)circuit_id(optional if you use circuits here)floor=basement | 1 | 2notes(optional)
- Save edits (toggle editing off).
- Activate fixtures layer → Toggle Editing → Add Point Feature.
- Click the placement location and fill in:
id(e.g.,O1)type=outlet | light | camera | junction | rj45subtype(for outlets:duplex | gfci | quad | 14-50R; for rj45:1 | 2 | 4)floor=basement | 1 | 2circuit_id(e.g.,P1-14)panel(panel ID, optional)breaker(optional)notes(optional)
- Save edits.
- Activate switches → Toggle Editing → Add Point Feature.
- Attributes:
idtype=switchsubtype=spstor3-wayfloor=basement | 1 | 2circuit_idnotes
- Save edits.
- Activate runs → Toggle Editing → Add Line Feature.
- Digitize along walls/paths between devices.
- Attributes:
idrun_type=power | data | security | avfloor=basement | 1 | 2circuit_id(match the devices on that circuit for easy filtering)notes
- Save edits.
- Keep one floorplan group visible at a time while digitizing.
- Optionally filter each vector layer by
floor:- Right-click layer → Filter… →
lower("floor")='first'(etc.).
- Right-click layer → Filter… →
Two options:
A) Built-in helper functions
- Open Plugins → Python Console.
- In the console, type:
(These functions are defined when you ran
focus_circuit('P1-14') # show only that circuit on fixtures/switches/panels/runs # ...when done clear_circuit_focus()
scripts/apply_static_styles.py. If you need them again, just re-run that script.)
B) Layer filter (GUI)
- Right-click each layer → Filter… →
"circuit_id" = 'P1-14'. - Clear later via the same dialog.
- Snapping: Project → Snapping Options → enable “Vertex and Segment”, tolerance ~10 px.
- Tracing runs: Enable the Trace Digitizing tool for smooth lines along walls.
- Themes: Save Map Themes per floor so you can switch views with one click (View → Panels → Map Themes).
- Backups: The GeoJSON in
data/is your source of truth. Consider versioning with git.
To generate a CSV listing of all circuits with their panel labels:
python scripts/generate_circuit_csv.pyThis outputs exports/circuits.csv with columns:
circuit_id: The circuit identifierpanel_labels: Comma-separated list of unique panel labels for devices on that circuit
Only electrical device types (outlet, light, junction, fan) are included. You can optionally specify a different output path as an argument.
- Outlets/receptacles: Red
- Lights: Yellow
- Data & Cameras: Blue
- Switches: Pink
- Panels: Orange
- Junction boxes: Green
- Runs:
- power: Red
- data: Blue
- security: Yellow
- av: Light blue