No description
Find a file
2025-06-08 00:13:58 -07:00
.cargo feat: Create GPIO monitor and basic callback functionality to print 2025-06-05 08:54:01 -07:00
media feat: add noisebell logo: made by Omelia 2025-06-05 20:19:12 -07:00
src feat: use async interupts for gpio monitoring 2025-06-08 00:13:58 -07:00
.gitignore feat: use embeds for the message and add startup and shutdown messages! 2025-06-06 20:30:47 -07:00
Cargo.lock feat: use embeds for the message and add startup and shutdown messages! 2025-06-06 20:30:47 -07:00
Cargo.toml feat: remove webhooks, prepping for simple flow 2025-06-06 19:34:59 -07:00
deploy.sh feat: use async interupts for gpio monitoring 2025-06-08 00:13:58 -07:00
README.md feat: update readme to reflect current state of the project 2025-06-07 12:48:44 -07:00

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:
git clone https://github.com/yourusername/noisebell.git
cd noisebell
  1. Build the project:
cargo build --release

Deployment

The project includes a deployment script for Raspberry Pi. To deploy:

  1. Ensure you have cross-compilation tools installed:
cargo install cross
  1. 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 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)