DOCUMENTATION

Installation & Setup Guide

Printer Fleet Manager for Odoo 19 - on-prem, Docker, and Odoo.sh deployments, license activation, upgrades, and troubleshooting.

Printer Fleet Manager - Installation & Setup Guide

Module: printer_fleet_manager Version: 19.0.7.1.1 Optional add-on: printer_fleet_manager_purchase 19.0.6.4.0 Target platform: Odoo 19.0 (Community or Enterprise) License: OPL-1 (commercial) Support: [email protected]

This guide is written for IT administrators deploying Printer Fleet Manager (PFM) on a production Odoo 19 server. It is deliberately detailed and covers on-prem, Docker, and Odoo.sh deployments, license activation (online and air-gapped), first-run configuration, upgrades, uninstall, and troubleshooting. Every command below is written for a typical Odoo 19 install; adjust paths, service names, and the database/user names to match your environment.

Deployment: Odoo.sh or On-Premise. Odoo Online: not supported. Odoo Online does not permit installation of third-party Python modules; this is a limitation of the Odoo Online platform, not of the module.


1. Overview - what is in the package

Printer Fleet Manager is a self-contained, agentless network-printer monitoring solution for Odoo 19. It discovers printers on your network, polls them over SNMP for status/toner/page-count, raises and auto-resolves alerts, tracks service history, and provides dashboards, a read-only wallboard, a mobile technician page reachable from a QR label, and usage reporting.

The download package contains up to two modules:

Module Version Required? What it does
printer_fleet_manager 19.0.7.1.1 Yes - the core product Discovery, SNMP monitoring, alerts, service history, sites, dashboards, wallboard, mobile page, QR labels, reports, licensing
printer_fleet_manager_purchase 19.0.6.4.0 Optional Bridge to Odoo Purchase: auto-creates draft reorder RFQs when a consumable crosses its reorder threshold

Note on SNMP: PFM includes a lightweight, built-in SNMPv1/v2c client implemented over raw UDP sockets. There is no pysnmp, net-snmp, or any other SNMP library to install. This is the single most common misconception about the module - see §2 and the Troubleshooting section.


2. Requirements

2.1 Odoo

  • Odoo 19.0, Community or Enterprise. PFM has no Enterprise dependency - its only Odoo module dependencies are base and mail, both of which are in Community. It has been install-verified on a Community-only addons path with no Enterprise directory present.

2.2 Operating system

  • Any OS that runs Odoo 19 (Ubuntu 22.04/24.04 LTS, Debian 12, RHEL/Rocky 9, or the official Docker image). Examples below assume a Debian/Ubuntu systemd install under /opt/odoo; translate paths for your distro.

2.3 Python

  • Python 3.10+ (whatever your Odoo 19 runtime uses - Odoo 19 requires 3.10 or newer). PFM uses no syntax or stdlib features beyond that baseline.

2.4 Python libraries

PFM declares exactly one external Python dependency in its manifest:

Library Required by Needed for If missing
qrcode (with a PIL/Pillow backend) manifest external_dependencies Generating printer QR labels (PDF/HTML) Module installs and runs normally; only QR-label image generation degrades (label renders without the QR image, a warning is logged). It will not crash install or the registry.

Install it into the same Python environment Odoo runs in:

# On-prem, virtualenv example:
sudo -u odoo /opt/odoo/venv/bin/pip install "qrcode[pil]"

qrcode[pil] pulls in Pillow, the imaging backend qrcode needs to render PNGs. If Pillow is already present (it usually is on a full Odoo install you can just pip install qrcode), the [pil] extra is harmless.

No version pin is required. The manifest declares qrcode without a version constraint; any current release works.

Libraries you do NOT need to install (documented here to prevent wasted effort):

  • pysnmp - NOT required. SNMP is done over raw sockets in pure Python.
  • cryptography - already present. Ships with Odoo; used by the licensing client. Do not install it separately unless your Odoo runtime is somehow missing it.
  • dateutil, psycopg2, markupsafe - these are Odoo core requirements, already satisfied by any working Odoo install.
  • SMS/Twilio - no library needed. The optional Twilio SMS backend uses the Python standard library (urllib) to call the Twilio REST API; there is no twilio pip package to install.

