How Monday and Arduino light my desk
Monday is the best thing since sliced bread. No, not the day of the week, although there is nothing inherently wrong with Monday as a day. I am writing about Monday.com, the productivity tool. This article, however, is not meant to praise Monday as a tool but to show an interesting way to push notifications from Monday.com to your immediate attention.
A friend brought over an Arduino Uno and asked me how to make it do something whenever a new item is added to a Monday board.
This is a special challenge due to several constraints.
- Arduino Uno lacks network capabilities. My friend does not have an ESP8266 or an ESP32 module available, so I had to connect the Arduino via an external device.
- Due to security reasons, I did not want to expose the controlling device as a server to the internet.
After a short consideration between using MQTT and HTTP, I decided to use HTTP and instead of polling the Monday board for changes, use Monday webhooks to push events into the AWS Simple Queue Service as a storage place, and use SQS with AWS Lambda as a proxy between the desktop device and Monday. The reason is that at some point in the future I would like to actually use an ESP8266, and the Monday API is based on GraphQL which is a bit of an overkill to use on a device with a 30K memory. I ended up with a system like the one described in this schema:
The nice thing about it is that even with moderate usage, it all falls within the AWS free tier limits.
At the end, we settled for lighting a LED on the board instead of buzzing.
The entire project can be found on Github.
Installation overview:
- Have a Monday account.
- Have an AWS account
- Have an Arduino, with a connected LED.
- Open your Arduino IDE, and install on Arduino the Firmata sketch found under File/Examples/Firmata/StandardFirmata
- The AWS installation is packaged in a CloudFormation template. Either download it from the Github repository and upload to Cloudformation from your PC, or click the following link to install it in the AWS Frankfurt region: https://eu-central-1.console.aws.amazon.com/cloudformation/home?region=eu-central-1#/stacks/quickcreate?templateURL=https://public-arduino-shalom.s3.eu-central-1.amazonaws.com/cloudformation-monday-to-arduino.yaml&stackName=monday-to-arduino
- The Cloudformation template installs everything required into your account, and after it is successfully executed, it will have an Outputs section that you need to look at:
- The URLtoWrite value will be used in your Monday Webhook.
- Download the Github repository to your PC.
- Copy the
config-example.py
file intoconfig.py
- Open config.py with a text editor and modify it with the values from the Cloudformation output:
Authorization = "use the APIKEY value from the Cloudformation output"
URL = "use the URLtoRead value from the Cloudformation output, without the query string"
arduino_digital_pin = 4 # whichever pin you use
- Copy the Cloudformation value of
URLtoWrite
, you will use it in the next steps. - Open the Monday board that you want to integrate, and click Board Power ups/Integrations
- In the search box, type “webhooks” and select the webhooks integration. Select the event to trigger the webhook; in my case, I would like the webhook to fire when an item is created.
- This is where you paste the webhook URL from the value of
URLtoWrite
, the one with /write at the end. Click Connect for the Lambda to verify the webhook. Do not forget to click “Add To Board” on the next screen. - The last thing to do is to run the check_events_activate_arduino.py script on a 3 minute schedule. To do that on Windows, see the
scheduled_check_events_activate_arduino.bat
file. Adjust the directory to point at the proper location, and add the file to the system scheduler.