我一直在研究这个问题差不多一个月了。看来我被推向各个不同的方向。我希望有人可以帮我解答。
给出我正在寻找的简要模型:
我有一个网络服务器,其中包含通过互联网打印到热敏打印机所需的信息。我不想让电脑成为中介。我没有必要进行必要的编程来实现这一目标。我的问题来自于找到我能够编程的设备。我遇到的第一个问题是找到一个热敏收据打印机,它有一个内置的网络服务器,我可以编程来轮询我的服务器以获取打印信息。目前没有可用于此目的的打印机。我已经和Zebra,Epson,Brother等人谈过了。如果两个设备都在同一个网络上,例如手机打印机和移动电话所连接的同一网络上的打印机,大多数都有SDK的打印解决方案。做到这一点。我需要打印机能够轮询我的网络服务器。所以我去寻找另一种选择。也许我可以将无线USB迷你网络服务器连接到打印机以达到我的最终目标。我认为这将是一项简单的任务,但事实并非如此。我在stackoverflow.com上为用户提出的问题是,有没有人遇到类似的问题并知道解决方案?我再次与不同的制造商交谈,他们都没有能够提供帮助。我想他们中的大多数人甚至都无法理解我在说什么。我希望那些在这里编程的人能理解我的问题。
以下是我想要做的本土迂回解决方案。
http://proto-pic.co.uk/internet-connected-thermal-printer-kit/
上述解决方案再次要求我从头开始构建它。 berg云是另一种选择,但它们不允许我控制我的Web服务器,一切都贯穿它们。请随意提问,因为我不希望快速回答这个问题。我希望有程序员遇到类似的问题。
另外要参考我为这个问题选择的标签,我想也许我可以将设备(Web服务器微控制器设置)附加到热敏打印机上,该打印机可能有一个运行网络服务器的JVM,然后我可以通过USB进行通信到打印机。我知道Java对于微控制器而言比C差得多,但我所知道的。我很乐意听到任何其他解决方案。
答案 0 :(得分:4)
我强烈建议您在此时重新考虑Zebra websocket解决方案。
最佳解决方案仍然可能是迷你网络服务器解决方案。
我使用Zebra websocket解决方案的经验: 背景:
我最初尝试创建一个node.js解决方案(我曾在几个地方读过任何服务器都可行)。 但是在连接尝试失败之后,即使在获得Zebra签署的证书之后 - 并且打印机/服务器经历了成功的握手过程 - 它仍然失败并带有一个神秘的错误,当查看时与打印机有关,试图验证特定的Tomcat版本/服务器正在使用!!! ???
我确实收到了Zebra开发人员的回复,该开发人员正在开发.Net解决方案,但也无法使其正常工作,并且正在等待来自Zebra工程师的更多信息'在他们完成解决方案之前。他们说他们会在收到信息时发送信息并希望在一周内收到信息(超过一周 - 还没有运气)。
所以 - 我决定整合一个Tomcat服务器 - Zebra工作的唯一例子......我得到了示例servlet运行但开始遇到新的证书问题(因为我更改了服务器/域等) 这让我想到了整个笨重的过程 - 并认识到1个交易破坏者 - 非常严格的ssl身份验证和签名过程风险太大。
E.g。假设您有100多个客户依赖此解决方案。 如果您的证书有问题(例如域名更改,服务器设置更改或证书无效/到期) - 那么所有100多个客户都没有他们的打印机。 但是你不能自己修复它 - 要修复/生成新的证书等,重新签名过程很慢并且依赖于外部资源! (这是一个手动Zebra流程顺便说一句 - 你通过电子邮件发送,然后在Zebra员工用签名证书回复之前你会等待相当长的时间。)
这意味着所有100多位客户都在相当长的时间内没有打印机服务,但您没有选择,只能让Zebra签署您的证书。对我来说这是一个不可接受的风险 - (websocket解决方案不应该依赖于Zebra签名的证书 - 在您安装了您的(或您的客户端)打印机后,您可以配置打印机为其指定一个确切的域名/地址连接到。)
使用您的迷你服务器解决方案 - 如果客户遇到问题 - 它只会影响该单个客户,而您并不依赖外部公司签署证书来解决问题。
以下是已发现的问题及其相关风险。
问题1)实施非常糟糕 - 我不能(并且他们也不能)将它连接到标准服务器而不是非常特定的Tomcat设置! 风险等级:低 - 即它是初始成本和时间负担 - 但一旦工作,这个问题的持续风险导致进一步的问题是最小的。 风险: a)将开发限制在非常具体的服务器和技术上。 b)初始开发/测试的时间和成本增加。
问题2)文档记录不足 - 我已经确定(并且Zebra已经验证)文档中的几个错误 - 文档也散布着一些重要信息,这些信息被扔进一个难以找到的readme.txt文件中,与文档的其余部分分开。 风险等级:低 - 即它是初始成本和时间负担 - 但一旦工作,这个问题的持续风险导致进一步的问题是最小的。 风险: a)减缓初期发展。 b)初始设置/开发的时间和成本增加。
问题3)打印机安全性/ ssl身份验证计划和实施不当。它涉及多个步骤 - 限制性极强,涉及一个缓慢的斑马签名过程,从而产生持续的风险。 风险等级:高 - 即这是我们无法使用此解决方案的原因。 风险: a)将开发限制在非常具体的服务器和技术上。 b)减缓初期发展。 c)初始设置/开发的时间和成本增加。 d)为项目创造持续的高水平风险如下: --->这个想法是公司将依赖这种打印机连接解决方案 - 因此任何潜在的停机都会导致主要的商业破坏。 --->以下任何一种情况都意味着依赖此websocket解决方案的所有客户将在几天内没有打印机服务,同时组织新的Zebra签名证书: ---> 1)证书到期,2)证书无效,3)服务器被移动,4)域名细节改变,5)Tomcat服务器设置被修改(由于打印机验证某些Tomcat /服务器设置的方式) --->此外,上述5种情况仅基于我目前的测试而得知 - 可能存在其他可能的限制,这可能意味着我尚未遇到的证书失败。
要点: IMO问题3带来了不可接受的风险,在重新考虑Zebra websockets之前,需要完成以下两件事。 1)他们需要有关webocket如何连接到服务器的适当文档,因为它是隐藏的,甚至Zebra员工目前都处于黑暗中。 2)他们需要删除一些身份验证限制 - 这样您就可以解决任何问题,而无需耗费时间进行Zebra交互。
答案 1 :(得分:1)
Zebra确实提供可以通过websockets进行通信的打印机。如果您的网络服务器是公开的(即可以在互联网上找到),您可以在打印机和服务器之间打开一个Web套接字连接,只要有新的信息要发送就可以发送数据。 。虽然听起来你需要让打印机启动对话,但是也许有一个不断打开的websocket连接可以帮助你完成你的需求。这消除了对任何中间计算机的需要,而打印机则直接与服务器通信。
Zebra Websocket打印机:http://www.zebra.com/us/en/products-services/software/link-os/cloud-connect.html
Zebra(Java)SDK:http://www.zebra.com/us/en/products-services/software/link-os/link-os-sdk.html
如果您需要支持此功能的热敏收据打印机,则iMZ型号应该足够了。
答案 2 :(得分:0)
我已成功创建了mini websocket服务器,可与ZD420 - LinkOS驱动的Zebra打印机通信。
配置打印机我写了小python实用程序(在linux上测试) https://github.com/elops/zebra-wifi-tool
此工具将设置打印机连接到wifi网络,并通过该wifi网络连接到weblink位置。 weblink位置是您的websocket服务器的URL的Zebra名称。您可以通过websocket轻松调整配置,发送打印作业等。
使用asyncio
和websockets
使用python 3.5对websocket服务器的Python实现进行编码
核心功能基本上来自此处的文档c / p http://websockets.readthedocs.io/en/3.4/intro.html#both
你需要3个协同程序:
连接处理程序: 这个协同例程负责监听websocket上发生的事情,包括数据接收或数据发送。无论哪一个发生,其他一个被取消,它循环。
<强>生产者:强> 此协同例程用于通过活动websocket将数据推送到IoT设备。
<强>消费者:强> 这个协同例程由IoT设备通过websocket发送到服务器的数据提供。
Websocket握手看起来像这样
start_server = websockets.serve(handler, 'localhost', 6000, subprotocols=['v1.weblink.zebra.com'], extra_headers={'Content-Length': '0'})
完整的东西就像魅力,非常可靠,高度可配置和功能丰富的解决方案,适用于需要从Web应用程序打印到连接到互联网的打印机的各种场景。我用ZD420打印机配对条形码扫描仪。扫描数据可以通过用于打印的相同websocket打印机轻松发送到websocket服务器,因此您可以为Web上的POS环境创建强大的解决方案。
答案 3 :(得分:0)
尝试使用支持应用程序启用打印(AEP)的SATO打印机(请参阅SATO America或SATO Europe)。在这里,您可以使用Cloud或服务器设置Websocket。打印机还允许https请求以及ftp轮询。例如,您可以通过连接的扫描仪或通过USB主机端口连接到打印机的键盘触发打印作业。效果很好!像前面描述的情况一样,不需要第二个云。