在这篇博客中,我们将解释如何配置打印机以及如何使用 PHP 构建侦听器和错误查看器页面,并在后面使用 MySQL 数据库来存储警报。
所有 Link-OS 打印机都支持 HTTP-POST 协议,以将消息从打印机发送到网络服务器。这些消息包含有关打印机状态和可能的错误状态的信息,因此,如果使用正确,此功能可用于监视一组打印机。
先决条件
LinkOS 打印机
使用 PHP 和 MySQL 的 Web 服务器
基本的 PHP 和 MySQL 知识
步骤1
我们首先配置打印机以将消息发送到 Web 服务器。
支持的消息类型如下:
所有消息
缺纸
色带用完
头打开
色带输入
切刀卡住
打印机暂停
媒体低
色带低位
电量不足
无效头
国家/地区代码错误
电池缺失
介质盒
介质盒加载失败
介质盒弹出失败
介质盒强制弹出
为简单起见,本博客将使用接收所有消息的选项,但您可以缩小列表范围并仅选择您真正需要的消息。
为了配置打印机,您需要向其 发送以下命令
! U1 setvar "alerts.configured" "COLD START,SNMP,Y,N,255.255.255.255,162,N"
! U1 setvar "weblink.restore_defaults" ""
! U1 setvar "alerts.add" "ALL MESSAGES,HTTP-POST,Y,Y,http://www.example.com/postlistener.php,0,N,"
! U1 setvar "device.reset" ""
前 2 个命令仅需要确保打印机设置为我们将用于此解决方案的设置的默认配置,而第三个命令是启用警报的实际配置命令,最后一个命令只是重新启动打印机,以便它可以应用更改。
例如,如果您只想接收“缺纸”和“色带用完”错误的警报,则必须发送以下命令,每个命令对应一种类型的警报
! U1 setvar "alerts.add" "PAPER OUT,HTTP-POST,Y,Y,http://www.example.com/postlistener.php,0,N,"
! U1 setvar "alerts.add" "RIBBON OUT,HTTP-POST,Y,Y,http://www.example.com/postlistener.php,0,N,"
打印机重新启动后,它将开始发送警报。
步骤 2
假设您有一个支持 PHP 和 MySQL 的网络服务器,您应该创建(或已经拥有)一个管理数据库连接的文件,类似于以下
conn.php
$servername = "localhost";
$username = "root";
$password = "password";
$dbname = "http-post";
$conn = new mysqli($servername, $username, $password, $dbname);
mysqli_query($conn,"set names 'utf8'");
因此,您需要创建一个名为“http-post”的数据库并导入以下空表转储,该表已包含用于存储警报的所有必需字段
-- phpMyAdmin SQL Dump
-- version 4.9.7
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- Database: `http-post`
--
-- --------------------------------------------------------
--
-- Structure of the table `logs`
--
CREATE TABLE `logs` (
`id` int(100) NOT NULL,
`sn` varchar(20) NOT NULL,
`alerttype` varchar(50) NOT NULL,
`alertmessage` varchar(50) NOT NULL,
`date` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Indexes for the table `logs`
--
ALTER TABLE `logs`
ADD PRIMARY KEY (`id`);
--
-- AUTO_INCREMENT for the table `logs`
--
ALTER TABLE `logs`
MODIFY `id` int(100) NOT NULL AUTO_INCREMENT;
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
步骤3
一旦配置了打印机,数据库就准备好了,并且我们已经配置了与它的连接,我们需要构建监听器页面。
查看页面中的评论以了解更多详细信息。
postlistener.php
// get the alert message from the POST message
$alertMsg = urldecode($_POST["alertMsg"]);
// get the printer serial number
$sn = urldecode($_POST["uniqueId"]);
// since all the messages are in the format "type: message"
// this command splits the type of message and the message content into 2 different variables
list($alerttype, $alertmessage) = explode (": ", $alertMsg);
// including the PHP file which manages the database connection
include "conn.php";
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// editing the messages into lower case
$alerttype = ucfirst(strtolower($alerttype));
$alertmessage = ucfirst(strtolower($alertmessage));
// query to insert the message into the database
$stmt = $conn->prepare("INSERT INTO logs (sn, alerttype, alertmessage) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $sn, $alerttype, $alertmessage);
$stmt->execute();
$stmt->close();
$conn->close();
以下文件只是从数据库中提取数据并创建一个表来显示它们
postview.php
// creating a table to show the results
echo “<table border='1' width='75%'>
<th>Date</th>
<th>Serial number</th>
<th>Alert type</th>
<th>Alert message</th>”;
// including the PHP file which manages the database connection
include "conn.php";
// querying the database to show everything in the table called "logs"
$query = "SELECT * FROM logs";
// fetching the result from the database into a multidimensional array
$result = mysqli_query($conn,$query);
// fetching the array into single rows and reiterating this operation to show the data
while($row = $result->fetch_assoc()) {
echo "<tr>";
echo "<td>" . $row["date"] . "</td><td>" . $row["sn"] . "</td><td>" . $row["alerttype"] . "</td><td>" . $row["alertmessage"] . "</td>";
echo "</tr>";
}