An open API service indexing awesome lists of open source software.

https://github.com/ylexus/jiotty

Java components for low level home automation coding
https://github.com/ylexus/jiotty

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

Last synced: 3 months ago
JSON representation

Java components for low level home automation coding

Awesome Lists containing this project

README

        

# Introduction
Jiotty 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
one of existing automation hub solutions. This gives them 100% flexibility in all the automation tasks.
# Structure
Jiotty consists of a number of small independent modules. Each module typically allows communication with a single Thing, for example, Google Drive,
a thermostat or a smart plug.
# Design principles
I am a fan of Google Guice as a dependency injection framework, a clearly visible point of entry to every API and good
encapsulation. A a result, an entry point to any component is the corresponding Guice module.
If your application is not using Guice (wait but why?), use the following pattern to obtain an instance
of any component:
```java
ExposedKeyModule module = ComponentModule.builder()
.setXxx()
.build();
ComponentType component = Guice.createInjector(module).getInstance(module.getExposedKey());
```

Many components internally implement `LifecycleComponent` interface. Such components expect their `start()` method to be called on application startup and their `stop()`
method 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
components. If you don't want to do that, you will have to perform this additional step on you application startup:
```java
module
.findBindingsByType(new TypeLiteral() {})
.stream()
.map(binding -> binding.getProvider().get())
.forEach(LifecycleComponent::start);
```

and then on application termination call `stop()` on the same components in reverse order. Refer to the source code of `Application` as an example.

# Getting started
Start by including the required `net.yudichev.jiotty` maven module into your project. For example, to work with a TP-Link smart plug,
use this maven dependency:
```xml

net.yudichev.jiotty
jiotty-connector-tplinksmartplug
1.0.0

```
# Quality
At the moment most of the code is used in my home automation scenarios, so I have good confidence in its quality.
However, only a small part of the code is unit tested and none is documented.
I am actively working on this.

# Components
## jiotty-appliance
Use this module to implement an appliance - something that can be turned on or off, or receive other commands, such as increasing or decreasing volume.
## jiotty-connector-aws
An higher abstraction over Amazon IoT MQTT messaging.

TODO document them all