Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/slad3/remoterelayrust
Remote Relay is an http server that allows a user to control their in-home smartplugs (and other forms of relays with a boolean state) externally from the respective smartplug's ecosystem. Rebuilt in Rust.
https://github.com/slad3/remoterelayrust
rocket rust smarthome-api
Last synced: 4 days ago
JSON representation
Remote Relay is an http server that allows a user to control their in-home smartplugs (and other forms of relays with a boolean state) externally from the respective smartplug's ecosystem. Rebuilt in Rust.
- Host: GitHub
- URL: https://github.com/slad3/remoterelayrust
- Owner: Slad3
- License: mit
- Created: 2023-12-24T11:18:50.000Z (almost 1 year ago)
- Default Branch: master
- Last Pushed: 2024-12-11T03:03:39.000Z (13 days ago)
- Last Synced: 2024-12-11T03:28:27.317Z (13 days ago)
- Topics: rocket, rust, smarthome-api
- Language: Rust
- Homepage:
- Size: 111 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Remote Relay (Rust)
Originally coded in Python, Remote Relay is an http server interface that allows a user to control their in home smartplugs (and other forms of relays with a boolean state) externally from the respective smartplug's ecosystem.
## Getting Started
Only Rust is required to build and run from source.
```bash
cargo build --release
cargo run --color=always
```## Config and Config Options
Currently, you can set your configuration via local file in `config.json` or through a MongoDB database through a `.env` file. Application defaults to local config.
### Local Configuration
All local configuration is stored in `config.json` at root level of project directory.
An example configuration will look like this:
```json5
{
"relays": [
// TPLink Kasa Plug example relay configuration
{
"type": "KasaPlug", // Type of relay, case-sensitive, required for configuration loader to differentiate
"name": "Sample Name", // Name of relay, use normal string restrictions
"ip": "", // IPv4 address of relay. Can get this from router devices
"room": "bedroom" // Optional room location of relay
},
{
"type": "KasaMultiPlug", // Type of relay, case-sensitive, required for configuration loader to differentiate
"names": ["Sample Name 1", "Sample Name 2"], // Names of relays, length must match exactly with number of relays on device
"ip": "", // IPv4 address of relay. Can get this from router devices
"room": "bedroom" // Optional room location of relay
}
],
"presets": [
{
"name": "Bedroom on", // Name of relay, use normal string restrictions
"enabled": true, // For UI use, keeps the ability to store many different configurations without sending them all to a frontend
"relays": {
"Sample Name": true
}
}
]
}
```As of this current version, by default presets will turn off every relay not explicitly stated to be turned on (set to `true`) in the preset config. Future efforts will be made toward an `explicit` boolean option per presets to let the user define if they want that preset to explicitly control all relays on preset toggle.
### Mongo Configuration
To set up a configuration through a Mongo Database, the following must be exact:
1. Your `.env` file must contain the connection string denoted by a `MONGODB_URL=` variable, placed at root level of running directory.
2. All collections must be in a database named `HomeConfig`
3. `Relays` and `Presets` (case-sensitive) collections must be present in `HomeConfig`
4. Relays and Presets are formatted just like in local config, with each relay/preset being its own documentFor a visual representation:
- `HomeConfig` (Database)
- `Relays` (Collection)
- `Presets` (Collection)## Routes
### Index Routes
| Route | Description |
|----------|--------------------------------------------------------------------------------------------------|
| / | Health Check |
| /status | Gets full status of all relays |
| /refresh | Endpoint for refreshing config, useful for dynamic config loading testing and external debugging |### Preset Routes
| Route | Description |
|---------------------------------|--------------------------------------------------|
| /preset/getPresetNames | Gets list of all preset names |
| /preset/setPreset/ | Sets preset via name |### Relay Routes
| Route | Description |
|---------------------------------|---------------------------------------------------------------------------------------|
| /relay//set/ | Gives command to specific relay. Commands include `ON`, `OFF`, `SWITCH`, and `STATUS` |## Future Todos
-