2.5 wkhtmltopdf (for PDF reports only)

PFM ships two QWeb-PDF reports - the Printer QR Label and the Site Monthly report. Rendering these to PDF requires Odoo's standard wkhtmltopdf (0.12.6 with the Qt patch, the version Odoo recommends). This is the same PDF stack every Odoo install uses; if your server already prints any PDF (invoices, etc.) you are done. If not:

# Debian/Ubuntu - install the Odoo-recommended patched build from the
# wkhtmltopdf releases page for your distro, e.g.:
sudo apt-get install -y ./wkhtmltox_0.12.6.1-3.jammy_amd64.deb

Without wkhtmltopdf, PFM still installs and runs; only PDF export of those two reports is unavailable. The on-screen dashboards, wallboard, and mobile page do not use it.


3. Pre-install checklist

Before touching a production server, confirm all of the following:

  1. Full database backup. Take a fresh dump you can restore: bash pg_dump -Fc -h localhost -U odoo -d YOUR_DB -f /var/backups/YOUR_DB-$(date +%m-%d-%Y).dump Also back up the Odoo filestore (~/.local/share/Odoo/filestore/YOUR_DB or your configured data_dir).
  2. Test on staging first. Restore a copy of production to a staging server and rehearse the whole install there before doing it live.
  3. Know your addons_path. Find it in your Odoo config: bash grep -E "addons_path" /etc/odoo/odoo.conf
  4. Know how Odoo is run (systemd service name, the Python/venv it uses, and the OS user it runs as - commonly odoo).
  5. File permissions: the module directory you drop must be readable by the Odoo OS user.
  6. Maintenance window: installing/upgrading briefly loads the registry; plan for a short interruption.

4. Installation

Pick the section matching your deployment: 4.1 on-prem, 4.2 Docker, or 4.3 Odoo.sh.

4.1 Standard on-prem (systemd, /opt/odoo)

Assume: Odoo config /etc/odoo/odoo.conf, systemd unit odoo, OS user odoo, virtualenv /opt/odoo/venv, and a custom-addons directory already on addons_path, e.g. /opt/odoo/custom-addons.

Step 1 - install the Python dependency (see §2.4):

sudo -u odoo /opt/odoo/venv/bin/pip install "qrcode[pil]"

Step 2 - unzip the module(s) into a directory on addons_path:

cd /opt/odoo/custom-addons
sudo -u odoo unzip /path/to/printer_fleet_manager-19.0.7.1.1.zip
# Optional Purchase bridge:
sudo -u odoo unzip /path/to/printer_fleet_manager_purchase-19.0.6.4.0.zip

After unzipping you should have /opt/odoo/custom-addons/printer_fleet_manager/ (containing __manifest__.py). Confirm ownership/readability:

sudo chown -R odoo:odoo /opt/odoo/custom-addons/printer_fleet_manager
ls -l /opt/odoo/custom-addons/printer_fleet_manager/__manifest__.py

If your zip extracts to a versioned folder name (e.g. printer_fleet_manager-19.0.7.1.1/), rename the inner folder to exactly printer_fleet_manager - Odoo matches modules by directory name. The directory that contains __manifest__.py must be named printer_fleet_manager.

Step 3 - confirm the directory is on addons_path. If you dropped it in a directory not already listed, add it and restart:

grep addons_path /etc/odoo/odoo.conf
# addons_path = /opt/odoo/odoo/addons,/opt/odoo/custom-addons
sudo systemctl restart odoo

Step 4 - update the Apps list and install. Two options:

  • UI: Log in as an administrator → enable Developer Mode (Settings → Developer Tools → Activate the developer mode) → AppsUpdate Apps List → search Printer Fleet ManagerActivate/Install.

  • CLI (recommended for scripted deploys) - installs and exits: bash sudo systemctl stop odoo sudo -u odoo /opt/odoo/venv/bin/python /opt/odoo/odoo/odoo-bin \ -c /etc/odoo/odoo.conf \ -d YOUR_DB \ -i printer_fleet_manager \ --stop-after-init sudo systemctl start odoo To also install the optional Purchase bridge in the same run, use -i printer_fleet_manager,printer_fleet_manager_purchase (note: the bridge also auto_installs by itself if purchase is already installed - see §7).

