SMIB is the So Make It Bot. The architecture is a set of docker containers configured to work together, that can run on a pi4 or similar and provide slack bot interactivity with a maker space (or any space).
- A socket mode slack bot server that requires no port forwarding or firewall config to get going on your network.
- Web server with plugin architecture providing a REST API with swagger API documentation, so you can write your own plugins that can be called by REST API and executed by the slack bot - allows creating web pages or local devices (such as SMIBHID) that drive the slack bot without the need for leaving the local network.
- Stateful database storage for storing information like space state for coordination among multiple bots/endpoints.
- SMIBHID (SMIB Human Interface Device) - A Pi Pico based interface device that provides buttons, displays and any other human interface to the slack bot via the REST API. See the SMIBHID docs for more information.
Python 3.12.3
- Clone the repository to your target server host
- Install docker if not already present
- If installing on a Raspberry Pi (recommend a pi4), ensure you use a 64 bit OS and follow the Debian install instructions from Docker.
- Set the environment variables (minimum of the slack tokens) using either method below. See template.env for all possible environment variables.
docker-compose
File - Highest Precedence- Set the variables in your docker-compose file
.env
File- Create a file called
.env
alongside the docker-compose.yml file (seetemplate.env
in the repo)
- Create a file called
- Issue one of the following commands:
- Local Build:
docker compose up -d --build
- Branch Build (default master):
docker compose -f docker-compose-branch.yml up -d --build
- To specify the branch, do one of the following:
- Prefix the command with
SMIB_BRANCH=<branch>
- e.g
SMIB_BRANCH=master docker compose -f docker-compose-branch.yml up -d --build
- e.g
- Set environment variable in a
.env
file thats alongside thedocker-compose-branch.yml
file
- Prefix the command with
- To specify the branch, do one of the following:
- Local Build:
The host ports mapped for the slack server and webserver should be configured in the docker compose file, however it is also possible to override the ports in the server configs directly if you are not using docker.
Current files:
logging.json
(located at smib/logging.json in the repo).env
This is mapped to /app/config
in the container
Important
If you map /app/config
to a host directory, then you MUST add the 2 external files to this location.
You can make this location accessible by Mapping the internal directory to a volume or bind mount in the docker compose file.
Linux:
volumes:
- /etc/smib/:/app/config/
Windows:
volumes:
- C:/smib/config:/app/config/
Local Development:
- Set the
_EXTERNAL_CONFIG_LOCATION
environment variable to the directory containing the External Config Files
Map the internal /app/logs directory to a volume or bind mount in the docker compose to store the logs outside the containers
Linux:
volumes:
- /var/log/smib/slack/:/app/logs/
Windows:
volumes:
- C:/smib/slack/logs:/app/logs/
To set environment varaibles for the smib-db
and smib-db-ui
containers, you must do one of the following:
docker-compose
File - Highest Precedence- Set the variables in your docker-compose file
.env
File- Create a file called
.env
alongside the docker-compose.yml file. See links below for possible values
- Create a file called
SMIBHID is the So Make It Bot Human Interface Device and definitely not a mispronunciation of any insults from a popular 90s documentary detailing the activites of the Jupiter Mining Core.
This device runs on a Raspberry Pi Pico W and provides physical input and output to humans for the SMIB project; Buttons, LEDs, that sort of thing.
Further documentation can be found in the smibhid folder.
Currently, the old SMIB Commands do not work with the new SMIB.
The old SMIB worked using the Slack RTM API. This API has been replaced with the Events API.
Previously, SMIB Commands were created as the only way to interact with SMIB.
I think some form of backwards compatibility or similar functionality would be good. Work on a ShellPluginLoader
was started but parked as it was not the main focus of the new amped up SMIB MVP
An issue has been created to track the progress and gather ideas.
When bumping the poetry version (in pyproject.toml), the HID
class (part of SMIBHID) version
attribute also needs manually updating.
Important
This version needs to match the release when it goes into the master
branch.