{"id":1359,"date":"2025-07-18T15:39:00","date_gmt":"2025-07-18T15:39:00","guid":{"rendered":"https:\/\/www.bleuio.com\/blog\/?p=1359"},"modified":"2025-07-18T19:50:47","modified_gmt":"2025-07-18T19:50:47","slug":"building-a-ble-powered-air-quality-dashboard-with-grafana","status":"publish","type":"post","link":"https:\/\/www.bleuio.com\/blog\/building-a-ble-powered-air-quality-dashboard-with-grafana\/","title":{"rendered":"Building a BLE-Powered Air Quality Dashboard with Grafana"},"content":{"rendered":"\n<p>Indoor air quality is an important factor in workplace health, home comfort, and industrial safety. Monitoring CO2, particulate matter, temperature, humidity, and other environmental metrics can help prevent health issues, optimize HVAC usage, and maintain compliance with building standards. In this tutorial, we\u2019ll walk through building a complete air quality monitoring solution using the <strong>BleuIO USB dongle<\/strong> and the <strong>HibouAir<\/strong> BLE sensor. We&#8217;ll use <strong>Python<\/strong> to collect data, <strong>InfluxDB<\/strong> to store it, and <strong><a href=\"https:\/\/grafana.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Grafana<\/a><\/strong> to visualize it in real time.<\/p>\n\n\n\n<p>This project works entirely offline, runs on both <strong>macOS<\/strong> and <strong>Windows<\/strong>, and is suitable for personal, educational, or professional use. Whether you want to monitor a home office or manage sensors in an industrial setup, this system is simple to deploy and easy to scale.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What You Need<\/h2>\n\n\n\n<p>You will need one <strong><a href=\"https:\/\/www.bleuio.com\/bluetooth-low-energy-usb-ssd025.php\" target=\"_blank\" rel=\"noreferrer noopener\">BleuIO USB dongle<\/a><\/strong> and one <strong><a href=\"https:\/\/www.hibouair.com\/specifications-air-quality-monitor-co2-sensor.php\" target=\"_blank\" rel=\"noreferrer noopener\">HibouAir BLE sensor<\/a><\/strong>. These two devices form the core of the setup. The BleuIO dongle will connect via a serial port and act as a BLE Central, continuously scanning for BLE advertisement packets sent by the HibouAir sensor.<\/p>\n\n\n\n<p>For software, you&#8217;ll need <strong>Python 3<\/strong>, <strong>InfluxDB<\/strong>, and <strong>Grafana<\/strong>, all of which are available for both macOS and Windows. You&#8217;ll also install a few Python packages (<code>pyserial<\/code> and <code>influxdb<\/code>) to allow your script to read data over the serial port and write it to the database.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">About Grafana<\/h2>\n\n\n\n<p><strong><a href=\"https:\/\/grafana.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Grafana<\/a><\/strong> is an open-source analytics and visualization platform designed to display time-series data. It integrates seamlessly with databases like InfluxDB, allowing users to create interactive and customizable dashboards. In this project, Grafana serves as the front end for visualizing live air quality data coming from the HibouAir sensor. Its intuitive interface and support for powerful queries make it ideal for monitoring environmental conditions over time, setting alerts, and gaining actionable insights from BLE sensor data.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">macOS Installation<\/h3>\n\n\n\n<p>On macOS, it\u2019s easiest to install tools using <a class=\"\" href=\"https:\/\/brew.sh\/\">Homebrew<\/a>. You can install everything with the following commands:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>brew install influxdb@1<br>brew install grafana<br>brew install python<br><\/code><\/pre>\n\n\n\n<p>Start the services:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>brew services start influxdb@1<br>brew services start grafana<br><\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Windows Installation<\/h3>\n\n\n\n<p>For Windows, download installers from official sites:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.influxdata.com\/downloads\/\" target=\"_blank\" rel=\"noreferrer noopener\">InfluxDB 1.x<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/grafana.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Grafana<\/a><\/li>\n\n\n\n<li><a class=\"\" href=\"https:\/\/www.python.org\/downloads\/\">Python<\/a><\/li>\n<\/ul>\n\n\n\n<p>Make sure Python and pip are added to your system path. You can then install Python packages via:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>pip install pyserial influxdb<br><\/code><\/pre>\n\n\n\n<p>Also, identify your BleuIO COM port by opening <strong>Device Manager<\/strong> and checking <strong>Ports (COM &amp; LPT)<\/strong>. You&#8217;ll see something like <code>COM3<\/code>, which you\u2019ll use in the Python script.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Setting Up InfluxDB<\/h2>\n\n\n\n<p>After installing InfluxDB, you need to create a database that will store sensor readings. On macOS, open your terminal. On Windows, use Command Prompt or PowerShell.<\/p>\n\n\n\n<p>To enter the InfluxDB CLI:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>influx<br><\/code><\/pre>\n\n\n\n<p>Inside the CLI, run:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>&gt; CREATE DATABASE hibouair<br>&gt; SHOW DATABASES<br>&gt; EXIT<br><\/code><\/pre>\n\n\n\n<p>This creates a database called <code>hibouair<\/code>, which your Python script will use to log environmental data.<\/p>\n\n\n\n<p>You don\u2019t need to set up authentication for local testing. If you do secure your instance later, remember to update Grafana and the Python script with your username and password.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Configuring Grafana<\/h2>\n\n\n\n<p>Once Grafana is installed and running, open your browser and go to:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>http:\/\/localhost:3000<br><\/code><\/pre>\n\n\n\n<p>The default username and password are:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>Username: admin<br>Password: admin<br><\/code><\/pre>\n\n\n\n<p>After logging in, you&#8217;ll be asked to set a new password. Once you&#8217;re in the Grafana dashboard:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to <strong>Settings \u2192 Data Sources<\/strong><\/li>\n\n\n\n<li>Click <strong>Add data source<\/strong><\/li>\n\n\n\n<li>Choose <strong>InfluxDB<\/strong><\/li>\n\n\n\n<li>Set the following:\n<ul class=\"wp-block-list\">\n<li><strong>URL<\/strong>: <code>http:\/\/localhost:8086<\/code><\/li>\n\n\n\n<li><strong>Database<\/strong>: <code>hibouair<\/code><\/li>\n\n\n\n<li><strong>User<\/strong> and <strong>Password<\/strong>: leave empty unless you&#8217;ve enabled authentication<\/li>\n\n\n\n<li><strong>HTTP Method<\/strong>: GET or POST (default is fine)<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Click <strong>Save &amp; Test<\/strong><\/li>\n<\/ol>\n\n\n\n<p>You should see a success message confirming Grafana can read from InfluxDB.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Connecting BleuIO via Serial Port<\/h2>\n\n\n\n<p>Insert your BleuIO USB dongle.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>On <strong>macOS<\/strong>, find the port using: <code>ls \/dev\/cu.usbmodem*<\/code> Example: <code>\/dev\/cu.usbmodem4048FDEBA6D01<\/code><\/li>\n\n\n\n<li>On <strong>Windows<\/strong>, check <strong>Device Manager \u2192 Ports (COM &amp; LPT)<\/strong> and find something like <code>COM3<\/code> or <code>COM4<\/code>.<\/li>\n<\/ul>\n\n\n\n<p>This port will be used in your Python script to open a serial connection to the dongle.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Python Script<\/h2>\n\n\n\n<p>The Python script initializes the BleuIO dongle in Central mode, sends a scan command (<code>AT+FINDSCANDATA<\/code>), and reads the BLE advertisement packets from the HibouAir sensor. The data, which arrives in hexadecimal format, is decoded to extract values like temperature, humidity, CO2, VOC, PM1, PM2.5, PM10, light, noise, and pressure. The script then writes this data to InfluxDB with a timestamp.<\/p>\n\n\n\n<p>To avoid storing duplicate values, the script only logs the first valid reading per scan cycle. It waits for a configurable period (e.g., 20 seconds) before scanning again.<\/p>\n\n\n\n<p><em>You can view and copy the complete Python script from the GitHub repository linked below.<\/em><\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/smart-sensor-devices-ab\/bleuIO_hibouair_influxdb\" target=\"_blank\" rel=\"noreferrer noopener\"> <strong>GitHub: bleuio-hibouair-influx-grafana<\/strong><\/a><\/p>\n\n\n\n<p>To run the script:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>python3 bleuio_to_influx.py<br><\/code><\/pre>\n\n\n\n<p>Make sure to replace the serial port path and board ID in the script with your actual values.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Creating a Dashboard in Grafana<\/h2>\n\n\n\n<p>With data flowing into InfluxDB, it\u2019s time to visualize it in Grafana. Start by creating a new dashboard:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>From the left menu, go to <strong>Dashboards \u2192 New \u2192 Add new panel<\/strong><\/li>\n\n\n\n<li>In the query editor, select your <strong>InfluxDB<\/strong> data source<\/li>\n\n\n\n<li>Enter the following query to display CO2 levels: <code>SELECT last(\"co2\") FROM \"air_quality\" WHERE $timeFilter GROUP BY time($__interval)<\/code><\/li>\n<\/ol>\n\n\n\n<p>This query fetches the latest CO2 readings from the <code>air_quality<\/code> measurement. You can change <code>\"co2\"<\/code> to <code>\"temp\"<\/code>, <code>\"hum\"<\/code>, <code>\"voc\"<\/code>, <code>\"pm25\"<\/code> or any other field depending on what you want to display.<\/p>\n\n\n\n<p>Grafana will automatically plot the data on a line chart. You can switch to a gauge, bar, or other visualizations from the panel settings. You can also set thresholds, value ranges, and colors to improve readability.<\/p>\n\n\n\n<p>Repeat this process to add more panels for temperature, humidity, VOCs, PM2.5, PM10, and other values.<\/p>\n\n\n\n<p>Once your dashboard is complete, click <strong>Apply<\/strong>, then <strong>Save<\/strong> the dashboard to reuse it later.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Output<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"485\" src=\"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2025\/07\/image-4-1024x485.png\" alt=\"\" class=\"wp-image-1360\" srcset=\"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2025\/07\/image-4-1024x485.png 1024w, https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2025\/07\/image-4-300x142.png 300w, https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2025\/07\/image-4-768x364.png 768w, https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2025\/07\/image-4-1536x727.png 1536w, https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2025\/07\/image-4-2048x970.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">How It Works<\/h2>\n\n\n\n<p>This system leverages BLE advertisement broadcasting from HibouAir and AT command-based serial communication with the BleuIO dongle. The dongle scans for a specific board ID using <code>AT+FINDSCANDATA=&lt;board_id&gt;=3<\/code>, and the Python script reads and decodes each advertisement received. The decoded data is immediately sent to InfluxDB using the official client library.<\/p>\n\n\n\n<p>Grafana queries this time-series data and displays it in real time. Since all components are local, there is no dependency on external servers or cloud APIs. The system is also modular, so you can easily scale it to support multiple sensors, extend the decoder for other BLE formats, or forward data to cloud-based platforms in the future.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Use Cases<\/h2>\n\n\n\n<p>This setup is ideal for a range of applications. In an office environment, monitoring CO2 and humidity can help optimize ventilation and improve productivity. In factories or workshops, tracking particulate matter and VOCs ensures air quality compliance and safety. For researchers and students, this project provides a hands-on, local, and open-source method to study environmental changes. Even in residential settings, it can help detect poor air circulation or pollutant spikes. The simplicity of this solution makes it accessible to both developers and non-developers alike.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Extending the Project<\/h2>\n\n\n\n<p>There are several ways to expand this project:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Add support for additional BLE data types, such as HibouAir&#8217;s <code>type 08<\/code> advertisements for NO\u2082<\/li>\n\n\n\n<li>Set up Grafana alerts to notify you when CO2 exceeds 800 ppm or humidity drops below 30%<\/li>\n\n\n\n<li>Export historical data from InfluxDB to CSV for offline analysis<\/li>\n\n\n\n<li>Run the Python script as a background service on system boot<\/li>\n\n\n\n<li>Connect multiple sensors to cover multiple rooms or areas<\/li>\n<\/ul>\n\n\n\n<p>With minimal changes, you can also run this setup on a Raspberry Pi or Linux server.<\/p>\n\n\n\n<p>With just a BleuIO dongle, a HibouAir sensor, and a few open-source tools, you\u2019ve built a fully functional air quality monitoring solution. The system is flexible, lightweight, and runs entirely offline. It provides real-time insights into indoor environmental conditions and can be adapted for a variety of applications.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Indoor air quality is an important factor in workplace health, home comfort, and industrial safety. Monitoring CO2, particulate matter, temperature, humidity, and other environmental metrics can help prevent health issues, optimize HVAC usage, and maintain compliance with building standards. In this tutorial, we\u2019ll walk through building a complete air quality monitoring solution using the BleuIO [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1368,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,2],"tags":[],"class_list":["post-1359","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-bleuio","category-bleuio-tutorial"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Building a BLE-Powered Air Quality Dashboard with Grafana - BleuIO - Create Bluetooth Low Energy application<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.bleuio.com\/blog\/building-a-ble-powered-air-quality-dashboard-with-grafana\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Building a BLE-Powered Air Quality Dashboard with Grafana - BleuIO - Create Bluetooth Low Energy application\" \/>\n<meta property=\"og:description\" content=\"Indoor air quality is an important factor in workplace health, home comfort, and industrial safety. Monitoring CO2, particulate matter, temperature, humidity, and other environmental metrics can help prevent health issues, optimize HVAC usage, and maintain compliance with building standards. In this tutorial, we\u2019ll walk through building a complete air quality monitoring solution using the BleuIO [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.bleuio.com\/blog\/building-a-ble-powered-air-quality-dashboard-with-grafana\/\" \/>\n<meta property=\"og:site_name\" content=\"BleuIO - Create Bluetooth Low Energy application\" \/>\n<meta property=\"article:published_time\" content=\"2025-07-18T15:39:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-07-18T19:50:47+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2025\/07\/grafana-ble-air-quality.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"750\" \/>\n\t<meta property=\"og:image:height\" content=\"450\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"BleuIO\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/building-a-ble-powered-air-quality-dashboard-with-grafana\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/building-a-ble-powered-air-quality-dashboard-with-grafana\\\/\"},\"author\":{\"name\":\"BleuIO\",\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/#\\\/schema\\\/person\\\/89bc581382d5964043f96efc54b75b80\"},\"headline\":\"Building a BLE-Powered Air Quality Dashboard with Grafana\",\"datePublished\":\"2025-07-18T15:39:00+00:00\",\"dateModified\":\"2025-07-18T19:50:47+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/building-a-ble-powered-air-quality-dashboard-with-grafana\\\/\"},\"wordCount\":1215,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/building-a-ble-powered-air-quality-dashboard-with-grafana\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/grafana-ble-air-quality.jpg\",\"articleSection\":[\"BleuIO\",\"BleuIO tutorial\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/building-a-ble-powered-air-quality-dashboard-with-grafana\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/building-a-ble-powered-air-quality-dashboard-with-grafana\\\/\",\"url\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/building-a-ble-powered-air-quality-dashboard-with-grafana\\\/\",\"name\":\"Building a BLE-Powered Air Quality Dashboard with Grafana - BleuIO - Create Bluetooth Low Energy application\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/building-a-ble-powered-air-quality-dashboard-with-grafana\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/building-a-ble-powered-air-quality-dashboard-with-grafana\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/grafana-ble-air-quality.jpg\",\"datePublished\":\"2025-07-18T15:39:00+00:00\",\"dateModified\":\"2025-07-18T19:50:47+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/#\\\/schema\\\/person\\\/89bc581382d5964043f96efc54b75b80\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/building-a-ble-powered-air-quality-dashboard-with-grafana\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/building-a-ble-powered-air-quality-dashboard-with-grafana\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/building-a-ble-powered-air-quality-dashboard-with-grafana\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/grafana-ble-air-quality.jpg\",\"contentUrl\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/grafana-ble-air-quality.jpg\",\"width\":750,\"height\":450,\"caption\":\"grafana ble air quality\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/building-a-ble-powered-air-quality-dashboard-with-grafana\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Building a BLE-Powered Air Quality Dashboard with Grafana\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/\",\"name\":\"BleuIO - Create Bluetooth Low Energy application\",\"description\":\"Learn Bluetooth Low Energy programming and build Bluetooth Low Energy Application\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/#\\\/schema\\\/person\\\/89bc581382d5964043f96efc54b75b80\",\"name\":\"BleuIO\",\"sameAs\":[\"https:\\\/\\\/www.bleuio.com\\\/blog\"],\"url\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/author\\\/biadmin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Building a BLE-Powered Air Quality Dashboard with Grafana - BleuIO - Create Bluetooth Low Energy application","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.bleuio.com\/blog\/building-a-ble-powered-air-quality-dashboard-with-grafana\/","og_locale":"en_US","og_type":"article","og_title":"Building a BLE-Powered Air Quality Dashboard with Grafana - BleuIO - Create Bluetooth Low Energy application","og_description":"Indoor air quality is an important factor in workplace health, home comfort, and industrial safety. Monitoring CO2, particulate matter, temperature, humidity, and other environmental metrics can help prevent health issues, optimize HVAC usage, and maintain compliance with building standards. In this tutorial, we\u2019ll walk through building a complete air quality monitoring solution using the BleuIO [&hellip;]","og_url":"https:\/\/www.bleuio.com\/blog\/building-a-ble-powered-air-quality-dashboard-with-grafana\/","og_site_name":"BleuIO - Create Bluetooth Low Energy application","article_published_time":"2025-07-18T15:39:00+00:00","article_modified_time":"2025-07-18T19:50:47+00:00","og_image":[{"width":750,"height":450,"url":"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2025\/07\/grafana-ble-air-quality.jpg","type":"image\/jpeg"}],"author":"BleuIO","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.bleuio.com\/blog\/building-a-ble-powered-air-quality-dashboard-with-grafana\/#article","isPartOf":{"@id":"https:\/\/www.bleuio.com\/blog\/building-a-ble-powered-air-quality-dashboard-with-grafana\/"},"author":{"name":"BleuIO","@id":"https:\/\/www.bleuio.com\/blog\/#\/schema\/person\/89bc581382d5964043f96efc54b75b80"},"headline":"Building a BLE-Powered Air Quality Dashboard with Grafana","datePublished":"2025-07-18T15:39:00+00:00","dateModified":"2025-07-18T19:50:47+00:00","mainEntityOfPage":{"@id":"https:\/\/www.bleuio.com\/blog\/building-a-ble-powered-air-quality-dashboard-with-grafana\/"},"wordCount":1215,"commentCount":0,"image":{"@id":"https:\/\/www.bleuio.com\/blog\/building-a-ble-powered-air-quality-dashboard-with-grafana\/#primaryimage"},"thumbnailUrl":"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2025\/07\/grafana-ble-air-quality.jpg","articleSection":["BleuIO","BleuIO tutorial"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.bleuio.com\/blog\/building-a-ble-powered-air-quality-dashboard-with-grafana\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.bleuio.com\/blog\/building-a-ble-powered-air-quality-dashboard-with-grafana\/","url":"https:\/\/www.bleuio.com\/blog\/building-a-ble-powered-air-quality-dashboard-with-grafana\/","name":"Building a BLE-Powered Air Quality Dashboard with Grafana - BleuIO - Create Bluetooth Low Energy application","isPartOf":{"@id":"https:\/\/www.bleuio.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.bleuio.com\/blog\/building-a-ble-powered-air-quality-dashboard-with-grafana\/#primaryimage"},"image":{"@id":"https:\/\/www.bleuio.com\/blog\/building-a-ble-powered-air-quality-dashboard-with-grafana\/#primaryimage"},"thumbnailUrl":"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2025\/07\/grafana-ble-air-quality.jpg","datePublished":"2025-07-18T15:39:00+00:00","dateModified":"2025-07-18T19:50:47+00:00","author":{"@id":"https:\/\/www.bleuio.com\/blog\/#\/schema\/person\/89bc581382d5964043f96efc54b75b80"},"breadcrumb":{"@id":"https:\/\/www.bleuio.com\/blog\/building-a-ble-powered-air-quality-dashboard-with-grafana\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.bleuio.com\/blog\/building-a-ble-powered-air-quality-dashboard-with-grafana\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.bleuio.com\/blog\/building-a-ble-powered-air-quality-dashboard-with-grafana\/#primaryimage","url":"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2025\/07\/grafana-ble-air-quality.jpg","contentUrl":"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2025\/07\/grafana-ble-air-quality.jpg","width":750,"height":450,"caption":"grafana ble air quality"},{"@type":"BreadcrumbList","@id":"https:\/\/www.bleuio.com\/blog\/building-a-ble-powered-air-quality-dashboard-with-grafana\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.bleuio.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Building a BLE-Powered Air Quality Dashboard with Grafana"}]},{"@type":"WebSite","@id":"https:\/\/www.bleuio.com\/blog\/#website","url":"https:\/\/www.bleuio.com\/blog\/","name":"BleuIO - Create Bluetooth Low Energy application","description":"Learn Bluetooth Low Energy programming and build Bluetooth Low Energy Application","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.bleuio.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.bleuio.com\/blog\/#\/schema\/person\/89bc581382d5964043f96efc54b75b80","name":"BleuIO","sameAs":["https:\/\/www.bleuio.com\/blog"],"url":"https:\/\/www.bleuio.com\/blog\/author\/biadmin\/"}]}},"_links":{"self":[{"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/posts\/1359","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/comments?post=1359"}],"version-history":[{"count":6,"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/posts\/1359\/revisions"}],"predecessor-version":[{"id":1367,"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/posts\/1359\/revisions\/1367"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/media\/1368"}],"wp:attachment":[{"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/media?parent=1359"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/categories?post=1359"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/tags?post=1359"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}