Typical single-module install completes in well under a minute on a dedicated host. Verify success: Modules loaded. in the log and the module shows Installed under Apps.

4.2 Docker

Using the official odoo:19 image (or your own image built from it):

  1. Place the module on a mounted addons volume. Extract printer_fleet_manager/ (and optionally printer_fleet_manager_purchase/) into a host directory you mount at /mnt/extra-addons, and make sure that path is on addons_path (the official image already includes /mnt/extra-addons).

bash unzip printer_fleet_manager-19.0.7.1.1.zip -d ./extra-addons

  1. Install the Python dependency in the image. The cleanest way is a small Dockerfile:

dockerfile FROM odoo:19 USER root RUN pip3 install "qrcode[pil]" USER odoo

Build and use that image. (Installing with docker exec … pip install into a running container works but is lost on container recreation - bake it into the image.)

  1. Restart / recreate the container, then install via the UI (Apps → Update Apps List → Install) or run a one-shot init container:

bash docker compose run --rm odoo \ odoo -d YOUR_DB -i printer_fleet_manager --stop-after-init docker compose up -d

SNMP + Docker networking: the container must be able to send UDP/161 to your printers and receive replies. Bridge NAT usually handles outbound UDP fine, but if printers live on other VLANs, ensure the Docker host's routing/firewall permits it (see §6.1). --network host is one simple way to give the container the host's L3 reachability if bridge routing is a problem.

4.3 Odoo.sh

Odoo.sh installs modules from your project's Git repository.

  1. Add the module to your repo on the branch you deploy (production / staging / development). Either commit the printer_fleet_manager folder directly, or add it as a git submodule if you keep third-party modules separate. Commit printer_fleet_manager/ (and optionally printer_fleet_manager_purchase/) at the repo root or under a directory Odoo.sh includes in the addons path.

  2. Declare the Python dependency. Add a requirements.txt at the root of your repository (Odoo.sh installs it automatically on build):

text qrcode[pil]

  1. Push. Odoo.sh rebuilds the branch, installs the requirement, and picks up the module. Then install it from the branch's Odoo Apps menu (Update Apps List → Install), or add it to your branch's install list.

Odoo.sh already provides wkhtmltopdf and cryptography, so PDF reports and license verification work out of the box.


5. License activation

PFM is a commercial (OPL-1) module. Licensing is designed to be production-friendly: a licensing communication problem never interrupts printer management. Activate your license so your installation shows as licensed and you receive your Maintenance & Support entitlements.

5.1 Online activation (server has internet)

  1. In Odoo, go to Settings → Printer Fleet Manager, or open the fleet dashboard and use the Licensing action. Either path opens the Licensing wizard.
  2. Enter your license key and click Activate.
  3. On success you'll see "Licensed to - updates until ." and the banner clears.

You must be a Printer Manager (group printer_fleet_manager.group_printing_manager) to activate - this is enforced in the server code, not just the menu, so it can't be bypassed over RPC.

5.2 What the module sends home (full transparency)

The only external host PFM ever contacts is the license server (license.modulesmith.com, over HTTPS). Each licensing request contains exactly these fields:

Field Value
key Your license key
db_uuid Your Odoo database UUID (database.uuid)
module_version The installed module version (e.g. 19.0.7.1.1)
nonce A random per-request replay guard

No printer data, no network inventory, no customer records - nothing else leaves your server. All licensing responses are cryptographically verified by the module.

5.3 Firewall allowlist

Allow only this single outbound destination for licensing:

Destination host: license.modulesmith.com
Protocol/port:    TCP 443 (HTTPS), OUTBOUND only

No inbound rule is needed. If licensing must traverse a corporate proxy, you can override the base URL in Settings → Printer Fleet Manager → License Server URL.

5.4 Offline / air-gapped activation (no internet)

