Minimising disturbances to enable productive remote work - In today's remote work environment, unintentional interruptions can disrupt productivity and professional communication. This project aims to solves this challenge by creating an IoT-driven indicator that signals your availability and minimizes disturbances during critical work activities such as calls and meetings.
This is version 2.0, building on the foundations of the original version developed in 2020. The initial solution utilized an ESP32 microcontroller based development board to poll the Webex API and display availability using an LED strip. While effective, improvements were needed in performance, reliability, and design — which are now addressed in this upgraded version..
- Features and Development Roadmap
- Architecture Diagram
- Hardware Requirements
- Getting Started
- Contributing
- License
- Support
- Acknowledgments
This project is a work in progress, the following outlines the current features and planned improvements:
- Terraform Provisioning: Automates the setup and deployment of necessary cloud infrastructure.
- Webhook Integration: Allows seamless communication between the IoT device and external services.
- Custom PCB: Designed specifically to support the IoT-driven indicator system.
- Custom ESP32 Integration: Incorporate the newly developed custom ESP32 board into the system architecture.
Below is a high-level overview of how the architecture operates:
1. Webhook Trigger - A Webex webhook sends a request to an AWS API Gateway endpoint when a user’s availability status changes.
2. Cloud Processing - AWS API Gateway triggers an AWS Lambda function, which processes the Webex data and publishes the updated availability status to an AWS IoT Core MQTT topic.
3. Device Update - The device subscribes to the AWS IoT topic and receives status updates, updatings the LED indicator accordingly.
Note: A simplified polling-based version of the firmware is also available for setups that cannot use Webex webhooks. This version periodically queries the Webex API for status updates instead of relying on real-time push notifications.
To build this system, you’ll need the following components:
- Seeed XIAO ESP32C3 - PiHut
- LED Strip - PiHut
- Power Adapter - PiHut
- 3D Printed Enclosure (Requires 3D Printer)
Before getting started, ensure you have the following installed:
Follow these steps to set up the project for your self:
- Clone the repository:
git clone https://github.com/ImSeanConroy/disturbance-free-calling.git
cd disturbance-free-calling
- Zip AWS Lambda Function.
cd Backend && npm run zip && cd ..
- Configure Terraform Environment Variables.
export AWS_ACCESS_KEY_ID={Your AWS Access Key}
export AWS_SECRET_ACCESS_KEY={Your AWS Secret Access Key}
export AWS_REGION={Your AWS Region}
- Configure AWS Infrastructure using Terraform
terraform apply
- Configure Device Secrets: Configure
AWS_CERT_CA
,AWS_CERT_CRT
andAWS_CERT_PRIVATE
in the Firmware secrets file with the ouput from the following:
terraform output root_ca_url
terraform output device_certificate
terraform output device_private_key
-
Configure Device Credentials: Add Wifi SSID and Password to enable device to connenct with the interent.
-
Upload to Device Firmware: Within Audrino IDE and test connection.
-
Configure Webex Webhook: Ensure the Webex webhook is configured for to send requests to your AWS API Gateway.
Contributions are welcome. Please open an issue or submit a pull request for any enhancements or bug fixes.
This project is Distributed under the MIT License - see the LICENSE file for information.
If you are having problems, please let me know by raising a new issue.
This project was made possible thanks to the following resources:
- AWS re:Post - Publish a MQTT Message to IOT Core inside a Lambda function with Node and SDK 3
- AWS Samples - Several Arduino examples for AWS IoT projects using ESP32.