{"id":14978076,"url":"https://github.com/Automation-Kit/jiotty","last_synced_at":"2026-04-02T10:04:13.284Z","repository":{"id":41257737,"uuid":"196350365","full_name":"ylexus/jiotty","owner":"ylexus","description":"Java components for low level home automation coding","archived":false,"fork":false,"pushed_at":"2025-10-14T22:13:40.000Z","size":1152,"stargazers_count":7,"open_issues_count":2,"forks_count":2,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-10-15T02:34:12.761Z","etag":null,"topics":["application-startup","automation","broadlink","fieldglass","gmail","google-assistant","google-drive","google-photos","google-photos-api","google-sheet","guice","iot","mqtt-client","owntracks","raspberry-pi","slide","sunrise-sunset","tplink-kasa"],"latest_commit_sha":null,"homepage":"","language":"Java","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/ylexus.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":"2019-07-11T08:15:21.000Z","updated_at":"2025-10-14T22:13:43.000Z","dependencies_parsed_at":"2023-02-09T11:02:15.640Z","dependency_job_id":"dbfa823d-860c-4e24-add4-8a410286c547","html_url":"https://github.com/ylexus/jiotty","commit_stats":{"total_commits":218,"total_committers":4,"mean_commits":54.5,"dds":"0.45412844036697253","last_synced_commit":"53e79a2fbf64d26ba55b050e21861099c53a1497"},"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/ylexus/jiotty","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ylexus%2Fjiotty","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ylexus%2Fjiotty/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ylexus%2Fjiotty/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ylexus%2Fjiotty/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ylexus","download_url":"https://codeload.github.com/ylexus/jiotty/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ylexus%2Fjiotty/sbom","scorecard":{"id":676514,"data":{"date":"2025-07-07","repo":{"name":"github.com/ylexus/jiotty","commit":"81497611e3afb0a697948f9ba64edf0fbfedf987"},"scorecard":{"version":"v5.2.1-18-gbb9c347d","commit":"bb9c347dff6349d986baab6578a46d68a5524c62"},"score":3.4,"checks":[{"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/bb9c347dff6349d986baab6578a46d68a5524c62/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/bb9c347dff6349d986baab6578a46d68a5524c62/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/bb9c347dff6349d986baab6578a46d68a5524c62/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/bb9c347dff6349d986baab6578a46d68a5524c62/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":5,"reason":"7 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 5","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/bb9c347dff6349d986baab6578a46d68a5524c62/docs/checks.md#maintained"}},{"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: master.Dockerfile:1","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/bb9c347dff6349d986baab6578a46d68a5524c62/docs/checks.md#pinned-dependencies"}},{"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/bb9c347dff6349d986baab6578a46d68a5524c62/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/bb9c347dff6349d986baab6578a46d68a5524c62/docs/checks.md#sast"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/bb9c347dff6349d986baab6578a46d68a5524c62/docs/checks.md#binary-artifacts"}},{"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/bb9c347dff6349d986baab6578a46d68a5524c62/docs/checks.md#security-policy"}},{"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/bb9c347dff6349d986baab6578a46d68a5524c62/docs/checks.md#license"}},{"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/bb9c347dff6349d986baab6578a46d68a5524c62/docs/checks.md#fuzzing"}},{"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/bb9c347dff6349d986baab6578a46d68a5524c62/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/bb9c347dff6349d986baab6578a46d68a5524c62/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/bb9c347dff6349d986baab6578a46d68a5524c62/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-21T21:40:08.681Z","repository_id":41257737,"created_at":"2025-08-21T21:40:08.681Z","updated_at":"2025-08-21T21:40:08.681Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":280906488,"owners_count":26411412,"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","status":"online","status_checked_at":"2025-10-25T02:00:06.499Z","response_time":81,"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":["application-startup","automation","broadlink","fieldglass","gmail","google-assistant","google-drive","google-photos","google-photos-api","google-sheet","guice","iot","mqtt-client","owntracks","raspberry-pi","slide","sunrise-sunset","tplink-kasa"],"created_at":"2024-09-24T13:56:49.849Z","updated_at":"2026-04-02T10:04:13.238Z","avatar_url":"https://github.com/ylexus.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Introduction\nJiotty is a library of java components aimed at home automation (IoT) enthusiasts who prefer to solder, assemble and code it all themselves as opposed to using \none of existing automation hub solutions. This gives them 100% flexibility in all the automation tasks.\n# Structure\nJiotty consists of a number of small independent modules. Each module typically allows communication with a single Thing, for example, Google Drive, \na thermostat or a smart plug.\n# Design principles\nI am a fan of Google Guice as a dependency injection framework, a clearly visible point of entry to every API and good\nencapsulation. A a result, an entry point to any component is the corresponding Guice module. \nIf your application is not using Guice (wait but why?), use the following pattern to obtain an instance\n of any component:\n```java\nExposedKeyModule\u003cComponentType\u003e module = ComponentModule.builder()\n    .setXxx()\n    .build();\nComponentType component = Guice.createInjector(module).getInstance(module.getExposedKey());\n```\n  \nMany components internally implement `LifecycleComponent` interface. Such components expect their `start()` method to be called on application startup and their `stop()` \nmethod to be called on application shutdown. A great way to manage that is to use the `Application` class that takes care of starting and stopping all the \ncomponents. If you don't want to do that, you will have to perform this additional step on you application startup:\n```java\nmodule\n    .findBindingsByType(new TypeLiteral\u003cLifecycleComponent\u003e() {})\n    .stream()\n    .map(binding -\u003e binding.getProvider().get())\n    .forEach(LifecycleComponent::start);\n```\n\nand then on application termination call `stop()` on the same components in reverse order. Refer to the source code of `Application` as an example.\n\n# Getting started\nStart by including the required `net.yudichev.jiotty` maven module into your project. For example, to work with a TP-Link smart plug, \nuse this maven dependency:\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003enet.yudichev.jiotty\u003c/groupId\u003e\n    \u003cartifactId\u003ejiotty-connector-tplinksmartplug\u003c/artifactId\u003e\n    \u003cversion\u003e1.0.0\u003c/version\u003e\n\u003c/dependency\u003e\n``` \n# Quality\nAt the moment most of the code is used in my home automation scenarios, so I have good confidence in its quality. \nHowever, only a small part of the code is unit tested and none is documented. \nI am actively working on this.\n        \n# Components\n## jiotty-appliance\nUse this module to implement an appliance - something that can be turned on or off, or receive other commands, such as increasing or decreasing volume.\n## jiotty-connector-aws\nAn higher abstraction over Amazon IoT MQTT messaging.\n\nTODO document them all\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FAutomation-Kit%2Fjiotty","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FAutomation-Kit%2Fjiotty","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FAutomation-Kit%2Fjiotty/lists"}