{"id":39393613,"url":"https://github.com/kihamo/boggart","last_synced_at":"2026-01-18T03:14:34.046Z","repository":{"id":52635582,"uuid":"116512312","full_name":"kihamo/boggart","owner":"kihamo","description":"SmartHome system. ","archived":false,"fork":false,"pushed_at":"2025-11-07T21:14:58.000Z","size":52755,"stargazers_count":30,"open_issues_count":14,"forks_count":8,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-11-07T23:22:23.902Z","etag":null,"topics":["broadlink","esphome","herospeed","hikvision","hilink","iot","lg-webos","mercury","mikrotik","mqtt","nut","openhab","openweathermap","samsung-tv","smarthome","wifiled","xiaomi","xmeye","zigbee","zstack"],"latest_commit_sha":null,"homepage":"","language":"Go","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/kihamo.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2018-01-06T20:11:20.000Z","updated_at":"2025-11-07T21:15:03.000Z","dependencies_parsed_at":"2024-03-27T10:47:31.262Z","dependency_job_id":"971d02af-2e66-4065-a61a-e65bad9ed4b8","html_url":"https://github.com/kihamo/boggart","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/kihamo/boggart","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kihamo%2Fboggart","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kihamo%2Fboggart/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kihamo%2Fboggart/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kihamo%2Fboggart/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kihamo","download_url":"https://codeload.github.com/kihamo/boggart/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kihamo%2Fboggart/sbom","scorecard":{"id":559804,"data":{"date":"2025-08-11","repo":{"name":"github.com/kihamo/boggart","commit":"be7df39f1b2aa227ef1023d7f31a73335c0a8a2d"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":1.1,"checks":[{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Binary-Artifacts","score":9,"reason":"binaries present in source code","details":["Warn: binary detected: docs/roborock/ccrypt:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"License","score":0,"reason":"license file not detected","details":["Warn: project does not have a license file"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: containerImage not pinned by hash: Dockerfile:1","Warn: containerImage not pinned by hash: Dockerfile:15","Info:   0 out of   2 containerImage dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Vulnerabilities","score":0,"reason":"13 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-q7pp-wcgr-pffx","Warn: Project is vulnerable to: GO-2024-3321 / GHSA-v778-237x-gjrc","Warn: Project is vulnerable to: GO-2025-3487 / GHSA-hcg3-q754-cr77","Warn: Project is vulnerable to: GO-2023-1990 / GHSA-j3p8-6mrq-6g7h","Warn: Project is vulnerable to: GO-2023-1989 / GHSA-x92r-3vfx-4cv3","Warn: Project is vulnerable to: GO-2024-2937 / GHSA-9phm-fm57-rhg8","Warn: Project is vulnerable to: GO-2024-2687 / GHSA-4v7x-pqxf-cx7m","Warn: Project is vulnerable to: GO-2024-3333","Warn: Project is vulnerable to: GO-2025-3503 / GHSA-qxp5-gwg8-xv66","Warn: Project is vulnerable to: GO-2025-3595 / GHSA-vvgc-356p-c3xw","Warn: Project is vulnerable to: GO-2025-3488 / GHSA-6v2p-p543-phr9","Warn: Project is vulnerable to: GO-2023-2153 / GHSA-m425-mq94-257g / GHSA-qppj-fm5r-hxr3","Warn: Project is vulnerable to: GO-2024-2611 / GHSA-8r3f-844c-mc37"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-20T13:20:29.194Z","repository_id":52635582,"created_at":"2025-08-20T13:20:29.195Z","updated_at":"2025-08-20T13:20:29.195Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28528034,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T00:39:45.795Z","status":"online","status_checked_at":"2026-01-18T02:00:07.578Z","response_time":98,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["broadlink","esphome","herospeed","hikvision","hilink","iot","lg-webos","mercury","mikrotik","mqtt","nut","openhab","openweathermap","samsung-tv","smarthome","wifiled","xiaomi","xmeye","zigbee","zstack"],"created_at":"2026-01-18T03:14:33.984Z","updated_at":"2026-01-18T03:14:34.038Z","avatar_url":"https://github.com/kihamo.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"```\nsudo cp -f /home/pi/go/src/github.com/kihamo/boggart/cmd/boggart/boggart.service /lib/systemd/system/boggart.service\nsudo systemctl daemon-reload\nsudo journalctl -f -u boggart.service\n```\n\n## Server\n#### First\n```\ngox -output=\"cmd/server/boggart\" -osarch=\"linux/amd64\" -ldflags=\"-X 'main.Name=Boggart Server' -X 'main.Version=`date +\"%y%m%d\"`' -X 'main.Build=`date +\"%H%M%S\"`'\" ./cmd/server/\nsudo cp -f /opt/boggart/boggart.service /lib/systemd/system/boggart.service\nsudo cp -f /opt/boggart/boggart /usr/local/bin/boggart-server\nsudo chmod +x /usr/local/bin/boggart-server\nsudo systemctl daemon-reload\nsudo systemctl enable boggart.service\nsudo systemctl start boggart.service \u0026\u0026 sudo journalctl -f -u boggart.service\n```\n#### Update\n```\ngox -output=\"cmd/server/boggart\" -osarch=\"linux/amd64\" -ldflags=\"-X 'main.Name=Boggart Server' -X 'main.Version=`date +\"%y%m%d\"`' -X 'main.Build=`date +\"%H%M%S\"`'\" ./cmd/server/\nsudo cp -f /opt/boggart/boggart /usr/local/bin/boggart-server\nsudo chmod +x /usr/local/bin/boggart-server\nsudo systemctl restart boggart.service \u0026\u0026 sudo journalctl -f -u boggart.service\n```\n\n## Agent\n#### First\n```\nGOARM=7 gox -output=\"cmd/agent/boggart\" -osarch=\"linux/arm\" -ldflags=\"-X 'main.Name=Boggart Agent' -X 'main.Version=`date +\"%y%m%d\"`' -X 'main.Build=`date +\"%H%M%S\"`'\" ./cmd/agent/\nsudo cp -f /home/pi/go/src/github.com/kihamo/boggart/cmd/agent/boggart.service /lib/systemd/system/boggart.service\nsudo cp -f /home/pi/go/src/github.com/kihamo/boggart/cmd/agent/boggart /usr/local/bin/boggart-agent\nsudo chmod +x /usr/local/bin/boggart-agent\nsudo systemctl daemon-reload\nsudo systemctl enable boggart.service\nsudo systemctl start boggart.service \u0026\u0026 sudo journalctl -f -u boggart.service\n```\n#### Update\n###### Build for Raspberry 2\n```\nGOARM=7 gox -output=\"cmd/agent/boggart\" -osarch=\"linux/arm\" -ldflags=\"-X 'main.Name=Boggart Agent' -X 'main.Version=`date +\"%y%m%d\"`' -X 'main.Build=`date +\"%H%M%S\"`'\" ./cmd/agent/\n```\n###### Build for Raspberry 1\n```\nGOARM=6 gox -output=\"cmd/agent/boggart\" -osarch=\"linux/arm\" -ldflags=\"-X 'main.Name=Boggart Zav' -X 'main.Version=`date +\"%y%m%d\"`' -X 'main.Build=`date +\"%H%M%S\"`'\" ./cmd/agent/\n```\n###### Install\n```\nsudo cp -f /home/pi/go/src/github.com/kihamo/boggart/cmd/agent/boggart /usr/local/bin/boggart-agent\nsudo chmod +x /usr/local/bin/boggart-agent\nsudo systemctl restart boggart.service \u0026\u0026 sudo journalctl -f -u boggart.service\n```\n\n#### Self\n```\ncd $GOPATH/src/github.com/kihamo/boggart/cmd/agent/\ngit fetch --prune\ngit reset --hard origin/master\ngo build -v -ldflags \"-s -w -X 'main.Name=Boggart Villa' -X 'main.Version=`date +\"%y%m%d\"`' -X 'main.Build=`date +\"%H%M%S\"`'\" -o boggart ./\nsudo cp -f $GOPATH/src/github.com/kihamo/boggart/cmd/agent/boggart /usr/local/bin/boggart-agent\nsudo chmod +x /usr/local/bin/boggart-agent\nsudo systemctl restart boggart.service \u0026\u0026 sudo journalctl -f -u boggart.service\n```\n\n#### Bluetooth\n```\nsudo systemctl daemon-reload\nsudo systemctl enable boggart.service\nsudo systemctl enable hciuart.service\n\nsudo systemctl start bluetooth.service\nsudo systemctl start hciuart.service\n\nsudo systemctl status bluetooth.service\nsudo systemctl status hciuart.service\n\nsudo bluetoothctl\n\nagent on\ndefault-agent\nscan on\n```\n\nВ случае ошибки hci0: can't up device: connection timed out необходимо перезапустить службу\n```\nservice bluetooth restart\n```\n\nВ случае ошибки Sap driver initialization failed.\n```\n/etc/systemd/system/bluetooth.target.wants/bluetooth.service\nExecStart=/usr/lib/bluetooth/bluetoothd --noplugin=sap\nsudo systemctl daemon-reload\nsudo service bluetooth restart\n```\n\n## Agent Roborock\nКросс компиляция не возможна из-за ошибок, поэтому собирать надо на реальном устройстве. Подойдет Raspberry PI, так как платформа на нем аналогичная\n\nДля библиотеки https://github.com/hajimehoshi/oto\n```\napt install libasound2-dev\n```\nИначе будет ошибка\n```\n# github.com/kihamo/boggart/vendor/github.com/hajimehoshi/oto\nvendor/github.com/hajimehoshi/oto/player_linux.go:23:28: fatal error: alsa/asoundlib.h: No such file or directory\n #include \u003calsa/asoundlib.h\u003e\n                            ^\ncompilation terminated.\n```\n\n// TODO: агент должен стартовать после инициализации wifi, иначе MQTT соединение пустое\n\n#### Build on RPi\n```\ncd $GOPATH/src/github.com/kihamo/boggart/cmd/roborock/\ngo build -ldflags \"-s -w -X 'main.Version=`date +\"%y%m%d\"`' -X 'main.Build=`date +\"%H%M%S\"`'\" -o boggart ./\nmd5sum boggart\n```\n\n#### First\n```\nsudo cp -f /home/cleaner/boggart.env /etc/default/boggart-roborock\nsudo cp -f /home/cleaner/boggart.service /etc/init.d/boggart-roborock \u0026\u0026 sudo chmod +x /etc/init.d/boggart-roborock\nsudo cp -f /home/cleaner/boggart.conf /etc/init/boggart-roborock.conf\nsudo cp -f /home/cleaner/boggart /usr/local/bin/boggart-roborock \u0026\u0026 sudo chmod +x /usr/local/bin/boggart-roborock\n# sudo update-rc.d boggart-roborock defaults 90\n# sudo update-rc.d boggart-roborock enable\nsudo service boggart-roborock restart\n```\n#### Update\n```\nmd5sum /home/cleaner/boggart\nsudo cp -f /home/cleaner/boggart.env /etc/default/boggart-roborock\nsudo cp -f /home/cleaner/boggart /usr/local/bin/boggart-roborock \u0026\u0026 sudo chmod +x /usr/local/bin/boggart-roborock\nsudo /etc/init.d/boggart-roborock stop\nsudo /etc/init.d/boggart-roborock start \u0026\u0026 tail -f /var/log/boggart-roborock.log\n```\n\n## Other\n\n```\nsudo systemctl stop boggart.service\nsudo systemctl restart boggart.service \u0026\u0026 sudo journalctl -f -u boggart.service\nsudo systemctl start boggart.service \u0026\u0026 sudo journalctl -f -u boggart.service\n\nsudo echo \"22\" \u003e /sys/class/gpio/unexport\nsudo echo \"27\" \u003e /sys/class/gpio/unexport\nsudo echo \"5\" \u003e /sys/class/gpio/unexport\n```\n\n# openhab\n\n```\nsudo systemctl stop openhab2\nsudo openhab-cli clean-cache\nsudo systemctl start openhab2\n```\n\n# docker\n\n#### Swarm\nИнициализация кластера\n```\ndocker swarm init --advertise-addr 192.168.70.10\n```\nЧто бы потом получить строку с джоинтом к кластеру\n```\ndocker swarm join-token manager\n```\n\nВключаем не защищенные репы в маке\n```\nFor docker desktop 2.3.x in MAC , it can be set as follows: Go to \"docker\" -\u003e \"preferences\" -\u003e \"Docker Engine\" and add the following:\n\ninsecure-registries\": [\n    \"my private docker hub  url\"\n  ]\n```\n\n#### Registry\n```\ndocker run -d -p 5000:5000 --restart=always --name registry registry:2\n```\n\n#### Сборка образа\nСобираем через docker-composer\n```\ndocker-compose build boggart-server\n```\n\nПушим в удаленную приватную репу\n```\ndocker-compose push boggart-server\n```\n\nДеплоем через stack (на ноде)\n```\ncd $GOPATH/src/github.com/kihamo/boggart/\ndocker stack deploy --compose-file docker-compose.yml boggart\n```\nПросмотр лога предпоследнего контейнера (аналог кшал лога)\n```\ndocker service logs -f $(docker stack ps boggart -q | head -2 | tail -1)\n```\n```\ndocker service logs -f $(docker stack ps boggart -q | head -1)\n```\nЗалезаем внутрь реплики\n```\ndocker exec -it $(docker ps -q -f name=boggart_boggart-server) /bin/bash\n```\nКак правильно прокидывать устройства\nhttps://github.com/Koenkk/zigbee2mqtt/issues/2049\n\n#### zigbee2mqtt\n```\ncd /opt/zigbee2mqtt\nnpm ci\n```\n\n```\nDEBUG=\"zigbee-herdsman*\" npm start\n```\n\n#### CC2531 firmware with Rpi\n\n\n##### Pins on stick CC2531\n```\n      /\\/\\/\\ Antenna /\\/\\/\\\n        GND [1] | [2] V++\n            ---------\nDebug Clock [3] | [4] Debug Data\n            ---------\n  SPI Select 5  |  6  SPI Clock\n            ---------\n      Reset [7] |  8  SPI Data out\n            ---------\n   3.3V out  9  | 10  SPI Data in\n            ---------\n           |   USB   |\n            ---------\n```\n\n##### Pins on stick RPi B\n```\n      ---------\n          |\n      ---------\n          |\n      ---------\n          |\n      ---------\n          |\n      ---------\n          |\n      ---------\n          |\n      ---------\n          |\n      ---------\n          |\n      ---------\n 3.3V [2] |\n      ---------\n MOSI [4] |\n      ---------\n MISO [7] |\n      ---------\n          | [3] CE0\n      ---------\n  GND [1] |\n      ---------\n\n      ------------\n      3.5 JACK | O\n      ------------\n```\nMapping\n- 3 Debug Clock -\u003e 27 / 10\n- 4 Debug Data -\u003e 28 / 12\n- 7 Reset 24 / 13\n\n0. Download firmware\n\n!!! source_routing - max 5 devices !!!\n\n```\ncd flash_cc2531\nwget https://github.com/Koenkk/Z-Stack-firmware/raw/master/coordinator/Z-Stack_Home_1.2/bin/source_routing/CC2531_SOURCE_ROUTING_20190619.zip\nrm -rf CC2531ZNP*\nunzip CC2531_SOURCE_ROUTING_20190619.zip\n```\n1. Check\n```\n./cc_chipid -c 10 -d 12 -r 13\n  ID = b524.\n```\n2. Erase\n```\n./cc_erase  -c 10 -d 12 -r 13\n  ID = b524.\n  erase result = 00a2.\n```\n3. Flash\n```\n./cc_write -c 10 -d 12 -r 13 CC2531ZNP-Prod.hex\n  ID = b524.\n  reading line 15490.\n  file loaded (15497 lines read).\nwriting page 128/128.\nverifying page 128/128.\n flash OK.\n```\n\n#### Wake on LAN\n```\nsudo ethtool -s INTERFACE\n```\n```\nsudo vim /etc/systemd/system/wol.service\n```\n```\n[Unit]\nDescription=Configure Wake On LAN\n\n[Service]\nType=oneshot\nExecStart=/sbin/ethtool -s INTERFACE wol g\n\n[Install]\nWantedBy=basic.target\n```\n```\nsudo systemctl daemon-reload\nsudo systemctl enable wol.service\nsudo systemctl start wol.service\n```\n\n#### UDEV static link\n```\ncat \u003e /etc/udev/rules.d/81_pulsar.rules\nSUBSYSTEM==\"tty\", ATTRS{idVendor}==\"0403\", ATTRS{idProduct}==\"6001\", SYMLINK+=\"USBpulsar\", OWNER=\"root\", GROUP=\"dialout\"\n\ncat \u003e /etc/udev/rules.d/82_mercury.rules\nSUBSYSTEM==\"tty\", ATTRS{idVendor}==\"1a86\", ATTRS{idProduct}==\"7523\", SYMLINK+=\"USBmercury\", OWNER=\"root\", GROUP=\"dialout\"\n```\n\nRestart and check\n\n```\nsudo udevadm control --reload-rules \u0026\u0026 udevadm trigger\n```\n\n```\nls -la /dev/*USB*\n\ncrw-rw---- 1 root dialout 188, 0 июл  1 12:58 /dev/ttyUSB0\ncrw-rw---- 1 root dialout 188, 1 июл  1 12:58 /dev/ttyUSB1\nlrwxrwxrwx 1 root root         7 июл  1 12:58 /dev/USBmercury -\u003e ttyUSB1\nlrwxrwxrwx 1 root root         7 июл  1 12:58 /dev/USBpulsar -\u003e ttyUSB0\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkihamo%2Fboggart","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkihamo%2Fboggart","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkihamo%2Fboggart/lists"}