{"id":1817,"date":"2026-11-04T17:02:28","date_gmt":"2026-11-04T17:02:28","guid":{"rendered":"https:\/\/www.bleuio.com\/blog\/?p=1817"},"modified":"2026-11-04T17:04:32","modified_gmt":"2026-11-04T17:04:32","slug":"build-a-ble-signal-strength-analyzer-with-live-charts-using-bleuio-python","status":"publish","type":"post","link":"https:\/\/www.bleuio.com\/blog\/build-a-ble-signal-strength-analyzer-with-live-charts-using-bleuio-python\/","title":{"rendered":"Build a BLE Signal Strength Analyzer with Live Charts Using BleuIO, Python and Plotly"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">RSSI analysis becomes much easier when you can see the signal changing instead of watching a stream of numbers in a terminal. A chart makes it possible to notice movement, sudden drops, periods of instability, and differences between devices almost immediately.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In this project, we use a <a href=\"https:\/\/www.bleuio.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">BleuIO USB dongle<\/a> with Python and Plotly Dash to build a live BLE signal strength analyzer. The application scans nearby BLE advertisers, lets us select a device, and follows its RSSI over time. It also provides a quick overview of every device currently being discovered.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is intended as a starting point rather than a complete positioning or ranging system. If you already work with RSSI, the dashboard gives you a practical base for collecting observations, testing an environment, and extending the analysis for your own use case.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What the analyzer provides<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The dashboard is organized around one selected BLE device. Its current RSSI, smoothed RSSI, recent trend, and signal stability appear directly above a live time-series chart. The raw readings remain visible, so the processed line never hides what the dongle actually received.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Below the main analysis, the <strong>Discovered Now<\/strong> section compares the latest RSSI values from nearby devices. An RSSI distribution chart shows how the selected device\u2019s readings are spread across the recent observation window.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This combination is useful when you want to answer practical questions such as whether a signal is consistently weak, whether it is changing direction, or whether an apparently stable device is producing occasional large variations.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Hardware and software<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">You will need:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A <a href=\"https:\/\/www.bleuio.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">BleuIO USB dongle<\/a><\/li>\n\n\n\n<li>Python 3.10 or newer<\/li>\n\n\n\n<li>The <a href=\"https:\/\/github.com\/smart-sensor-devices-ab\/bleuio-rssi-analyzer\" target=\"_blank\" rel=\"noreferrer noopener\">project source code on GitHub<\/a><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The application uses <a href=\"https:\/\/pyserial.readthedocs.io\/\" target=\"_blank\" rel=\"noreferrer noopener\">pySerial<\/a> to communicate with BleuIO and <a href=\"https:\/\/dash.plotly.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Plotly Dash<\/a> for the local dashboard. BleuIO handles the BLE radio operation, so the Python application only needs to work with its serial AT-command interface.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Download and install the project<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Clone the repository and move into the project directory:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\ngit  clone  https:\/\/github.com\/smart-sensor-devices-ab\/bleuio-rssi-analyzer.git\n\ncd  bleuio-rssi-analyzer\n\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">On macOS or Linux, create a virtual environment and install the dependencies:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\npython3  -m  venv  .venv\n\nsource  .venv\/bin\/activate\n\npython  -m  pip  install  -r  requirements.txt\n\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">On Windows PowerShell, use:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\npy -m venv .venv\n\n.venv\\Scripts\\Activate.ps1\n\npython -m pip install -r requirements.txt\n\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Connect the BleuIO dongle before starting the application. BleuIO briefly exposes its bootloader after power-up, so allow approximately 15 seconds for the normal application serial port to appear.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Start the analyzer:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\npython  app.py\n\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Then open <a href=\"http:\/\/127.0.0.1:8050\/\">http:\/\/127.0.0.1:8050<\/a> in a browser.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Start scanning<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The serial-port menu only shows ports identified as BleuIO devices. On macOS, this normally looks like <code>\/dev\/cu.usbmodem...<\/code>. On Windows, the dongle may appear as a generic <code>USB Serial Device (COMx)<\/code>, so the application also recognizes BleuIO by its USB vendor and product identifiers.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Select the dongle and click <strong>Start scan<\/strong>. The application places BleuIO in central role and repeatedly performs a short timed scan using <code>AT+GAPSCAN=1<\/code>. Repeating the timed scan gives the dashboard a continuing series of fresh RSSI observations instead of a single discovery result. The command behavior is documented in the <a href=\"https:\/\/www.bleuio.com\/getting_started\/docs\/commands\/\">BleuIO AT command reference<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As advertisements are received, nearby addresses appear in the BLE device menu. Select the device you want to examine, and the analysis area updates immediately.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Follow a selected signal<\/h2>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"alignright size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"542\" height=\"264\" src=\"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2026\/11\/image.png\" alt=\"\" class=\"wp-image-1818\" style=\"width:273px;height:auto\" srcset=\"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2026\/11\/image.png 542w, https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2026\/11\/image-300x146.png 300w\" sizes=\"auto, (max-width: 542px) 100vw, 542px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">The <strong>Current RSSI<\/strong> card displays the most recent reading. This value is useful for immediate feedback, but normal radio variation can make it jump even when neither device has deliberately moved.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<div style=\"height:2px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"alignright size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"534\" height=\"258\" src=\"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2026\/11\/image-1.png\" alt=\"\" class=\"wp-image-1819\" style=\"width:270px;height:auto\" srcset=\"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2026\/11\/image-1.png 534w, https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2026\/11\/image-1-300x145.png 300w\" sizes=\"auto, (max-width: 534px) 100vw, 534px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">The <strong>Smoothed RSSI<\/strong> view makes the overall movement easier to follow. The project first applies a short median filter to reduce isolated spikes, followed by an exponentially weighted moving average that gives more importance to recent observations. The original samples remain visible as dots, while the smoothed result appears as the blue line.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This processing is deliberately lightweight. It is enough to make the live chart readable, but it is also easy to replace if your experiment needs a Kalman filter, a different smoothing window, or no filtering at all.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Read the trend and stability indicators<\/h2>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"alignright size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"534\" height=\"272\" src=\"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2026\/11\/image-2.png\" alt=\"\" class=\"wp-image-1820\" style=\"aspect-ratio:1.963236155016977;width:263px;height:auto\" srcset=\"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2026\/11\/image-2.png 534w, https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2026\/11\/image-2-300x153.png 300w\" sizes=\"auto, (max-width: 534px) 100vw, 534px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">The <strong>Recent Trend<\/strong> card compares the latest smoothed value with the recent signal history. A change of at least 4 dB is described as <strong>Getting stronger<\/strong> or <strong>Getting weaker<\/strong>. Smaller changes are shown as <strong>Stable<\/strong>. The card also displays the measured change, making the label easy to interpret rather than presenting it as an unexplained classification.<\/p>\n\n\n\n<div style=\"height:2px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"alignright size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"522\" height=\"254\" src=\"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2026\/11\/image-3.png\" alt=\"\" class=\"wp-image-1821\" style=\"aspect-ratio:2.055234425176622;width:260px;height:auto\" srcset=\"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2026\/11\/image-3.png 522w, https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2026\/11\/image-3-300x146.png 300w\" sizes=\"auto, (max-width: 522px) 100vw, 522px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">The <strong>Signal Stability<\/strong> card looks at the variation among the latest raw readings. A tightly grouped signal is labeled <strong>Steady<\/strong>. Greater variation is reported as <strong>Variable<\/strong> or <strong>Unstable<\/strong>. Strength and stability are treated separately: a weak signal can still be steady, and a strong signal can fluctuate considerably. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">These thresholds are sensible defaults for exploring a signal, not universal BLE rules. They are kept in a small analysis module so they can be adjusted for the advertising interval, environment, antenna, and behavior of the device being studied.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Compare nearby devices<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The <strong>Discovered Now<\/strong> chart provides context for the focused analysis. It shows the latest RSSI from every address found during the scan, ordered from stronger to weaker signals. This is useful when choosing a target or checking how crowded the local BLE environment is.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The distribution beside it belongs only to the selected device. It counts how often recent readings occurred within each RSSI range. A narrow group of bars usually accompanies a steadier signal, while a wider spread reveals more variation. The chart can be especially useful when comparing two locations or antenna orientations that have a similar average RSSI but different consistency.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"598\" src=\"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2026\/11\/image-4-1024x598.png\" alt=\"\" class=\"wp-image-1822\" srcset=\"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2026\/11\/image-4-1024x598.png 1024w, https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2026\/11\/image-4-300x175.png 300w, https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2026\/11\/image-4-767x448.png 767w, https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2026\/11\/image-4-1536x897.png 1536w, https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2026\/11\/image-4-2048x1197.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Try a simple observation<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Choose a BLE advertiser that sends packets regularly and leave it in a fixed position. Let the analyzer collect readings for a short period, then change one condition at a time: rotate the device, move it farther away, place an obstacle between it and BleuIO, or walk through the signal path.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The raw samples show the immediate radio response. The smoothed line makes the larger movement easier to see, while the trend and stability cards provide a compact summary. The distribution shows whether the new condition changed only the average signal or also made it more variable.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The goal is not to turn RSSI into an exact ruler. Bluetooth radio measurements are affected by the environment, reflections, antenna orientation, and the human body. The Bluetooth SIG notes that newer Bluetooth Channel Sounding is more reliable for accurate ranging than approaches that use RSSI as a distance proxy. The <a href=\"https:\/\/www.bluetooth.com\/bluetooth-le-primer\/\" target=\"_blank\" rel=\"noreferrer noopener\">Bluetooth Low Energy primer<\/a> provides useful background on that distinction.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For this project, RSSI is used for what it does well: observing relative signal behavior, detecting meaningful changes, and building an experiment around real measurements.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Take the project further<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The source is intentionally compact so it can be adapted. A next version could save readings to CSV, compare multiple selected devices, add experiment markers, calculate packet reception rates, or load a calibration profile for a known environment. The analysis functions can also be replaced without changing the BleuIO serial scanner or the dashboard structure.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can find the complete application, installation instructions, and tests in the <a href=\"https:\/\/github.com\/smart-sensor-devices-ab\/bleuio-rssi-analyzer\">BleuIO RSSI Analyzer repository<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">With a live view of both raw and processed RSSI, the project turns BleuIO into a useful signal exploration tool\u2014and a practical foundation for more focused BLE research.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>RSSI analysis becomes much easier when you can see the signal changing instead of watching a stream of numbers in a terminal. A chart makes it possible to notice movement, sudden drops, periods of instability, and differences between devices almost immediately. In this project, we use a BleuIO USB dongle with Python and Plotly Dash [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1824,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,2],"tags":[],"class_list":["post-1817","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 v28.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Build a BLE Signal Strength Analyzer with Live Charts Using BleuIO, Python and Plotly - 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\/build-a-ble-signal-strength-analyzer-with-live-charts-using-bleuio-python\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Build a BLE Signal Strength Analyzer with Live Charts Using BleuIO, Python and Plotly - BleuIO - Create Bluetooth Low Energy application\" \/>\n<meta property=\"og:description\" content=\"RSSI analysis becomes much easier when you can see the signal changing instead of watching a stream of numbers in a terminal. A chart makes it possible to notice movement, sudden drops, periods of instability, and differences between devices almost immediately. In this project, we use a BleuIO USB dongle with Python and Plotly Dash [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.bleuio.com\/blog\/build-a-ble-signal-strength-analyzer-with-live-charts-using-bleuio-python\/\" \/>\n<meta property=\"og:site_name\" content=\"BleuIO - Create Bluetooth Low Energy application\" \/>\n<meta property=\"article:published_time\" content=\"2026-11-04T17:02:28+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-11-04T17:04:32+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2026\/11\/ble-rssi-analyzer-with-bleuio.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"572\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\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\\\/build-a-ble-signal-strength-analyzer-with-live-charts-using-bleuio-python\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/build-a-ble-signal-strength-analyzer-with-live-charts-using-bleuio-python\\\/\"},\"author\":{\"name\":\"BleuIO\",\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/#\\\/schema\\\/person\\\/89bc581382d5964043f96efc54b75b80\"},\"headline\":\"Build a BLE Signal Strength Analyzer with Live Charts Using BleuIO, Python and Plotly\",\"datePublished\":\"2026-11-04T17:02:28+00:00\",\"dateModified\":\"2026-11-04T17:04:32+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/build-a-ble-signal-strength-analyzer-with-live-charts-using-bleuio-python\\\/\"},\"wordCount\":1172,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/build-a-ble-signal-strength-analyzer-with-live-charts-using-bleuio-python\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/ble-rssi-analyzer-with-bleuio.webp\",\"articleSection\":[\"BleuIO\",\"BleuIO tutorial\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/build-a-ble-signal-strength-analyzer-with-live-charts-using-bleuio-python\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/build-a-ble-signal-strength-analyzer-with-live-charts-using-bleuio-python\\\/\",\"url\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/build-a-ble-signal-strength-analyzer-with-live-charts-using-bleuio-python\\\/\",\"name\":\"Build a BLE Signal Strength Analyzer with Live Charts Using BleuIO, Python and Plotly - BleuIO - Create Bluetooth Low Energy application\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/build-a-ble-signal-strength-analyzer-with-live-charts-using-bleuio-python\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/build-a-ble-signal-strength-analyzer-with-live-charts-using-bleuio-python\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/ble-rssi-analyzer-with-bleuio.webp\",\"datePublished\":\"2026-11-04T17:02:28+00:00\",\"dateModified\":\"2026-11-04T17:04:32+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/#\\\/schema\\\/person\\\/89bc581382d5964043f96efc54b75b80\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/build-a-ble-signal-strength-analyzer-with-live-charts-using-bleuio-python\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/build-a-ble-signal-strength-analyzer-with-live-charts-using-bleuio-python\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/build-a-ble-signal-strength-analyzer-with-live-charts-using-bleuio-python\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/ble-rssi-analyzer-with-bleuio.webp\",\"contentUrl\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/ble-rssi-analyzer-with-bleuio.webp\",\"width\":1024,\"height\":572,\"caption\":\"ble rssi analyzer with bleuio\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/build-a-ble-signal-strength-analyzer-with-live-charts-using-bleuio-python\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Build a BLE Signal Strength Analyzer with Live Charts Using BleuIO, Python and Plotly\"}]},{\"@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":"Build a BLE Signal Strength Analyzer with Live Charts Using BleuIO, Python and Plotly - 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\/build-a-ble-signal-strength-analyzer-with-live-charts-using-bleuio-python\/","og_locale":"en_US","og_type":"article","og_title":"Build a BLE Signal Strength Analyzer with Live Charts Using BleuIO, Python and Plotly - BleuIO - Create Bluetooth Low Energy application","og_description":"RSSI analysis becomes much easier when you can see the signal changing instead of watching a stream of numbers in a terminal. A chart makes it possible to notice movement, sudden drops, periods of instability, and differences between devices almost immediately. In this project, we use a BleuIO USB dongle with Python and Plotly Dash [&hellip;]","og_url":"https:\/\/www.bleuio.com\/blog\/build-a-ble-signal-strength-analyzer-with-live-charts-using-bleuio-python\/","og_site_name":"BleuIO - Create Bluetooth Low Energy application","article_published_time":"2026-11-04T17:02:28+00:00","article_modified_time":"2026-11-04T17:04:32+00:00","og_image":[{"width":1024,"height":572,"url":"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2026\/11\/ble-rssi-analyzer-with-bleuio.webp","type":"image\/webp"}],"author":"BleuIO","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.bleuio.com\/blog\/build-a-ble-signal-strength-analyzer-with-live-charts-using-bleuio-python\/#article","isPartOf":{"@id":"https:\/\/www.bleuio.com\/blog\/build-a-ble-signal-strength-analyzer-with-live-charts-using-bleuio-python\/"},"author":{"name":"BleuIO","@id":"https:\/\/www.bleuio.com\/blog\/#\/schema\/person\/89bc581382d5964043f96efc54b75b80"},"headline":"Build a BLE Signal Strength Analyzer with Live Charts Using BleuIO, Python and Plotly","datePublished":"2026-11-04T17:02:28+00:00","dateModified":"2026-11-04T17:04:32+00:00","mainEntityOfPage":{"@id":"https:\/\/www.bleuio.com\/blog\/build-a-ble-signal-strength-analyzer-with-live-charts-using-bleuio-python\/"},"wordCount":1172,"commentCount":0,"image":{"@id":"https:\/\/www.bleuio.com\/blog\/build-a-ble-signal-strength-analyzer-with-live-charts-using-bleuio-python\/#primaryimage"},"thumbnailUrl":"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2026\/11\/ble-rssi-analyzer-with-bleuio.webp","articleSection":["BleuIO","BleuIO tutorial"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.bleuio.com\/blog\/build-a-ble-signal-strength-analyzer-with-live-charts-using-bleuio-python\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.bleuio.com\/blog\/build-a-ble-signal-strength-analyzer-with-live-charts-using-bleuio-python\/","url":"https:\/\/www.bleuio.com\/blog\/build-a-ble-signal-strength-analyzer-with-live-charts-using-bleuio-python\/","name":"Build a BLE Signal Strength Analyzer with Live Charts Using BleuIO, Python and Plotly - BleuIO - Create Bluetooth Low Energy application","isPartOf":{"@id":"https:\/\/www.bleuio.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.bleuio.com\/blog\/build-a-ble-signal-strength-analyzer-with-live-charts-using-bleuio-python\/#primaryimage"},"image":{"@id":"https:\/\/www.bleuio.com\/blog\/build-a-ble-signal-strength-analyzer-with-live-charts-using-bleuio-python\/#primaryimage"},"thumbnailUrl":"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2026\/11\/ble-rssi-analyzer-with-bleuio.webp","datePublished":"2026-11-04T17:02:28+00:00","dateModified":"2026-11-04T17:04:32+00:00","author":{"@id":"https:\/\/www.bleuio.com\/blog\/#\/schema\/person\/89bc581382d5964043f96efc54b75b80"},"breadcrumb":{"@id":"https:\/\/www.bleuio.com\/blog\/build-a-ble-signal-strength-analyzer-with-live-charts-using-bleuio-python\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.bleuio.com\/blog\/build-a-ble-signal-strength-analyzer-with-live-charts-using-bleuio-python\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.bleuio.com\/blog\/build-a-ble-signal-strength-analyzer-with-live-charts-using-bleuio-python\/#primaryimage","url":"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2026\/11\/ble-rssi-analyzer-with-bleuio.webp","contentUrl":"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2026\/11\/ble-rssi-analyzer-with-bleuio.webp","width":1024,"height":572,"caption":"ble rssi analyzer with bleuio"},{"@type":"BreadcrumbList","@id":"https:\/\/www.bleuio.com\/blog\/build-a-ble-signal-strength-analyzer-with-live-charts-using-bleuio-python\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.bleuio.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Build a BLE Signal Strength Analyzer with Live Charts Using BleuIO, Python and Plotly"}]},{"@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\/1817","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=1817"}],"version-history":[{"count":5,"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/posts\/1817\/revisions"}],"predecessor-version":[{"id":1828,"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/posts\/1817\/revisions\/1828"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/media\/1824"}],"wp:attachment":[{"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/media?parent=1817"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/categories?post=1817"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/tags?post=1817"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}