For servers with no outbound internet, use the offline flow. It exchanges a small signed JSON blob by email - no direct connection is ever needed.

  1. Open Settings → Printer Fleet Manager → Licensing.
  2. Enter your key, then click Generate Offline Request. The wizard produces a JSON blob (you can also Download it as pfm-offline-request.json). It contains your key, db_uuid, module_version, and a timestamp.
  3. Email that blob to [email protected]. Support returns a signed offline-activation response (a small JSON document).
  4. Back in the Licensing wizard, paste the signed response into Offline Activation Response and click Apply Offline Activation.
  5. The module verifies the signature, confirms it was issued for this key and this database, and stores it with an expiry date ("Offline activation accepted - valid until .").

While an offline activation is active, no licensing network communication occurs. Request a fresh offline grant before the printed expiry to stay activated.

5.5 If the license server is unreachable

If your server temporarily cannot reach the license server, the module continues to operate normally; you may see an informational banner until connectivity is restored. If a banner persists, see the troubleshooting section or contact [email protected].


6. First-run configuration

6.1 Network requirements for SNMP discovery & polling

PFM talks to printers from the Odoo host (or Docker container). Your network must permit:

Direction Protocol / Port Purpose
Odoo host → printers UDP 161 (SNMP) Toner levels, status, serial, page counts
Odoo host → printers TCP 9100 (default; also 631 for IPP) Reachability check / discovery port probe
Odoo host → printers ICMP (optional) Not required by PFM, but useful for your own connectivity testing
  • Printers must have SNMP enabled with a read community string you know (default public). PFM supports SNMPv1 and SNMPv2c (no SNMPv3).
  • If printers live on separate VLANs/subnets, the Odoo host needs a route to them and any firewall/ACL between them must allow UDP/161 and the TCP probe port. This is the #1 cause of "discovery finds nothing".

6.2 Create sites and (optionally) areas

  1. Open the Printer Fleet Manager app.
  2. Create one or more Sites (buildings/branches/floors), each with a code.
  3. Optionally create Areas (e.g. "2nd floor - Accounting") to group printers within a site.

6.3 Configure global defaults

Go to Settings → Printer Fleet Manager and review:

  • SNMP Poll Interval (default 5 min) and SNMP Timeout (default 3000 ms).
  • Scanner Timeout per IP (default 500 ms) and Parallel Connections (default 50; capped at 100).
  • Default Toner Warning % (20) and Critical % (5) for new printers.
  • Toner Replacement Detection Jump % (40) - a toner level jumping up by this much between polls auto-logs a replacement in service history.
  • Auto-Resolve Alerts (on) - clears alerts when SNMP sees the issue fixed.
  • Keep Print Job History (days) (90; 0 = keep forever).
  • Escalation Delay (60 min) and optional Escalation Contact.
  • Optional Global Alert Webhook URL (a JSON POST for every alert).

6.4 Run your first discovery scan

  1. In the app, open Discovery / Network Scan and create a scan.
  2. Set Start IP and End IP (max range 1024 IPs per scan - narrow large subnets into several scans), the Port (default 9100), the SNMP Community (default public), and leave Query SNMP on to pull model / serial / toner during discovery.
  3. Click Scan (runs inline, gives an immediate result) or Scan in Background (recommended for large ranges; runs off the web worker and fills in results when done).
  4. Review discovered devices, give each a name and a site, and click Add Printer to bring it under management. Mark non-printers Ignore.

Only Printer Managers may run scans (enforced server-side): scanning port-probes whole ranges and creates records.

6.5 Enable the background jobs (crons)

All operational crons ship DISABLED by default so the module is inert until you configure printers. Enable the ones you want under Settings → Technical → Automation → Scheduled Actions (Developer Mode). The full list:

