打印机MQTT上层通讯协议V1.3

版本

修改日期

修改人

修改内容

1.1

2017-06-22

许森煌

1. 增加设置心跳控制

2. 增加打印机心跳包返回

NOTE: 本次修改内容使用蓝色字区分

2017-06-24

许森煌

1. 修改 重启打印机指令

NOTE: 本次修改内容使用绿色字区分

1.2

2017-07-15

许森煌

1. 更改发布的单据主题和心跳主题可分开

2. 修改发布的消息格式

NOTE: 本次修改内容使用红色字区分

1.3

2017-07-25

显示

1. 增加超时时间戳

NOTE: 本次修改内容使用淡蓝色字区分

一、数据格式

1) 打印机默认订阅的主题 “Prn” + CPUUID,可扫描自测页二维码获得,可设置为用MAC生成

例如 “Prn60A44CAB3AA72020170420170648017920201704201706480179”

2) 打印机默认PUBLISH的心跳主题为订阅的主题”_ST”,单据主题为订阅的主题”_ST”

例如 “Prn60A44CAB3AA72020170420170648017920201704201706480179_ST”

3) 打印机默认PUBLISH的消息会带上打印机的唯一信息表示当前打印机,默认与订阅主题相同,并用’[‘ ’]’ 包含,此信息可更改为由MAC生成,或不携带,以下使用“唯一信息”表示该字段

例如 “[Prn60A44CAB3AA72020170420170648017920201704201706480179]”

4) PUBLISH 给打印机的数据包格式

1. 1字节的标记头(Flag),如果此标记的高4位不为0则为直接打印数据,不包含单据号

值(HEX)

信息

0

0x01

需PUBLIC打印成功状态至指定主题

1

0x02

携带有单据号

2

0x04

携带设置参数

3

0x08

携带超时时间戳

4

0x10

固定为0

5

0x20

固定为0

6

0x40

固定为0

7

0x80

固定为0

2. 指定的主题(0-64 bytes),以HEX 00结尾,如果此处长度为0,则为默认主题

3. 单据号(0-64 bytes),以HEX 00结尾

4. 打印内容(0-16000bytes)

NOTE:总长度不能超过16384-6 = 16378 bytes

NOTE: 如果携带设置参数位置1,则对应的单据内容不会当做打印任务处理,单据内容为设置内容,必须小于4K bytes,同时可以携带单据号来侦测该设置是否成功处理(设置成功与否会在单据号尾部提示OK或ERROR)。

NOTE: 如果携带超时时间戳,打印时会比较当前时间与超时时间,如果当前时间大于超时时间,该单据内容会被丢弃,同时会PUBLISH一条单据超时信息(注意:单据收到应答包不受超时影响,依旧会发出)。时间戳存于打印内容首部,并以0x06包裹,(注意:这里如果格式错误将不会返回超时包,而是直接打印,不管是否超时)详见测试例子D.

设置指令见第五、设置指令

测试例子 (数据格式以HEX显示,请注意):

A. 发给打印机一条打印任务,任务ID为”SimplePrint”,打印内容为”Hello, World!” 则发送数据如下(HEX):

03 00 53 69 6D 70 6C 65 50 72 69 6E 74 00 48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 0D 0A

解析: 03为标记头03 = 01 | 02表示后续数据携带有单据号,需要返回成功状态给指定主题

00 表示回复的主题为默认单据主题

53 69 6D 70 6C 65 50 72 69 6E 74 00为单据号,对应文本”SimplePrint”并以00结尾

48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 0D 0A为打印内容,对应文本”Hello, World!”

NOTE: 打印机回复内容请参考5) D 与5) E

B. 发送给打印机一条设置指令,设置心跳间隔为30秒,任务ID为”set para”,则发送数据如下(HEX):

07 00 73 65 74 20 70 61 72 61 00 53 45 54 20 48 45 41 52 54 42 45 41 54 20 33 30 0D 0A

解析: 07为标记头07 = 01 | 02 | 04表示后续数据携带有单据号,需要返回成功状态给指定主题,并且该数据为设置指令,需要返回成功或失败

