{"id":15020644,"url":"https://github.com/paxapos/fiscalberry","last_synced_at":"2025-04-06T02:12:51.849Z","repository":{"id":28443445,"uuid":"31958718","full_name":"paxapos/fiscalberry","owner":"paxapos","description":"[JSON ↔ HW]  Connect things using JSON API with the fiscalberry websocket server interact easily with any kind of Hardware. Another IoT solution...","archived":false,"fork":false,"pushed_at":"2025-01-15T21:52:09.000Z","size":9902,"stargazers_count":57,"open_issues_count":18,"forks_count":40,"subscribers_count":12,"default_branch":"main","last_synced_at":"2025-03-30T01:13:16.988Z","etag":null,"topics":["barcode","barcode-scanner","epson","fiscal-printer","hasar","impresora-fiscal","imprimir","iot","json","pos","raspberry-pi","raspberry-pi-3","receipt","receipt-print","receipt-printer","servidor"],"latest_commit_sha":null,"homepage":"https://paxapos.github.io/fiscalberry/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/paxapos.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-03-10T13:23:43.000Z","updated_at":"2025-01-15T21:52:11.000Z","dependencies_parsed_at":"2024-10-16T16:16:48.851Z","dependency_job_id":"29977285-2cda-4d9b-b489-8c9376b15117","html_url":"https://github.com/paxapos/fiscalberry","commit_stats":{"total_commits":649,"total_committers":19,"mean_commits":34.1578947368421,"dds":0.4576271186440678,"last_synced_commit":"33cf45159addbb2dea64541c8977a824c76fd92d"},"previous_names":[],"tags_count":28,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paxapos%2Ffiscalberry","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paxapos%2Ffiscalberry/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paxapos%2Ffiscalberry/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paxapos%2Ffiscalberry/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/paxapos","download_url":"https://codeload.github.com/paxapos/fiscalberry/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247423517,"owners_count":20936626,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["barcode","barcode-scanner","epson","fiscal-printer","hasar","impresora-fiscal","imprimir","iot","json","pos","raspberry-pi","raspberry-pi-3","receipt","receipt-print","receipt-printer","servidor"],"created_at":"2024-09-24T19:55:22.810Z","updated_at":"2025-04-06T02:12:51.830Z","avatar_url":"https://github.com/paxapos.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\r\n# ¿Para qué sirve?\r\n\r\nPara enviar un JSON (mediante websocket), que fiscalberry lo reciba, lo transforme en un conjunto de comandos compatible con la impresora instalada, conecte con la impresora y responda al websocket con la respuesta que nos envió la impresora.\r\n\r\nDescarga la última versión socketio para windows\r\n\r\n[fiscalberry-win]([https://github.com/paxapos/fiscalberry/releases/latest/download/fiscalberry-win.exe))\r\n\r\nPara Linux\r\n[fiscalberry-lin]([https://github.com/paxapos/fiscalberry/releases/latest/download/fiscalberry-lin))\r\n\r\nPara Raspberry pi\r\n[fiscalberry-lin]([https://github.com/paxapos/fiscalberry/releases/latest/download/fiscalberry-pi))\r\n\r\n# Como comenzar (solo developers del proyecto)\r\n\r\nclonar repo\r\ncrear enviroment (1 para kivy y otro para modo cli, consola)\r\npython3 -m venv .venv.kivy\r\npython3 -m venv .venv.cli\r\n\r\nluego activar el enviroment que se desea usar, por ejemplo modo solo consola:\r\nsource venv.cli/bin/activate\r\n\r\ninstalar requerimientos de modo consola\r\npip install -r requirements.cli.txt\r\n\r\nahora ya puede ejecutar:\r\npython src/cli.py\r\n\r\nlo mismo si se desea trabajar con interfaz kivy...\r\n\r\n\r\n# ¿Qué es?\r\n\r\nFiscalberry es un servidor de websockets desarrollado en Python pensado para que corra en una raspberry-pi (de ahí viene el nombre de este proyecto). **Pero funciona perfectamente en otros sistemas operativos.**\r\n![fiscalberry JSON](http://alevilar.com/uploads/entendiendo%20fiscalberry.jpg)\r\n\r\n# ¿Qué impresoras son compatibles?\r\n\r\nFiscalberry tiene drivers desarrollados para conectarse con 2 tipos de impresoras: Fiscales y Receipt.\r\n\r\nImpresoras Fiscales compatibles: Hasar y Epson\r\n\r\nNueva versión con soporte para las últimas impresoras Fiscales de segunda generación (2gen) HASAR y EPSON \u003cbr\u003e\r\nModelos compatibles (HASAR: SMH/PT-250F, EPSON: TM-T900FA)\r\n\r\nImpresoras Receipt (de comandas) compatibles: las que soportan ESC/P\r\n\r\n## Fiscalberry como servidor de impresión (print-server) de impresoras receipt (comanderas) y fiscales\r\n\r\nFiscalberry es un 3x1, actúa como: protocolo, servidor y driver facilitando al programador la impresión de tickets, facturas o comprobantes fiscales.\r\n\r\n- _PROTOCOLO_: Siguiendo la estructura del JSON indicado, se podrá imprimir independientemente de la impresora conectada. Fiscalberry se encargará de conectarse y pelear con los códigos y comandos especiales de cada marca/modelo.\r\n- _SERVIDOR_: gracias al servidor de websockets es posible conectar tu aplicación para que ésta fácilmente pueda enviar JSON's y recibir las respuestas de manera asíncrona.\r\n- _DRIVER_: Es el encargado de transformar el JSON genérico en un conjunto de comandos especiales según marca y modelo de la impresora. Aquí es donde se adaptó el código del proyecto de Reingart (\u003chttps://github.com/reingart/pyfiscalprinter\u003e) para impresoras Hasar y Epson.\r\n\r\nFunciona en cualquier PC con cualquier sistema operativo que soporte Python.\r\n\r\nLa idea original fue pensada para que funcione en una raspberry pi, cuyo fin es integrar las fiscales al mundo de la Internet de las Cosas (IOT).\r\n\r\n## ¿Para quienes está pensado?\r\n\r\nPara los desarrolladores que desean enviar a imprimir mediante JSON (es decir, desde algún lugar de la red, internet, intranet, etc, etc) de una forma \"estándar\" y que funcione en cualquier impresora, marca y modelo.\r\n\r\n## PROBALO\r\n\r\n### Descargar\r\n\r\nusando git\r\n\r\n```sh\r\ngit clone https://github.com/paxapos/fiscalberry.git\r\n```\r\n\r\no directamente el ZIP: \u003chttps://github.com/paxapos/fiscalberry/archive/master.zip\u003e\r\n\r\n### Instalar Dependencias\r\n\r\nATENCIÓN: Funciona con Python 2.7.* NO en Python 3!\r\n\r\nprobado bajo python 2.7.6 en Linux, Raspian, Ubuntu, Open Suse y Windows\r\n\r\nSe necesitan varias dependencias:\r\n\r\n```sh\r\nsudo pip install -r requirements.txt\r\n\r\n```\r\n\r\nSi te encontras con el error \"socket.gaierror:  Name or service not known\"\r\n\r\nA veces, en Linux (Open Suse), ser necesario poner el nombre del equipo (hostname) en el archivo /etc/hosts, si es que aún no lo tenías.\r\nGeneralmente el archivo hosts viene solo con la dirección \"127.0.0.1 localhost\",\r\n\r\npara solucionarlo debés ejecutar el comando\r\n\r\n```bash\r\nhostname\r\n```\r\n\r\ny ver cuál es el nombre de la máquina para agregarlo al archivo /etc/hosts\r\n127.0.0.1 nombre-PC localhost\r\n\r\n### Iniciar el programa\r\n\r\n```sh\r\nsudo python server.py\r\n\r\n# o iniciar como demonio linux\r\nsudo python rundaemon.py\r\n```\r\n\r\nAhora ya puedes conectarte en el puerto 12000\r\nentrando a un browser y la dirección \u003chttp://localhost:12000\u003e\r\n\r\n## Conceptos básicos ¿Cómo funciona?\r\n\r\nSupongamos que tenemos este JSON genérico:\r\n\r\n```\r\n{\r\n    \"ACCION_A_EJECUTAR\": {\r\n        PARAMETROS_DE_LA_ACCION\r\n        ...\r\n    }\r\n}\r\n```\r\n\r\nLo enviamos usando websockets a un host y puerto determinado (el servidor fiscalberry), éste lo procesa, envía a imprimir, y responde al cliente con la respuesta de la impresora. Por ejemplo, devolviendo el número del último comprobante impreso.\r\n\r\nOtro ejemplo más concreto: queremos imprimir un ticket, esta acción en el protocolo fiscalberry se lo llama como acción \"printTicket\" y está compuesta de 2 parámetros obligatorios: \"encabezado\" e \"items\".\r\n\r\nEl \"encabezado\" indica el tipo de comprobante a imprimir (y también podría agregarle datos del cliente, que son opcionales).\r\nLos ítems son una lista de productos a imprimir donde, en este ejemplo, tenemos una coca cola, con impuesto de 21%, importe $10, descripción del producto \"COCA COLA\" y la cantidad vendida es 2.\r\n\r\n```json\r\n{\r\n    \"printTicket\": {\r\n        \"encabezado\": {\r\n            \"tipo_cbte\": \"T\",      // tipo tiquet *obligatorio\r\n        },\r\n        \"items\": [\r\n            {\r\n                \"alic_iva\": 21.0,  // impuesto\r\n                \"importe\": 10,     // importe\r\n                \"ds\": \"COCA COLA\", // descripcion producto\r\n                \"qty\": 2.0         // cantidad\r\n            }\r\n        ]\r\n    }\r\n}\r\n```\r\n\r\n### JSON RESPUESTA\r\n\r\nExisten 2 tipos de respuesta y siempre vienen con la forma de un JSON.\r\n\r\nAquellos que son una respuesta a un comando enviado, comienzan con \"ret\"\r\n**_{\"ret\": ......}_**\r\n\r\nAquellos que son un mensaje directo de algun dispositivo conectado, vienen con \"msg\"\r\n\r\n**_{\"msg\": ......}_**\r\n\r\n```javascript\r\n// ejemplo retorno de un mensaje cuando no hay papel\r\n{\"msg\": [\"Poco papel para comprobantes o tickets\"]}\r\n```\r\n\r\n#### NOTA\r\n\r\nDeberás enviar JSON válidos al servidor. Recomendamos usar la pagina \u003chttp://jsonlint.com/\u003e para verificar como tu programa esta generando los JSON.\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpaxapos%2Ffiscalberry","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpaxapos%2Ffiscalberry","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpaxapos%2Ffiscalberry/lists"}