{"id":15043116,"url":"https://github.com/timgrossmann/storagesystem","last_synced_at":"2025-04-13T09:50:27.368Z","repository":{"id":3822742,"uuid":"51015678","full_name":"timgrossmann/StorageSystem","owner":"timgrossmann","description":"🗒️ Personal Stock Control System","archived":false,"fork":false,"pushed_at":"2022-10-05T18:36:45.000Z","size":128302,"stargazers_count":240,"open_issues_count":7,"forks_count":20,"subscribers_count":13,"default_branch":"master","last_synced_at":"2025-03-27T01:11:56.268Z","etag":null,"topics":["gui","java-8","javafx","javafx-application","maker","managaement","raspberry-pi","stock"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/timgrossmann.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}},"created_at":"2016-02-03T17:04:33.000Z","updated_at":"2025-03-26T13:49:23.000Z","dependencies_parsed_at":"2022-08-25T09:10:17.926Z","dependency_job_id":null,"html_url":"https://github.com/timgrossmann/StorageSystem","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timgrossmann%2FStorageSystem","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timgrossmann%2FStorageSystem/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timgrossmann%2FStorageSystem/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timgrossmann%2FStorageSystem/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/timgrossmann","download_url":"https://codeload.github.com/timgrossmann/StorageSystem/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248695230,"owners_count":21146952,"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":["gui","java-8","javafx","javafx-application","maker","managaement","raspberry-pi","stock"],"created_at":"2024-09-24T20:48:35.747Z","updated_at":"2025-04-13T09:50:27.343Z","avatar_url":"https://github.com/timgrossmann.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# StorageSystem\n\n[![GitHub license](https://img.shields.io/github/license/mashape/apistatus.svg)](https://github.com/timgrossmann/StorageSystem/blob/master/LICENSE)\n[![built for RaspberryPi](https://img.shields.io/badge/Built%20for-RaspberryPi-green.svg)](https://www.raspberrypi.orgx/)\n[![built with JavaFX](https://img.shields.io/badge/built%20with-JavaFX-red.svg)](http://www.javafxtutorials.com/whatisjavafx)\n\n## Personal Stock Control System\n\n\u003eDon't you know the struggle with going to the grocery store and only then realizing you forgot to check what you still got at home and what you should buy.\nI had this problem quite often and ended up buying the stuff i already had, which led to me having 10 bottles of ketchup in my basement. The worst of it is, that i nearly always forgot to buy the stuff i needed. This ended up with me having to go for a second ride.\n\u003cbr /\u003eFor a guy living in a \u003cb\u003erural area\u003c/b\u003e this is more than annoying.\n\n![img of finished system with link to youtube video](./img/tempImgOfSystem.jpg)\n###### Note: This is just a temporary image until I get the time to make a image and video of the final, installed one\n\n## Features\n- [x] Keep track of the products in stock\n- [x] Add and Remove products by scanning their barcode\n- [x] Print an overview of the products in stock with your default printer\n- [x] Print a shopping list with all the products 0 left in stock\n- [x] Built for RaspberryPi Model3\n- [x] Pretty low cost system for your household\n- [x] 3D printfile of the case\n- [x] Easy web interface to search all your products by name, amount or categorie\n\n\n## Description\nThis is a \"small\" personal project where i'll use Java, JavaFX, the Gson-Libary, Apache-Web-Server, JSON-server and Outpan.com as Barcode libary to fix this problem for me. \n\u003cbr /\u003e\u003cb\u003eYou can keep track of the items you have, the ones that are running out and the ones that are already empty.\nYou can print out an overview of the stocks or a list of items that are already out of stock.\nIf you're on the go, you can VPN into your home network and check which item and how many of them are still in stock.\u003c/b\u003e\n\nI'll try to keep the setup costs as low as possible, so it'll be a system everyone can build.\nI have to admit, that it got more expensive than i thought. (You could decrease the price by just buying a Pi (35€) and a smaller screen (30-45€) to about 100€).\n\nPhysical parts are: \n  - TaoTronics USB Laser-Barcodescanner (23€)\n  - RaspberryPI 3 StarterKit which includes: (100€)\n      - Raspberry Pi 3\n      - Your Choice of Pibow 3\n      - 8GB NOOBs microSD card\n      - Chiclet Keyboard\n      - Optical Mouse\n      - Official Raspberry Pi 2A PSUn\u003e\n      - HDMI cable\n      - Raspberry Pi Stickers\n  - Tontec 7 inch High Resolution 1024 * 600 Screen Display LCD TFT Monitor(55€)\n\n------------------------------\nTotal costs: 178€\n\n![alt tag](https://github.com/timgrossmann/StorageSystem/blob/master/img/storageSystem_V1_1.png)\n- UI of the JavaFX App\n\n\n![alt tag](https://raw.githubusercontent.com/timgrossmann/StorageSystem/master/img/WebView.png)\n- Very Simple but responsive WebPage of the Items\n\n![alt tag](http://ecx.images-amazon.com/images/I/71T55P9USGL._SL1500_.jpg)\n![alt tag](http://ecx.images-amazon.com/images/I/51RxfzoqFXL._SY300_.jpg)\n![alt tag](http://ecx.images-amazon.com/images/I/61qFVwEcWrL._SL1200_.jpg)\n![alt tag](./case/casePrint.jpg)\n\n#### 1. Finished print, printed with an Objet30 3D printer.\n#### 2. The case still has the wax like support structure in the holes and a thin layer all around.\n#### 3. It's possible to remove the support material with the fingers. It's pretty crumbly.\n#### 4. The company has this stationary pressure washer.\n#### 5. There are two different hoses with different pressure.\n#### 6. With enough time you can get rid of all the support structure.\n\n\u003ch2\u003eDocumentation of the problems with solutions\u003c/h2\u003e\n\u003ch4\u003eRunning JavaFX with Maven\u003c/h4\u003e\n\u003cp\u003eThe first small problem was to get JavaFX running with Maven. Since i wanted to use the Logging-Framework Log4J, Maven was pretty easy to use and a good choice. \u003cbr /\u003e\n\u003cb\u003eProblem\u003c/b\u003e: Deploying JavaFX as .jar to be executed via the commanline \u003cbr /\u003e\n\u003cb\u003eSolution\u003c/b\u003e: Using the \"JavaFX Maven Plugin\" from https://github.com/javafx-maven-plugin/javafx-maven-plugin and building the .jar file on a PC/MAC/Linux computer\u003c/p\u003e\n\n\u003cbr /\u003e\n\n\u003ch4\u003eRunning the JavaFX .jar on PI\u003c/h4\u003e\n\u003cp\u003eStarting a JavaFX Application on a RaspberryPi isn't that easy, since Oracle removed JFX from their ARM install. \u003cbr /\u003e\n\u003cb\u003eProblem\u003c/b\u003e: Installing Java ARM and getting JavaFX seperately \u003cbr /\u003e\n\u003cb\u003eSolution\u003c/b\u003e: Installing the latest Oracle Java ARM version, removing all the other Java installations (making sure the now installed one is used). Downloading the \"JavaFX Embedded SDK\" here: http://gluonhq.com/labs/javafxports/downloads/ and extracting the parts in the corresponding folders of the oracle Java version.\u003c/p\u003e\n\n\u003cbr /\u003e\n\n\u003ch4\u003eJavaFX GUI displaying black/wrong\u003c/h4\u003e\n\u003cp\u003eOn the first working startup of the .jar file on the Pi, the whole screen turned black. Only one or two buttons displayed with a completely different style than defined. \u003cbr /\u003e\n\u003cb\u003eProblem\u003c/b\u003e: The graphics memory is too low, by default \u003c 100. \u003cbr /\u003e\n\u003cb\u003eSolution\u003c/b\u003e: Increase the graphics memory usage of your Pi to 512 in the settings. Or using the CLI edit /boot/config.txt (you might need sudo rights) from whatever gpu_mem says to gpu_mem=512. (I'm using RasperryPi 3 so you might need to use a lower gpu_mem setting)\u003c/p\u003e\n\n\u003cbr /\u003e\n\n\u003ch4\u003eGUI has black borders all around\u003c/h4\u003e\n\u003cp\u003eThe whole screen is smaller than your display (has black borders) and is shifted. \u003cbr /\u003e\n\u003cb\u003eProblem\u003c/b\u003e: Overscan of your config is disabled \u003cbr /\u003e\n\u003cb\u003eSolution\u003c/b\u003e: Uncomment the line #disable_overscan=0 (remove the #) in the /boot/config.txt and reboot your Pi.\u003c/p\u003e\n\n\u003cbr /\u003e\n\n\u003ch4\u003eMake the GUI resize for different screens without fullscreen\u003c/h4\u003e\n\u003cp\u003eIf the GUI should be the size of the full display, but without using the fullscreen option \u003cbr /\u003e\n\u003cb\u003eProblem\u003c/b\u003e: Fullscreen makes the access to the Desktop harder, you might want to be able to access the Desktop while your GUI is runnign. \u003cbr /\u003e\n\u003cb\u003eSolution\u003c/b\u003e: In your programcode, when setting up the primaryStage, set the size of your primaryScene to the dimensions of you display. You can do this with:\u003c/p\u003e\n\n```java   \nRectangle2D displayDims = Screen.getPrimary().getBounds();\nScene primaryScene = new Scene(root, displayDims.getWidth(), displayDims.getHeight());\n```\n\n\u003cbr /\u003e\n\n\u003ch4\u003eThe Desktop on NOOBS is not the real Desktop path\u003c/h4\u003e\n\u003cp\u003eIf you want to save a File to the Desktop, in Java you can do it like this.\u003c/p\u003e\n\n```java   \nnew File(System.getProperty(\"user.home\") + \"/Desktop\")\n```\n\n\u003cp\u003e\u003cb\u003eProblem\u003c/b\u003e: On the Pi, the user.home/Desktop is not the Desktop you get displayed when starting up the Pi. \u003cbr /\u003e\n\u003cb\u003eSolution\u003c/b\u003e: You can create a soft link of the file on the user.home/Desktop to the file you created on your visible Desktop. Once your programm changes the user.home/Desktop file, since you linked them, the one on your visible Deskotp will also be changed. This is done like this:\u003c/p\u003e\n\n```bash\nln -s {target-filename} {symbolic-filename}   \n```\n\n\u003cbr /\u003e\n\n\u003ch4\u003ePI is not using the right Resolution of your Display\u003c/h4\u003e\n\u003cp\u003eIf you realize, that your JavaFX Application is smaller and squished you should change the hdmi settings of the PI\u003cbr /\u003e\n\u003cb\u003eProblem\u003c/b\u003e: The displayed resolution is smaller than the actual resolution your display is capable of \u003cbr /\u003e\n\u003cb\u003eSolution\u003c/b\u003e: Take a look at https://www.raspberrypi.org/documentation/configuration/config-txt.md on how to change the displayed resolution. For me the solution was to change the hdmi_group -\u003e 2 (since it's a monitor and not a TV) and then you just have to search the right resolution in the hdmi_mode table. For me it was hdmi_mode -\u003e 16\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftimgrossmann%2Fstoragesystem","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftimgrossmann%2Fstoragesystem","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftimgrossmann%2Fstoragesystem/lists"}