Use:
.env
Example values:
VITE_PYPNM_API_BASE_URL=http://127.0.0.1:8080
VITE_REQUEST_TIMEOUT_MS=30000Runtime instance targets for the dropdown live in:
public/config/pypnm-instances.yamlpublic/config/pypnm-instances.local.yaml
Load order:
public/config/pypnm-instances.local.yamlpublic/config/pypnm-instances.yaml
The .local file is the active machine-local override.
The non-local file is the version-controlled template.
Use the interactive editor when you want to manage that file from the CLI:
pypnm-webui config-menuWhat it edits:
- runtime instance entries
defaults.selected_instancedefaults.logging.level- per-instance
request_defaults
Behavior:
- the menu saves
public/config/pypnm-instances.local.yamlafter each edit - if the file already exists and the content changes, the menu creates a
timestamped
.bakbackup beside it before overwrite - changes to
public/config/pypnm-instances.local.yamlare not part of Vite hot reload - after editing runtime config, reload the WebUI page so the updated YAML is read
Behavior:
- the UI starts on the instance named by
defaults.selected_instance - the selected instance overrides
VITE_PYPNM_API_BASE_URL VITE_PYPNM_API_BASE_URLremains the fallback when the YAML file is missing- use the
PyPNM Agentdropdown to switch between configured PyPNM instances at runtime
Each instance can carry its own request defaults. This is where you keep values that differ by PyPNM agent, such as:
- cable modem MAC address
- cable modem IP address
- TFTP IPv4
- TFTP IPv6
- channel ids
- SNMP RW community
Those values live under each instance entry as request_defaults.
Example:
defaults:
logging:
level: INFO
instances:
- id: lab-local
label: Lab Local
base_url: http://127.0.0.1:8080
request_defaults:
cable_modem:
mac_address: aa:bb:cc:dd:ee:ff
ip_address: 192.168.100.10
tftp:
ipv4: 192.168.100.2
ipv6: ::1
capture:
channel_ids: []
snmp:
rw_community: privateNotes:
channel_ids: []means all channels- the selected instance's
request_defaultsprefill the capture and device request forms in the UI