{"id":24165960,"url":"https://github.com/ayshmnmm/lcdash","last_synced_at":"2026-05-16T00:31:55.621Z","repository":{"id":270244605,"uuid":"909602522","full_name":"ayshmnmm/lcdash","owner":"ayshmnmm","description":"A dashboard for dot matrix LCD displays to display server stats and other information at a glance.","archived":false,"fork":false,"pushed_at":"2024-12-29T16:49:11.000Z","size":410,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-02T07:51:18.376Z","etag":null,"topics":["dashboard","lcd","lcd20x4","raspberry-pi","server-monitoring"],"latest_commit_sha":null,"homepage":"","language":"Python","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/ayshmnmm.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":"2024-12-29T08:04:24.000Z","updated_at":"2024-12-29T16:57:34.000Z","dependencies_parsed_at":"2024-12-29T17:44:35.790Z","dependency_job_id":null,"html_url":"https://github.com/ayshmnmm/lcdash","commit_stats":null,"previous_names":["ayshmnmm/lcdash"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ayshmnmm/lcdash","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ayshmnmm%2Flcdash","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ayshmnmm%2Flcdash/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ayshmnmm%2Flcdash/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ayshmnmm%2Flcdash/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ayshmnmm","download_url":"https://codeload.github.com/ayshmnmm/lcdash/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ayshmnmm%2Flcdash/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261805715,"owners_count":23212439,"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":["dashboard","lcd","lcd20x4","raspberry-pi","server-monitoring"],"created_at":"2025-01-12T20:13:25.252Z","updated_at":"2025-11-10T09:31:30.666Z","avatar_url":"https://github.com/ayshmnmm.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Lcdash\n\nI wanted a simple way to monitor my server stats and view other information at a glance.\nI bought a 20x4 LCD specifically for this purpose and connected it to my Raspberry Pi to display the information.\n\nLcdash is a simple dashboard for dot matrix LCD displays. It is designed to be used with the 20x4 LCDs though it can be easily adapted to work with other size displays. It is written in Python and uses the [RPLCD](https://github.com/dbrgn/RPLCD) library to interface with the LCD.\n\n![](img/01.jpg)\n![](img/02.jpg)\n![](img/03.jpg)\n![](img/04.jpg)\nFew boards that I use. Top right corner shows the current board progress.\n\n## Features\n\n- Dynamic icons that can be used for animations.\n- Cycle through boards using a configurable scheduler.\n- Notification system for displaying prioritizable messages, interrupting the normal board cycle.\n- Background data fetching for boards that need to update their data periodically.\n- Icon management using the 8 custom characters available on the LCD.\n- Progress indicator showing the current board cycle progress.\n\n## Usage\n\nLcdash uses the concept of \"boards\" to display information on the LCD. Each board is responsible for rendering its own content on a specific area of the LCD. Boards can be nested to create complex layouts.\n\nLcdash is designed to be easily extensible. You can create your own boards by subclassing the `Board` class and implementing the `display` and `update` methods. You can then add your board to the scheduler to have it displayed on the LCD.\n\nCheck out [main.py](main.py) to see how to create and schedule boards.\n\n1. **Environment setup**:\n    - Install the required dependencies:\n        ```bash\n        # venv\n        pip install -r requirements.txt\n\n        # conda\n        conda env create -f environment.yml\n        ```\n    - Copy the `sample.env` file to `.env` and configure it with your settings.\n\n2. **Adding boards**:\n    - Subclass the `Board` class in the `boards` directory and implement the `display` and `update` methods.\n    - Add your board to a list of boards to pass to the `Scheduler` class.\n    ```python\n    from boards.clock_board import ClockBoard\n    from boards.nested_board import NestedBoard\n    from components.progress_bar import ProgressSpinner\n\n    time_board = (\n        ClockBoard(data_provider=clock_provider, size=(4, 19)),\n        ProgressSpinner(size=(4, 1), position=(0, 19)),\n    )\n    board_list = (\n        NestedBoard(boards=time_board, duration=10),\n    )\n    ```\n\n3. **Adding data providers (optional)**:\n    - Subclass the `DataProvider` class in the `data_providers` directory and implement the `fetch` method.\n    - Add your data provider to the board that needs it.\n    ```python\n    # data_providers/clock.py\n    from data_providers.base_provider import DataProvider\n    class ClockProvider(DataProvider):\n        def fetch(self):\n            self.set_data({\"time\": datetime.now().strftime(\"%H:%M:%S\")})\n    \n    # main.py\n    from data_providers.clock import ClockProvider\n\n    clock_provider = ClockProvider(update_interval=1)  # create the provider object\n    clock_provider.start()  # start the provider fetch loop\n    ```\n\n4. **Adding notifications (optional)**:\n    - Subclass the notifier class in the `notifiers` directory and implement the `notify` method.\n    - set the notification_board attribute to the board that should be displayed when the notification is triggered.\n    ```python\n    from notifications.notifier import Notifier\n    from notifications.manager import NotificationManager\n\n    notification_manager = NotificationManager()\n    motion_notifier = MotionDetectionNotifier(\n        notification_manager,  # Notification manager\n        motion_board, # Board to display when notification is triggered\n        motion_provider, # Optional data provider that triggers the notifier on data change\n    )\n    ```\n\n5. **Custom icons**:\n    - Create custom icons using 8x5 bitmaps and add them to the `icons.py` file.\n    - For dynamic icons, create a function in the `dynamic_icons.py` file that returns the icon based on the current state.\n    - To use the icon, import the `IconManager` class and call the `use_icon` method with the icon name.\n    ```python\n    from icons.manager import IconManager\n    import icons.icons as icons\n\n    text = \"Downloading\" + IconManager.use_icon(lcd, icons.DOWNLOAD)\n    lcd.write_string(text)\n    ```\n\n6. **Scheduling**:\n    - To start the board cycle, simply create a `Scheduler` object and call the `start` method.\n    ```python\n    from scheduler.scheduler import Scheduler\n\n    scheduler = Scheduler(lcd, boards, notification_manager)\n    scheduler.start()\n    scheduler.stop() # To stop the scheduler\n    ```\n\n## Architecture\n\nThe following diagram shows the architecture of the project:\n\n![](lcdash-arch.svg)\n\n## Contributing\n\nContributions are welcome. Feel free to open an issue or submit a pull request.\n\n## Future improvements\n\n- Add multipage boards to display more information.\n- Add simple graphs to display historical data.\n- News, Quotes, and other information boards.\n- Improve progress indicator showing the current board cycle progress.\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Contact\n\nIf you have any questions or suggestions, feel free to create an issue or contact me at mail@ayushmanmuduli.com.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fayshmnmm%2Flcdash","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fayshmnmm%2Flcdash","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fayshmnmm%2Flcdash/lists"}