买了款喷墨打印机,为了防堵喷头,直接上代码吧
树莓派型号:树莓派 zero w 板子
打印机型号:HP Smart Tank 510 series
python版本:Python 3.9.2
原因:树莓派和打印机都并非一直开机。本人也并非一直在家。为了方便家人使用,所以写入树莓派zero。想起来了就把树莓派插电,不用了就直接拔。树莓派开机后会执行python,会循环判断打印机是否在线,直到打印机开机后py会访问打印机数据记录到数据库中,并判断是否要打印测试页,以达到使用打印机的目的。
感觉没必要一直开着树莓派和打印机。毕竟打印机有eprint功能,如果打印机常开,用python在服务器上做一个脚本来定时发邮件给打印机打印就可以了。或者邮箱里定时发送邮件给打印机就更省事了。
分析打印机的数据后,所以加入了sqlite的数据库用于判断时间和已打印的纸张数,并用python自带的http服务来查看sqlite数据。
比较麻烦的地方就是最下面的html读取sqlite数据。html毕竟是客户端执行的,办法总比困难多。
html界面:
开机执行:
sudo nano /etc/rc.local
exit 0 之前加入 /home/user/Work/print/hp.sh start
hp.sh 代码
#!/bin/sh
count=`ps -ef |grep http.server |grep -v "grep" |wc -l`
if [ $count -eq 0 ];then
sudo /usr/bin/python3 -m http.server 80 --directory /home/user/Work/print &
fi
sleep 5
sudo /usr/bin/python3 /home/user/Work/print/hp.py &
定期执行,每天11:00,16:00 各执行一次
crontab -e
加入
0 11,16 * * * python /home/user/Work/print/hp.py >> /home/user/Work/print/hp.log
sqlite代码:
DROP TABLE IF EXISTS "log";
CREATE TABLE "log" (
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"total" integer,
"total_hb" integer,
"total_cs" integer,
"total_kz" integer,
"total_sz" integer,
"creat" datetime,
"result" TEXT
);
python代码:
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
import os,sys,time
import sqlite3
import requests
import xmltodict
import urllib3
from datetime import datetime
import cups
import socket
def get_url(url: str) -> None:
try:
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36',
'Accept': '*/*', 'Accept-Encoding': 'gzip', 'Accept-Language': 'en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7,mt;q=0.6'}
response = requests.get(url, headers=headers, verify=False,timeout=20)
html=response.text
result=[1,html]
except r