Cron name Default interval Ships active? What it does
Printer SNMP Monitoring 5 minutes No Polls all SNMP-enabled printers (status, toner, page count, alerts). Enable this first.
Printer Consumable Refresh 1 day No Syncs toner consumables, snapshots levels for burn-rate, runs reorder checks.
Printer Page-Count Snapshot 1 day No Records daily page-count deltas for volume trends/monthly reports.
Printer Alert Escalation 15 minutes No Re-notifies + emails the escalation contact for unacknowledged criticals.
Printer Warranty Check 1 day No Raises warranty alerts for printers expiring within the warning window.
Printer Alert Daily Digest 1 day No One summary email per digest-mode subscriber.
Printer Job History Cleanup 1 day No Deletes print-job history older than the retention setting.
Printer Discovery: Background Scan Runner 1 day Yes No-op unless a background scan is queued; fires on demand. Leave enabled.
Printer Fleet Manager License Check-in 7 days Yes Periodic license check-in. Leave enabled.

Tuning tips:

  • Change the SNMP poll interval from Settings → Printer Fleet Manager → SNMP Poll Interval (this automatically updates the "Printer SNMP Monitoring" cron interval) or edit the cron directly.
  • Other intervals are edited directly on each Scheduled Action.
  • Enable "Printer Consumable Refresh" and "Printer Page-Count Snapshot" alongside SNMP polling if you want burn-rate/volume history and reorder checks.

6.6 Alerts & notifications

  • Email alerts require a working outgoing mail server in Odoo (Settings → Technical → Email → Outgoing Mail Servers). Without it, email and digests cannot be delivered.
  • Users configure their own Notification Subscriptions (per site, per severity), choosing channels: Email, In-App, SMS (optional), and Webhook (optional). Digest mode batches into one daily email.
  • SMS (optional): create an SMS backend (Twilio provider needs an Account SID, Auth Token, and From number; or a generic Webhook provider). No pip package is required - it calls the provider's REST API over HTTPS. A subscriber enabling SMS must supply a destination number.
  • Webhook (optional): a per-subscription or global webhook URL receives a JSON POST for matching alerts. URLs must start with http:// or https://.

6.7 Wallboard / kiosk

The wallboard is a full-screen, read-only, auto-refreshing fleet status page that a hallway TV/kiosk can display without logging in, guarded by a token.

  1. Settings → Printer Fleet Manager → Wallboard Kiosk Token. Click Generate to create a strong random token (or set your own). Leaving it blank disables public wallboard access.
  2. On the kiosk device, browse to: https://YOUR_ODOO_HOST/printer_fleet/wallboard?token=YOUR_TOKEN The token is validated, then moved into a secure cookie and stripped from the URL. The cookie lifetime is the Kiosk Cookie Lifetime setting (default 30 days; clamped 1-365). Rotating the token instantly revokes old devices on their next load.

Serve the wallboard over HTTPS so the kiosk cookie is set with the secure flag.

6.8 QR labels (mobile technician page)

  • From a printer (or a selection of printers), use the Printer QR Label report to print labels. Each QR encodes a link to that printer's mobile quick-action page (/printer_fleet/mobile/<id>).
  • A technician scanning the label (while logged in with a normal Odoo account - auth='user') can acknowledge alerts and log service (toner/drum/ fuser/maintenance/jam/repair) right from their phone.
  • To encode a custom base URL instead of the backend link, set QR Label Base URL in Settings.
  • QR image generation requires the qrcode library (§2.4). Label PDF export requires wkhtmltopdf (§2.5).

7. Optional Purchase bridge (printer_fleet_manager_purchase)

What it does: when both printer_fleet_manager and Odoo Purchase are installed, this bridge turns consumable reorder thresholds into draft purchase RFQs.

  • Map each consumable to a purchasable product and a vendor.
  • A daily cron ("Printer Fleet: Auto-Create Reorder RFQs") creates a draft purchase.order when a consumable crosses its reorder threshold - opt-in per consumable (auto_po_enabled defaults off).
  • De-duplicates against any open RFQ/PO line for the same product+vendor.
  • Posts a chatter note on the printer when an RFQ is created.
  • Nothing is ever confirmed automatically - a human always reviews the RFQ.

Install: the bridge is auto_install = True, so if both printer_fleet_manager and purchase are already installed, Odoo installs it automatically on the next Update Apps List. Otherwise install it explicitly (-i printer_fleet_manager_purchase, which pulls in purchase).

