No description
| .cargo | ||
| media | ||
| src | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| deploy.sh | ||
| README.md | ||
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
crosscommand)
Installation
- Clone the repository:
git clone https://github.com/yourusername/noisebell.git
cd noisebell
- Build the project:
cargo build --release
Deployment
The project includes a deployment script for Raspberry Pi. To deploy:
- Ensure you have cross-compilation tools installed:
cargo install cross
- Run the deployment script:
./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 tokenDISCORD_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:
- Edit the constants in
src/main.rs - Rebuild the project
- For Discord keys and channel id, ensure the environment variables are set before running the bot (Done for you in deploy.sh)