1<!DOCTYPE html> 2<html lang="en"> 3 <head> 4 <meta charset="utf-8" /> 5 <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 6 7 <title>Ubidots Blog</title> 8 <meta name="HandheldFriendly" content="True" /> 9 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 10 11 <link rel="preload" href="/blog/assets/css/app.css?v=0017488c26" as="style" /> 12 13 <link rel="preload" href="/blog/assets/css/home.css?v=0017488c26" as="style" /> 14 15 16 <link rel="stylesheet" type="text/css" href="/blog/assets/css/app.css?v=0017488c26" media="screen" /> 17 18 <link 19 rel="stylesheet" 20 type="text/css" 21 href="/blog/assets/css/home.css?v=0017488c26" 22 media="screen" 23 /> 24 25 26 <meta name="description" content="Thoughts, ideas, and tutorials on Industrial IoT"> 27 <link rel="icon" href="https://ubidots.com/blog/content/images/size/w256h256/2019/03/Ubidots-Icon-Blog.png" type="image/png"> 28 <link rel="canonical" href="https://ubidots.com/blog/"> 29 <meta name="referrer" content="no-referrer-when-downgrade"> 30 <link rel="next" href="https://ubidots.com/blog/page/2/"> 31 32 <meta property="og:site_name" content="Ubidots Blog"> 33 <meta property="og:type" content="website"> 34 <meta property="og:title" content="Ubidots Blog"> 35 <meta property="og:description" content="Thoughts, ideas, and tutorials on Industrial IoT"> 36 <meta property="og:url" content="https://ubidots.com/blog/"> 37 <meta property="og:image" content="https://ubidots.com/blog/content/images/2024/09/3-1.jpg"> 38 <meta property="article:publisher" content="https://www.facebook.com/ubidots"> 39 <meta name="twitter:card" content="summary_large_image"> 40 <meta name="twitter:title" content="Ubidots Blog"> 41 <meta name="twitter:description" content="Thoughts, ideas, and tutorials on Industrial IoT"> 42 <meta name="twitter:url" content="https://ubidots.com/blog/"> 43 <meta name="twitter:image" content="https://ubidots.com/blog/content/images/2024/09/3-2.jpg"> 44 <meta name="twitter:site" content="@ubidots"> 45 <meta property="og:image:width" content="1200"> 46 <meta property="og:image:height" content="675"> 47 48
48<script type="application/ld+json"> 49{ 50 "@context": "https://schema.org", 51 "@type": "WebSite", 52 "publisher": { 53 "@type": "Organization", 54 "name": "Ubidots Blog", 55 "url": "https://ubidots.com/blog/", 56 "logo": { 57 "@type": "ImageObject", 58 "url": "https://ubidots.com/blog/content/images/2024/09/logo-ghost-ubi.png" 59 } 60 }, 61 "url": "https://ubidots.com/blog/", 62 "image": { 63 "@type": "ImageObject", 64 "url": "https://ubidots.com/blog/content/images/2024/09/3.jpg", 65 "width": 1200, 66 "height": 675 67 }, 68 "mainEntityOfPage": "https://ubidots.com/blog/", 69 "description": "Thoughts, ideas, and tutorials on Industrial IoT" 70} 71 </script>
71 72 73 <meta name="generator" content="Ghost 5.94"> 74 <link rel="alternate" type="application/rss+xml" title="Ubidots Blog" href="https://ubidots.com/blog/rss/"> 75 76
76<script defer src="https://cdn.jsdelivr.net/ghost/sodo-search@~1.1/umd/sodo-search.min.js" data-key="fd5315fbaa778e48b56d6c05ee" data-styles="https://cdn.jsdelivr.net/ghost/sodo-search@~1.1/umd/main.css" data-sodo-search="https://ubidots.com/blog/" crossorigin="anonymous"></script>
76 77 78 <link href="https://ubidots.com/blog/webmentions/receive/" rel="webmention"> 79
79<script defer src="/blog/public/cards.min.js?v=0017488c26"></script>
79<style>:root {--ghost-accent-color: #15171A;}</style> 80 <link rel="stylesheet" type="text/css" href="/blog/public/cards.min.css?v=0017488c26"> 81 <link rel="alternate" hreflang="en" href="https://ubidots.com"> 82<link rel="alternate" hreflang="es" href="https://es.ubidots.com"> 83<link rel="alternate" hreflang="pt" href="https://pt.ubidots.com"> 84 85<!-- Google Tag Manager -->
86<script>
vendor: 327 bytes, lines 86-90
86(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 87new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 88j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 89'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 90})(window,document,'script','dataLayer','
90GTM-52ZSX8
vendor: 3 bytes, line 90
90');
90</script>
90 91<!-- End Google Tag Manager --> 92 93<!-- Agate theme --> 94<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.9.0/styles/agate.min.css">
95<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.9.0/highlight.min.js"></script>
95 96 97<!-- MailMunch for Ubidots Blog -->
98<script src="//a.mailmunch.co/app/v1/site.js" id="mailmunch-script" data-mailmunch-site-id="656543" async="async"></script>
98 99 100<!-- Google Search Console Ownership Verification Tag --> 101<meta name="google-site-verification" content="ZNtiTpPER3BFOumvzsL4DHCQqwxS1w8HWMDkBEz49KU" /> 102<meta name="google-site-verification" content="9GOdWzz0mMhv9rzGO2shzYFOviftJo17HCMHuR4o-Rk" /> 103 104<style> 105 /* Disable dark mode and force light mode */ 106 :root, [theme-mode=dark] { 107 --accent: #635bff; 108 --text-on-accent: #fff; 109 --background: #fff; 110 --foreground: #2f303a; 111 --body-text: #404040; 112 --light-text: #6b6b6b; 113 --border: #f2f2f2; 114 --slate: #f1f5f9; 115 --shine: #fabf17; 116 --success: #16a34a; 117 --danger: #b91c1c; 118 --gradient-background: hsla(0,0%,100%,0); 119 --translucent: hsla(0,0%,100%,.5); 120 --glow-opacity: 1; 121 --display-light-logo: inline-block; 122 --display-dark-logo: none; 123 } 124</style> 125 126
127<script> 128 document.addEventListener('DOMContentLoaded', function() { 129 console.log("Simplified script with host-specific UTM parameters loaded"); 130 131 // Determine utm_source based on the current page URL host 132 const currentHost = window.location.host; 133 let utmSource = 'ubidots_blog_en'; // Default for "ubidots.com/blog" 134 135 if (currentHost.includes('es.ubidots.com')) { 136 utmSource = 'ubidots_blog_es'; 137 } else if (currentHost.includes('pt.ubidots.com')) { 138 utmSource = 'ubidots_blog_pt'; 139 } else if (currentHost.includes('de.ubidots.com')) { 140 utmSource = 'ubidots_blog_de'; 141 } else if (currentHost.includes('fr.ubidots.com')) { 142 utmSource = 'ubidots_blog_fr'; 143 } 144 145 // Fixed UTM parameters with dynamic utm_source 146 const fixedUtmParams = { 147 utm_source: utmSource, 148 utm_medium: 'referral', 149 utm_campaign: document.title // Use the page title as the campaign name 150 }; 151 152 const targetDomain = 'ubidots.com'; // Replace with your signup site domain 153 154 // Function to append fixed UTM parameters to links 155 function appendFixedUtmParamsToLink(link) { 156 const url = new URL(link.href); 157 158 // Only append UTM params if the link doesn't already have them 159 if (!url.searchParams.has('utm_source')) { 160 Object.keys(fixedUtmParams).forEach(function(key) { 161 url.searchParams.set(key, fixedUtmParams[key]); 162 }); 163 link.href = url.toString(); 164 console.log("Appended fixed UTM params to link:", link.href); 165 } 166 } 167 168 // Function to append UTM parameters to all relevant links 169 function appendUtmToAllLinks() { 170 document.querySelectorAll('a').forEach(function(link) { 171 if (link.href.includes(targetDomain)) { 172 appendFixedUtmParamsToLink(link); 173 } 174 }); 175 } 176 177 // On page load, append UTM parameters to all internal links 178 appendUtmToAllLinks(); 179 180 // Listen for changes to ensure dynamically added links also get updated 181 const observer = new MutationObserver(function() { 182 appendUtmToAllLinks(); // Re-run UTM appending when the DOM changes 183 }); 184 185 // Observe the entire body for DOM changes 186 observer.observe(document.body, { childList: true, subtree: true }); 187 }); 188</script>
188 189
190<script async src="https://static.linguise.com/script-js/switcher.bundle.js?d=pk_vX7tijWMeUGlZlhfcZQWhZhGceGJVKTG"></script>
190 191 192 <style> 193 :root { 194 --accent: var(--ghost-accent-color); 195 --glow-1: #1180CC; 196 --glow-2: #00BCD4; 197 } 198 </style> 199 200 201 202 203 204 205 206 207 208 209 210 211 212 <style> 213 /** 214 * @license 215 * 216 * URL: https://github.com/vercel/geist-font 217 * © 2023 Vercel, made in collaboration with basement.studio 218 * 219 */ 220 @font-face { 221 font-family: "Geist Variable"; 222 src: url("/blog/assets/fonts/GeistVariableVF.woff2?v=0017488c26") format('woff2'); 223 font-weight: 200 700; 224 font-display: swap; 225 font-style: normal; 226 } 227</style> 228 229 230 <style> 231 :root { 232 --body-font: 'Geist Variable', var(--body-font-fallback); 233 --font-factor: 1.1; 234 } 235 </style> 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 <style> 251 /** 252 * @license 253 * 254 * URL: [email protected] 255 * © 2014-2019 Indian Type Foundry 256 * 257 */ 258 @font-face { 259 font-family: "Poppins Devanagari"; 260 src: url("/blog/assets/fonts/Poppins-VariableFont_wght.woff2?v=0017488c26") format('woff2'); 261 font-weight: 200 700; 262 font-display: swap; 263 font-style: normal; 264 } 265</style> 266 267 <style> 268 :root { 269 --title-font: 'Poppins Devanagari', var(--title-font-fallback); 270 } 271 </style> 272 273 274 275 276 277 278 279 280 281 282 <style> 283 /** 284 * @license 285 * 286 * URL: http://www.adobe.com 287 * © 2014 - 2021 Adobe Systems Incorporated 288 * 289 */ 290 @font-face { 291 font-family: "Source Serif 4"; 292 src: url("/blog/assets/fonts/SourceSerif4-VariableFont_opsz,wght.woff2?v=0017488c26") format('woff2'); 293 font-weight: 200 700; 294 font-display: swap; 295 font-style: normal; 296 } 297</style> 298 299 300 301 <style> 302 :root { 303 --post-body-font: 'Source Serif 4', var(--post-body-font-fallback); 304 --post-font-factor: 1.15; 305 } 306 </style> 307 308 309 310 311 312
312<script> 313 if (typeof Storage !== 'undefined') { 314 const savedThemeMode = localStorage.getItem('glow-theme-mode') 315 const html = document.querySelector('html') 316 if (savedThemeMode && savedThemeMode !== 'system') { 317 html.setAttribute('theme-mode', savedThemeMode) 318 } else { 319 const isSystemDark = window.matchMedia 320 && window.matchMedia('(prefers-color-scheme: dark)').matches 321 const themeMode = isSystemDark ? 'dark' : 'light' 322 html.setAttribute('theme-mode', themeMode) 323 } 324 } 325 </script>
325 326 </head> 327 <body class="home-template"> 328 329<header class="gl-header js-header" x-data="header()" @click.outside="closeMobileMenu"> 330 <div class="gl-header__wrapper"> 331 <div class="gl-header__brand"> 332 <button 333 class="gl-header__menu-btn" 334 :class="{'open': isMobileMenuOpen()}" 335 @click.stop="toggleMobileMenu" 336 > 337 <div></div> 338 <div></div> 339 <div></div> 340 <span class="sr-only">Toggle menu</span> 341 </button> 342 343<a 344 href="https://ubidots.com" 345 title="Ubidots Blog" 346 class="gl-logo " 347> 348 <img 349 src="https://ubidots.com/blog/content/images/2024/09/logo-ghost-ubi.png" 350 alt="" 351 width="96" 352 height="32" 353 class="" 354 > 355</a> 356 </div> 357 <div class="gl-header__actions"> 358 <div class="gl-header__menu-nav" :class="{'open': isMobileMenuOpen()}"> 359 <nav class="gl-header__nav" aria-label="Main navigation"> 360 <ul> 361 362 <li class="nav-home"> 363 <a href="https://ubidots.com"> 364 Home 365 </a> 366 </li> 367 <li class="nav-platform"> 368 <a href="https://ubidots.com/platform"> 369 Platform 370 </a> 371 </li> 372 <li class="nav-pricing"> 373 <a href="https://ubidots.com/pricing"> 374 Pricing 375 </a> 376 </li> 377 <li class="nav-create-free-trial"> 378 <a href="https://ubidots.com/signup"> 379 Create free trial! 380 </a> 381 </li> 382 383 </ul> 384 </nav> 385 </div> 386 <div class="gl-header__actions__ctas"> 387 <button class="gl-header__search-btn" data-ghost-search> 388 389 <svg 390 width="24" 391 height="24" 392 class="gl-icon" 393 > 394 <use href="/blog/assets/images/icons.svg?v=0017488c26#search" /> 395 </svg> 396 <span class="sr-only">Search</span> 397 </button> 398 <span class="gl-header__actions__account-cta "> 399 400 </span> 401 </div> 402 </div> 403 </div> 404</header> 405
406<script> 407 function header() { 408 return { 409 showMobileMenu: false, 410 toggleMobileMenu() { 411 this.showMobileMenu = !this.showMobileMenu 412 }, 413 closeMobileMenu() { 414 this.showMobileMenu = false 415 }, 416 isMobileMenuOpen() { 417 return this.showMobileMenu === true 418 }, 419 } 420 } 421</script>
421 422 423 <div class="gl-main-container"> 424 <div class="gl-main-container__content"> 425 426 427 428 429<main class=" space-bottom-page "> 430 431<section class="gl-home-header "> 432 <div class="gl-home-header__media"> 433 434 435<div class="gl-glow in-home-header in-top-page large-background glow-1"></div> 436<div class="gl-glow in-home-header in-top-page large-background glow-2"></div> 437 <img 438 src="/blog/content/images/size/w1200/2025/08/hero.jpg" 439 srcset=" 440 /blog/content/images/size/w720/2025/08/hero.jpg 720w, 441 /blog/content/images/size/w1200/2025/08/hero.jpg 1200w, 442 /blog/content/images/size/w2000/2025/08/hero.jpg 2000w 443 " 444 sizes=" 445 (max-width: 48rem) 100vw, 446 (max-width: 64rem) 100vw, 447 100vw 448 " 449 width="1512" 450 height="620" 451 alt="" 452 class="gl-home-header__image js-home-header-image" 453 > 454 </div> 455 <div class="gl-wrapper"> 456 <div class="gl-home-header__content"> 457 <div class="gl-home-header__main"> 458 <h1 class="gl-home-header__title"> 459 Industrial Automation Meets The Cloud 460 </h1> 461 <p class="gl-home-header__description"> 462 A blog about Industrial IoT, Smart Manufacturing, and Digital Transformation 463 </p> 464 </div> 465 </div> 466 </div> 467</section> 468 <div class="gl-featured-section latest-posts"> 469 <div class="gl-wrapper"> 470 <div class="gl-featured-section__block"> 471 <h2 class="gl-featured-section__title"> 472 <a href="https://ubidots.com/blog/latest"> 473 Latest Posts 474 475 <svg 476 width="20" 477 height="20" 478 class="gl-icon" 479 > 480 <use href="/blog/assets/images/icons.svg?v=0017488c26#chevron-right" /> 481 </svg> 482 </a> 483 </h2> 484 <div class="gl-featured-section__grid"> 485 486<article class="gl-post-card in-featured-section post tag-energy-management tag-industrial-iot tag-cellular-iot tag-modbus tag-mqtt tag-lorawan public first "> 487 488<div class="gl-post-card__metas"> 489 <div class="gl-post-card__tags"> 490 <a 491 href="https://ubidots.com/blog/tag/energy-management/" 492 class="gl-post-card__tag" 493 > 494 Energy Management 495 </a> 496 </div> 497 <div class="gl-post-card__authors"> 498 <div class="gl-post-card__avatars"> 499 <a 500 href="/blog/author/agustin/" 501 class="gl-post-card__avatar author-0" 502 aria-hidden="true" 503 > 504 <img 505 data-src="/blog/assets/images/avatar.jpg?v=0017488c26" 506 alt="" 507 width="24" 508 height="24" 509 class="gl-post-card__avatar__default lazy" 510 aria-hidden="true" 511 > 512 <img 513 data-src="/blog/content/images/size/w100/2019/03/agustin-compressor.png" 514 alt="Agustin Pelaez" 515 width="24" 516 height="24" 517 class="gl-post-card__avatar__image lazy" 518 > 519 </a> 520 </div> 521 <div class="gl-post-card__names"> 522 <a href="/blog/author/agustin/">Agustin Pelaez</a> 523 </div> 524 </div> 525</div> 526 <div class="gl-post-card__main"> 527 <a 528 class="gl-post-card__image" 529 href="/blog/cellular-energy-monitoring/" 530 aria-hidden="true" 531 tabindex="-1" 532 > 533 <img 534 data-src="/blog/content/images/size/w720/2026/09/cellular-energy-monitoring-hero.png" 535 alt="Five cellular approaches to an industrial energy monitoring system, compared" 536 width="300" 537 height="200" 538 class="lazy" 539 /> 540 </a> 541 <div class="gl-post-card__main-content"> 542 <div class="gl-post-card__metas-in-featured"> 543 544<div class="gl-post-card__metas"> 545 <div class="gl-post-card__tags"> 546 <a 547 href="https://ubidots.com/blog/tag/energy-management/" 548 class="gl-post-card__tag" 549 > 550 Energy Management 551 </a> 552 </div> 553 <div class="gl-post-card__authors"> 554 <div class="gl-post-card__avatars"> 555 <a 556 href="/blog/author/agustin/" 557 class="gl-post-card__avatar author-0" 558 aria-hidden="true" 559 > 560 <img 561 data-src="/blog/assets/images/avatar.jpg?v=0017488c26" 562 alt="" 563 width="24" 564 height="24" 565 class="gl-post-card__avatar__default lazy" 566 aria-hidden="true" 567 > 568 <img 569 data-src="/blog/content/images/size/w100/2019/03/agustin-compressor.png" 570 alt="Agustin Pelaez" 571 width="24" 572 height="24" 573 class="gl-post-card__avatar__image lazy" 574 > 575 </a> 576 </div> 577 <div class="gl-post-card__names"> 578 <a href="/blog/author/agustin/">Agustin Pelaez</a> 579 </div> 580 </div> 581</div> 582 </div> 583 <div class="gl-post-card__main-text"> 584 <h2 class="gl-post-card__title"> 585 <a href="/blog/cellular-energy-monitoring/"> 586 Industrial Energy Monitoring Over Cellular: 5 Approaches 587 </a> 588 </h2> 589 <p class="gl-post-card__excerpt"> 590 Five ways to backhaul an industrial energy meter over cellular, with current 2026 hardware, real deployments, and a costed twelve-point scenario. 591 </p> 592 </div> 593 <div class="gl-post-card__datetime"> 594 <div class="gl-post-card__time"> 595 <time datetime="2026-09-10"> 596 Sep 10, 2026 597 </time>
598 <span>·</span> 599 <span> 600 21 min read 601 </span> 602 </div> 603 </div> 604 </div> 605 </div> 606</article> 607 608<article class="gl-post-card in-featured-section post tag-predictive-maintenance public "> 609 610<div class="gl-post-card__metas"> 611 <div class="gl-post-card__tags"> 612 <a 613 href="https://ubidots.com/blog/tag/predictive-maintenance/" 614 class="gl-post-card__tag" 615 > 616 Predictive Maintenance 617 </a> 618 </div> 619 <div class="gl-post-card__authors"> 620 <div class="gl-post-card__avatars"> 621 <a 622 href="/blog/author/agustin/" 623 class="gl-post-card__avatar author-0" 624 aria-hidden="true" 625 > 626 <img 627 data-src="/blog/assets/images/avatar.jpg?v=0017488c26" 628 alt="" 629 width="24" 630 height="24" 631 class="gl-post-card__avatar__default lazy" 632 aria-hidden="true" 633 > 634 <img 635 data-src="/blog/content/images/size/w100/2019/03/agustin-compressor.png" 636 alt="Agustin Pelaez" 637 width="24" 638 height="24" 639 class="gl-post-card__avatar__image lazy" 640 > 641 </a> 642 </div> 643 <div class="gl-post-card__names"> 644 <a href="/blog/author/agustin/">Agustin Pelaez</a> 645 </div> 646 </div> 647</div> 648 <div class="gl-post-card__main"> 649 <a 650 class="gl-post-card__image" 651 href="/blog/iot-predictive-maintenance/" 652 aria-hidden="true" 653 tabindex="-1" 654 > 655 <img 656 data-src="/blog/content/images/size/w720/2021/12/iot-predictive-maintenance.jpg" 657 alt="IoT predictive maintenance concept showing connected sensors monitoring industrial equipment condition" 658 width="300" 659 height="200" 660 class="lazy" 661 /> 662 </a> 663 <div class="gl-post-card__main-content"> 664 <div class="gl-post-card__metas-in-featured"> 665 666<div class="gl-post-card__metas"> 667 <div class="gl-post-card__tags"> 668 <a 669 href="https://ubidots.com/blog/tag/predictive-maintenance/" 670 class="gl-post-card__tag" 671 > 672 Predictive Maintenance 673 </a> 674 </div> 675 <div class="gl-post-card__authors"> 676 <div class="gl-post-card__avatars"> 677 <a 678 href="/blog/author/agustin/" 679 class="gl-post-card__avatar author-0" 680 aria-hidden="true" 681 > 682 <img 683 data-src="/blog/assets/images/avatar.jpg?v=0017488c26" 684 alt="" 685 width="24" 686 height="24" 687 class="gl-post-card__avatar__default lazy" 688 aria-hidden="true" 689 > 690 <img 691 data-src="/blog/content/images/size/w100/2019/03/agustin-compressor.png" 692 alt="Agustin Pelaez" 693 width="24" 694 height="24" 695 class="gl-post-card__avatar__image lazy" 696 > 697 </a> 698 </div> 699 <div class="gl-post-card__names"> 700 <a href="/blog/author/agustin/">Agustin Pelaez</a> 701 </div> 702 </div> 703</div> 704 </div> 705 <div class="gl-post-card__main-text"> 706 <h2 class="gl-post-card__title"> 707 <a href="/blog/iot-predictive-maintenance/"> 708 IoT Predictive Maintenance: 10 Benefits, Backed by Data 709 </a> 710 </h2> 711 <p class="gl-post-card__excerpt"> 712 The 10 biggest predictive maintenance benefits in IoT projects â with NIST and McKinsey figures, a cost breakdown, and how to choose a platform. 713 </p> 714 </div> 715 <div class="gl-post-card__datetime"> 716 <div class="gl-post-card__time"> 717 <time datetime="2026-08-27"> 718 Aug 27, 2026 719 </time> 720 <span>·</span> 721 <span> 722 14 min read 723 </span> 724 </div> 725 </div> 726 </div> 727 </div> 728</article> 729 730<article class="gl-post-card in-featured-section post tag-ai tag-machine-learning no-image public "> 731 732<div class="gl-post-card__metas"> 733 <div class="gl-post-card__tags"> 734 <a
735 href="https://ubidots.com/blog/tag/ai/" 736 class="gl-post-card__tag" 737 > 738 AI 739 </a> 740 </div> 741 <div class="gl-post-card__authors"> 742 <div class="gl-post-card__avatars"> 743 <a 744 href="/blog/author/ubidots/" 745 class="gl-post-card__avatar author-0" 746 aria-hidden="true" 747 > 748 <img 749 data-src="/blog/assets/images/avatar.jpg?v=0017488c26" 750 alt="" 751 width="24" 752 height="24" 753 class="gl-post-card__avatar__default lazy" 754 aria-hidden="true" 755 > 756 </a> 757 </div> 758 <div class="gl-post-card__names"> 759 <a href="/blog/author/ubidots/">Ubidots</a> 760 </div> 761 </div> 762</div> 763 <div class="gl-post-card__main"> 764 <div class="gl-post-card__main-content"> 765 <div class="gl-post-card__metas-in-featured"> 766 767<div class="gl-post-card__metas"> 768 <div class="gl-post-card__tags"> 769 <a 770 href="https://ubidots.com/blog/tag/ai/" 771 class="gl-post-card__tag" 772 > 773 AI 774 </a> 775 </div> 776 <div class="gl-post-card__authors"> 777 <div class="gl-post-card__avatars"> 778 <a 779 href="/blog/author/ubidots/" 780 class="gl-post-card__avatar author-0" 781 aria-hidden="true" 782 > 783 <img 784 data-src="/blog/assets/images/avatar.jpg?v=0017488c26" 785 alt="" 786 width="24" 787 height="24" 788 class="gl-post-card__avatar__default lazy" 789 aria-hidden="true" 790 > 791 </a> 792 </div> 793 <div class="gl-post-card__names"> 794 <a href="/blog/author/ubidots/">Ubidots</a> 795 </div> 796 </div> 797</div> 798 </div> 799 <div class="gl-post-card__main-text"> 800 <h2 class="gl-post-card__title"> 801 <a href="/blog/ml-vs-llm-5-prompts-that-break-llms-and-how-ml-tool-calling-fixes-them/"> 802 ML vs LLM: 5 Prompts That Break LLMs â and How ML Tool-Calling Fixes Them 803 </a> 804 </h2> 805 <p class="gl-post-card__excerpt"> 806 Yes, your LLM can run Python now. Here are five IoT prompts where that still isnât enough â and the ML tool-calling pattern that fixes each one. 807 </p> 808 </div> 809 <div class="gl-post-card__datetime"> 810 <div class="gl-post-card__time"> 811 <time datetime="2026-07-09"> 812 Jul 09, 2026 813 </time> 814 <span>·</span> 815 <span> 816 16 min read 817 </span> 818 </div> 819 </div> 820 </div> 821 </div> 822</article> 823 824<article class="gl-post-card in-featured-section post tag-eagle-io tag-iot-platforms tag-scada tag-environmental-monitoring-2 tag-comparison public "> 825 826<div class="gl-post-card__metas"> 827 <div class="gl-post-card__tags"> 828 <a 829 href="https://ubidots.com/blog/tag/eagle-io/" 830 class="gl-post-card__tag" 831 > 832 eagle-io 833 </a> 834 </div> 835 <div class="gl-post-card__authors"> 836 <div class="gl-post-card__avatars"> 837 <a 838 href="/blog/author/ubidots/" 839 class="gl-post-card__avatar author-0" 840 aria-hidden="true" 841 > 842 <img 843 data-src="/blog/assets/images/avatar.jpg?v=0017488c26" 844 alt="" 845 width="24" 846 height="24" 847 class="gl-post-card__avatar__default lazy" 848 aria-hidden="true" 849 > 850 </a> 851 </div> 852 <div class="gl-post-card__names"> 853 <a href="/blog/author/ubidots/">Ubidots</a> 854 </div> 855 </div> 856</div> 857 <div class="gl-post-card__main"> 858 <a 859 class="gl-post-card__image" 860 href="/blog/eagle-io-alternatives-ubidots/" 861 aria-hidden="true" 862 tabindex="-1" 863 > 864 <img 865 data-src="/blog/content/images/size/w720/2026/05/eagle-io-alternative-ubidots-dashboard-comparison.webp" 866 alt="Ubidots dashboard vs Eagle.io folder-tree UI â Eagle.io alternative comparison" 867 width="300" 868 height="200" 869 class="lazy" 870 /> 871 </a> 872 <div class="gl-post-card__main-content"> 873 <div class="gl-post-card__metas-in-featured"> 874 875<div class="gl-post-card__metas"> 876 <div class="gl-post-card__tags"> 877 <a
878 href="https://ubidots.com/blog/tag/eagle-io/" 879 class="gl-post-card__tag" 880 > 881 eagle-io 882 </a> 883 </div> 884 <div class="gl-post-card__authors"> 885 <div class="gl-post-card__avatars"> 886 <a 887 href="/blog/author/ubidots/" 888 class="gl-post-card__avatar author-0" 889 aria-hidden="true" 890 > 891 <img 892 data-src="/blog/assets/images/avatar.jpg?v=0017488c26" 893 alt="" 894 width="24" 895 height="24" 896 class="gl-post-card__avatar__default lazy" 897 aria-hidden="true" 898 > 899 </a> 900 </div> 901 <div class="gl-post-card__names"> 902 <a href="/blog/author/ubidots/">Ubidots</a> 903 </div> 904 </div> 905</div> 906 </div> 907 <div class="gl-post-card__main-text"> 908 <h2 class="gl-post-card__title"> 909 <a href="/blog/eagle-io-alternatives-ubidots/"> 910 Eagle.io Alternatives: How Ubidots Compares After the Bentley Acquisition (2026) 911 </a> 912 </h2> 913 <p class="gl-post-card__excerpt"> 914 "No development for 3 years" â and the bill is climbing toward $20K/month. Here's how Ubidots compares to Eagle.io on pricing, multi-tenancy, Python scripting, and white labeling after the Bentley acquisition. 915 </p> 916 </div> 917 <div class="gl-post-card__datetime"> 918 <div class="gl-post-card__time"> 919 <time datetime="2026-05-26"> 920 May 26, 2026 921 </time> 922 <span>·</span> 923 <span> 924 17 min read 925 </span> 926 </div> 927 </div> 928 </div> 929 </div> 930</article> 931 932<article class="gl-post-card in-featured-section post tag-industrial-iot tag-iot tag-water-management tag-scada tag-modbus public "> 933 934<div class="gl-post-card__metas"> 935 <div class="gl-post-card__tags"> 936 <a 937 href="https://ubidots.com/blog/tag/industrial-iot/" 938 class="gl-post-card__tag" 939 > 940 Industrial IoT 941 </a> 942 </div> 943 <div class="gl-post-card__authors"> 944 <div class="gl-post-card__avatars"> 945 <a 946 href="/blog/author/cristina/" 947 class="gl-post-card__avatar author-0" 948 aria-hidden="true" 949 > 950 <img 951 data-src="/blog/assets/images/avatar.jpg?v=0017488c26" 952 alt="" 953 width="24" 954 height="24" 955 class="gl-post-card__avatar__default lazy" 956 aria-hidden="true" 957 > 958 <img 959 data-src="/blog/content/images/size/w100/2019/06/Image-from-iOS--1--1.jpg" 960 alt="Cristina Botero" 961 width="24" 962 height="24" 963 class="gl-post-card__avatar__image lazy" 964 > 965 </a> 966 </div> 967 <div class="gl-post-card__names"> 968 <a href="/blog/author/cristina/">Cristina Botero</a> 969 </div> 970 </div> 971</div> 972 <div class="gl-post-card__main"> 973 <a 974 class="gl-post-card__image" 975 href="/blog/iot-water-infrastructure-monitoring/" 976 aria-hidden="true" 977 tabindex="-1" 978 > 979 <img 980 data-src="/blog/content/images/size/w720/2025/03/abc-1.png" 981 alt="" 982 width="300" 983 height="200" 984 class="lazy" 985 /> 986 </a> 987 <div class="gl-post-card__main-content"> 988 <div class="gl-post-card__metas-in-featured"> 989 990<div class="gl-post-card__metas"> 991 <div class="gl-post-card__tags"> 992 <a 993 href="https://ubidots.com/blog/tag/industrial-iot/" 994 class="gl-post-card__tag" 995 > 996 Industrial IoT 997 </a> 998 </div> 999 <div class="gl-post-card__authors"> 1000 <div class="gl-post-card__avatars"> 1001 <a 1002 href="/blog/author/cristina/" 1003 class="gl-post-card__avatar author-0" 1004 aria-hidden="true" 1005 > 1006 <img 1007 data-src="/blog/assets/images/avatar.jpg?v=0017488c26" 1008 alt="" 1009 width="24" 1010 height="24" 1011 class="gl-post-card__avatar__default lazy" 1012 aria-hidden="true" 1013 > 1014 <img 1015 data-src="/blog/content/images/size/w100/2019/06/Image-from-iOS--1--1.jpg" 1016 alt="Cristina Botero" 1017 width="24" 1018 height="24" 1019 class="gl-post-card__avatar__image lazy" 1020 > 1021 </a> 1022 </div> 1023 <div class="gl-post-card__names"> 1024 <a href="/blog/author/cristina/">Cristina Botero</a> 1025 </div> 1026 </div> 1027</div> 1028 </div> 1029 <div class="gl-post-card__main-text"> 1030 <h2 class="gl-post-card__title">
1031 <a href="/blog/iot-water-infrastructure-monitoring/"> 1032 IoT Water Infrastructure Monitoring: How Smart Pumping Stations Cut Costs by 15% 1033 </a> 1034 </h2> 1035 <p class="gl-post-card__excerpt"> 1036 IoT water infrastructure monitoring enables water utilities to cut energy costs by 15% and reduce on-site inspections by 18%. This guide covers how remote monitoring works for pumping stations, how it compares to SCADA, and includes a real deployment case study from Guayaquil, Ecuador. 1037 </p> 1038 </div> 1039 <div class="gl-post-card__datetime"> 1040 <div class="gl-post-card__time"> 1041 <time datetime="2026-02-12"> 1042 Feb 12, 2026 1043 </time> 1044 <span>·</span> 1045 <span> 1046 9 min read 1047 </span> 1048 </div> 1049 </div> 1050 </div> 1051 </div> 1052</article> 1053 1054<article class="gl-post-card in-featured-section post tag-industrial-iot tag-energy-management tag-modbus tag-predictive-maintenance tag-scada public "> 1055 1056<div class="gl-post-card__metas"> 1057 <div class="gl-post-card__tags"> 1058 <a 1059 href="https://ubidots.com/blog/tag/industrial-iot/" 1060 class="gl-post-card__tag" 1061 > 1062 Industrial IoT 1063 </a> 1064 </div> 1065 <div class="gl-post-card__authors"> 1066 <div class="gl-post-card__avatars"> 1067 <a 1068 href="/blog/author/agustin/" 1069 class="gl-post-card__avatar author-0" 1070 aria-hidden="true" 1071 > 1072 <img 1073 data-src="/blog/assets/images/avatar.jpg?v=0017488c26" 1074 alt="" 1075 width="24" 1076 height="24" 1077 class="gl-post-card__avatar__default lazy" 1078 aria-hidden="true" 1079 > 1080 <img 1081 data-src="/blog/content/images/size/w100/2019/03/agustin-compressor.png" 1082 alt="Agustin Pelaez" 1083 width="24" 1084 height="24" 1085 class="gl-post-card__avatar__image lazy" 1086 > 1087 </a> 1088 </div> 1089 <div class="gl-post-card__names"> 1090 <a href="/blog/author/agustin/">Agustin Pelaez</a> 1091 </div> 1092 </div> 1093</div> 1094 <div class="gl-post-card__main"> 1095 <a 1096 class="gl-post-card__image" 1097 href="/blog/industrial-iot-applications/" 1098 aria-hidden="true" 1099 tabindex="-1" 1100 > 1101 <img 1102 data-src="/blog/content/images/size/w720/2026/01/979540537-1.jpg" 1103 alt="" 1104 width="300" 1105 height="200" 1106 class="lazy" 1107 /> 1108 </a> 1109 <div class="gl-post-card__main-content"> 1110 <div class="gl-post-card__metas-in-featured"> 1111 1112<div class="gl-post-card__metas"> 1113 <div class="gl-post-card__tags"> 1114 <a 1115 href="https://ubidots.com/blog/tag/industrial-iot/" 1116 class="gl-post-card__tag" 1117 > 1118 Industrial IoT 1119 </a> 1120 </div> 1121 <div class="gl-post-card__authors"> 1122 <div class="gl-post-card__avatars"> 1123 <a 1124 href="/blog/author/agustin/" 1125 class="gl-post-card__avatar author-0" 1126 aria-hidden="true" 1127 > 1128 <img 1129 data-src="/blog/assets/images/avatar.jpg?v=0017488c26" 1130 alt="" 1131 width="24" 1132 height="24" 1133 class="gl-post-card__avatar__default lazy" 1134 aria-hidden="true" 1135 > 1136 <img 1137 data-src="/blog/content/images/size/w100/2019/03/agustin-compressor.png" 1138 alt="Agustin Pelaez" 1139 width="24" 1140 height="24" 1141 class="gl-post-card__avatar__image lazy" 1142 > 1143 </a> 1144 </div> 1145 <div class="gl-post-card__names"> 1146 <a href="/blog/author/agustin/">Agustin Pelaez</a> 1147 </div> 1148 </div> 1149</div> 1150 </div> 1151 <div class="gl-post-card__main-text"> 1152 <h2 class="gl-post-card__title"> 1153 <a href="/blog/industrial-iot-applications/"> 1154 5 Industrial IoT Applications With Real Examples (2026) 1155 </a> 1156 </h2> 1157 <p class="gl-post-card__excerpt">
1158 From quality control to energy efficiency and remote services, discover the five Industrial IoT applications driving real results in 2026, with concrete examples, technologies, and measurable business impact. 1159 </p> 1160 </div> 1161 <div class="gl-post-card__datetime"> 1162 <div class="gl-post-card__time"> 1163 <time datetime="2026-01-13"> 1164 Jan 13, 2026 1165 </time> 1166 <span>·</span> 1167 <span> 1168 13 min read 1169 </span> 1170 </div> 1171 </div> 1172 </div> 1173 </div> 1174</article> 1175 1176<article class="gl-post-card in-featured-section post tag-scada public "> 1177 1178<div class="gl-post-card__metas"> 1179 <div class="gl-post-card__tags"> 1180 <a 1181 href="https://ubidots.com/blog/tag/scada/" 1182 class="gl-post-card__tag" 1183 > 1184 scada 1185 </a> 1186 </div> 1187 <div class="gl-post-card__authors"> 1188 <div class="gl-post-card__avatars"> 1189 <a 1190 href="/blog/author/agustin/" 1191 class="gl-post-card__avatar author-0" 1192 aria-hidden="true" 1193 > 1194 <img 1195 data-src="/blog/assets/images/avatar.jpg?v=0017488c26" 1196 alt="" 1197 width="24" 1198 height="24" 1199 class="gl-post-card__avatar__default lazy" 1200 aria-hidden="true" 1201 > 1202 <img 1203 data-src="/blog/content/images/size/w100/2019/03/agustin-compressor.png" 1204 alt="Agustin Pelaez" 1205 width="24" 1206 height="24" 1207 class="gl-post-card__avatar__image lazy" 1208 > 1209 </a> 1210 </div> 1211 <div class="gl-post-card__names"> 1212 <a href="/blog/author/agustin/">Agustin Pelaez</a> 1213 </div> 1214 </div> 1215</div> 1216 <div class="gl-post-card__main"> 1217 <a 1218 class="gl-post-card__image" 1219 href="/blog/what-is-scada/" 1220 aria-hidden="true" 1221 tabindex="-1" 1222 > 1223 <img 1224 data-src="/blog/content/images/size/w720/2024/10/SCADA-feature-image.jpg" 1225 alt="" 1226 width="300" 1227 height="200" 1228 class="lazy" 1229 /> 1230 </a> 1231 <div class="gl-post-card__main-content"> 1232 <div class="gl-post-card__metas-in-featured"> 1233 1234<div class="gl-post-card__metas"> 1235 <div class="gl-post-card__tags"> 1236 <a 1237 href="https://ubidots.com/blog/tag/scada/" 1238 class="gl-post-card__tag" 1239 > 1240 scada 1241 </a> 1242 </div> 1243 <div class="gl-post-card__authors"> 1244 <div class="gl-post-card__avatars"> 1245 <a 1246 href="/blog/author/agustin/" 1247 class="gl-post-card__avatar author-0" 1248 aria-hidden="true" 1249 > 1250 <img 1251 data-src="/blog/assets/images/avatar.jpg?v=0017488c26" 1252 alt="" 1253 width="24" 1254 height="24" 1255 class="gl-post-card__avatar__default lazy" 1256 aria-hidden="true" 1257 > 1258 <img 1259 data-src="/blog/content/images/size/w100/2019/03/agustin-compressor.png" 1260 alt="Agustin Pelaez" 1261 width="24" 1262 height="24" 1263 class="gl-post-card__avatar__image lazy" 1264 > 1265 </a> 1266 </div> 1267 <div class="gl-post-card__names"> 1268 <a href="/blog/author/agustin/">Agustin Pelaez</a> 1269 </div> 1270 </div> 1271</div> 1272 </div> 1273 <div class="gl-post-card__main-text"> 1274 <h2 class="gl-post-card__title"> 1275 <a href="/blog/what-is-scada/"> 1276 What is SCADA? Supervisory Control & Data Acquisition Explained 1277 </a> 1278 </h2> 1279 <p class="gl-post-card__excerpt"> 1280 Learn what a SCADA system is, how it works, components, benefits, and why cloud-based SCADA is powering Industry 4.0âcomplete guide in under 5 minutes. 1281 </p> 1282 </div> 1283 <div class="gl-post-card__datetime"> 1284 <div class="gl-post-card__time"> 1285 <time datetime="2025-07-06"> 1286 Jul 06, 2025 1287 </time> 1288 <span>·</span> 1289 <span> 1290 15 min read 1291 </span> 1292 </div> 1293 </div> 1294 </div> 1295 </div> 1296</article> 1297 1298<article class="gl-post-card in-featured-section post public no-primary-tag "> 1299 1300<div class="gl-post-card__metas"> 1301 <div class="gl-post-card__tags"> 1302 </div> 1303 <div class="gl-post-card__authors"> 1304 <div class="gl-post-card__avatars"> 1305 <a 1306 href="/blog/author/agustin/" 1307 class="gl-post-card__avatar author-0" 1308 aria-hidden="true" 1309 > 1310 <img 1311 data-src="/blog/assets/images/avatar.jpg?v=0017488c26" 1312 alt="" 1313 width="24" 1314 height="24" 1315 class="gl-post-card__avatar__default lazy" 1316 aria-hidden="true" 1317 > 1318 <img 1319 data-src="/blog/content/images/size/w100/2019/03/agustin-compressor.png" 1320 alt="Agustin Pelaez" 1321 width="24" 1322 height="24" 1323 class="gl-post-card__avatar__image lazy" 1324 > 1325 </a> 1326 </div> 1327 <div class="gl-post-card__names"> 1328 <a href="/blog/author/agustin/">Agustin Pelaez</a> 1329 </div> 1330 </div> 1331</div> 1332 <div class="gl-post-card__main"> 1333 <a 1334 class="gl-post-card__image" 1335 href="/blog/aws-iot-core/" 1336 aria-hidden="true" 1337 tabindex="-1" 1338 > 1339 <img
1340 data-src="/blog/content/images/size/w720/2025/06/1.png" 1341 alt="" 1342 width="300" 1343 height="200" 1344 class="lazy" 1345 /> 1346 </a> 1347 <div class="gl-post-card__main-content"> 1348 <div class="gl-post-card__metas-in-featured"> 1349 1350<div class="gl-post-card__metas"> 1351 <div class="gl-post-card__tags"> 1352 </div> 1353 <div class="gl-post-card__authors"> 1354 <div class="gl-post-card__avatars"> 1355 <a 1356 href="/blog/author/agustin/" 1357 class="gl-post-card__avatar author-0" 1358 aria-hidden="true" 1359 > 1360 <img 1361 data-src="/blog/assets/images/avatar.jpg?v=0017488c26" 1362 alt="" 1363 width="24" 1364 height="24" 1365 class="gl-post-card__avatar__default lazy" 1366 aria-hidden="true" 1367 > 1368 <img 1369 data-src="/blog/content/images/size/w100/2019/03/agustin-compressor.png" 1370 alt="Agustin Pelaez" 1371 width="24" 1372 height="24" 1373 class="gl-post-card__avatar__image lazy" 1374 > 1375 </a> 1376 </div> 1377 <div class="gl-post-card__names"> 1378 <a href="/blog/author/agustin/">Agustin Pelaez</a> 1379 </div> 1380 </div> 1381</div> 1382 </div> 1383 <div class="gl-post-card__main-text"> 1384 <h2 class="gl-post-card__title"> 1385 <a href="/blog/aws-iot-core/"> 1386 Getting started with AWS IoT Core 1387 </a> 1388 </h2> 1389 <p class="gl-post-card__excerpt"> 1390 Discover what AWS IoT Core is, how it works, and why it's a powerful choice for building secure, scalable IoT solutions. Explore real-world use cases, key features, and how to integrate it with Ubidots for seamless data visualization and application development. 1391 </p> 1392 </div> 1393 <div class="gl-post-card__datetime"> 1394 <div class="gl-post-card__time"> 1395 <time datetime="2025-06-24"> 1396 Jun 24, 2025 1397 </time> 1398 <span>·</span> 1399 <span> 1400 14 min read 1401 </span> 1402 </div> 1403 </div> 1404 </div> 1405 </div> 1406</article> 1407 1408<article class="gl-post-card in-featured-section post tag-modbus featured no-image public "> 1409 1410<div class="gl-post-card__metas"> 1411 <div class="gl-post-card__tags"> 1412 <a 1413 href="https://ubidots.com/blog/tag/modbus/" 1414 class="gl-post-card__tag" 1415 > 1416 Modbus 1417 </a> 1418 <span class="gl-post-card__featured"> 1419 <span> 1420 <svg 1421 width="20" 1422 height="20" 1423 class="gl-icon" 1424 > 1425 <use href="/blog/assets/images/icons.svg?v=0017488c26#sparkles" /> 1426 </svg> 1427</span> 1428 Featured 1429 </span> 1430 </div> 1431 <div class="gl-post-card__authors"> 1432 <div class="gl-post-card__avatars"> 1433 <a 1434 href="/blog/author/agustin/" 1435 class="gl-post-card__avatar author-0" 1436 aria-hidden="true" 1437 > 1438 <img 1439 data-src="/blog/assets/images/avatar.jpg?v=0017488c26" 1440 alt="" 1441 width="24" 1442 height="24" 1443 class="gl-post-card__avatar__default lazy" 1444 aria-hidden="true" 1445 > 1446 <img 1447 data-src="/blog/content/images/size/w100/2019/03/agustin-compressor.png" 1448 alt="Agustin Pelaez" 1449 width="24" 1450 height="24" 1451 class="gl-post-card__avatar__image lazy" 1452 > 1453 </a> 1454 <a 1455 href="/blog/author/adriano/" 1456 class="gl-post-card__avatar author-1" 1457 aria-hidden="true" 1458 > 1459 <img 1460 data-src="/blog/assets/images/avatar.jpg?v=0017488c26" 1461 alt="" 1462 width="24" 1463 height="24" 1464 class="gl-post-card__avatar__default lazy" 1465 aria-hidden="true" 1466 > 1467 <img 1468 data-src="/blog/content/images/size/w100/2022/11/adri2.jpeg" 1469 alt="Adriano Toro" 1470 width="24" 1471 height="24" 1472 class="gl-post-card__avatar__image lazy" 1473 > 1474 </a> 1475 </div> 1476 <div class="gl-post-card__names"> 1477 <a href="/blog/author/agustin/">Agustin Pelaez</a>, <a href="/blog/author/adriano/">Adriano Toro</a> 1478 </div> 1479 </div> 1480</div> 1481 <div class="gl-post-card__main"> 1482 <div class="gl-post-card__main-content"> 1483 <div class="gl-post-card__metas-in-featured"> 1484 1485<div class="gl-post-card__metas"> 1486 <div class="gl-post-card__tags"> 1487 <a
1488 href="https://ubidots.com/blog/tag/modbus/" 1489 class="gl-post-card__tag" 1490 > 1491 Modbus 1492 </a> 1493 <span class="gl-post-card__featured"> 1494 <span> 1495 <svg 1496 width="20" 1497 height="20" 1498 class="gl-icon" 1499 > 1500 <use href="/blog/assets/images/icons.svg?v=0017488c26#sparkles" /> 1501 </svg> 1502</span> 1503 Featured 1504 </span> 1505 </div> 1506 <div class="gl-post-card__authors"> 1507 <div class="gl-post-card__avatars"> 1508 <a 1509 href="/blog/author/agustin/" 1510 class="gl-post-card__avatar author-0" 1511 aria-hidden="true" 1512 > 1513 <img 1514 data-src="/blog/assets/images/avatar.jpg?v=0017488c26" 1515 alt="" 1516 width="24" 1517 height="24" 1518 class="gl-post-card__avatar__default lazy" 1519 aria-hidden="true" 1520 > 1521 <img 1522 data-src="/blog/content/images/size/w100/2019/03/agustin-compressor.png" 1523 alt="Agustin Pelaez" 1524 width="24" 1525 height="24" 1526 class="gl-post-card__avatar__image lazy" 1527 > 1528 </a> 1529 <a 1530 href="/blog/author/adriano/" 1531 class="gl-post-card__avatar author-1" 1532 aria-hidden="true" 1533 > 1534 <img 1535 data-src="/blog/assets/images/avatar.jpg?v=0017488c26" 1536 alt="" 1537 width="24" 1538 height="24" 1539 class="gl-post-card__avatar__default lazy" 1540 aria-hidden="true" 1541 > 1542 <img 1543 data-src="/blog/content/images/size/w100/2022/11/adri2.jpeg" 1544 alt="Adriano Toro" 1545 width="24" 1546 height="24" 1547 class="gl-post-card__avatar__image lazy" 1548 > 1549 </a> 1550 </div> 1551 <div class="gl-post-card__names"> 1552 <a href="/blog/author/agustin/">Agustin Pelaez</a>, <a href="/blog/author/adriano/">Adriano Toro</a> 1553 </div> 1554 </div> 1555</div> 1556 </div> 1557 <div class="gl-post-card__main-text"> 1558 <h2 class="gl-post-card__title"> 1559 <a href="/blog/top-industrial-iot-gateways/"> 1560 Industrial IoT & Edge IoT Gateways: 10+ Best Models for 2025 (+Protocol & Price Table) 1561 </a> 1562 </h2> 1563 <p class="gl-post-card__excerpt"> 1564 Compare rugged IIoT, cellular-LTE and edge-AI gateways side-by-side (Moxa, Advantech, Siemensâ¦). Specs, Prices & FAQs updated 2025. 1565 </p> 1566 </div> 1567 <div class="gl-post-card__datetime"> 1568 <div class="gl-post-card__time"> 1569 <time datetime="2025-06-04"> 1570 Jun 04, 2025 1571 </time> 1572 <span>·</span> 1573 <span> 1574 17 min read 1575 </span> 1576 </div> 1577 </div> 1578 </div> 1579 </div> 1580</article> 1581 1582<article class="gl-post-card in-featured-section post tag-mqtt public last"> 1583 1584<div class="gl-post-card__metas"> 1585 <div class="gl-post-card__tags"> 1586 <a 1587 href="https://ubidots.com/blog/tag/mqtt/" 1588 class="gl-post-card__tag" 1589 > 1590 MQTT 1591 </a> 1592 </div> 1593 <div class="gl-post-card__authors"> 1594 <div class="gl-post-card__avatars"> 1595 <a 1596 href="/blog/author/agustin/" 1597 class="gl-post-card__avatar author-0" 1598 aria-hidden="true" 1599 > 1600 <img 1601 data-src="/blog/assets/images/avatar.jpg?v=0017488c26" 1602 alt="" 1603 width="24" 1604 height="24" 1605 class="gl-post-card__avatar__default lazy" 1606 aria-hidden="true" 1607 > 1608 <img 1609 data-src="/blog/content/images/size/w100/2019/03/agustin-compressor.png" 1610 alt="Agustin Pelaez" 1611 width="24" 1612 height="24" 1613 class="gl-post-card__avatar__image lazy" 1614 > 1615 </a> 1616 </div> 1617 <div class="gl-post-card__names"> 1618 <a href="/blog/author/agustin/">Agustin Pelaez</a> 1619 </div> 1620 </div> 1621</div> 1622 <div class="gl-post-card__main"> 1623 <a 1624 class="gl-post-card__image" 1625 href="/blog/mqtt-sparkplug-vs-plain-mqtt/" 1626 aria-hidden="true" 1627 tabindex="-1" 1628 > 1629 <img
1630 data-src="/blog/content/images/size/w720/2025/03/cover.png" 1631 alt="" 1632 width="300" 1633 height="200" 1634 class="lazy" 1635 /> 1636 </a> 1637 <div class="gl-post-card__main-content"> 1638 <div class="gl-post-card__metas-in-featured"> 1639 1640<div class="gl-post-card__metas"> 1641 <div class="gl-post-card__tags"> 1642 <a 1643 href="https://ubidots.com/blog/tag/mqtt/" 1644 class="gl-post-card__tag" 1645 > 1646 MQTT 1647 </a> 1648 </div> 1649 <div class="gl-post-card__authors"> 1650 <div class="gl-post-card__avatars"> 1651 <a 1652 href="/blog/author/agustin/" 1653 class="gl-post-card__avatar author-0" 1654 aria-hidden="true" 1655 > 1656 <img 1657 data-src="/blog/assets/images/avatar.jpg?v=0017488c26" 1658 alt="" 1659 width="24" 1660 height="24" 1661 class="gl-post-card__avatar__default lazy" 1662 aria-hidden="true" 1663 > 1664 <img 1665 data-src="/blog/content/images/size/w100/2019/03/agustin-compressor.png" 1666 alt="Agustin Pelaez" 1667 width="24" 1668 height="24" 1669 class="gl-post-card__avatar__image lazy" 1670 > 1671 </a> 1672 </div> 1673 <div class="gl-post-card__names"> 1674 <a href="/blog/author/agustin/">Agustin Pelaez</a> 1675 </div> 1676 </div> 1677</div> 1678 </div> 1679 <div class="gl-post-card__main-text"> 1680 <h2 class="gl-post-card__title"> 1681 <a href="/blog/mqtt-sparkplug-vs-plain-mqtt/"> 1682 MQTT Sparkplug vs. Plain MQTT: Why Sparkplug Matters for IIoT 1683 </a> 1684 </h2> 1685 <p class="gl-post-card__excerpt"> 1686 MQTT Sparkplug simplifies IIoT with structured data, real-time device state awareness, and seamless scalability for industrial networks. 1687 </p> 1688 </div> 1689 <div class="gl-post-card__datetime"> 1690 <div class="gl-post-card__time"> 1691 <time datetime="2025-03-12"> 1692 Mar 12, 2025 1693 </time> 1694 <span>·</span> 1695 <span> 1696 11 min read 1697 </span> 1698 </div> 1699 </div> 1700 </div> 1701 </div> 1702</article> 1703 </div> 1704 </div> 1705 <div class="gl-featured-section__pagination"> 1706 1707<nav 1708 class="gl-pagination" 1709 aria-label="Pagination" 1710> 1711 <a 1712 href="" 1713 class="gl-pagination__button prev disabled" 1714 tabindex="-1" 1715 > 1716 1717 <svg 1718 width="20" 1719 height="20" 1720 class="gl-icon" 1721 > 1722 <use href="/blog/assets/images/icons.svg?v=0017488c26#arrow-left" /> 1723 </svg> 1724 <span>Previous</span> 1725 </a> 1726 <span class="gl-pagination__label"> 1727 Page 1 of 19 1728 </span> 1729 <a 1730 href="/blog/page/2/" 1731 class="gl-pagination__button next " 1732 tabindex="0" 1733 > 1734 <span>Next</span> 1735 1736 <svg 1737 width="20" 1738 height="20" 1739 class="gl-icon" 1740 > 1741 <use href="/blog/assets/images/icons.svg?v=0017488c26#arrow-right" /> 1742 </svg> 1743 </a> 1744</nav> 1745 1746 </div> 1747 </div> 1748 <div class="js-tags-section" style="display: none;" data-tags=""> 1749 <div class="gl-wrapper"> 1750 <div class="gl-featured-section js-tags-section-content"></div> 1751 </div> 1752 </div> 1753 </div> 1754 <div class="gl-wrapper small"> 1755 1756 </div> 1757</main> 1758 1759 1760 </div> 1761 1762<footer x-data="footer()" class="gl-footer"> 1763 <div class="gl-wrapper medium"> 1764 <div class="gl-footer__wrapper"> 1765 <div class="gl-footer__main"> 1766 1767<a 1768 href="https://ubidots.com" 1769 title="Ubidots Blog" 1770 class="gl-logo flex-start" 1771> 1772 <img 1773 src="https://ubidots.com/blog/content/images/2024/09/logo-ghost-ubi.png" 1774 alt="" 1775 width="96" 1776 height="32" 1777 class="" 1778 > 1779</a> 1780 <div class="gl-footer__nav-wrapper"> 1781 <nav class="gl-footer__nav-section" aria-label="Main navigation"> 1782 <ul class="js-footer-list"> 1783 1784 <li class="nav-home"> 1785 <a href="https://ubidots.com"> 1786 Home 1787 </a> 1788 </li> 1789 <li class="nav-platform"> 1790 <a href="https://ubidots.com/platform"> 1791 Platform 1792 </a> 1793 </li> 1794 <li class="nav-pricing">
1795 <a href="https://ubidots.com/pricing"> 1796 Pricing 1797 </a> 1798 </li> 1799 <li class="nav-create-free-trial"> 1800 <a href="https://ubidots.com/signup"> 1801 Create free trial! 1802 </a> 1803 </li> 1804 1805 </ul> 1806 </nav> 1807 <nav class="gl-footer__nav-section" aria-label="Secondary navigation"> 1808 <ul class="js-footer-list"> 1809 1810 <li class="nav-api-docs"> 1811 <a href="https://docs.ubidots.com"> 1812 API Docs 1813 </a> 1814 </li> 1815 <li class="nav-help-center"> 1816 <a href="https://help.ubidots.com"> 1817 Help Center 1818 </a> 1819 </li> 1820 <li class="nav-dev-center"> 1821 <a href="https://dev.ubidots.com"> 1822 Dev Center 1823 </a> 1824 </li> 1825 <li class="nav-community-forum"> 1826 <a href="https://ubidots.com/community"> 1827 Community Forum 1828 </a> 1829 </li> 1830 <li class="nav-ubidots-stem"> 1831 <a href="https://ubidots.com/stem"> 1832 Ubidots STEM 1833 </a> 1834 </li> 1835 <li class="nav-enterprise"> 1836 <a href="https://ubidots.com/enterprise"> 1837 Enterprise 1838 </a> 1839 </li> 1840 <li class="nav-contact-us"> 1841 <a href="https://ubidots.com/contact"> 1842 Contact Us 1843 </a> 1844 </li> 1845 1846 </ul> 1847 </nav> 1848 <div class="gl-footer__nav-section"> 1849 <ul class="js-footer-list"> 1850 <li> 1851 <button class="gl-footer__action" data-ghost-search> 1852 1853 <svg 1854 width="16" 1855 height="16" 1856 class="gl-icon" 1857 > 1858 <use href="/blog/assets/images/icons.svg?v=0017488c26#search" /> 1859 </svg> 1860 Search 1861 </button> 1862 </li> 1863 <li> 1864 1865<div 1866 class="gl-footer__theme-selector-wrapper" 1867 x-data="themeSelector({ 1868 labels: { 1869 system: 'System theme', 1870 light: 'Light theme', 1871 dark: 'Dark theme' 1872 } 1873 })" 1874> 1875 <button 1876 x-ref="selector" 1877 class="gl-footer__action" 1878 @click="toggleSelector" 1879 @click.away="open = false" 1880 > 1881 <template x-if="savedThemeMode === 'system'"> 1882 1883 <svg 1884 width="16" 1885 height="16" 1886 class="gl-icon" 1887 > 1888 <use href="/blog/assets/images/icons.svg?v=0017488c26#system" /> 1889 </svg> 1890 </template> 1891 <template x-if="savedThemeMode === 'light'"> 1892 1893 <svg 1894 width="16" 1895 height="16" 1896 class="gl-icon" 1897 > 1898 <use href="/blog/assets/images/icons.svg?v=0017488c26#light" /> 1899 </svg> 1900 </template> 1901 <template x-if="savedThemeMode === 'dark'"> 1902 1903 <svg 1904 width="16" 1905 height="16" 1906 class="gl-icon" 1907 > 1908 <use href="/blog/assets/images/icons.svg?v=0017488c26#dark" /> 1909 </svg> 1910 </template> 1911 <span x-text="selectedLabel" class="truncable"></span> 1912 </button> 1913 <div 1914 x-show="open" 1915 x-transition 1916 x-cloak 1917 x-anchor.top.offset.12="$refs.selector" 1918 class="gl-footer__theme-selector" 1919 > 1920 <button class="gl-footer__action" @click="setThemeMode('system')"> 1921 1922 <svg 1923 width="16" 1924 height="16" 1925 class="gl-icon" 1926 > 1927 <use href="/blog/assets/images/icons.svg?v=0017488c26#system" /> 1928 </svg> 1929 System theme 1930 </button> 1931 <button class="gl-footer__action" @click="setThemeMode('light')"> 1932 1933 <svg 1934 width="16" 1935 height="16" 1936 class="gl-icon" 1937 > 1938 <use href="/blog/assets/images/icons.svg?v=0017488c26#light" /> 1939 </svg> 1940 Light theme 1941 </button> 1942 <button class="gl-footer__action" @click="setThemeMode('dark')"> 1943 1944 <svg 1945 width="16" 1946 height="16" 1947 class="gl-icon" 1948 > 1949 <use href="/blog/assets/images/icons.svg?v=0017488c26#dark" /> 1950 </svg> 1951 Dark theme 1952 </button> 1953 </div> 1954</div> 1955
1956<script> 1957 function themeSelector({labels}) { 1958 return { 1959 open: false, 1960 labels, 1961 selectedLabel: labels.system, 1962 savedThemeMode: 'system', 1963 init() { 1964 this.initThemeMode() 1965 }, 1966 toggleSelector() { 1967 this.open = !this.open 1968 }, 1969 initThemeMode() { 1970 this.savedThemeMode = this.getThemeMode() 1971 this.setThemeMode(this.savedThemeMode) 1972 1973 if (window.matchMedia) { 1974 window.matchMedia('(prefers-color-scheme: dark)') 1975 .addEventListener('change', this.updateSystemTheme.bind(this)) 1976 } 1977 }, 1978 updateSystemTheme() { 1979 if (this.savedThemeMode !== 'system') { 1980 return 1981 } 1982 1983 if (this.isSystemDark()) { 1984 this.setThemeMode('dark', false) 1985 } else { 1986 this.setThemeMode('light', false) 1987 } 1988 1989 this.selectedLabel = this.labels.system 1990 }, 1991 isSystemDark() { 1992 return window.matchMedia 1993 && window.matchMedia('(prefers-color-scheme: dark)').matches 1994 }, 1995 setThemeMode(mode, saveTheme = true) { 1996 this.selectedLabel = this.labels[mode] 1997 1998 const html = document.querySelector('html') 1999 html.setAttribute('theme-mode', mode) 2000 2001 if (saveTheme) { 2002 this.savedThemeMode = mode 2003 2004 if (mode === 'system') { 2005 this.updateSystemTheme() 2006 } 2007 2008 localStorage.setItem('glow-theme-mode', mode) 2009 } 2010 2011 this.rerenderGhostIframes() 2012 }, 2013 getThemeMode() { 2014 const localValue = localStorage.getItem('glow-theme-mode') 2015 2016 if (!localValue) { 2017 return 'system' 2018 } 2019 2020 return localValue 2021 }, 2022 rerenderGhostIframes() { 2023 const comments = document.querySelector('.js-comments > div > iframe') 2024 2025 if (comments) { 2026 comments.contentDocument.location.reload(true) 2027 } 2028 } 2029 } 2030 } 2031</script>
2031 2032 </li> 2033 </ul> 2034 </div> 2035 </div> 2036 </div> 2037 <div class="gl-footer__secondary"> 2038 2039<ul class="gl-social-links"> 2040 <li> 2041 <a href="https://twitter.com/ubidots" target="_blank" rel="noopener"> 2042 2043 <svg 2044 width="16" 2045 height="16" 2046 class="gl-icon" 2047 > 2048 <use href="/blog/assets/images/icons.svg?v=0017488c26#x" /> 2049 </svg> 2050 <span class="sr-only">X</span> 2051 </a> 2052 </li> 2053 <li> 2054 <a href="https://www.facebook.com/ubidots" target="_blank" rel="noopener"> 2055 2056 <svg 2057 width="16" 2058 height="16" 2059 class="gl-icon" 2060 > 2061 <use href="/blog/assets/images/icons.svg?v=0017488c26#facebook" /> 2062 </svg> 2063 <span class="sr-only">Facebook</span> 2064 </a> 2065 </li> 2066 <li> 2067 <a href="https://ubidots.com/blog/rss" target="_blank" rel="noopener"> 2068 2069 <svg 2070 width="16" 2071 height="16" 2072 class="gl-icon" 2073 > 2074 <use href="/blog/assets/images/icons.svg?v=0017488c26#rss" /> 2075 </svg> 2076 <span class="sr-only">RSS</span> 2077 </a> 2078 </li> 2079</ul> 2080 <p class="gl-footer__footnote"> 2081 Ubidots Team 2082 </p> 2083 </div> 2084 </div> 2085 </div> 2086</footer> 2087
2088<script> 2089 function footer() { 2090 return { 2091 init() { 2092 const footerLists = this.$el.querySelectorAll('.js-footer-list') 2093 footerLists.forEach((list) => { 2094 if (list.children.length === 0) { 2095 list.parentElement.remove() 2096 } 2097 }) 2098 } 2099 } 2100 } 2101</script>
2101 2102 </div> 2103 2104
2104<script src="/blog/assets/js/manifest.js?v=0017488c26" defer></script>
2104 2105
2105<script src="/blog/assets/js/vendor.js?v=0017488c26" defer></script>
2105 2106
2106<script src="/blog/assets/js/app.js?v=0017488c26" defer></script>
2106 2107 2108
2108<script defer src="/blog/assets/js/home.js?v=0017488c26"></script>
2108 2109 2110 2111
2111<script> 2112// Taken from https://forum.ghost.org/t/open-links-in-new-window/1726/4 2113$('a').each(function() { 2114 var a = new RegExp('/(ubidots.com|' + window.location.host + ')/'); 2115 if(!a.test(this.href)) { 2116 $(this).click(function(event) { 2117 event.preventDefault(); 2118 event.stopPropagation(); 2119 window.open(this.href, '_blank'); 2120 }); 2121 } 2122}); 2123 2124// https://highlightjs.org/ 2125activateHighlight = function() { 2126 document.querySelectorAll("pre code").forEach( 2127 function(currentValue, currentIndex, listObj) { 2128 hljs.highlightBlock(currentValue); 2129 } 2130 ); 2131} 2132 2133if (window.attachEvent) { 2134 window.attachEvent('onload', loadHighlight); 2135} else { 2136 if (window.onload) { 2137 var originalOnload = window.onload; 2138 var newOnload = function(evt) { 2139 originalOnload(evt); 2140 activateHighlight(evt); 2141 }; 2142 window.onload = newOnload; 2143 } else { 2144 window.onload = activateHighlight; 2145 } 2146} 2147</script>
2147 2148
2149<script> 2150(function(document, history, location) { 2151 var HISTORY_SUPPORT = !!(history && history.pushState); 2152 2153 var anchorScrolls = { 2154 ANCHOR_REGEX: /^#[^ ]+$/, 2155 OFFSET_HEIGHT_PX: 130, 2156 2157 /** 2158 * Establish events, and fix initial scroll position if a hash is provided. 2159 */ 2160 init: function() { 2161 this.scrollToCurrent(); 2162 $(window).on('hashchange', $.proxy(this, 'scrollToCurrent')); 2163 $('body').on('click', 'a', $.proxy(this, 'delegateAnchors')); 2164 }, 2165 2166 /** 2167 * Return the offset amount to deduct from the normal scroll position. 2168 * Modify as appropriate to allow for dynamic calculations 2169 */ 2170 getFixedOffset: function() { 2171 return this.OFFSET_HEIGHT_PX; 2172 }, 2173 2174 /** 2175 * If the provided href is an anchor which resolves to an element on the 2176 * page, scroll to it. 2177 * @param {String} href 2178 * @return {Boolean} - Was the href an anchor. 2179 */ 2180 scrollIfAnchor: function(href, pushToHistory) { 2181 var match, anchorOffset; 2182 2183 if(!this.ANCHOR_REGEX.test(href)) { 2184 return false; 2185 } 2186 2187 match = document.getElementById(href.slice(1)); 2188 2189 if(match) { 2190 anchorOffset = $(match).offset().top - this.getFixedOffset(); 2191 $('html, body').animate({ scrollTop: anchorOffset}); 2192 2193 // Add the state to history as-per normal anchor links 2194 if(HISTORY_SUPPORT && pushToHistory) { 2195 history.pushState({}, document.title, location.pathname + href); 2196 } 2197 } 2198 2199 return !!match; 2200 }, 2201 2202 /** 2203 * Attempt to scroll to the current location's hash. 2204 */ 2205 scrollToCurrent: function(e) { 2206 if(this.scrollIfAnchor(window.location.hash) && e) { 2207 e.preventDefault(); 2208 } 2209 }, 2210 2211 /** 2212 * If the click event's target was an anchor, fix the scroll position. 2213 */ 2214 delegateAnchors: function(e) { 2215 var elem = e.target; 2216 if(elem.getAttribute('href') != '#subscribe'){ 2217 if(this.scrollIfAnchor(elem.getAttribute('href'), true)) { 2218 e.preventDefault(); 2219 } 2220 } 2221 } 2222 }; 2223 $(window).on( "load", $.proxy(anchorScrolls, 'init')); 2224 //$(document).ready($.proxy(anchorScrolls, 'init')); 2225})(window.document, window.history, window.location); 2226</script>
vendor: 1 bytes, line 2226
2226
2227<script> 2228 document.addEventListener('DOMContentLoaded', function() { 2229 var links = document.querySelectorAll('a'); 2230 links.forEach(function(link) { 2231 if (link.hostname != window.location.hostname) { 2232 link.target = '_blank'; 2233 } 2234 }); 2235 }); 2236</script>
2236 2237 2238 </body> 2239</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.