Web Bluetooth y Web USB para la integración de hardware POS
Esta semana, tengo el privilegio de dar una presentación en la Commit Conf en Madrid, un evento que incluye todos los aspectos de TI y de desarrollo de software, para hablar de Openbravo POS y su compatibilidad con Web Bluetooth y Web USB. Un tema muy importante para nosotros porque está muy ligado a uno de los retos a los que nos enfrentamos cada día a la hora de proveer el software TPV más rico y completo a todos nuestros clientes. Este reto es la interoperabilidad con toda clase de hardware que requiere una solución POS.
Como indicaba, una de las capacidades de Openbravo POS es la comunicación con diferentes tipos de hardware como impresoras de recibos, balanzas, dispositivos de pago, etc. Pero para una aplicación web, la comunicación con el hardware es muy complicada. Por ejemplo, las impresoras de recibos y las balanzas generalmente se conectan a través de USB o puerto serie, algunos dispositivos de pago se comunican mediante sockets. … Y desafortunadamente, los navegadores no proveen acceso directo a la capa de hardware.
Por esta razón hemos creado el Openbravo Hardware Manager, una aplicación Java que incluye un servidor web que provee un API que puede ser consumido por Openbravo POS. El Openbravo Hardware Manager puede trabajar con un amplio abanico de dispositivos, es extensible y nos permite proveer una aplicación POS totalmente funcional y que cubre todos los requerimientos de nuestros clientes de todo el mundo.
Hemos puesto especial empeño en mantener el Openbravo Hardware Manager lo más aislado y reducido posible, de forma que toda la lógica de negocio va en Openbravo POS y el Openbravo Hardware Manager sólo se encarga:
- de la comunicación con el hardware, y
- de aislar de los diferentes modelos soportados. Pero sigue siendo una pieza más de software que hay que instalar en cada terminal POS que ejecuta Openbravo POS, lo cual añade complejidad en el despliegue y mantenimiento de la solución.
Afortunadamente, los navegadores mejoran día a día. Actualmente Google Chrome soporta Bluetooth y USB mediante el API Javascript de Web Bluetooth y Web USB. Y Openbravo POS soporta impresoras de recibos conectándose con Web Bluetooth y Web USB a partir de la Version 3.0RR19Q3.
Esta nueva funcionalidad es la solución perfecta no sólo para eliminar la necesidad de instalar el Openbravo Hardware Manager y disponer de una aplicación web pura, además extiende las capacidades de Openbravo POS.
Actualmente podemos ofrecer una solución móvil completa e imprimir recibos utilizando una impresora de recibos bluetooth portátil desde Openbravo POS corriendo en un dispositivo Android tal y como se puede ver en la imagen abajo.
Entrando en los detalles técnicos, en estos momentos las especificaciones Web Bluetooth (https://webbluetoothcg.github.io/web-bluetooth/) y Web USB (https://wicg.github.io/webusb/) están en estado borrador y está soportado por Chrome and Opera, pero está planificado que otros navegadores lo soporten en el futuro (https://caniuse.com/#feat=web-bluetooth, https://caniuse.com/#feat=webusb).
Por motivos de seguridad, ambos API son exclusivos HTTPS, lo que viene a decir que sólo están disponibles para contextos seguros. También por motivos de seguridad, la petición de conexión a un dispositivo debe ser lanzada por una interacción del usuario como un toque en la pantalla o un clic del ratón. Y ambos API son asíncronos y están basados en promesas Javascript (Promises). Si desea jugar con esta funcionalidad, revisar el código, hemos publicado un pequeño proyecto en GitHub que es capaz de imprimir documentos con formato en impresoras de recibos (https://adrianromeroopenbravo.github.io/webhardware/).
En este ejemplo utilizamos el protocolo ESC/POS (https://reference.epson-biz.com/modules/ref_escpos/index.php?content_id=2). Este protocolo es un estándar de Epson para impresoras de recibos que está ampliamente usado no sólo por Epson sino también por otros fabricantes de impresoras de recibos. Las impresoras utilizadas para desarrollar este ejemplo son la Epson TM-T88V con WebUSB y la POS-5802DD con Web Bluetooth.