Merge branch 'TheCommsChannel:main' into main

This commit is contained in:
thealhu 2024-06-28 15:02:56 +02:00 committed by GitHub
commit 9ae90ae464
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 141 additions and 70 deletions

4
.gitignore vendored Normal file
View file

@ -0,0 +1,4 @@
__pycache__/
bulletins.db
venv/

185
README.md
View file

@ -4,13 +4,14 @@
This is the TC²-BBS system integrated with Meshtastic devices. The system allows for message handling, bulletin boards, mail systems, and a channel directory. This is the TC²-BBS system integrated with Meshtastic devices. The system allows for message handling, bulletin boards, mail systems, and a channel directory.
## Setup ### Docker
### Docker installation If you're a Docker user, TC²-BBS Meshtastic is available on Docker Hub!
TC²-BBS Meshtastic is available on Docker Hub
[![Docker HUB](https://icon-icons.com/downloadimage.php?id=151885&root=2530/PNG/128/&file=docker_button_icon_151885.png)](https://hub.docker.com/r/thealhu/tc2-bbs-mesh) [![Docker HUB](https://icon-icons.com/downloadimage.php?id=151885&root=2530/PNG/128/&file=docker_button_icon_151885.png)](https://hub.docker.com/r/thealhu/tc2-bbs-mesh)
## Setup
### Requirements ### Requirements
- Python 3.x - Python 3.x
@ -20,81 +21,132 @@ TC²-BBS Meshtastic is available on Docker Hub
### Installation ### Installation
1. Clone the repository: 1. Clone the repository:
```sh
git clone https://github.com/TheCommsChannel/TC2-BBS-mesh.git
cd TC2-BBS-mesh
```
2. Set up a Python virtual environment:
```sh
python -m venv venv
```
3. Activate the virtual environment:
- On Windows:
```sh
venv\Scripts\activate
```
- On macOS and Linux:
```sh
source venv/bin/activate
```
4. Install the required packages:
```sh
pip install -r requirements.txt
```
5. Set up the configuration in `config.ini`:
**[interface]** ```sh
cd ~
If using `type = serial` and you have multiple devices connected, you will need to uncomment the `port =` line and enter in the port of your device. git clone https://github.com/TheCommsChannel/TC2-BBS-mesh.git
cd TC2-BBS-mesh
Linux Example: ```
`port = /dev/ttyUSB0`
Windows Example:
`port = COM3`
If using type = tcp you will need to uncomment the hostname = 192.168.x.x line and put in the IP address of your Meshtastic device
**[sync]**
Enter in a list of other BBS nodes you would like to sync messages and bulletins with. Separate each by comma and no spaces as shown in the example below.
You can find the nodeID in the menu under `Radio Configuration > User` for each node, or use this script for getting nodedb data from a device:
[Meshtastic-Python-Examples/print-nodedb.py at main · pdxlocations/Meshtastic-Python-Examples (github.com)](https://github.com/pdxlocations/Meshtastic-Python-Examples/blob/main/print-nodedb.py)
Example Config: 2. Set up a Python virtual environment:
```ini
[interface] ```sh
type = serial python -m venv venv
# port = /dev/ttyUSB0 ```
# hostname = 192.168.x.x
[sync] 3. Activate the virtual environment:
bbs_nodes = !f53f4abc,!f3abc123
``` - On Windows:
```sh
venv\Scripts\activate
```
- On macOS and Linux:
```sh
source venv/bin/activate
```
4. Install the required packages:
```sh
pip install -r requirements.txt
```
5. Set up the configuration in `config.ini`:
**[interface]**
If using `type = serial` and you have multiple devices connected, you will need to uncomment the `port =` line and enter the port of your device.
Linux Example:
`port = /dev/ttyUSB0`
Windows Example:
`port = COM3`
If using type = tcp you will need to uncomment the hostname = 192.168.x.x line and put in the IP address of your Meshtastic device.
**[sync]**
Enter a list of other BBS nodes you would like to sync messages and bulletins with. Separate each by comma and no spaces as shown in the example below.
You can find the nodeID in the menu under `Radio Configuration > User` for each node, or use this script for getting nodedb data from a device:
[Meshtastic-Python-Examples/print-nodedb.py at main · pdxlocations/Meshtastic-Python-Examples (github.com)](https://github.com/pdxlocations/Meshtastic-Python-Examples/blob/main/print-nodedb.py)
Example Config:
```ini
[interface]
type = serial
# port = /dev/ttyUSB0
# hostname = 192.168.x.x
[sync]
bbs_nodes = !f53f4abc,!f3abc123
```
### Running the Server ### Running the Server
Run the server with: Run the server with:
```sh ```sh
python server.py python server.py```
``` ```
Be sure you've followed the Python virtual environment steps above and activated it before running. Be sure you've followed the Python virtual environment steps above and activated it before running.
## Automatically run at boot
If you would like to have the script automatically run at boot, follow the steps below:
1. **Edit the service file**
First, edit the mesh-bbs.service file using your preferred text editor. The 3 following lines in that file are what we need to edit:
```sh
User=pi
WorkingDirectory=/home/pi/TC2-BBS-mesh
ExecStart=/home/pi/TC2-BBS-mesh/venv/bin/python3 /home/pi/TC2-BBS-mesh/server.py
```
The file is currently setup for a user named 'pi' and assumes that the TC2-BBS-mesh directory is located in the home directory (which it should be if the earlier directions were followed)
We just need to replace the 4 parts that have "pi" in those 3 lines with your username.
2. **Configuring systemd**
From the TC2-BBS-mesh directory, run the following commands:
```sh
sudo cp mesh-bbs.service /etc/systemd/system/
```
```sh
sudo systemctl enable mesh-bbs.service
```
```sh
sudo systemctl start mesh-bbs.service
```
The service should be started now and should start anytime your device is powered on or rebooted. You can check the status ofk the service by running the following command:
```sh
sudo systemctl status mesh-bbs.service
```
If you need to stop the service, you can run the following:
```sh
sudo systemctl stop mesh-bbs.service
```
If you make changes to the watchlist.txt file, you will need to restart the service with the following command:
```sh
sudo systemctl restart mesh-bbs.service
```
## Features ## Features
- **Mail System**: Send and receive mail messages. - **Mail System**: Send and receive mail messages.
@ -106,14 +158,13 @@ Be sure you've followed the Python virtual environment steps above and activated
## Usage ## Usage
You interact with the BBS by sending direct messages to the node that's connected to the system running the Python script. Sending any message to it will get a response with the main menu. You interact with the BBS by sending direct messages to the node that's connected to the system running the Python script. Sending any message to it will get a response with the main menu.
Make selections by sending messages based on the letter or number in brackets - Send M for [M]ail Menu for example. Make selections by sending messages based on the letter or number in brackets - Send M for [M]ail Menu for example.
A video of it in use is available on our YouTube channel: A video of it in use is available on our YouTube channel:
[![TC²-BBS-Mesh](https://img.youtube.com/vi/d6LhY4HoimU/0.jpg)](https://www.youtube.com/watch?v=d6LhY4HoimU) [![TC²-BBS-Mesh](https://img.youtube.com/vi/d6LhY4HoimU/0.jpg)](https://www.youtube.com/watch?v=d6LhY4HoimU)
## Thanks ## Thanks
Big thanks to [Meshtastic](https://github.com/meshtastic) and [pdxlocations](https://github.com/pdxlocations) for the great Python examples: Big thanks to [Meshtastic](https://github.com/meshtastic) and [pdxlocations](https://github.com/pdxlocations) for the great Python examples:

View file

@ -66,7 +66,7 @@ def get_channels():
def add_bulletin(board, sender_short_name, subject, content, bbs_nodes, interface, unique_id=None): def add_bulletin(board, sender_short_name, subject, content, bbs_nodes, interface, unique_id=None):
conn = get_db_connection() conn = get_db_connection()
c = conn.cursor() c = conn.cursor()
date = datetime.now().strftime('%m/%d/%Y %H:%M') date = datetime.now().strftime('%Y-%m-%d %H:%M')
if not unique_id: if not unique_id:
unique_id = str(uuid.uuid4()) unique_id = str(uuid.uuid4())
c.execute( c.execute(
@ -107,7 +107,7 @@ def delete_bulletin(bulletin_id, bbs_nodes, interface):
def add_mail(sender_id, sender_short_name, recipient_id, subject, content, bbs_nodes, interface, unique_id=None): def add_mail(sender_id, sender_short_name, recipient_id, subject, content, bbs_nodes, interface, unique_id=None):
conn = get_db_connection() conn = get_db_connection()
c = conn.cursor() c = conn.cursor()
date = datetime.now().strftime('%m/%d/%Y %H:%M') date = datetime.now().strftime('%Y-%m-%d %H:%M')
if not unique_id: if not unique_id:
unique_id = str(uuid.uuid4()) unique_id = str(uuid.uuid4())
c.execute("INSERT INTO mail (sender, sender_short_name, recipient, date, subject, content, unique_id) VALUES (?, ?, ?, ?, ?, ?, ?)", c.execute("INSERT INTO mail (sender, sender_short_name, recipient, date, subject, content, unique_id) VALUES (?, ?, ?, ?, ?, ?, ?)",

14
mesh-bbs.service Normal file
View file

@ -0,0 +1,14 @@
[Unit]
Description=TC²-BBS Meshtastic Version
After=multi-user.target
[Service]
Type=simple
Restart=always
RestartSec=20
User=pi
WorkingDirectory=/home/pi/TC2-BBS-mesh
ExecStart=/home/pi/TC2-BBS-mesh/venv/bin/python3 /home/pi/TC2-BBS-mesh/server.py
[Install]
WantedBy=multi-user.target

View file

@ -18,6 +18,7 @@ from config_init import initialize_config, get_interface
from db_operations import initialize_database from db_operations import initialize_database
from message_processing import on_receive from message_processing import on_receive
from pubsub import pub from pubsub import pub
import time
# Configure logging # Configure logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
@ -51,7 +52,8 @@ def main():
try: try:
while True: while True:
pass time.sleep(1)
except KeyboardInterrupt: except KeyboardInterrupt:
logging.info("Shutting down the server...") logging.info("Shutting down the server...")
interface.close() interface.close()