{"id":23991535,"url":"https://github.com/nikelborm/3d-printer","last_synced_at":"2025-07-14T12:34:57.397Z","repository":{"id":38995269,"uuid":"357867840","full_name":"nikelborm/3d-printer","owner":"nikelborm","description":"3D printer admin panel","archived":false,"fork":false,"pushed_at":"2025-06-24T04:55:52.000Z","size":3482,"stargazers_count":2,"open_issues_count":9,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-26T16:07:45.987Z","etag":null,"topics":["bootstrap","chartjs","customize-cra","express","minimist","mobx","mobx-react","raspberry-pi","react","react-dropzone","react-router","serialport","styled-components","websocket"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nikelborm.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2021-04-14T10:40:17.000Z","updated_at":"2024-12-31T12:20:52.000Z","dependencies_parsed_at":"2025-01-07T19:56:06.149Z","dependency_job_id":"a4b488d8-516e-4dd7-acda-9525a27d8f92","html_url":"https://github.com/nikelborm/3d-printer","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/nikelborm/3d-printer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nikelborm%2F3d-printer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nikelborm%2F3d-printer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nikelborm%2F3d-printer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nikelborm%2F3d-printer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nikelborm","download_url":"https://codeload.github.com/nikelborm/3d-printer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nikelborm%2F3d-printer/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265292030,"owners_count":23741964,"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":["bootstrap","chartjs","customize-cra","express","minimist","mobx","mobx-react","raspberry-pi","react","react-dropzone","react-router","serialport","styled-components","websocket"],"created_at":"2025-01-07T19:55:32.421Z","updated_at":"2025-07-14T12:34:57.368Z","avatar_url":"https://github.com/nikelborm.png","language":"JavaScript","readme":"# Описание проекта\n\n## Если кратко, то...\n\n1. Легко доступен из поиска\n2. Имеет уникальный функционал, не имеющий аналогов\n3. Хорошо выглядит на всех устройствах (почти)\n4. Неубиваемый ( самовосстанавливается при ошибках )\n5. Лёгкий\n6. Защищённый\n7. Непривередливый ( запустится на чём угодно )\n8. Универсальный ( поддерживает подавляющее большинство существующих принтеров )\n9. Легко настраивается\n10. Масштабируем\n\n## Экраны приложения\n\n### Авторизация\n\n![https://github.com/nikelborm/3d-printer/blob/main/readme-images/Screenshot_20210414_152542.png?raw=true](https://github.com/nikelborm/3d-printer/blob/main/readme-images/Screenshot_20210414_152542.png?raw=true)\n\n### Терминал\n\n![https://github.com/nikelborm/3d-printer/blob/main/readme-images/Screenshot_20210414_152903.png?raw=true](https://github.com/nikelborm/3d-printer/blob/main/readme-images/Screenshot_20210414_152903.png?raw=true)\n\n![https://github.com/nikelborm/3d-printer/blob/main/readme-images/Screenshot_20210414_153134.png?raw=true](https://github.com/nikelborm/3d-printer/blob/main/readme-images/Screenshot_20210414_153134.png?raw=true)\n\n### Контроль осей\n\n![https://github.com/nikelborm/3d-printer/blob/main/readme-images/Screenshot_20210414_154107.png?raw=true](https://github.com/nikelborm/3d-printer/blob/main/readme-images/Screenshot_20210414_154107.png?raw=true)\n\n![https://github.com/nikelborm/3d-printer/blob/main/readme-images/Screenshot_20210414_154659.png?raw=true](https://github.com/nikelborm/3d-printer/blob/main/readme-images/Screenshot_20210414_154659.png?raw=true)\n\n### Загрузка нарезанной 3d модели\n\n![https://github.com/nikelborm/3d-printer/blob/main/readme-images/Screenshot_20210414_154444.png?raw=true](https://github.com/nikelborm/3d-printer/blob/main/readme-images/Screenshot_20210414_154444.png?raw=true)\n\n![https://github.com/nikelborm/3d-printer/blob/main/readme-images/Screenshot_20210414_154752.png?raw=true](https://github.com/nikelborm/3d-printer/blob/main/readme-images/Screenshot_20210414_154752.png?raw=true)\n\n### Наблюдение за температурой\n\n![https://github.com/nikelborm/3d-printer/blob/main/readme-images/Screenshot_20210414_154910.png?raw=true](https://github.com/nikelborm/3d-printer/blob/main/readme-images/Screenshot_20210414_154910.png?raw=true)\n\n![https://github.com/nikelborm/3d-printer/blob/main/readme-images/Screenshot_20210414_155557.png?raw=true](https://github.com/nikelborm/3d-printer/blob/main/readme-images/Screenshot_20210414_155557.png?raw=true)\n\nTODO: Добавить график, на котором отображены реальные значения\n\n## Далее подробно\n\n1. Сайт выводится в поисковой выдаче Яндекса на первой строке при запросе `Hello Printy 3D`.\n2. Мы избавились от всех проводов и вы можете управлять вашим 3d принтером из любой точки мира. И в дополнение реализован уникальный механизм отправки моделей на печать, не имеющий аналогов. Во всех программах для того чтобы отправить модель на печать, нужно подключить 3d принтер к ПК, запустить печать и держать ПК подключённым к принтеру на протяжении процесса печати. У нас же всё реализовано так, что даже при отключении от принтера raspberry pi, он допечатает загруженную модель до конца самостоятельно. Этого удалось достичь благодаря тому что наше приложение работает напрямую с внутренней памятью 3d принтера, загружая в неё 3d модель. А потом с помощью g команды запускает её печать.\n3. Предыдущая версия с упрощённым меню отображалась на телефонах отлично. С текущим меню следует поработать над адаптивностью. Весь остальной контент на страницах отображается хорошо.\n4. Система автоматического развёртывания приложения после отправки новой версии кода на github. Работает как в части сервера, так и в части raspberry pi.\n5. Система для автоматического перезапуска приложения в случае критических сбоев. Работает как в части сервера, так и в части raspberry pi.\n6. Система для запуска приложения при старте системы. Работает как в части сервера, так и в части raspberry pi.\n7. Реализована система Graceful Shutdown, для безопасного завершения процессов. Работает как в части сервера, так и в части raspberry pi.\n8. Реализована система Self-Healing WebSocket, для автоматического переподключения к серверу в случае потери соединения. Работает как на веб клиентах, так и на raspberry pi.\n9. Соединение между сервером и веб клиентами, а также между сервером и raspberry pi идёт через WebSocket.\n10. Подключение raspberry pi к принтеру идёт через Serial порт.\n11. Реализована система авторизации WebSocket подключений. Благодаря ей только авторизованные подключения с raspberry pi и веб клиентов смогут выполнять какие-либо привилегированные действия. До авторизации все сообщения, кроме запросов авторизации игнорируются. И в случае если произошло некое событие в нашей системе неавторизованное устройство о нём уведомлено не будет.\n    1. Только авторизованная raspberry pi будет получать команды отправленные с веб клиентов и только авторизованная raspberry pi сможет отправлять какие-либо сообщения о своём состоянии на сервер.\n    2. Только авторизованные веб клиенты смогут отправлять команды и получать данные о состоянии принтера.\n12. Так как веб сервер и код для raspberry pi это два независимых компонента, то их можно можно запускать как на разных устройствах (как это сейчас: серверная часть запущена на heroku и доступна на весь интернет, а принтерный компонент запущен на raspberry pi), так и вместе на raspberry pi. Для второго варианта понадобится только изменить лишь одну строчку в конфигурационном файле. И в таком случае панель управления будет доступна исключительно внутри локальной сети по айпи, который она занимает. Выбор за конечным пользователем, что ему удобно.\n13. Наша система универсальна и непривередлива.\n    1. Код сервера и код для работы с принтером запускается на любом из семейств ОС: Linux, Windows, Mac.\n    2. На любых устройствах, способных запустить эти ОС. Главное чтобы была поддержка интернета и серийных портов (необходимо только для работы с принтером). То есть вы можете использовать не только raspberry pi, но и любые другие (например более дешёвые) микрокомпьютеры.\n    3. Это же касается и вебсервера, который очень нетребователен к ресурсам.\n    4. Отдельно хочется подчеркнуть, что наша система также может работать со всеми принтерами, которые подключаются через серийный порт ( почти все 3d принтеры имеют эту возможность ). Для смены принтера опять же необходимо поправить лишь пару строчек в конфигурационном файле на raspberry pi.\n14. Простая конфигурация как сервера, так и raspberry pi.\n15. Наша система легко масштабируема. Вы можете покдлючить до 4х принтеров одновременно к raspberry pi и после того как поправить несколько строчек в конфигурационном файле системы автозапуска процессов, все они станут доступны в панели управления. Но работать будут синхронно. Так модель отправленная на печать запустится на всех принтерах одновременно, что особенно востребованно для промышленных производств. В будущем планируется добавление асинхронной работы с принтерами (можно будет выбрать с каким конкретно идёт сейчас работа)\n16. Наша система позволяет отслеживать подключён ли принтер к интернету, успешно ли соединение по последовательному порту.\n17. Принтер после того как получает какую-либо команду всегда отправляет какой-либо отчёт. И все отправленные отчёты можно наблюдать на сайте. История всех этих отчётов ведётся с момента открытия вкладки браузера и пока не закроется. В будущем планируется добавить возможность сохранения истории отчётов на сервере и их подгрузка при входе в интерфейс.\n18. В случае, если произошла ошибка в коде на raspberry pi, то на сервер отправляется отчёт об этой ошибке.\n19. В панели управления реализовано 4 глобальных возможности:\n    1. [Терминал](https://hello-printy-3d.herokuapp.com/admin/terminal/).  Можно отправлять команды любые G команды ( а это абсолютный контроль над всеми системами принтера ) и видеть все отчёты, которые отправляет принтер в ответ. Также есть возможность очистить терминал и некоторые отладочные функции. Если принтер не подключён или идёт печать, показывается предупреждающее уведомление, что отправка команд будет либо бесполезна, либо опасна.\n    2. [Контроль осей](https://hello-printy-3d.herokuapp.com/admin/axesControl/). Джойстик представляет из себя графическую оболочку над командами для управления положением печатающей головки и стола. Движение по оси происходит относительно текущей позиции. Можно изменять координату на 0.1, 1, 10, 100 единиц. Можно делать в обоих направлениях по каждой оси. Также можно вернуть всё в базовое положение. Функция нужна для тестирования позиционирования печатающих элементов и проверки работы движущих элементов. Также выводятся предупреждения. Во время печати мы не даём человеку выстрелить себе в ногу и все нажатия во время печати модели приведут лишь к всплывающему уведомлению.\n    3. [Температура](https://hello-printy-3d.herokuapp.com/admin/heatObserver/). На графике показываются реальные температуры и температуры, до которых планируется нагрев, головки и стола за последние 5 минут. Если отсутствует подключение к принтеру, кнопки блокируются.\n    4. [Загрузка модели](https://hello-printy-3d.herokuapp.com/admin/loadSlicedModel/). Можно загрузить нарезанную модель. Такое же предупреждение как и на предыдущих страницах. Файл можно как выбрать на файловой системе так и просто перетащить в браузер. Как только начинается печать, вниз показывается статус бар печати, содержащий имя файла, анимированный прогресс бар, процент выполненности, время начала печати и время окончания. Когда печать подойдёт к концу, прогресс бар станет зелёным и появится возможность закрыть статус бар. Прогресс бар можно будет увидеть даже, если закрыть сайт, а потом снова её открыть. В планах добавить функцию финального подтверждения отправки файла, чтобы выбранная модель не отправлялась на печать сразу.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnikelborm%2F3d-printer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnikelborm%2F3d-printer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnikelborm%2F3d-printer/lists"}