00 表示回复的主题为默认单据主题

73 65 74 20 70 61 72 61 00 为单据号,对应文本”set para””并以00结尾

53 45 54 20 48 45 41 52 54 42 45 41 54 20 33 30 0D 0A为设置内容,对应文本”SET HEARTBEAT 30” 以0D 0A 结尾。

C. 发送一条不带单据号的查询指令,则发送数据如下(HEX):

01 00

解析: 01表示需要回复打印机状态给指定主题

00 表示回复的主题为默认单据主题

D. 发送一条带时间戳的单据给打印机,任务ID 为”SimplePrint”,超时时间对应北京时间2017年7月25日23点59分59秒(UNIX时间戳为0x59776AFF),打印内容为”Hello,World!”,则发送数据如下(HEX):

0B 00 53 69 6D 70 6C 65 50 72 69 6E 74 00 06 FF 6A 77 59 06 48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 0D 0A

解析: 0B为标记头0B = 01 | 02 | 08表示后续数据携带有单据号,需要返回成功状态给指定主题,并且携带有超时时间戳

00 表示回复的主题为默认单据主题

53 69 6D 70 6C 65 50 72 69 6E 74 00为单据号,对应文本”SimplePrint”并以00结尾

06 FF 6A 77 59 06 为超时Unix时间戳,低字节在前,前后以HEX 06区隔

48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 0D 0A为打印内容,对应文本”Hello, World!”

NOTE: 如果打印机获取到的当前Unix 时间戳大于单据标定的时间戳,则表示当前数据包已超时,不能打印,否则会打印该单据。打印机回复内容请参考5) D、5) E  和5) F

5) 打印机PUBLISH 信息格式

当前离线包格式 offline;ID

当前登录包格式 online;ID;STATE;IMEI;IMSI;IP;MAC;TIME

当前心跳包格式 heartbeat;ID;STATE;GPRSdBm;TEMP;TIME

当前单据应答包格式 receivedID;ID;STATE;reciptID-Received

当前单据完成包格式 printDone;ID;STATE;reciptID

当前单据超时包格式 timeout;ID;STATE;reciptID

其中offline,online,heartbeat,receivedID,printDone,timeout分别依次使用数字0-5代替,

ID 为打印机唯一码(易趴使用MAC地址标识),

STATE为打印机当前状态,

IMEI 为GPRS模块IMEI号码,

IMSI 为 SIM 卡IMSI号码,

IP 为上联接口的IP地址,

MAC 为打印机网口MAC地址,

TIME 为当前网络时间(若时区设置不同,时间可能略有不同)

GPRSdBm 为GPRS模块当前信号强度

TEMP 为打印机当前打印头温度

reciptID 为单据的唯一信息码,由客户提供

测试例子 (数据以纯文本内容显示,请注意):

A. 离线包

0;[Prn60A44CAB3AA720201704201706480179]

解析: 0表示当前包为离线包

