We're well into 2022, and I hope you all are on track toward hitting your ambitious goals out there. I know I am. I'm keeping my momentum going by showing you all how to use the Notion API to log weather and sensor data coming in from one of my balena devices.
I'll walk through a bit of why I decided to build this. If you're here for the build steps, go ahead and get started
I was thinking about habits, and the quote, "What gets measured, gets improved," stood out to me.
It's possibly the reason I started tracking my daily habits a couple years ago. I log my routine in a Notion
habit-tracking page. It includes things such as 'what time do I wake up?' and 'when do I go to sleep'. It even tracks if I exercised and meditated during a day. I also have it tracking 'how many cups of coffee have I consumed?', my screen time, my overall mood, and summary of my day.
Last year, I noticed a strange pattern that any day where I had more than 3-4 cups of coffee led to a day of anxiousness. After initial tracking, it turned out to be quite true when I finally cut down on my daily caffeine consumption.
Similarly, the days I listen to music are generally the days where I feel motivated and happy. It totally blew away my mind how tightly and intuitively our mood is coupled with our daily habits.
This year, I decided to add more external parameters to my habit tracker with a motive to improve and have better control on my mood and overall lifestyle. I'm going to log values of some sensors such as Temperature, Humidity, and Air Quality to the same page and see if they could indicate any trends over the coming few months.
How this works
Nowadays, we have better control on our home's environment thanks to smart thermostats and air purifiers, and I want this data piping into my project. I also decided to add Weather data (fetched from a weather provider API) of my location on the same page, to be aware about the difference of my surroundings and my home environment.
Overall, I'm going to add following data to my Habit tracker page:
Data fetched from Weather API
- Outside Temperature (OpenWeatherMap)
- Air Quality (OpenWeatherMap)
Data fetched from Indoor Sensors
- Date (system)
- Indoor Temperature (SenseHAT)
- Indoor Humidity (SenseHAT)
Seeing how Notion released their beta API sometime back, and being a Notion power-user, I'm always looking forward to hacking it, and this project seems perfect to introduce Notion to the world of physical computing.
The overall idea is to use the Raspberry Pi sitting on my desk to fetch outside weather data, read values from indoor sensors, and log it to my Habit Tracker Page as a new row every day around 5:00 AM my time (configurable) and the rest of the things like - wake Up time, sleep time, exercise, meditation and caffeine intake, I can add manually on my own. All that said, let's get to the build.
- Single-board computer: Raspberry Pi 4 Model B ($95), NOTE: also works on a Raspberry Pi 3B+ (adding device testing and support is welcomed!)
- SD card: SanDisk Extreme Pro ($15)
- Power Supply
- Sensors: Raspberry Pi SenseHAT ($40), NOTE: I've used senseHAT for Plug and Play, but feel free to tweek and use discrete sensors.
- a free balenaCloud account (your first ten devices are free and fully-featured, perfect for small-scale projects like this one)
- balenaEtcher to flash the os image onto your SD card
- optional balenaCLI if you want to tinker, hack, and better understand the tooling from the command line
- the project GitHub repo if you'd like to fork the project and learn more
- OpenWeatherMap account and API Key - to fetch outdoor temperature and Air Quality, free sign-up tier is more than enough for this project
- Notion account and API Key - to log data in a notion page, you can get this after creating an integration, steps later in the blog.
- This Notion template that I'll explain how to use below.
Latitude and Longitude
We need to pass latitude (LAT) and longitude (LON) of our location to fetch current weather data. To get your location data, you can use something like whatsmylatlng
. Wherever you get your coordinates, copy and save the values up to two decimal places to use later.
Weather API Setup
Start by creating a free account on OpenWeatherMap
. Once down head to your account dropdown >
My API Keys
and copy this key somewhere safe for later use. (Note : This key gives access to your account, so don't share it with anyone on publish it online)
Notion API Setup :
To publish data on a Notion's page you need to these steps.
Duplicate my setup
Since we need to pass correct names with API calls corresponding to data types and values, I've created a Notion template for you which you can easily duplicate
in your workspace. Just click this link
on top right to add this as a page in your Notion workspace. You can add / remove / edit data fields but avoid any editing on the first 5 fields because that is where our application will log data into.
Create an Integration
In this page you need to create your integration, you can give it any name like
sensor2notion, make sure to check
Insert Content access which is needed for this project . For the sake of this project, you can keep the integration as
Internal Integration and not make it public.
Copy and save the
Internal Integration Token (API KEY) available on this page for future use and keep it secret (IMPORTANT:this key gives access to your account, so don't share it with anyone when you publish it online).
NOTE: This part can be avoided if you use my Public Integration (still under review), but ultimately, it's best to have as much control of your application as possible. So, please try to build this with your own secret keys if you want full control.
Connect your integration
Invite the integration you just created to the page where you want it to create, read, update, and delete data (CRUD operations).
Open the Notion
on web (prefered) or app, navigate to the page where you want to log the data from this project (the duplicated template in this case), and then click on
on top right.
After that, click on
Invite field and a pop up will appear where you will see your newly created integration from above step, click on that and invite it to that page.
Connect API Integration Key and Database ID
Now we need to obtain the database ID of this page, which you can find in the browser URL. It should be after your username:
For example, see:
In this example,
6erghjgskvuawjhdav6470480a9d4b30 is the database ID which you want to copy and save for later. With Latitude, Longitude, Weather API Key, Notion Integration Key and database ID, we are all set to deploy our fleet.
Alright, now it's time to deploy the software. I'll get into the how and various configurations after you get the software deployed. There are two options.
The advanced way
If you are already a balena user it might be better for you to use this way. You can clone the project
from GitHub and use the balena CLI
to push the application to your device. This is the best option if you want to tinker with the project and have full control.
The Getting Started Guide
covers this option. After you've created the application and pushed the code using the CLI, follow the steps below.
The easier way
for a free balenaCloud account. Your first ten devices are free and fully-featured! Then use the button below to create and deploy the application:
You can name the fleet whatever you'd like. Push
Create and deploy and you'll see a new application with that name show up in the dashboard.
Once your application has been created, you can set up and add a device within that application by clicking the
Add device button. When you add a device, you specify your device type, and if you are connecting to a wireless network you can set your WiFI SSID and passphrase here too.
Note: I have used a Raspberry Pi 4 in the image below but be sure to select the correct device type for the device you are using.
Notice that I selected the Development edition. This allows me to push to the device locally, speeding up my development significantly.
This process creates a customized image configured for your application and device type and includes your network settings if you specified them. Once the OS image has been downloaded, it’s time to flash your SD card. You can use balenaEtcher
Once the flashing process has completed, insert your SD card into the Raspberry Pi and connect the power supply.
First device boot and configurations
When the device boots for the first time, it connects to the balenaCloud dashboard, after which you’ll be able to see it listed as
Now we need to pass all the configuration values and API keys to our devices using balenaCloud
Device Variables tab.
|WEATHER_API_KEY||API key received after signing up on http://openweathermap.org/|
|TEMP_UNIT||default is |
metric but can
|LAT||Latitude of your location|
|LON||Longitude of your location|
|NOTION_API_KEY||API key received from notion|
|DATABASE_ID||Page ID of notion database|
|TIME||Time at which new notion row is created with data every day (default 05:00 AM UTC)|
Here's my habit tracking app adding a new line of data at my desired time configuration.
After updating the
device variables, the main service will restart and you now just have to wait for the
TIME at which you've set up the app to work on. You can change that to test it right away by setting the time to 5 minutes. I'm also planning to add a manual mode for this project. e.g. pressing a button to run the script and add data to Notion whenever we want (PRs welcome if you have a good idea about how to make this happen).
With this habit tracker up and running, my teammate, Marc
, also has the idea to integrate a coffee machine with this so it even logs how many cups we brew in a day. I look forward to adding this to the setup.
A Notion block might also make sense in the future when the Notion API is out of beta and more stable. I've made this project in Python to easily integrate with the SenseHAT. However, the official Notion API has a NodeJS package which you can also use to make life a bit easier.
Feel free to play around this project, make changes, and as always if you're facing any issues, feel free to reach me at the balenaForums
. I hope you enjoy making this project and I also hope it'll help you improve your lifestyle. See you next time!