Its cron ships DISABLED. After you've mapped consumables to products/ vendors and enabled auto_po_enabled on the ones you want, enable the "Printer Fleet: Auto-Create Reorder RFQs" scheduled action.


8. Upgrading the module

  1. Back up first (§3).
  2. Replace the module directory with the new version (same unzip/rename-to-printer_fleet_manager steps as install), or pull the new commit on Odoo.sh / rebuild your Docker image.
  3. Upgrade the module:
  4. UI: Apps → Printer Fleet Manager → Upgrade.
  5. CLI: bash sudo systemctl stop odoo sudo -u odoo /opt/odoo/venv/bin/python /opt/odoo/odoo/odoo-bin \ -c /etc/odoo/odoo.conf -d YOUR_DB \ -u printer_fleet_manager --stop-after-init sudo systemctl start odoo

Upgrade notes:

  • License state survives upgrades. You do not need to re-activate after an upgrade.
  • Your cron schedule choices survive. The license check-in and the operational crons are noupdate, so an upgrade won't reset the intervals or enabled/disabled states you chose. (The discovery background-scan runner cron is intentionally re-synced on upgrade so its internal routing self-heals
  • this does not disturb your interval/active choices.)
  • Upgrading also runs any needed data migrations automatically.

9. Uninstall

Uninstall from Apps → Printer Fleet Manager → Uninstall (Developer Mode), or via odoo-bin shell. Uninstall has been verified clean.

What is removed:

  • All PFM models/tables (printers, sites, discoveries, alerts, services, consumables, jobs, snapshots, subscriptions, OID profiles, etc. - ~17 tables), including the reporting SQL view, are dropped with no orphaned metadata rows.
  • All PFM scheduled actions, views, menus, security groups, and reports.

What persists:

  • License activation state is not automatically purged by an ordinary uninstall. If you want a truly clean slate, contact support and we will walk you through it.
  • If you installed the Purchase bridge, uninstall it as well; uninstalling the core does not remove purchase itself.

Order: uninstall printer_fleet_manager_purchase before (or together with) printer_fleet_manager.


10. Troubleshooting

Each item is symptom → cause → fix.

1. Install fails / QR labels blank, log shows No module named 'qrcode' - Cause: the qrcode library isn't installed in Odoo's Python environment. (The module still installs - QR generation is wrapped in a guard - but the label QR image will be empty and a warning is logged.) - Fix: sudo -u odoo /opt/odoo/venv/bin/pip install "qrcode[pil]" into the same environment Odoo runs from, then restart Odoo. In Docker, bake it into the image; on Odoo.sh, add qrcode[pil] to root requirements.txt.

2. "The module wants pysnmp / net-snmp" - Cause: a misconception. PFM uses a built-in raw-socket SNMP client. - Fix: do not install any SNMP library - there is no such dependency. If a tool reports one, it's looking at the wrong module.

3. Discovery scan finds nothing (or far fewer printers than expected) - Cause: the Odoo host has no route to the printer subnet/VLAN, or a firewall/ACL blocks the TCP probe port (9100) and/or UDP 161; or the scan range/port is wrong; or the per-IP timeout is too low for slow devices. - Fix: verify L3 reachability from the Odoo host (nc -vz PRINTER_IP 9100, ping PRINTER_IP); confirm firewall/ACL permits UDP/161 + TCP/9100 from the Odoo host to the printer VLANs; narrow the range (max 1024 IPs); raise the scanner timeout; confirm the correct scan port.

4. Printers discovered by port but no model/serial/toner filled in - Cause: SNMP is disabled on the printer, the community string is wrong (default is public), or the device only speaks SNMPv3 (unsupported). - Fix: enable SNMP read (v1/v2c) on the printer, set the correct community string in the scan (and later on the printer record), and re-scan. PFM does not support SNMPv3.

5. Printer shows "Offline - Port not responding" but it's actually up - Cause: the reachability check connects to the printer's configured TCP port (default 9100). If the device serves on a different port (e.g. IPP 631) or that port is firewalled, the check fails even though SNMP works. - Fix: set the correct Port on the printer record and ensure it's reachable from the Odoo host.

