82 lines
No EOL
2.4 KiB
Markdown
82 lines
No EOL
2.4 KiB
Markdown
# Noisebell
|
|
|
|
A switch monitoring system that detects circuit state changes via GPIO and sends webhook notifications to configured endpoints.
|
|
|
|
This is build by Jet Pham to be used at Noisebridge to replace their old discord status bot
|
|
|
|
## Features
|
|
|
|
- GPIO circuit monitoring with configurable pin
|
|
>TODO: - Webhook notifications with retry mechanism
|
|
>TODO: - REST API for managing webhook endpoints
|
|
- Daily rotating log files
|
|
- Cross-compilation support for Raspberry Pi deployment
|
|
> Temporarialy calls the discord bot directly
|
|
- Debouncing using a finite state machine
|
|
|
|
## Requirements
|
|
|
|
- Rust toolchain
|
|
- Raspberry Pi (tested on aarch64)
|
|
- For development: Cross-compilation tools (for `cross` command)
|
|
|
|
## Installation
|
|
|
|
1. Clone the repository:
|
|
```bash
|
|
git clone https://github.com/yourusername/noisebell.git
|
|
cd noisebell
|
|
```
|
|
|
|
2. Build the project:
|
|
```bash
|
|
cargo build --release
|
|
```
|
|
|
|
## Deployment
|
|
|
|
The project includes a deployment script for Raspberry Pi. To deploy:
|
|
|
|
1. Ensure you have cross-compilation tools installed:
|
|
```bash
|
|
cargo install cross
|
|
```
|
|
|
|
2. Run the deployment script:
|
|
```bash
|
|
./deploy.sh
|
|
```
|
|
|
|
This will:
|
|
- Cross-compile the project for aarch64
|
|
- Copy the binary and configuration to your Raspberry Pi
|
|
- Set appropriate permissions
|
|
|
|
## Logging
|
|
|
|
Logs are stored in the `logs` directory with daily rotation for the past 7 days
|
|
|
|
## Configuration
|
|
|
|
The following parameters can be configured in `src/main.rs`:
|
|
|
|
### GPIO Settings
|
|
- `DEFAULT_GPIO_PIN`: The GPIO pin number to monitor (default: 17)
|
|
- `DEFAULT_POLL_INTERVAL_MS`: How frequently to check the GPIO pin state in milliseconds (default: 100ms)
|
|
- `DEFAULT_DEBOUNCE_DELAY_SECS`: How long the switch must remain in a stable state before triggering a change, in seconds (default: 5s)
|
|
|
|
### Discord Settings
|
|
The following environment variables must be set:
|
|
- `DISCORD_TOKEN`: Your Discord bot token
|
|
- `DISCORD_CHANNEL_ID`: The ID of the channel where status updates will be posted
|
|
|
|
### Logging Settings
|
|
- `LOG_DIR`: Directory where log files are stored (default: "logs")
|
|
- `LOG_PREFIX`: Prefix for log filenames (default: "noisebell")
|
|
- `LOG_SUFFIX`: Suffix for log filenames (default: "log")
|
|
- `MAX_LOG_FILES`: Maximum number of log files to keep (default: 7)
|
|
|
|
To modify these settings:
|
|
1. Edit the constants in `src/main.rs`
|
|
2. Rebuild the project
|
|
3. For Discord keys and channel id, ensure the environment variables are set before running the bot (Done for you in deploy.sh) |