mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2026-11-05 12:22:08 +00:00
303 lines
12 KiB
JSON
303 lines
12 KiB
JSON
{
|
|
"schema_version": "0.3.0",
|
|
"kind": "proxmenux.oci-template",
|
|
"id": "image-zwave-js-ui",
|
|
"status": "generated-unvalidated",
|
|
"catalog_ui": {
|
|
"title": {
|
|
"en_US": "Z-Wave JS UI"
|
|
},
|
|
"tagline": {
|
|
"en_US": "Manage a Z-Wave network from a web dashboard and WebSocket gateway."
|
|
},
|
|
"description": {
|
|
"en_US": "A self-hosted Z-Wave control panel and MQTT gateway. Its web interface can start without a Z-Wave controller; device control requires a compatible USB or serial controller and network security keys."
|
|
},
|
|
"category": "smarthome",
|
|
"author": "Z-Wave JS",
|
|
"developer": "Z-Wave JS",
|
|
"icon": "https://raw.githubusercontent.com/zwave-js/zwave-js-ui/c38e0d2cbbb826bf2bab2db596a3452e59ce0e8e/public/apple-touch-icon-180x180.png",
|
|
"screenshots": [],
|
|
"architectures": [
|
|
"amd64",
|
|
"arm64"
|
|
],
|
|
"launch": {
|
|
"scheme": "http",
|
|
"port": 8091,
|
|
"path": "/"
|
|
},
|
|
"website": "https://zwave-js.github.io/zwave-js-ui/",
|
|
"documentation": "https://zwave-js.github.io/zwave-js-ui/#/getting-started/docker",
|
|
"repository": "https://github.com/zwave-js/zwave-js-ui",
|
|
"tips": [
|
|
"The web UI can start without a Z-Wave controller. To control devices, pass through a compatible USB/serial controller and select its stable /dev/serial/by-id/... path in Settings → Z-Wave → Serial Port.",
|
|
"Configure and securely back up the S0/S2 network keys in Settings → Z-Wave before pairing security-enabled devices.",
|
|
"Port 3000 is the Z-Wave JS WebSocket server for integrations such as Home Assistant; it listens only after a Z-Wave client is configured. Upstream documents it as unauthenticated, so expose it only to trusted integrations and networks.",
|
|
"ProxMenux enables the web login and generates the initial admin password. Configure trusted HTTPS before remote access over an untrusted network."
|
|
],
|
|
"mini_changelog": [],
|
|
"display_version": "11.25.2",
|
|
"updated_at": "2026-11-02",
|
|
"category_label": "IoT & Smart Home"
|
|
},
|
|
"source": {
|
|
"provider": "Z-Wave JS",
|
|
"repository": "https://github.com/zwave-js/zwave-js-ui",
|
|
"default_branch": "master",
|
|
"revision": "c38e0d2cbbb826bf2bab2db596a3452e59ce0e8e",
|
|
"readme_raw_url": "https://raw.githubusercontent.com/zwave-js/zwave-js-ui/c38e0d2cbbb826bf2bab2db596a3452e59ce0e8e/README.md",
|
|
"image_repository_url": "https://hub.docker.com/r/zwavejs/zwave-js-ui",
|
|
"compose_sha256": "ed371d9e9805db5d2abd356b54e3ff5fdb677d637857313f6aac3f498f480f87",
|
|
"generated_at": "2026-11-02T20:10:33+00:00"
|
|
},
|
|
"container_contract": {
|
|
"service_name": "zwave-js-ui",
|
|
"container_name": "zwave-js-ui",
|
|
"image": {
|
|
"reference": "docker.io/zwavejs/zwave-js-ui:latest",
|
|
"registry": "docker.io",
|
|
"repository": "zwavejs/zwave-js-ui",
|
|
"tag": "latest",
|
|
"digest": null,
|
|
"pull_policy": "resolve-selected-tag-to-architecture-digest-at-install"
|
|
},
|
|
"environment": [
|
|
{
|
|
"name": "SESSION_SECRET",
|
|
"example": "${GENERATED_SESSION_SECRET}",
|
|
"required": true,
|
|
"sensitive": true,
|
|
"source": "ProxMenux-generated; supported by upstream image"
|
|
},
|
|
{
|
|
"name": "DEFAULT_PASSWORD",
|
|
"example": "${GENERATED_ADMIN_PASSWORD}",
|
|
"prompt": "Initial Z-Wave JS UI admin password",
|
|
"required": true,
|
|
"sensitive": true,
|
|
"source": "Upstream image; generated by ProxMenux"
|
|
}
|
|
],
|
|
"volumes": [
|
|
{
|
|
"id": "zwave-config",
|
|
"container_path": "/usr/src/app/store",
|
|
"compose_source_example": "zwave-config",
|
|
"read_only": false,
|
|
"required": true,
|
|
"installation_choice": [
|
|
"managed-volume"
|
|
],
|
|
"default": "managed-volume",
|
|
"managed_volume": {
|
|
"backup": true,
|
|
"default_size_gb": 4
|
|
}
|
|
}
|
|
],
|
|
"ports": [
|
|
{
|
|
"container_port": 8091,
|
|
"published_example": 8091,
|
|
"protocol": "tcp",
|
|
"required": true,
|
|
"proxmox_behavior": "listener-on-dedicated-lxc-address-no-nat"
|
|
},
|
|
{
|
|
"container_port": 3000,
|
|
"published_example": 3000,
|
|
"protocol": "tcp",
|
|
"required": false,
|
|
"proxmox_behavior": "listener-on-dedicated-lxc-address-no-nat"
|
|
}
|
|
],
|
|
"related_services": [],
|
|
"restart": "always",
|
|
"stop_grace_period": null,
|
|
"original_compose": "version: '3.7'\nservices:\n zwave-js-ui:\n container_name: zwave-js-ui\n image: zwavejs/zwave-js-ui:latest\n restart: always\n tty: true\n stop_signal: SIGINT\n environment:\n SESSION_SECRET: ${GENERATED_SESSION_SECRET}\n DEFAULT_PASSWORD: ${GENERATED_ADMIN_PASSWORD}\n networks:\n - zwave\n devices:\n - /dev/serial/by-id/insert_stick_reference_here:/dev/zwave\n volumes:\n - zwave-config:/usr/src/app/store\n ports:\n - '8091:8091'\n - '3000:3000'\nnetworks:\n zwave:\nvolumes:\n zwave-config:\n name: zwave-config\n"
|
|
},
|
|
"first_run": {
|
|
"endpoints": [
|
|
{
|
|
"label": "Z-Wave JS UI",
|
|
"scheme": "http",
|
|
"port": 8091,
|
|
"path": "/",
|
|
"source": "official-docker-documentation"
|
|
}
|
|
],
|
|
"credentials": [
|
|
{
|
|
"label": "Z-Wave JS UI admin login",
|
|
"type": "configured-or-installer-generated",
|
|
"username": "admin",
|
|
"password": null,
|
|
"password_environment": "DEFAULT_PASSWORD",
|
|
"change_required": false,
|
|
"source": "Upstream DEFAULT_PASSWORD, generated by ProxMenux",
|
|
"retrieval": null
|
|
}
|
|
]
|
|
},
|
|
"proxmox": {
|
|
"runtime": "native-oci-lxc",
|
|
"technology_status": "proxmox-technology-preview",
|
|
"defaults": {
|
|
"unprivileged": true,
|
|
"ostype": "auto-from-image",
|
|
"cores": 2,
|
|
"memory_mb": 1024,
|
|
"swap_mb": 512,
|
|
"rootfs_size_gb": 8,
|
|
"rootfs_storage": "local-lvm",
|
|
"volume_storage": "local-lvm",
|
|
"template_storage": "local",
|
|
"bridge": "vmbr0",
|
|
"ipv4": "dhcp",
|
|
"firewall": true,
|
|
"host_managed_network": true,
|
|
"onboot": true,
|
|
"features": [
|
|
"nesting=1"
|
|
],
|
|
"shutdown_timeout_seconds": 60
|
|
},
|
|
"image_metadata_policy": {
|
|
"entrypoint": "import-from-oci-image",
|
|
"cmd": "import-from-oci-image",
|
|
"environment": "import-image-env-then-apply-compose-overrides",
|
|
"user": "import-from-oci-image",
|
|
"working_dir": "import-from-oci-image",
|
|
"stop_signal": "apply-compose-override"
|
|
},
|
|
"adaptations": [
|
|
{
|
|
"id": "dedicated-lxc-network",
|
|
"upstream_behavior": "Docker publishes ports on a Docker host address and attaches the service to its Compose network.",
|
|
"native_lxc_behavior": "The OCI process listens on the dedicated LXC address; ProxMenux maps the single-service network to the LXC network namespace.",
|
|
"reason": "A one-service native OCI LXC has its own network namespace and address.",
|
|
"behavioral_impact": "Use the LXC address directly; no Docker port NAT or separate bridge is created.",
|
|
"validation": "pending-per-application"
|
|
},
|
|
{
|
|
"id": "generated-login-and-session-secret",
|
|
"upstream_behavior": "The image defaults to user admin and password zwave; web authentication is disabled by default, and the Compose example uses a sample session secret.",
|
|
"native_lxc_behavior": "ProxMenux generates a unique initial admin password and session secret, and seeds gateway.authEnabled=true before first boot.",
|
|
"reason": "Avoid shipping a shared password, sample session key or unauthenticated web UI.",
|
|
"behavioral_impact": "The installer must display the generated admin password; change it after first login.",
|
|
"validation": "pending-per-application"
|
|
},
|
|
{
|
|
"id": "stop-signal",
|
|
"upstream_behavior": "Compose requests SIGINT when stopping the container.",
|
|
"native_lxc_behavior": "ProxMenux uses the same signal for the OCI process shutdown lifecycle.",
|
|
"reason": "Preserve the upstream graceful-shutdown behavior.",
|
|
"behavioral_impact": "None expected.",
|
|
"validation": "pending-per-application"
|
|
}
|
|
],
|
|
"installer_profile": {
|
|
"generated_sensitive_environment": {
|
|
"SESSION_SECRET": {
|
|
"strategy": "token-hex",
|
|
"bytes": 32,
|
|
"prompt": false
|
|
},
|
|
"DEFAULT_PASSWORD": {
|
|
"strategy": "token-hex",
|
|
"bytes": 20,
|
|
"prompt": true
|
|
}
|
|
},
|
|
"generated_files": [
|
|
{
|
|
"container_path": "/usr/src/app/store/settings.json",
|
|
"mode": "0600",
|
|
"owner": "mapped-root",
|
|
"content": "{\"gateway\":{\"authEnabled\":true}}\n",
|
|
"only_if_missing": true
|
|
}
|
|
],
|
|
"volume_preparations": [
|
|
{
|
|
"container_path": "/usr/src/app/store",
|
|
"remove_lost_found": true,
|
|
"owner_strategy": "mapped-root",
|
|
"only_when_mount_type": "managed-volume"
|
|
}
|
|
],
|
|
"optional_devices": [
|
|
{
|
|
"id": "zwave-serial-controller",
|
|
"kind": "character-device",
|
|
"purpose": "serial",
|
|
"enable_prompt": "Pass through a Z-Wave USB or serial controller",
|
|
"enabled_default": false,
|
|
"required_by_compose": false,
|
|
"path_prompt": "Controller path on the Proxmox host; prefer /dev/serial/by-id/...",
|
|
"host_path_default": "/dev/serial/by-id/insert_stick_reference_here",
|
|
"container_path_strategy": "same-as-host",
|
|
"mode": "preserve-host",
|
|
"deny_write": false,
|
|
"gid_strategy": "host-device-gid"
|
|
}
|
|
],
|
|
"startup_healthcheck": {
|
|
"scheme": "http",
|
|
"port": 8091,
|
|
"path": "/",
|
|
"timeout_seconds": 180,
|
|
"request_timeout_seconds": 10,
|
|
"stability_seconds": 4,
|
|
"verify_tls": false
|
|
}
|
|
}
|
|
},
|
|
"compatibility": {
|
|
"automatic_install_candidate": true,
|
|
"validated": false,
|
|
"supported_compose_keys": [
|
|
"container_name",
|
|
"devices",
|
|
"environment",
|
|
"image",
|
|
"networks",
|
|
"ports",
|
|
"restart",
|
|
"stop_signal",
|
|
"tty",
|
|
"volumes"
|
|
],
|
|
"untranslated_blockers": [],
|
|
"policy": "The single-image recipe has passed installation, UI/login, restart, backup and recovery, modification, and engine checks. Host-bind storage has not been checked. Radio control remains untested because no compatible Z-Wave coordinator was attached during the lab test."
|
|
},
|
|
"validation": {
|
|
"schema": "passed-static-validation",
|
|
"image_resolution": "passed-skopeo-download-and-layer-verification",
|
|
"clean_install": "passed-default-install-and-health-check",
|
|
"advanced_install": "pending-custom-install-summary-validation",
|
|
"web_response": "passed-ui-and-generated-login",
|
|
"credentials": "passed-generated-login-before-and-after-restore",
|
|
"restart_persistence": "passed-restart-with-store-preserved",
|
|
"backup_restore": "passed-proxmox-backup-and-manager-recover-new-vmid",
|
|
"update_preserves_data": "no-update-available-at-check",
|
|
"modification": "passed-cpu-ram-up-down-without-recreation",
|
|
"managed_volume": "passed-store-volume-and-recovery",
|
|
"host_bind": "pending",
|
|
"hardware_radio": "not-tested-no-z-wave-coordinator-on-host",
|
|
"removal": "passed-remove-original-and-restored-ct-and-local-backup-cleanup"
|
|
},
|
|
"lifecycle": {
|
|
"update_strategy": "replace-rootfs-from-new-oci-image-preserve-managed-volumes",
|
|
"registry_state": {
|
|
"resolved_architecture": null,
|
|
"resolved_digest": null,
|
|
"image_version_label": "11.25.2",
|
|
"image_created": null
|
|
},
|
|
"change_detection": "compare-resolved-architecture-digest",
|
|
"automatic_unattended_updates": false
|
|
}
|
|
}
|