;[[Prn60A44CAB3AA72020170420170648017920201704201706480179]为打印机唯一信息码,使用分号’;’ 分隔其他信息

B. 登录包

1;[Prn60A44CAB3AA72020170420170648017920201704201706480179];9800;860832038705287;460013990009623;10.45.0.244;60-A4-4C-AB-3A-A7;2017-06-22 13:55:28

解析: 1表示当前包为登录包

;[[Prn60A44CAB3AA720201704201706480179]为打印机唯一信息码,使用分号’;’ 分隔其他信息

;9800 为打印机状态信息,表示当前打印机无错误,且当前连接为GPRS连接

;860832038705287 为打印机GPRS模块的IMEI号码

;460013990009623 为打印机SIM卡的IMSI号码

;10.45.0.244 为GPRS模块获取到的IP地址

;60-A4-4C-AB-3A-A7 为打印机的MAC地址

;2017-06-22 13:55:28 为打印机获取到的当前时间

C. 心跳包

2;[Prn60A44CAB3AA720201704201706480179];9820;-58;25;2017-06-22 13:55:28

解析: 2表示当前包为心跳包

;[[Prn60A44CAB3AA720201704201706480179]为打印机唯一信息码,使用分号’;’ 分隔其他信息

;9820 为打印机状态信息,表示当前打印机无错误,且当前连接为GPRS连接,且当前数据为心跳包数据

;-58 为打印机GPRS的信号dBm值

;25为打印机加热头片当前温度

;2017-06-22 13:55:28 为打印机获取到的当前时间

D. 单据应答包

3;[Prn60A44CAB3AA720201704201706480179];9800;SimplePrint-Received

解析: 3表示当前包为单据收到提示包

;[[Prn60A44CAB3AA720201704201706480179]为打印机唯一信息码,使用分号’;’ 分隔其他信息

;9800 为打印机状态信息,表示当前打印机无错误,且当前连接为GPRS连接

;SimplePrint 为客户之前单据所包含的单据号

-Received 为固定应打包结尾

E. 单据打印完成包

4;[Prn60A44CAB3AA720201704201706480179];9800;SimplePrint

解析: 4表示当前包为单据打印完成提示包

;[[Prn60A44CAB3AA720201704201706480179]为打印机唯一信息码,使用分号’;’ 分隔其他信息

;9800 为打印机状态信息,表示当前打印机无错误,且当前连接为GPRS连接

;SimplePrint 为客户之前单据所包含的单据号

F. 单据超时包

5;[Prn60A44CAB3AA720201704201706480179];9800;SimplePrint

解析: 5表示当前包为单据超时提示包

;[[Prn60A44CAB3AA720201704201706480179]为打印机唯一信息码,使用分号’;’ 分隔其他信息

;9800 为打印机状态信息,表示当前打印机无错误,且当前连接为GPRS连接

;SimplePrint 为客户之前单据所包含的单据号

NOTE: 所有 PUBLIC给打印机的消息 qos必须为2,其他等级打印机不处理

打印机 PUBLIC的消息Qos 为1或2 ,默认为1

打印机状态位信息说明

值(HEX)

信息

0

0x01

缺纸

1

0x02

开盖

2

0x04

切刀错误

3

0x08

过热

4

0x10

其他错误

5

0x20

本次返回为心跳包

6-7

--

暂无意义

11-12

0x0000

暂无意义

0x0800

当前连接为以太网

0x1000

当前连接为WIFI

0x1800

当前连接为GPRS

13

0x2000

以太网已连接

14

0x4000

WIFI已连接

15

0x8000

GPRS已连接

这里就STATE状态做下说明:

例如返回值 9820则对应第15位置1(0x8000),第13、14位为0,第11-12位为0x1800,第5位置1(0x20),则分别表示:

GPRS已联网,网口、WIFI未联网,当前连接为GPRS连接,当前数据包为心跳包。

二、收发流程

单据收发流程,这里需要架设一个服务器作为 MQTT服务器的客户端,用于PUBLISH要打印的内容给打印机,并处理打印机返回的消息,此处标记为打印服务器。我们可以先用手机模拟这个打印服务器的操作。

功能

1. 打印机状态检查

a. 打印服务器 PUBLISH 给打印机订阅主题(例如“Prn60A44CAB3AA72020170420170648017920201704201706480179”)消息(HEX: 01 00)

b. 打印机收到该消息后会PUBLISH 打印机状态(例如”4;[Prn60A44CAB3AA72020170420170648017920201704201706480179];9800”)至默认单据主题,如果打印服务器过久未监听到该消息应视为打印机已掉线

2. 打印业务下发

a. 打印服务器 PUBLISH 给打印机订阅主题打印内容(需要单据确认的请附上单据号)

b. 打印机收到打印内容,并打印完成后,根据标记头信息来决定是否上报打印结果

c. 如果需要上报打印结果,打印机会在打印完成后,PUBLISH给指定的主题本次打印的单据号

NOTE: 可以PUBLISH多条打印任务至MQTT服务器,打印完后会依次上报结果

三、打印机上联服务器错误排查

打印机开机后会主动上联至MQTT服务器,连接过程中电源灯会持续闪烁,连上服务器后会常亮。如果过久连不上服务器,请按以下操作排查故障

1. 打印自测页(关机后,按住走纸键上电,打印机会打印一张自测页),请检查MQTT服务器地址及端口是否配置正确。

2. 打印自测页后,如果有网线连接,或者WIFI连接,会在2分钟内打印出对应获取的IP地址信息,如果未打印出IP地址信息,请检查网线连接,或者WIFI配置,必要时请联系本地网络网管,如果打印机支持GPRS模块,会打印对应GPRS当前状态。

3. 打印机上联接口的优先级依次为 网口,WIFI,GPRS,因此如果本地网络不能上外网的情况,请拔掉网线,修改WIFI配置,则打印机会默认只使用GPRS连接服务器

4. GPRS断线重连机制,当侦测到GPRS网络断开后,会自动尝试拨号上网,如果拨号失败会重启GPRS模块并重新初始化网络连接

5. 当尚未连接至服务器时,GPRS状态可以由观察打印机上的错误提示灯来判断(每闪烁几次便会间隔2秒后再闪烁,请注意观察闪烁次数)

闪烁次数

当前模块状态

1

已联网成功,正在连接服务器

2

正常尝试联网

3

正在尝试获取网络时间

4

正在尝试获取信号强度

5

正在获取SIM卡IMSI号

6

正在获取模块IMEI

7

正在初始化模块

四、MQTT服务器搭建

WINDOWS 上MQTT服务器搭建请参考blog

http://blog.csdn.net/pgpanda/article/details/51800865

五、设置指令

格式说明:设置指令为纯文本格式,每行设置一个信息,每行字数不得超过128。如果某一行设置信息有问题则该行设置无效,后续打印处理会被丢弃。因此建议一次仅设置一条信息。

1. 设置心跳(SET HEARTBEAT N)

N 为心跳间隔,单位为秒,取值范围(10-3600或0),N =0时取消心跳包,默认不发送心跳包。

NOTE: 一旦当前有发布单据结果信息则心跳时间会归零,即下次发送心跳包时间为当前时间+N秒

测试例程参考 一、4) B

2. 打印机重启(REBOOT PRINTER [mm:ss-xxxxx])

mm:ss 为发送重启指令的时间对应分钟和秒数

xxxxx 为根据 当前时间 + 打印机mac地址+重启密钥 使用MD5计算得出的哈希值(128bits or 16 bytes),对应的HEX文本显示,全部大写(例如hex的0x30,0x31,0x32,0x33,0x2A,这里即显示为文本的303132332A)。如果该设置指令处理时较设置时间已过去超过1小时,该指令无效,如果当前打印机获取到的时间小于设置时间,该指令无效。

当指令生效时,打印机会回复 ID+OK;Reboot in 1 minute表示打印机将在1分钟内重启

当指令无效时,打印机会回复 ID+ERROR

测试用例,(当前时间2017-06-24 15:35:26)

这里哈希计算前的数据为“2017-06-24 14:35:26 469792861303 XSHKey”

0700323031373036313631383033005245424F4F54205052494E544552205B33353A32362D41363446384146344238394639354138314432364441363235334533334132305D0D0A

发布的消息

CaysnPrinter 云打印机MQTT上层通讯协议V1.1_20170624相关推荐

  1. 小米网关与服务器的交互协议,绿米网关局域网通讯协议V108.doc

    绿米网关局域网通讯协议V108.doc 绿米网关局域网通讯协议V1.0.8 网关设备发现(设备发现不加密) 设备发现用来在局域网中发现网关,使用组播(ip: 0, peer_port: 4321). ...

  2. 物联网通讯协议之MQTT协议详解(V3.1.1)

    一.MQTT协议简介 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的&quo ...

  3. 云服务器mqtt协议,云服务器mqtt协议

    云服务器mqtt协议 内容精选 换一换 IPv6的使用,可以有效弥补IPv4网络地址资源有限的问题.如果当前云服务器使用IPv4,那么启用IPv6后,云服务器可在双栈模式下运行,即云服务器可以拥有两个 ...

  4. 云消费机通讯协议 附Java、PHP、Python、C# 、.Net、VB、Delphi、VFP、Android示例源码

    新型实时在线型消费机,支持刷卡.扫码及外接人脸识别设备,刷卡.扫码或人脸比对成功后消费机将卡号和本次消费金额上传到服务器,服务器处理.保存后将消费结果返发到消费机上显示,脱网时支持白名单记账消费. 本 ...

  5. 物联网平台 TCP/IP HTTP MQTT 通讯协议 支持海康摄像头 数据实时采集和远程控制

    物联网平台源码 TCP/IP HTTP MQTT 通讯协议 支持海康摄像头 系统包括,后台服务,传感器解析服务.web展示,文档齐全. 目前web系统支持功能,: 数据实时采集和远程控制: 报警信息管 ...

  6. mosquitto c语言编程,MQTT通讯协议(mosquitto)发布订阅例子C语言实现

    1.前言 前面对MQTT进行了简单的介绍,并了解了如何在Linux上搭建MQTT 的运行 环境,参考连接:MQTT通讯协议(mosquitto)在Linux上的环境构建与测试,那些仅仅是经过命令去测试 ...

  7. 联网常见通信协议与通讯协议梳理- 通讯协议

    1  "通信"与"通讯"傻傻分得清 传统意义上的"通讯"主要指电话.电报.电传.通讯的"讯"指消息(Message),媒 ...

  8. IOT(34 )---联网常见通信协议与通讯协议梳理- 通讯协议

    联网常见通信协议与通讯协议梳理[上]- 通讯协议 1  "通信"与"通讯"傻傻分得清 传统意义上的"通讯"主要指电话.电报.电传.通讯的&q ...

  9. 通讯协议与即时通讯杂谈

    IM实现方式 第一种方式,使用第三方IM服务 另外一种方式,我们自己去实现 第三方IM服务 国内IM的第三方服务商有很多,类似云信.环信.融云.LeanCloud 第三方服务商IM底层协议基本上都是T ...

最新文章

  1. NHibernate 配置文件的处理和使用多数据库的多层架构思路(第二部分)
  2. winform执行oracle语句,C#中的Winform应用程序连接远程Oracle数据库的配置文件及SQL语句的写法...
  3. oracle clob截取_Oracle数据库设计规范建议
  4. java搭建线程池框架,JAVA线程池管理及分布式HADOOP调度框架搭建
  5. 360浏览器一打开就是瑞星安全网址怎么办
  6. java的jstl的标签库_java_jstl 标签库
  7. 全球最畅销的10款手机:iPhone 11继续无敌,能对拼的只有它!
  8. python数据格式简介_Python中数据类型时间的介绍(附代码)
  9. magento添加面包屑
  10. .NET 环境中使用RabbitMQ(转)
  11. 用 python 写了一个随机任务抽取器
  12. 将人民币大写金额格式转为数字金额格式C#代码
  13. Git 工具 - 储藏(Stashing) git stash 暂存现在工作区的内容
  14. 网吧管理系统C语言作业,C语言课程设计-网吧管理系统.doc
  15. 2022年考研计算机组成原理_4 指令系统
  16. 3-6 静态数据成员与静态成员函数
  17. 20个经典bootsrtap后台html网站模板推荐
  18. java修图sdk_脑洞大开!Adobe等新研究把「自拍」变「他拍」,魔幻修图效果感人...
  19. city-picker的使用
  20. Java封装、继承 、多态

热门文章

  1. CSP2019入门级第一轮-排列组合题
  2. 服务器发布的项目请求摄像头权限,使用 WPF 版简易 SIP 服务器向 GB28181 摄像头发送直播请求...
  3. “英语”有多少个字母?
  4. Android SurfaceView 播放视频 根据视频尺寸自适应播放
  5. 达梦数据库DCA培训学习
  6. bert 是单标签还是多标签 的分类_搞定NLP领域的“变形金刚”!手把手教你用BERT进行多标签文本分类...
  7. http://qq.ip138.com/baidu-id/index.asp
  8. MySQL的 DDL和DML和DQL的基本语法
  9. Python-批量处理对文件的重命名
  10. 性能调优实践-提升cpu利用率