zabbix_export: version: '7.4' template_groups: - uuid: 3cd4e8d0b828464e8f4b3becf13a9dbd name: Printers templates: - uuid: 4202e75f163c4232bb172916de8afa2d template: Xerox VersaLink - Monochrome name: Xerox VersaLink - Monochrome description: Xerox VersaLink B&W multifunction printers groups: - name: Printers items: - uuid: 45364a48593a41e89b13ec0392f4f582 name: Printer Model type: SNMP_AGENT snmp_oid: get[1.3.6.1.2.1.25.3.2.1.3.1] key: printer.model delay: 1h history: 90d trends: 0d value_type: TEXT description: Printer Model tags: - tag: component value: printer - tag: type value: info preprocessing: - type: JAVASCRIPT parameters: - "// Handle hex-encoded SNMP strings\n// Try multiple approaches to convert hex to ASCII\n\n// First, check if it looks like hex (with spaces, newlines, or other separators)\nvar hexPattern = /^[0-9A-Fa-f\\s]+$/;\nif (hexPattern.test(value) && value.length > 4) {\n // Extract all hex pairs (2 characters)\n var hexBytes = value.match(/[0-9A-Fa-f]{2}/g);\n if (hexBytes && hexBytes.length > 0) {\n var result = '';\n for (var i = 0; i < hexBytes.length; i++) {\n var code = parseInt(hexBytes[i], 16);\n // Only keep printable ASCII (0x20-0x7E)\n if (code >= 32 && code <= 126) {\n result += String.fromCharCode(code);\n }\n }\n if (result.length > 0) {\n return result;\n }\n }\n}\n\n// Fallback: Remove non-printable characters\nreturn value.replace(/[^\\x20-\\x7E]/g, '');" - uuid: 983382594f0a43c895d7951f7161a2b6 name: Printer Hostname type: SNMP_AGENT snmp_oid: get[1.3.6.1.2.1.1.5.0] key: printer.hostname delay: 1h history: 90d trends: 0d value_type: TEXT description: Printer Hostname tags: - tag: component value: printer - tag: type value: info preprocessing: - type: JAVASCRIPT parameters: - "// Handle hex-encoded SNMP strings\n// Try multiple approaches to convert hex to ASCII\n\n// First, check if it looks like hex (with spaces, newlines, or other separators)\nvar hexPattern = /^[0-9A-Fa-f\\s]+$/;\nif (hexPattern.test(value) && value.length > 4) {\n // Extract all hex pairs (2 characters)\n var hexBytes = value.match(/[0-9A-Fa-f]{2}/g);\n if (hexBytes && hexBytes.length > 0) {\n var result = '';\n for (var i = 0; i < hexBytes.length; i++) {\n var code = parseInt(hexBytes[i], 16);\n // Only keep printable ASCII (0x20-0x7E)\n if (code >= 32 && code <= 126) {\n result += String.fromCharCode(code);\n }\n }\n if (result.length > 0) {\n return result;\n }\n }\n}\n\n// Fallback: Remove non-printable characters\nreturn value.replace(/[^\\x20-\\x7E]/g, '');" - uuid: aefae29a7396430e8bb1e743f62d733d name: Printer Serial Number type: SNMP_AGENT snmp_oid: get[1.3.6.1.2.1.43.5.1.1.17.1] key: printer.serial delay: 1h history: 90d trends: 0d value_type: TEXT description: Printer Serial Number tags: - tag: component value: printer - tag: type value: info preprocessing: - type: JAVASCRIPT parameters: - "// Handle hex-encoded SNMP strings\n// Try multiple approaches to convert hex to ASCII\n\n// First, check if it looks like hex (with spaces, newlines, or other separators)\nvar hexPattern = /^[0-9A-Fa-f\\s]+$/;\nif (hexPattern.test(value) && value.length > 4) {\n // Extract all hex pairs (2 characters)\n var hexBytes = value.match(/[0-9A-Fa-f]{2}/g);\n if (hexBytes && hexBytes.length > 0) {\n var result = '';\n for (var i = 0; i < hexBytes.length; i++) {\n var code = parseInt(hexBytes[i], 16);\n // Only keep printable ASCII (0x20-0x7E)\n if (code >= 32 && code <= 126) {\n result += String.fromCharCode(code);\n }\n }\n if (result.length > 0) {\n return result;\n }\n }\n}\n\n// Fallback: Remove non-printable characters\nreturn value.replace(/[^\\x20-\\x7E]/g, '');" - uuid: ba0b6019551241d883f7982c461a674b name: System Location type: SNMP_AGENT snmp_oid: get[1.3.6.1.2.1.1.6.0] key: printer.location delay: 1h history: 90d trends: 0d value_type: TEXT description: System Location tags: - tag: component value: printer - tag: type value: info preprocessing: - type: JAVASCRIPT parameters: - "// Handle hex-encoded SNMP strings\n// Try multiple approaches to convert hex to ASCII\n\n// First, check if it looks like hex (with spaces, newlines, or other separators)\nvar hexPattern = /^[0-9A-Fa-f\\s]+$/;\nif (hexPattern.test(value) && value.length > 4) {\n // Extract all hex pairs (2 characters)\n var hexBytes = value.match(/[0-9A-Fa-f]{2}/g);\n if (hexBytes && hexBytes.length > 0) {\n var result = '';\n for (var i = 0; i < hexBytes.length; i++) {\n var code = parseInt(hexBytes[i], 16);\n // Only keep printable ASCII (0x20-0x7E)\n if (code >= 32 && code <= 126) {\n result += String.fromCharCode(code);\n }\n }\n if (result.length > 0) {\n return result;\n }\n }\n}\n\n// Fallback: Remove non-printable characters\nreturn value.replace(/[^\\x20-\\x7E]/g, '');" - uuid: 5d450a90003a4586b7e6c25cd5229a31 name: Toner Part Number type: SNMP_AGENT snmp_oid: get[1.3.6.1.2.1.43.11.1.1.6.1.1] key: printer.toner.black.part delay: 1h history: 90d trends: 0d value_type: TEXT description: Toner Part Number tags: - tag: component value: printer - tag: type value: info preprocessing: - type: JAVASCRIPT parameters: - "// Clean up part number by removing serial numbers and firmware\n// Handles formats like:\n// \"Toner Cartridge;SNACC7952D80730000\" -> \"Toner Cartridge\"\n// \"Black Cartridge HP 58A (CF258A);FW:V4.23.3\" -> \"Black Cartridge HP 58A (CF258A)\"\n// \"Drum Cartridge, PN 101R00554;SN2600A90008100000\" -> \"Drum Cartridge, PN 101R00554\"\n\n// First, apply hex conversion if needed\nvar hexPattern = /^[0-9A-Fa-f\\s]+$/;\nif (hexPattern.test(value) && value.length > 4) {\n var hexBytes = value.match(/[0-9A-Fa-f]{2}/g);\n if (hexBytes && hexBytes.length > 0) {\n var result = '';\n for (var i = 0; i < hexBytes.length; i++) {\n var code = parseInt(hexBytes[i], 16);\n if (code >= 32 && code <= 126) {\n result += String.fromCharCode(code);\n }\n }\n if (result.length > 0) {\n value = result;\n }\n }\n}\n\n// Remove serial numbers (;SN followed by anything)\nvalue = value.replace(/;SN[^;]*/g, '');\n\n// Remove firmware info (;FW: or ;FW\ \ followed by anything)\nvalue = value.replace(/;FW[^;]*/g, '');\n\n// Remove any other semicolon-separated metadata\n// (but keep the main description before first semicolon)\nvar parts = value.split(';');\nvalue = parts[0];\n\n// Trim whitespace\nvalue = value.trim();\n\n// For Xerox printers reporting just \"Toner Cartridge\" without PN,\n// try to add known part numbers (must match model-specific logic)\n// This is handled by triggers showing compatibility notes instead\n\nreturn value;" - uuid: 6c2f31435baf4f32bd38d451ce07011a name: Toner Current type: SNMP_AGENT snmp_oid: get[1.3.6.1.2.1.43.11.1.1.9.1.1] key: printer.toner.black.current delay: 1h history: 90d trends: 365d value_type: FLOAT description: Toner Current tags: - tag: component value: printer - tag: type value: raw preprocessing: - type: JAVASCRIPT parameters: - "// Handle SNMP unknown values (-3, -2, etc.)\n// Per RFC 3805: -1 = other, -2 = unknown, -3 = unknown\n// Convert to 0 to indicate empty/problem state\nvar numValue = parseInt(value);\nif (numValue < 0) {\n return '0';\n}\nreturn value;" - uuid: 1b9c7a9bba0b47b7acf20bb3bf0d95fa name: Toner Max type: SNMP_AGENT snmp_oid: get[1.3.6.1.2.1.43.11.1.1.8.1.1] key: printer.toner.black.max delay: 1h history: 90d trends: 365d value_type: FLOAT description: Toner Max tags: - tag: component value: printer - tag: type value: raw preprocessing: - type: JAVASCRIPT parameters: - "// Handle SNMP unknown values (-3, -2, etc.)\n// Per RFC 3805: -1 = other, -2 = unknown, -3 = unknown\n// Convert to 0 to indicate empty/problem state\nvar numValue = parseInt(value);\nif (numValue < 0) {\n return '0';\n}\nreturn value;" - uuid: 816299e412684db39226c258978c4980 name: Toner Level type: CALCULATED key: printer.toner.black delay: 1h history: 90d trends: 365d value_type: FLOAT params: round((last(//printer.toner.black.current)/last(//printer.toner.black.max))*100,0) description: Toner Level tags: - tag: component value: supplies - tag: type value: level units: '%' triggers: - uuid: 9434fe5b914f438b84541e3d379e25d9 expression: last(/Xerox VersaLink - Monochrome/printer.toner.black)<20 and length(last(/Xerox VersaLink - Monochrome/printer.toner.black.part))>0 name: 'Toner Level is low on {{HOST.NAME}}. Current level: {{ITEM.LASTVALUE}}. Replacement part: {{ITEM.LASTVALUE2}} (See compatibility notes for potential alternatives)' priority: WARNING tags: - tag: scope value: availability - uuid: 132e12902ef74bd2bb6664842b009e8f expression: last(/Xerox VersaLink - Monochrome/printer.toner.black)<10 and length(last(/Xerox VersaLink - Monochrome/printer.toner.black.part))>0 name: 'Toner Level is low on {{HOST.NAME}}. Current level: {{ITEM.LASTVALUE}}. Replacement part: {{ITEM.LASTVALUE2}} (See compatibility notes for potential alternatives)' priority: HIGH tags: - tag: scope value: availability - uuid: d461fd1c161e4f7a89a30cf272b5eb29 name: Drum Part Number type: SNMP_AGENT snmp_oid: get[1.3.6.1.2.1.43.11.1.1.6.1.6] key: printer.drum.part delay: 1h history: 90d trends: 0d value_type: TEXT description: Drum Part Number tags: - tag: component value: printer - tag: type value: info preprocessing: - type: JAVASCRIPT parameters: - "// Clean up part number by removing serial numbers and firmware\n// Handles formats like:\n// \"Toner Cartridge;SNACC7952D80730000\" -> \"Toner Cartridge\"\n// \"Black Cartridge HP 58A (CF258A);FW:V4.23.3\" -> \"Black Cartridge HP 58A (CF258A)\"\n// \"Drum Cartridge, PN 101R00554;SN2600A90008100000\" -> \"Drum Cartridge, PN 101R00554\"\n\n// First, apply hex conversion if needed\nvar hexPattern = /^[0-9A-Fa-f\\s]+$/;\nif (hexPattern.test(value) && value.length > 4) {\n var hexBytes = value.match(/[0-9A-Fa-f]{2}/g);\n if (hexBytes && hexBytes.length > 0) {\n var result = '';\n for (var i = 0; i < hexBytes.length; i++) {\n var code = parseInt(hexBytes[i], 16);\n if (code >= 32 && code <= 126) {\n result += String.fromCharCode(code);\n }\n }\n if (result.length > 0) {\n value = result;\n }\n }\n}\n\n// Remove serial numbers (;SN followed by anything)\nvalue = value.replace(/;SN[^;]*/g, '');\n\n// Remove firmware info (;FW: or ;FW\ \ followed by anything)\nvalue = value.replace(/;FW[^;]*/g, '');\n\n// Remove any other semicolon-separated metadata\n// (but keep the main description before first semicolon)\nvar parts = value.split(';');\nvalue = parts[0];\n\n// Trim whitespace\nvalue = value.trim();\n\n// For Xerox printers reporting just \"Toner Cartridge\" without PN,\n// try to add known part numbers (must match model-specific logic)\n// This is handled by triggers showing compatibility notes instead\n\nreturn value;" - uuid: 0a4d3dc0852744b7a6bc52d1471cb89c name: Drum Current type: SNMP_AGENT snmp_oid: get[1.3.6.1.2.1.43.11.1.1.9.1.6] key: printer.drum.current delay: 1h history: 90d trends: 365d value_type: FLOAT description: Drum Current tags: - tag: component value: printer - tag: type value: raw preprocessing: - type: JAVASCRIPT parameters: - "// Handle SNMP unknown values (-3, -2, etc.)\n// Per RFC 3805: -1 = other, -2 = unknown, -3 = unknown\n// Convert to 0 to indicate empty/problem state\nvar numValue = parseInt(value);\nif (numValue < 0) {\n return '0';\n}\nreturn value;" - uuid: 727bd2d798bd4659ae2d9ce8dd06c82c name: Drum Max type: SNMP_AGENT snmp_oid: get[1.3.6.1.2.1.43.11.1.1.8.1.6] key: printer.drum.max delay: 1h history: 90d trends: 365d value_type: FLOAT description: Drum Max tags: - tag: component value: printer - tag: type value: raw preprocessing: - type: JAVASCRIPT parameters: - "// Handle SNMP unknown values (-3, -2, etc.)\n// Per RFC 3805: -1 = other, -2 = unknown, -3 = unknown\n// Convert to 0 to indicate empty/problem state\nvar numValue = parseInt(value);\nif (numValue < 0) {\n return '0';\n}\nreturn value;" - uuid: 6f3a650b617249629098c046a0016825 name: Drum Level type: CALCULATED key: printer.drum delay: 1h history: 90d trends: 365d value_type: FLOAT params: round((last(//printer.drum.current)/last(//printer.drum.max))*100,0) description: Drum Level tags: - tag: component value: supplies - tag: type value: level units: '%' triggers: - uuid: 5e95825e6d61431bbcf023b906905947 expression: last(/Xerox VersaLink - Monochrome/printer.drum)<20 and length(last(/Xerox VersaLink - Monochrome/printer.drum.part))>0 name: 'Drum Level is low on {{HOST.NAME}}. Current level: {{ITEM.LASTVALUE}}. Replacement part: {{ITEM.LASTVALUE2}} (See compatibility notes for potential alternatives)' priority: WARNING tags: - tag: scope value: availability - uuid: c60c7f50ea824ee48d58a0ffcfd9a602 expression: last(/Xerox VersaLink - Monochrome/printer.drum)<10 and length(last(/Xerox VersaLink - Monochrome/printer.drum.part))>0 name: 'Drum Level is low on {{HOST.NAME}}. Current level: {{ITEM.LASTVALUE}}. Replacement part: {{ITEM.LASTVALUE2}} (See compatibility notes for potential alternatives)' priority: HIGH tags: - tag: scope value: availability - uuid: 77ed4ed118ab4694b8dac4a4d66ea6f8 name: Transfer Roller Part Number type: SNMP_AGENT snmp_oid: get[1.3.6.1.2.1.43.11.1.1.6.1.10] key: printer.transfer.roller.part delay: 1h history: 90d trends: 0d value_type: TEXT description: Transfer Roller Part Number tags: - tag: component value: printer - tag: type value: info preprocessing: - type: JAVASCRIPT parameters: - "// Clean up part number by removing serial numbers and firmware\n// Handles formats like:\n// \"Toner Cartridge;SNACC7952D80730000\" -> \"Toner Cartridge\"\n// \"Black Cartridge HP 58A (CF258A);FW:V4.23.3\" -> \"Black Cartridge HP 58A (CF258A)\"\n// \"Drum Cartridge, PN 101R00554;SN2600A90008100000\" -> \"Drum Cartridge, PN 101R00554\"\n\n// First, apply hex conversion if needed\nvar hexPattern = /^[0-9A-Fa-f\\s]+$/;\nif (hexPattern.test(value) && value.length > 4) {\n var hexBytes = value.match(/[0-9A-Fa-f]{2}/g);\n if (hexBytes && hexBytes.length > 0) {\n var result = '';\n for (var i = 0; i < hexBytes.length; i++) {\n var code = parseInt(hexBytes[i], 16);\n if (code >= 32 && code <= 126) {\n result += String.fromCharCode(code);\n }\n }\n if (result.length > 0) {\n value = result;\n }\n }\n}\n\n// Remove serial numbers (;SN followed by anything)\nvalue = value.replace(/;SN[^;]*/g, '');\n\n// Remove firmware info (;FW: or ;FW\ \ followed by anything)\nvalue = value.replace(/;FW[^;]*/g, '');\n\n// Remove any other semicolon-separated metadata\n// (but keep the main description before first semicolon)\nvar parts = value.split(';');\nvalue = parts[0];\n\n// Trim whitespace\nvalue = value.trim();\n\n// For Xerox printers reporting just \"Toner Cartridge\" without PN,\n// try to add known part numbers (must match model-specific logic)\n// This is handled by triggers showing compatibility notes instead\n\nreturn value;" - uuid: 39ea5ea68c644db79aa6d72cb5af74b6 name: Fuser Part Number type: SNMP_AGENT snmp_oid: get[1.3.6.1.2.1.43.11.1.1.6.1.12] key: printer.fuser.part delay: 1h history: 90d trends: 0d value_type: TEXT description: Fuser Part Number tags: - tag: component value: printer - tag: type value: info preprocessing: - type: JAVASCRIPT parameters: - "// Clean up part number by removing serial numbers and firmware\n// Handles formats like:\n// \"Toner Cartridge;SNACC7952D80730000\" -> \"Toner Cartridge\"\n// \"Black Cartridge HP 58A (CF258A);FW:V4.23.3\" -> \"Black Cartridge HP 58A (CF258A)\"\n// \"Drum Cartridge, PN 101R00554;SN2600A90008100000\" -> \"Drum Cartridge, PN 101R00554\"\n\n// First, apply hex conversion if needed\nvar hexPattern = /^[0-9A-Fa-f\\s]+$/;\nif (hexPattern.test(value) && value.length > 4) {\n var hexBytes = value.match(/[0-9A-Fa-f]{2}/g);\n if (hexBytes && hexBytes.length > 0) {\n var result = '';\n for (var i = 0; i < hexBytes.length; i++) {\n var code = parseInt(hexBytes[i], 16);\n if (code >= 32 && code <= 126) {\n result += String.fromCharCode(code);\n }\n }\n if (result.length > 0) {\n value = result;\n }\n }\n}\n\n// Remove serial numbers (;SN followed by anything)\nvalue = value.replace(/;SN[^;]*/g, '');\n\n// Remove firmware info (;FW: or ;FW\ \ followed by anything)\nvalue = value.replace(/;FW[^;]*/g, '');\n\n// Remove any other semicolon-separated metadata\n// (but keep the main description before first semicolon)\nvar parts = value.split(';');\nvalue = parts[0];\n\n// Trim whitespace\nvalue = value.trim();\n\n// For Xerox printers reporting just \"Toner Cartridge\" without PN,\n// try to add known part numbers (must match model-specific logic)\n// This is handled by triggers showing compatibility notes instead\n\nreturn value;"