6. No SNMP updates happening at all (toner/status never changes) - Cause: the "Printer SNMP Monitoring" cron is disabled (it ships off by default), or the printer's SNMP Enabled flag is off. - Fix: enable the cron (Settings → Technical → Scheduled Actions) or set the poll interval in Settings; enable SNMP on the printer record. Confirm Odoo has at least one worker/cron thread running.

7. SNMP polls time out for some printers - Cause: slow devices, congested/high-latency VLANs, or a too-short SNMP timeout. - Fix: increase SNMP Timeout (ms) in Settings (default 3000). Confirm UDP/161 isn't rate-limited by an intermediate firewall.

8. No alert emails / no digest emails - Cause: no working Outgoing Mail Server configured in Odoo, or the relevant crons (Escalation / Daily Digest) are disabled, or users have no notification subscriptions with the Email channel. - Fix: configure Settings → Technical → Email → Outgoing Mail Servers and send a test; enable the Escalation and/or Daily Digest crons; have users create subscriptions with Email enabled.

9. PDF export of QR labels / monthly report fails or is missing - Cause: wkhtmltopdf is not installed (or not the Odoo-recommended patched build). - Fix: install the patched wkhtmltopdf 0.12.6 (§2.5) and restart Odoo. On-screen dashboards/wallboard don't need it - only the two QWeb-PDF reports.

10. Wallboard shows "Forbidden / invalid or missing kiosk token" - Cause: the kiosk token is blank (public access disabled), or the URL token doesn't match, or the kiosk cookie expired. - Fix: set/generate a token in Settings; browse to …/printer_fleet/wallboard?token=YOUR_TOKEN once to seed the cookie; serve over HTTPS. Rotating the token intentionally logs out all kiosks.

11. License banner won't go away / "Could not reach the license server" - Cause: the server can't reach license.modulesmith.com:443 outbound (firewall/proxy), or a proxy is mangling the response so signature verification fails. - Fix: allow TCP 443 outbound to license.modulesmith.com (§5.3), or set a proxy-friendly License Server URL in Settings, or use Offline Activation (§5.4). The banner is informational - printer management is not interrupted.

12. Background discovery scan stuck in "Queued/Scanning" - Cause: the "Printer Discovery: Background Scan Runner" cron is disabled, or a worker died mid-scan. - Fix: ensure that cron is active (it ships enabled). Scans stuck longer than 30 minutes, or that fail 3 background attempts, are automatically failed with a message; use Reset on the scan to try again.

13. Auto-RFQ (Purchase bridge) never creates RFQs - Cause: the "Printer Fleet: Auto-Create Reorder RFQs" cron is disabled (ships off), consumables aren't mapped to a product/vendor, or auto_po_enabled isn't set on those consumables, or an open RFQ/PO already covers them (dedup). - Fix: map each consumable to a purchasable product + vendor, enable auto_po_enabled per consumable, then enable the cron.


11. Getting support

Email [email protected]. To get a fast, accurate answer, include:

  1. Odoo version and edition (e.g. "Odoo 19.0 Community").
  2. Printer Fleet Manager version (this package: 19.0.7.1.1; note if the Purchase bridge is installed and its version).
  3. A clear description of what you did and what happened (with the exact on-screen message).
  4. A relevant Odoo log excerpt around the failure (from your Odoo log file or journalctl -u odoo). Redact secrets - the module never logs your license key.
  5. Deployment type (on-prem systemd / Docker / Odoo.sh) and OS.
  6. For SNMP/discovery issues: the printer make/model, SNMP version (v1/v2c), and whether UDP/161 + the probe port are reachable from the Odoo host.

Printer Fleet Manager 19.0.7.1.1 - © ModuleSmith. Licensed under OPL-1.

Terms of Use · Privacy Policy · Terms of Sale · Refund Policy · Maintenance & Support

© 2026 ModuleSmith · All rights reserved · Odoo is a trademark of Odoo S.A. ModuleSmith is an independent vendor.