PageSourceSearch

https://ubidots.com/blog/

html ubidots.com collected 2026-10-01 10:42:49 UTC 64,962 bytes, 2,253 lines download raw bytes

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 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      <a
765        class="gl-post-card__image"
766        href="/blog/ml-vs-llm-5-prompts-that-break-llms-and-how-ml-tool-calling-fixes-them/"
767        aria-hidden="true"
768        tabindex="-1"
769      >
770        <img
771          data-src="/blog/content/images/size/w720/2026/09/scene-agent-pump.png"
772          alt=""
773          width="300"
774          height="200"
775          class="lazy"
776        />
777      </a>
778    <div class="gl-post-card__main-content">
779      <div class="gl-post-card__metas-in-featured">
780        
781<div class="gl-post-card__metas">
782  <div class="gl-post-card__tags">
783      <a
784        href="https://ubidots.com/blog/tag/ai/"
785        class="gl-post-card__tag"
786      >
787        AI
788      </a>
789  </div>
790    <div class="gl-post-card__authors">
791      <div class="gl-post-card__avatars">
792          <a
793            href="/blog/author/ubidots/"
794            class="gl-post-card__avatar author-0"
795            aria-hidden="true"
796          >
797            <img
798              data-src="/blog/assets/images/avatar.jpg?v=0017488c26"
799              alt=""
800              width="24"
801              height="24"
802              class="gl-post-card__avatar__default lazy"
803              aria-hidden="true"
804            >
805          </a>
806      </div>
807      <div class="gl-post-card__names">
808        <a href="/blog/author/ubidots/">Ubidots</a>
809      </div>
810    </div>
811</div>
812      </div>
813      <div class="gl-post-card__main-text">
814        <h2 class="gl-post-card__title">
815          <a href="/blog/ml-vs-llm-5-prompts-that-break-llms-and-how-ml-tool-calling-fixes-them/">
816            ML vs LLM: 5 Prompts That Break LLMs — and How ML Tool-Calling Fixes Them
817          </a>
818        </h2>
819          <p class="gl-post-card__excerpt">
820            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.
821          </p>
822      </div>
823      <div class="gl-post-card__datetime">
824        <div class="gl-post-card__time">
825          <time datetime="2026-07-09">
826            Jul 09, 2026
827          </time>
828            <span>·</span>
829            <span>
830              16 min read
831            </span>
832        </div>
833      </div>
834    </div>
835  </div>
836</article>
837              
838<article class="gl-post-card in-featured-section post tag-eagle-io tag-iot-platforms tag-scada tag-environmental-monitoring-2 tag-comparison public   ">
839  
840<div class="gl-post-card__metas">
841  <div class="gl-post-card__tags">
842      <a
843        href="https://ubidots.com/blog/tag/eagle-io/"
844        class="gl-post-card__tag"
845      >
846        eagle-io
847      </a>
848  </div>
849    <div class="gl-post-card__authors">
850      <div class="gl-post-card__avatars">
851          <a
852            href="/blog/author/ubidots/"
853            class="gl-post-card__avatar author-0"
854            aria-hidden="true"
855          >
856            <img
857              data-src="/blog/assets/images/avatar.jpg?v=0017488c26"
858              alt=""
859              width="24"
860              height="24"
861              class="gl-post-card__avatar__default lazy"
862              aria-hidden="true"
863            >
864          </a>
865      </div>
866      <div class="gl-post-card__names">
867        <a href="/blog/author/ubidots/">Ubidots</a>
868      </div>
869    </div>
870</div>
871  <div class="gl-post-card__main">
872      <a
873        class="gl-post-card__image"
874        href="/blog/eagle-io-alternatives-ubidots/"
875        aria-hidden="true"
876        tabindex="-1"
877      >
878        <img
879          data-src="/blog/content/images/size/w720/2026/05/eagle-io-alternative-ubidots-dashboard-comparison.webp"
880          alt="Ubidots dashboard vs Eagle.io folder-tree UI — Eagle.io alternative comparison"
881          width="300"
882          height="200"
883          class="lazy"
884        />
885      </a>
886    <div class="gl-post-card__main-content">
887      <div class="gl-post-card__metas-in-featured">
888        
889<div class="gl-post-card__metas">
890  <div class="gl-post-card__tags">
891      <a
892        href="https://ubidots.com/blog/tag/eagle-io/"
893        class="gl-post-card__tag"
894      >
895        eagle-io
896      </a>
897  </div>
898    <div class="gl-post-card__authors">
899      <div class="gl-post-card__avatars">
900          <a
901            href="/blog/author/ubidots/"
902            class="gl-post-card__avatar author-0"
903            aria-hidden="true"
904          >
905            <img
906              data-src="/blog/assets/images/avatar.jpg?v=0017488c26"
907              alt=""
908              width="24"
909              height="24"
910              class="gl-post-card__avatar__default lazy"
911              aria-hidden="true"
912            >
913          </a>
914      </div>
915      <div class="gl-post-card__names">
916        <a href="/blog/author/ubidots/">Ubidots</a>
917      </div>
918    </div>
919</div>
920      </div>
921      <div class="gl-post-card__main-text">
922        <h2 class="gl-post-card__title">
923          <a href="/blog/eagle-io-alternatives-ubidots/">
924            Eagle.io Alternatives: How Ubidots Compares After the Bentley Acquisition (2026)
925          </a>
926        </h2>
927          <p class="gl-post-card__excerpt">
928            &quot;No development for 3 years&quot; — and the bill is climbing toward $20K/month. Here&#x27;s how Ubidots compares to Eagle.io on pricing, multi-tenancy, Python scripting, and white labeling after the Bentley acquisition.
929          </p>
930      </div>
931      <div class="gl-post-card__datetime">
932        <div class="gl-post-card__time">
933          <time datetime="2026-05-26">
934            May 26, 2026
935          </time>
936            <span>·</span>
937            <span>
938              17 min read
939            </span>
940        </div>
941      </div>
942    </div>
943  </div>
944</article>
945              
946<article class="gl-post-card in-featured-section post tag-industrial-iot tag-iot tag-water-management tag-scada tag-modbus public   ">
947  
948<div class="gl-post-card__metas">
949  <div class="gl-post-card__tags">
950      <a
951        href="https://ubidots.com/blog/tag/industrial-iot/"
952        class="gl-post-card__tag"
953      >
954        Industrial IoT
955      </a>
956  </div>
957    <div class="gl-post-card__authors">
958      <div class="gl-post-card__avatars">
959          <a
960            href="/blog/author/cristina/"
961            class="gl-post-card__avatar author-0"
962            aria-hidden="true"
963          >
964            <img
965              data-src="/blog/assets/images/avatar.jpg?v=0017488c26"
966              alt=""
967              width="24"
968              height="24"
969              class="gl-post-card__avatar__default lazy"
970              aria-hidden="true"
971            >
972              <img
973                data-src="/blog/content/images/size/w100/2019/06/Image-from-iOS--1--1.jpg"
974                alt="Cristina Botero"
975                width="24"
976                height="24"
977                class="gl-post-card__avatar__image lazy"
978              >
979          </a>
980      </div>
981      <div class="gl-post-card__names">
982        <a href="/blog/author/cristina/">Cristina Botero</a>
983      </div>
984    </div>
985</div>
986  <div class="gl-post-card__main">
987      <a
988        class="gl-post-card__image"
989        href="/blog/iot-water-infrastructure-monitoring/"
990        aria-hidden="true"
991        tabindex="-1"
992      >
993        <img
994          data-src="/blog/content/images/size/w720/2025/03/abc-1.png"
995          alt=""
996          width="300"
997          height="200"
998          class="lazy"
999        />
1000      </a>
1001    <div class="gl-post-card__main-content">
1002      <div class="gl-post-card__metas-in-featured">
1003        
1004<div class="gl-post-card__metas">
1005  <div class="gl-post-card__tags">
1006      <a
1007        href="https://ubidots.com/blog/tag/industrial-iot/"
1008        class="gl-post-card__tag"
1009      >
1010        Industrial IoT
1011      </a>
1012  </div>
1013    <div class="gl-post-card__authors">
1014      <div class="gl-post-card__avatars">
1015          <a
1016            href="/blog/author/cristina/"
1017            class="gl-post-card__avatar author-0"
1018            aria-hidden="true"
1019          >
1020            <img
1021              data-src="/blog/assets/images/avatar.jpg?v=0017488c26"
1022              alt=""
1023              width="24"
1024              height="24"
1025              class="gl-post-card__avatar__default lazy"
1026              aria-hidden="true"
1027            >
1028              <img
1029                data-src="/blog/content/images/size/w100/2019/06/Image-from-iOS--1--1.jpg"
1030                alt="Cristina Botero"
1031                width="24"
1032                height="24"
1033                class="gl-post-card__avatar__image lazy"
1034              >
1035          </a>
1036      </div>
1037      <div class="gl-post-card__names">
1038        <a href="/blog/author/cristina/">Cristina Botero</a>
1039      </div>
1040    </div>
1041</div>
1042      </div>
1043      <div class="gl-post-card__main-text">
1044        <h2 class="gl-post-card__title">
1045          <a href="/blog/iot-water-infrastructure-monitoring/">
1046            IoT Water Infrastructure Monitoring: How Smart Pumping Stations Cut Costs by 15%
1047          </a>
1048        </h2>
1049          <p class="gl-post-card__excerpt">
1050            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.
1051          </p>
1052      </div>
1053      <div class="gl-post-card__datetime">
1054        <div class="gl-post-card__time">
1055          <time datetime="2026-02-12">
1056            Feb 12, 2026
1057          </time>
1058            <span>·</span>
1059            <span>
1060              9 min read
1061            </span>
1062        </div>
1063      </div>
1064    </div>
1065  </div>
1066</article>
1067              
1068<article class="gl-post-card in-featured-section post tag-industrial-iot tag-energy-management tag-modbus tag-predictive-maintenance tag-scada public   ">
1069  
1070<div class="gl-post-card__metas">
1071  <div class="gl-post-card__tags">
1072      <a
1073        href="https://ubidots.com/blog/tag/industrial-iot/"
1074        class="gl-post-card__tag"
1075      >
1076        Industrial IoT
1077      </a>
1078  </div>
1079    <div class="gl-post-card__authors">
1080      <div class="gl-post-card__avatars">
1081          <a
1082            href="/blog/author/agustin/"
1083            class="gl-post-card__avatar author-0"
1084            aria-hidden="true"
1085          >
1086            <img
1087              data-src="/blog/assets/images/avatar.jpg?v=0017488c26"
1088              alt=""
1089              width="24"
1090              height="24"
1091              class="gl-post-card__avatar__default lazy"
1092              aria-hidden="true"
1093            >
1094              <img
1095                data-src="/blog/content/images/size/w100/2019/03/agustin-compressor.png"
1096                alt="Agustin Pelaez"
1097                width="24"
1098                height="24"
1099                class="gl-post-card__avatar__image lazy"
1100              >
1101          </a>
1102      </div>
1103      <div class="gl-post-card__names">
1104        <a href="/blog/author/agustin/">Agustin Pelaez</a>
1105      </div>
1106    </div>
1107</div>
1108  <div class="gl-post-card__main">
1109      <a
1110        class="gl-post-card__image"
1111        href="/blog/industrial-iot-applications/"
1112        aria-hidden="true"
1113        tabindex="-1"
1114      >
1115        <img
1116          data-src="/blog/content/images/size/w720/2026/01/979540537-1.jpg"
1117          alt=""
1118          width="300"
1119          height="200"
1120          class="lazy"
1121        />
1122      </a>
1123    <div class="gl-post-card__main-content">
1124      <div class="gl-post-card__metas-in-featured">
1125        
1126<div class="gl-post-card__metas">
1127  <div class="gl-post-card__tags">
1128      <a
1129        href="https://ubidots.com/blog/tag/industrial-iot/"
1130        class="gl-post-card__tag"
1131      >
1132        Industrial IoT
1133      </a>
1134  </div>
1135    <div class="gl-post-card__authors">
1136      <div class="gl-post-card__avatars">
1137          <a
1138            href="/blog/author/agustin/"
1139            class="gl-post-card__avatar author-0"
1140            aria-hidden="true"
1141          >
1142            <img
1143              data-src="/blog/assets/images/avatar.jpg?v=0017488c26"
1144              alt=""
1145              width="24"
1146              height="24"
1147              class="gl-post-card__avatar__default lazy"
1148              aria-hidden="true"
1149            >
1150              <img
1151                data-src="/blog/content/images/size/w100/2019/03/agustin-compressor.png"
1152                alt="Agustin Pelaez"
1153                width="24"
1154                height="24"
1155                class="gl-post-card__avatar__image lazy"
1156              >
1157          </a>
1158      </div>
1159      <div class="gl-post-card__names">
1160        <a href="/blog/author/agustin/">Agustin Pelaez</a>
1161      </div>
1162    </div>
1163</div>
1164      </div>
1165      <div class="gl-post-card__main-text">
1166        <h2 class="gl-post-card__title">
1167          <a href="/blog/industrial-iot-applications/">
1168            5 Industrial IoT Applications With Real Examples (2026)
1169          </a>
1170        </h2>
1171          <p class="gl-post-card__excerpt">
1172            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.
1173          </p>
1174      </div>
1175      <div class="gl-post-card__datetime">
1176        <div class="gl-post-card__time">
1177          <time datetime="2026-01-13">
1178            Jan 13, 2026
1179          </time>
1180            <span>·</span>
1181            <span>
1182              13 min read
1183            </span>
1184        </div>
1185      </div>
1186    </div>
1187  </div>
1188</article>
1189              
1190<article class="gl-post-card in-featured-section post tag-scada public   ">
1191  
1192<div class="gl-post-card__metas">
1193  <div class="gl-post-card__tags">
1194      <a
1195        href="https://ubidots.com/blog/tag/scada/"
1196        class="gl-post-card__tag"
1197      >
1198        scada
1199      </a>
1200  </div>
1201    <div class="gl-post-card__authors">
1202      <div class="gl-post-card__avatars">
1203          <a
1204            href="/blog/author/agustin/"
1205            class="gl-post-card__avatar author-0"
1206            aria-hidden="true"
1207          >
1208            <img
1209              data-src="/blog/assets/images/avatar.jpg?v=0017488c26"
1210              alt=""
1211              width="24"
1212              height="24"
1213              class="gl-post-card__avatar__default lazy"
1214              aria-hidden="true"
1215            >
1216              <img
1217                data-src="/blog/content/images/size/w100/2019/03/agustin-compressor.png"
1218                alt="Agustin Pelaez"
1219                width="24"
1220                height="24"
1221                class="gl-post-card__avatar__image lazy"
1222              >
1223          </a>
1224      </div>
1225      <div class="gl-post-card__names">
1226        <a href="/blog/author/agustin/">Agustin Pelaez</a>
1227      </div>
1228    </div>
1229</div>
1230  <div class="gl-post-card__main">
1231      <a
1232        class="gl-post-card__image"
1233        href="/blog/what-is-scada/"
1234        aria-hidden="true"
1235        tabindex="-1"
1236      >
1237        <img
1238          data-src="/blog/content/images/size/w720/2024/10/SCADA-feature-image.jpg"
1239          alt=""
1240          width="300"
1241          height="200"
1242          class="lazy"
1243        />
1244      </a>
1245    <div class="gl-post-card__main-content">
1246      <div class="gl-post-card__metas-in-featured">
1247        
1248<div class="gl-post-card__metas">
1249  <div class="gl-post-card__tags">
1250      <a
1251        href="https://ubidots.com/blog/tag/scada/"
1252        class="gl-post-card__tag"
1253      >
1254        scada
1255      </a>
1256  </div>
1257    <div class="gl-post-card__authors">
1258      <div class="gl-post-card__avatars">
1259          <a
1260            href="/blog/author/agustin/"
1261            class="gl-post-card__avatar author-0"
1262            aria-hidden="true"
1263          >
1264            <img
1265              data-src="/blog/assets/images/avatar.jpg?v=0017488c26"
1266              alt=""
1267              width="24"
1268              height="24"
1269              class="gl-post-card__avatar__default lazy"
1270              aria-hidden="true"
1271            >
1272              <img
1273                data-src="/blog/content/images/size/w100/2019/03/agustin-compressor.png"
1274                alt="Agustin Pelaez"
1275                width="24"
1276                height="24"
1277                class="gl-post-card__avatar__image lazy"
1278              >
1279          </a>
1280      </div>
1281      <div class="gl-post-card__names">
1282        <a href="/blog/author/agustin/">Agustin Pelaez</a>
1283      </div>
1284    </div>
1285</div>
1286      </div>
1287      <div class="gl-post-card__main-text">
1288        <h2 class="gl-post-card__title">
1289          <a href="/blog/what-is-scada/">
1290            What is SCADA? Supervisory Control &amp; Data Acquisition Explained
1291          </a>
1292        </h2>
1293          <p class="gl-post-card__excerpt">
1294            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.
1295          </p>
1296      </div>
1297      <div class="gl-post-card__datetime">
1298        <div class="gl-post-card__time">
1299          <time datetime="2025-07-06">
1300            Jul 06, 2025
1301          </time>
1302            <span>·</span>
1303            <span>
1304              15 min read
1305            </span>
1306        </div>
1307      </div>
1308    </div>
1309  </div>
1310</article>
1311              
1312<article class="gl-post-card in-featured-section post public no-primary-tag  ">
1313  
1314<div class="gl-post-card__metas">
1315  <div class="gl-post-card__tags">
1316  </div>
1317    <div class="gl-post-card__authors">
1318      <div class="gl-post-card__avatars">
1319          <a
1320            href="/blog/author/agustin/"
1321            class="gl-post-card__avatar author-0"
1322            aria-hidden="true"
1323          >
1324            <img
1325              data-src="/blog/assets/images/avatar.jpg?v=0017488c26"
1326              alt=""
1327              width="24"
1328              height="24"
1329              class="gl-post-card__avatar__default lazy"
1330              aria-hidden="true"
1331            >
1332              <img
1333                data-src="/blog/content/images/size/w100/2019/03/agustin-compressor.png"
1334                alt="Agustin Pelaez"
1335                width="24"
1336                height="24"
1337                class="gl-post-card__avatar__image lazy"
1338              >
1339          </a>
1340      </div>
1341      <div class="gl-post-card__names">
1342        <a href="/blog/author/agustin/">Agustin Pelaez</a>
1343      </div>
1344    </div>
1345</div>
1346  <div class="gl-post-card__main">
1347      <a
1348        class="gl-post-card__image"
1349        href="/blog/aws-iot-core/"
1350        aria-hidden="true"
1351        tabindex="-1"
1352      >
1353        <img
1354          data-src="/blog/content/images/size/w720/2025/06/1.png"
1355          alt=""
1356          width="300"
1357          height="200"
1358          class="lazy"
1359        />
1360      </a>
1361    <div class="gl-post-card__main-content">
1362      <div class="gl-post-card__metas-in-featured">
1363        
1364<div class="gl-post-card__metas">
1365  <div class="gl-post-card__tags">
1366  </div>
1367    <div class="gl-post-card__authors">
1368      <div class="gl-post-card__avatars">
1369          <a
1370            href="/blog/author/agustin/"
1371            class="gl-post-card__avatar author-0"
1372            aria-hidden="true"
1373          >
1374            <img
1375              data-src="/blog/assets/images/avatar.jpg?v=0017488c26"
1376              alt=""
1377              width="24"
1378              height="24"
1379              class="gl-post-card__avatar__default lazy"
1380              aria-hidden="true"
1381            >
1382              <img
1383                data-src="/blog/content/images/size/w100/2019/03/agustin-compressor.png"
1384                alt="Agustin Pelaez"
1385                width="24"
1386                height="24"
1387                class="gl-post-card__avatar__image lazy"
1388              >
1389          </a>
1390      </div>
1391      <div class="gl-post-card__names">
1392        <a href="/blog/author/agustin/">Agustin Pelaez</a>
1393      </div>
1394    </div>
1395</div>
1396      </div>
1397      <div class="gl-post-card__main-text">
1398        <h2 class="gl-post-card__title">
1399          <a href="/blog/aws-iot-core/">
1400            Getting started with AWS IoT Core
1401          </a>
1402        </h2>
1403          <p class="gl-post-card__excerpt">
1404            Discover what AWS IoT Core is, how it works, and why it&#x27;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.
1405          </p>
1406      </div>
1407      <div class="gl-post-card__datetime">
1408        <div class="gl-post-card__time">
1409          <time datetime="2025-06-24">
1410            Jun 24, 2025
1411          </time>
1412            <span>·</span>
1413            <span>
1414              14 min read
1415            </span>
1416        </div>
1417      </div>
1418    </div>
1419  </div>
1420</article>
1421              
1422<article class="gl-post-card in-featured-section post tag-modbus featured no-image public   ">
1423  
1424<div class="gl-post-card__metas">
1425  <div class="gl-post-card__tags">
1426      <a
1427        href="https://ubidots.com/blog/tag/modbus/"
1428        class="gl-post-card__tag"
1429      >
1430        Modbus
1431      </a>
1432      <span class="gl-post-card__featured">
1433          <span>
1434  <svg
1435    width="20"
1436    height="20"
1437    class="gl-icon"
1438  >
1439    <use href="/blog/assets/images/icons.svg?v=0017488c26#sparkles" />
1440  </svg>
1441</span>
1442        Featured
1443        </span>
1444  </div>
1445    <div class="gl-post-card__authors">
1446      <div class="gl-post-card__avatars">
1447          <a
1448            href="/blog/author/agustin/"
1449            class="gl-post-card__avatar author-0"
1450            aria-hidden="true"
1451          >
1452            <img
1453              data-src="/blog/assets/images/avatar.jpg?v=0017488c26"
1454              alt=""
1455              width="24"
1456              height="24"
1457              class="gl-post-card__avatar__default lazy"
1458              aria-hidden="true"
1459            >
1460              <img
1461                data-src="/blog/content/images/size/w100/2019/03/agustin-compressor.png"
1462                alt="Agustin Pelaez"
1463                width="24"
1464                height="24"
1465                class="gl-post-card__avatar__image lazy"
1466              >
1467          </a>
1468          <a
1469            href="/blog/author/adriano/"
1470            class="gl-post-card__avatar author-1"
1471            aria-hidden="true"
1472          >
1473            <img
1474              data-src="/blog/assets/images/avatar.jpg?v=0017488c26"
1475              alt=""
1476              width="24"
1477              height="24"
1478              class="gl-post-card__avatar__default lazy"
1479              aria-hidden="true"
1480            >
1481              <img
1482                data-src="/blog/content/images/size/w100/2022/11/adri2.jpeg"
1483                alt="Adriano Toro"
1484                width="24"
1485                height="24"
1486                class="gl-post-card__avatar__image lazy"
1487              >
1488          </a>
1489      </div>
1490      <div class="gl-post-card__names">
1491        <a href="/blog/author/agustin/">Agustin Pelaez</a>, <a href="/blog/author/adriano/">Adriano Toro</a>
1492      </div>
1493    </div>
1494</div>
1495  <div class="gl-post-card__main">
1496    <div class="gl-post-card__main-content">
1497      <div class="gl-post-card__metas-in-featured">
1498        
1499<div class="gl-post-card__metas">
1500  <div class="gl-post-card__tags">
1501      <a
1502        href="https://ubidots.com/blog/tag/modbus/"
1503        class="gl-post-card__tag"
1504      >
1505        Modbus
1506      </a>
1507      <span class="gl-post-card__featured">
1508          <span>
1509  <svg
1510    width="20"
1511    height="20"
1512    class="gl-icon"
1513  >
1514    <use href="/blog/assets/images/icons.svg?v=0017488c26#sparkles" />
1515  </svg>
1516</span>
1517        Featured
1518        </span>
1519  </div>
1520    <div class="gl-post-card__authors">
1521      <div class="gl-post-card__avatars">
1522          <a
1523            href="/blog/author/agustin/"
1524            class="gl-post-card__avatar author-0"
1525            aria-hidden="true"
1526          >
1527            <img
1528              data-src="/blog/assets/images/avatar.jpg?v=0017488c26"
1529              alt=""
1530              width="24"
1531              height="24"
1532              class="gl-post-card__avatar__default lazy"
1533              aria-hidden="true"
1534            >
1535              <img
1536                data-src="/blog/content/images/size/w100/2019/03/agustin-compressor.png"
1537                alt="Agustin Pelaez"
1538                width="24"
1539                height="24"
1540                class="gl-post-card__avatar__image lazy"
1541              >
1542          </a>
1543          <a
1544            href="/blog/author/adriano/"
1545            class="gl-post-card__avatar author-1"
1546            aria-hidden="true"
1547          >
1548            <img
1549              data-src="/blog/assets/images/avatar.jpg?v=0017488c26"
1550              alt=""
1551              width="24"
1552              height="24"
1553              class="gl-post-card__avatar__default lazy"
1554              aria-hidden="true"
1555            >
1556              <img
1557                data-src="/blog/content/images/size/w100/2022/11/adri2.jpeg"
1558                alt="Adriano Toro"
1559                width="24"
1560                height="24"
1561                class="gl-post-card__avatar__image lazy"
1562              >
1563          </a>
1564      </div>
1565      <div class="gl-post-card__names">
1566        <a href="/blog/author/agustin/">Agustin Pelaez</a>, <a href="/blog/author/adriano/">Adriano Toro</a>
1567      </div>
1568    </div>
1569</div>
1570      </div>
1571      <div class="gl-post-card__main-text">
1572        <h2 class="gl-post-card__title">
1573          <a href="/blog/top-industrial-iot-gateways/">
1574            Industrial IoT &amp; Edge IoT Gateways: 10+ Best Models for 2025 (+Protocol &amp; Price Table)
1575          </a>
1576        </h2>
1577          <p class="gl-post-card__excerpt">
1578            Compare rugged IIoT, cellular-LTE and edge-AI gateways side-by-side (Moxa, Advantech, Siemens…). Specs, Prices &amp; FAQs updated 2025.
1579          </p>
1580      </div>
1581      <div class="gl-post-card__datetime">
1582        <div class="gl-post-card__time">
1583          <time datetime="2025-06-04">
1584            Jun 04, 2025
1585          </time>
1586            <span>·</span>
1587            <span>
1588              17 min read
1589            </span>
1590        </div>
1591      </div>
1592    </div>
1593  </div>
1594</article>
1595              
1596<article class="gl-post-card in-featured-section post tag-mqtt public   last">
1597  
1598<div class="gl-post-card__metas">
1599  <div class="gl-post-card__tags">
1600      <a
1601        href="https://ubidots.com/blog/tag/mqtt/"
1602        class="gl-post-card__tag"
1603      >
1604        MQTT
1605      </a>
1606  </div>
1607    <div class="gl-post-card__authors">
1608      <div class="gl-post-card__avatars">
1609          <a
1610            href="/blog/author/agustin/"
1611            class="gl-post-card__avatar author-0"
1612            aria-hidden="true"
1613          >
1614            <img
1615              data-src="/blog/assets/images/avatar.jpg?v=0017488c26"
1616              alt=""
1617              width="24"
1618              height="24"
1619              class="gl-post-card__avatar__default lazy"
1620              aria-hidden="true"
1621            >
1622              <img
1623                data-src="/blog/content/images/size/w100/2019/03/agustin-compressor.png"
1624                alt="Agustin Pelaez"
1625                width="24"
1626                height="24"
1627                class="gl-post-card__avatar__image lazy"
1628              >
1629          </a>
1630      </div>
1631      <div class="gl-post-card__names">
1632        <a href="/blog/author/agustin/">Agustin Pelaez</a>
1633      </div>
1634    </div>
1635</div>
1636  <div class="gl-post-card__main">
1637      <a
1638        class="gl-post-card__image"
1639        href="/blog/mqtt-sparkplug-vs-plain-mqtt/"
1640        aria-hidden="true"
1641        tabindex="-1"
1642      >
1643        <img
1644          data-src="/blog/content/images/size/w720/2025/03/cover.png"
1645          alt=""
1646          width="300"
1647          height="200"
1648          class="lazy"
1649        />
1650      </a>
1651    <div class="gl-post-card__main-content">
1652      <div class="gl-post-card__metas-in-featured">
1653        
1654<div class="gl-post-card__metas">
1655  <div class="gl-post-card__tags">
1656      <a
1657        href="https://ubidots.com/blog/tag/mqtt/"
1658        class="gl-post-card__tag"
1659      >
1660        MQTT
1661      </a>
1662  </div>
1663    <div class="gl-post-card__authors">
1664      <div class="gl-post-card__avatars">
1665          <a
1666            href="/blog/author/agustin/"
1667            class="gl-post-card__avatar author-0"
1668            aria-hidden="true"
1669          >
1670            <img
1671              data-src="/blog/assets/images/avatar.jpg?v=0017488c26"
1672              alt=""
1673              width="24"
1674              height="24"
1675              class="gl-post-card__avatar__default lazy"
1676              aria-hidden="true"
1677            >
1678              <img
1679                data-src="/blog/content/images/size/w100/2019/03/agustin-compressor.png"
1680                alt="Agustin Pelaez"
1681                width="24"
1682                height="24"
1683                class="gl-post-card__avatar__image lazy"
1684              >
1685          </a>
1686      </div>
1687      <div class="gl-post-card__names">
1688        <a href="/blog/author/agustin/">Agustin Pelaez</a>
1689      </div>
1690    </div>
1691</div>
1692      </div>
1693      <div class="gl-post-card__main-text">
1694        <h2 class="gl-post-card__title">
1695          <a href="/blog/mqtt-sparkplug-vs-plain-mqtt/">
1696            MQTT Sparkplug vs. Plain MQTT: Why Sparkplug Matters for IIoT
1697          </a>
1698        </h2>
1699          <p class="gl-post-card__excerpt">
1700            MQTT Sparkplug simplifies IIoT with structured data, real-time device state awareness, and seamless scalability for industrial networks.
1701          </p>
1702      </div>
1703      <div class="gl-post-card__datetime">
1704        <div class="gl-post-card__time">
1705          <time datetime="2025-03-12">
1706            Mar 12, 2025
1707          </time>
1708            <span>·</span>
1709            <span>
1710              11 min read
1711            </span>
1712        </div>
1713      </div>
1714    </div>
1715  </div>
1716</article>
1717          </div>
1718        </div>
1719          <div class="gl-featured-section__pagination">
1720            
1721<nav
1722  class="gl-pagination"
1723  aria-label="Pagination"
1724>
1725  <a
1726    href=""
1727    class="gl-pagination__button prev disabled"
1728    tabindex="-1"
1729  >
1730    
1731  <svg
1732    width="20"
1733    height="20"
1734    class="gl-icon"
1735  >
1736    <use href="/blog/assets/images/icons.svg?v=0017488c26#arrow-left" />
1737  </svg>
1738    <span>Previous</span>
1739  </a>
1740  <span class="gl-pagination__label">
1741    Page 1 of 19
1742  </span>
1743  <a
1744    href="/blog/page/2/"
1745    class="gl-pagination__button next "
1746    tabindex="0"
1747  >
1748    <span>Next</span>
1749    
1750  <svg
1751    width="20"
1752    height="20"
1753    class="gl-icon"
1754  >
1755    <use href="/blog/assets/images/icons.svg?v=0017488c26#arrow-right" />
1756  </svg>
1757  </a>
1758</nav>
1759
1760          </div>
1761      </div>
1762        <div class="js-tags-section" style="display: none;" data-tags="">
1763          <div class="gl-wrapper">
1764            <div class="gl-featured-section js-tags-section-content"></div>
1765          </div>
1766        </div>
1767    </div>
1768  <div class="gl-wrapper small">
1769    
1770  </div>
1771</main>
1772
1773
1774      </div>
1775      
1776<footer x-data="footer()" class="gl-footer">
1777  <div class="gl-wrapper medium">
1778    <div class="gl-footer__wrapper">
1779      <div class="gl-footer__main">
1780        
1781<a
1782  href="https://ubidots.com"
1783  title="Ubidots Blog"
1784  class="gl-logo flex-start"
1785>
1786    <img
1787      src="https://ubidots.com/blog/content/images/2024/09/logo-ghost-ubi.png"
1788      alt=""
1789      width="96"
1790      height="32"
1791      class=""
1792    >
1793</a>
1794        <div class="gl-footer__nav-wrapper">
1795          <nav class="gl-footer__nav-section" aria-label="Main navigation">
1796            <ul class="js-footer-list">
1797              
1798    <li class="nav-home">
1799      <a href="https://ubidots.com">
1800        Home
1801      </a>
1802    </li>
1803    <li class="nav-platform">
1804      <a href="https://ubidots.com/platform">
1805        Platform
1806      </a>
1807    </li>
1808    <li class="nav-pricing">
1809      <a href="https://ubidots.com/pricing">
1810        Pricing
1811      </a>
1812    </li>
1813    <li class="nav-create-free-trial">
1814      <a href="https://ubidots.com/signup">
1815        Create free trial!
1816      </a>
1817    </li>
1818
1819            </ul>
1820          </nav>
1821          <nav class="gl-footer__nav-section" aria-label="Secondary navigation">
1822            <ul class="js-footer-list">
1823              
1824    <li class="nav-api-docs">
1825      <a href="https://docs.ubidots.com">
1826        API Docs
1827      </a>
1828    </li>
1829    <li class="nav-help-center">
1830      <a href="https://help.ubidots.com">
1831        Help Center
1832      </a>
1833    </li>
1834    <li class="nav-dev-center">
1835      <a href="https://dev.ubidots.com">
1836        Dev Center
1837      </a>
1838    </li>
1839    <li class="nav-community-forum">
1840      <a href="https://ubidots.com/community">
1841        Community Forum
1842      </a>
1843    </li>
1844    <li class="nav-ubidots-stem">
1845      <a href="https://ubidots.com/stem">
1846        Ubidots STEM
1847      </a>
1848    </li>
1849    <li class="nav-enterprise">
1850      <a href="https://ubidots.com/enterprise">
1851        Enterprise
1852      </a>
1853    </li>
1854    <li class="nav-contact-us">
1855      <a href="https://ubidots.com/contact">
1856        Contact Us
1857      </a>
1858    </li>
1859
1860            </ul>
1861          </nav>
1862          <div class="gl-footer__nav-section">
1863            <ul class="js-footer-list">
1864              <li>
1865                <button class="gl-footer__action" data-ghost-search>
1866                  
1867  <svg
1868    width="16"
1869    height="16"
1870    class="gl-icon"
1871  >
1872    <use href="/blog/assets/images/icons.svg?v=0017488c26#search" />
1873  </svg>
1874                  Search
1875                </button>
1876              </li>
1877              <li>
1878                
1879<div
1880  class="gl-footer__theme-selector-wrapper"
1881  x-data="themeSelector({
1882    labels: {
1883      system: 'System theme',
1884      light: 'Light theme',
1885      dark: 'Dark theme'
1886    }
1887  })"
1888>
1889  <button
1890    x-ref="selector"
1891    class="gl-footer__action"
1892    @click="toggleSelector"
1893    @click.away="open = false"
1894    >
1895    <template x-if="savedThemeMode === 'system'">
1896      
1897  <svg
1898    width="16"
1899    height="16"
1900    class="gl-icon"
1901  >
1902    <use href="/blog/assets/images/icons.svg?v=0017488c26#system" />
1903  </svg>
1904    </template>
1905    <template x-if="savedThemeMode === 'light'">
1906      
1907  <svg
1908    width="16"
1909    height="16"
1910    class="gl-icon"
1911  >
1912    <use href="/blog/assets/images/icons.svg?v=0017488c26#light" />
1913  </svg>
1914    </template>
1915    <template x-if="savedThemeMode === 'dark'">
1916      
1917  <svg
1918    width="16"
1919    height="16"
1920    class="gl-icon"
1921  >
1922    <use href="/blog/assets/images/icons.svg?v=0017488c26#dark" />
1923  </svg>
1924    </template>
1925    <span x-text="selectedLabel" class="truncable"></span>
1926  </button>
1927  <div
1928    x-show="open"
1929    x-transition
1930    x-cloak
1931    x-anchor.top.offset.12="$refs.selector"
1932    class="gl-footer__theme-selector"
1933  >
1934    <button class="gl-footer__action" @click="setThemeMode('system')">
1935      
1936  <svg
1937    width="16"
1938    height="16"
1939    class="gl-icon"
1940  >
1941    <use href="/blog/assets/images/icons.svg?v=0017488c26#system" />
1942  </svg>
1943      System theme
1944    </button>
1945    <button class="gl-footer__action" @click="setThemeMode('light')">
1946      
1947  <svg
1948    width="16"
1949    height="16"
1950    class="gl-icon"
1951  >
1952    <use href="/blog/assets/images/icons.svg?v=0017488c26#light" />
1953  </svg>
1954      Light theme
1955    </button>
1956    <button class="gl-footer__action" @click="setThemeMode('dark')">
1957      
1958  <svg
1959    width="16"
1960    height="16"
1961    class="gl-icon"
1962  >
1963    <use href="/blog/assets/images/icons.svg?v=0017488c26#dark" />
1964  </svg>
1965      Dark theme
1966    </button>
1967  </div>
1968</div>
1969
1970<script>
1971  function themeSelector({labels}) {
1972    return {
1973      open: false,
1974      labels,
1975      selectedLabel: labels.system,
1976      savedThemeMode: 'system',
1977      init() {
1978        this.initThemeMode()
1979      },
1980      toggleSelector() {
1981        this.open = !this.open
1982      },
1983      initThemeMode() {
1984        this.savedThemeMode = this.getThemeMode()
1985        this.setThemeMode(this.savedThemeMode)
1986
1987        if (window.matchMedia) {
1988          window.matchMedia('(prefers-color-scheme: dark)')
1989            .addEventListener('change', this.updateSystemTheme.bind(this))
1990        }
1991      },
1992      updateSystemTheme() {
1993        if (this.savedThemeMode !== 'system') {
1994          return
1995        }
1996
1997        if (this.isSystemDark()) {
1998          this.setThemeMode('dark', false)
1999        } else {
2000          this.setThemeMode('light', false)
2001        }
2002
2003        this.selectedLabel = this.labels.system
2004      },
2005      isSystemDark() {
2006        return window.matchMedia
2007          && window.matchMedia('(prefers-color-scheme: dark)').matches
2008      },
2009      setThemeMode(mode, saveTheme = true) {
2010        this.selectedLabel = this.labels[mode]
2011
2012        const html = document.querySelector('html')
2013        html.setAttribute('theme-mode', mode)
2014
2015        if (saveTheme) {
2016          this.savedThemeMode = mode
2017
2018          if (mode === 'system') {
2019            this.updateSystemTheme()
2020          }
2021
2022          localStorage.setItem('glow-theme-mode', mode)
2023        }
2024
2025        this.rerenderGhostIframes()
2026      },
2027      getThemeMode() {
2028        const localValue = localStorage.getItem('glow-theme-mode')
2029
2030        if (!localValue) {
2031          return 'system'
2032        }
2033
2034        return localValue
2035      },
2036      rerenderGhostIframes() {
2037        const comments = document.querySelector('.js-comments > div > iframe')
2038
2039        if (comments) {
2040          comments.contentDocument.location.reload(true)
2041        }
2042      }
2043    }
2044  }
2045</script>
2045
2046              </li>
2047            </ul>
2048          </div>
2049        </div>
2050      </div>
2051      <div class="gl-footer__secondary">
2052        
2053<ul class="gl-social-links">
2054    <li>
2055      <a href="https://twitter.com/ubidots" target="_blank" rel="noopener">
2056        
2057  <svg
2058    width="16"
2059    height="16"
2060    class="gl-icon"
2061  >
2062    <use href="/blog/assets/images/icons.svg?v=0017488c26#x" />
2063  </svg>
2064        <span class="sr-only">X</span>
2065      </a>
2066    </li>
2067    <li>
2068      <a href="https://www.facebook.com/ubidots" target="_blank" rel="noopener">
2069        
2070  <svg
2071    width="16"
2072    height="16"
2073    class="gl-icon"
2074  >
2075    <use href="/blog/assets/images/icons.svg?v=0017488c26#facebook" />
2076  </svg>
2077        <span class="sr-only">Facebook</span>
2078      </a>
2079    </li>
2080  <li>
2081    <a href="https://ubidots.com/blog/rss" target="_blank" rel="noopener">
2082      
2083  <svg
2084    width="16"
2085    height="16"
2086    class="gl-icon"
2087  >
2088    <use href="/blog/assets/images/icons.svg?v=0017488c26#rss" />
2089  </svg>
2090      <span class="sr-only">RSS</span>
2091    </a>
2092  </li>
2093</ul>
2094        <p class="gl-footer__footnote">
2095            Ubidots Team
2096        </p>
2097      </div>
2098    </div>
2099  </div>
2100</footer>
2101
2102<script>
2103  function footer() {
2104    return {
2105      init() {
2106        const footerLists = this.$el.querySelectorAll('.js-footer-list')
2107        footerLists.forEach((list) => {
2108          if (list.children.length === 0) {
2109            list.parentElement.remove()
2110          }
2111        })
2112      }
2113    }
2114  }
2115</script>
2115
2116    </div>
2117
2118    
2118<script src="/blog/assets/js/manifest.js?v=0017488c26" defer></script>
2118
2119    
2119<script src="/blog/assets/js/vendor.js?v=0017488c26" defer></script>
2119
2120    
2120<script src="/blog/assets/js/app.js?v=0017488c26" defer></script>
2120
2121
2122      
2122<script defer src="/blog/assets/js/home.js?v=0017488c26"></script>
2122
2123
2124
2125    
2125<script>
2126// Taken from https://forum.ghost.org/t/open-links-in-new-window/1726/4
2127$('a').each(function() {
2128    var a = new RegExp('/(ubidots.com|' + window.location.host + ')/');
2129    if(!a.test(this.href)) {
2130        $(this).click(function(event) {
2131            event.preventDefault();
2132            event.stopPropagation();
2133            window.open(this.href, '_blank');
2134        });
2135    }
2136});
2137    
2138// https://highlightjs.org/
2139activateHighlight = function() {
2140    document.querySelectorAll("pre code").forEach(
2141        function(currentValue, currentIndex, listObj) {
2142    		hljs.highlightBlock(currentValue);
2143        }
2144    );
2145}
2146
2147if (window.attachEvent) {
2148    window.attachEvent('onload', loadHighlight);
2149} else {
2150    if (window.onload) {
2151		var originalOnload = window.onload;
2152    	var newOnload = function(evt) {
2153        	originalOnload(evt);
2154        	activateHighlight(evt);
2155    	};
2156    	window.onload = newOnload;
2157    } else {
2158        window.onload = activateHighlight;
2159    }
2160}
2161</script>
2161
2162
2163<script>
2164(function(document, history, location) {
2165  var HISTORY_SUPPORT = !!(history && history.pushState);
2166
2167  var anchorScrolls = {
2168    ANCHOR_REGEX: /^#[^ ]+$/,
2169    OFFSET_HEIGHT_PX: 130,
2170
2171    /**
2172     * Establish events, and fix initial scroll position if a hash is provided.
2173     */
2174    init: function() {
2175      this.scrollToCurrent();
2176      $(window).on('hashchange', $.proxy(this, 'scrollToCurrent'));
2177      $('body').on('click', 'a', $.proxy(this, 'delegateAnchors'));
2178    },
2179
2180    /**
2181     * Return the offset amount to deduct from the normal scroll position.
2182     * Modify as appropriate to allow for dynamic calculations
2183     */
2184    getFixedOffset: function() {
2185      return this.OFFSET_HEIGHT_PX;
2186    },
2187
2188    /**
2189     * If the provided href is an anchor which resolves to an element on the
2190     * page, scroll to it.
2191     * @param  {String} href
2192     * @return {Boolean} - Was the href an anchor.
2193     */
2194    scrollIfAnchor: function(href, pushToHistory) {
2195      var match, anchorOffset;
2196
2197      if(!this.ANCHOR_REGEX.test(href)) {
2198        return false;
2199      }
2200
2201      match = document.getElementById(href.slice(1));
2202
2203      if(match) {
2204        anchorOffset = $(match).offset().top - this.getFixedOffset();
2205        $('html, body').animate({ scrollTop: anchorOffset});
2206
2207        // Add the state to history as-per normal anchor links
2208        if(HISTORY_SUPPORT && pushToHistory) {
2209          history.pushState({}, document.title, location.pathname + href);
2210        }
2211      }
2212
2213      return !!match;
2214    },
2215    
2216    /**
2217     * Attempt to scroll to the current location's hash.
2218     */
2219    scrollToCurrent: function(e) { 
2220      if(this.scrollIfAnchor(window.location.hash) && e) {
2221      	e.preventDefault();
2222      }
2223    },
2224
2225    /**
2226     * If the click event's target was an anchor, fix the scroll position.
2227     */
2228    delegateAnchors: function(e) {
2229      var elem = e.target;
2230      if(elem.getAttribute('href') != '#subscribe'){
2231          if(this.scrollIfAnchor(elem.getAttribute('href'), true)) {
2232        		e.preventDefault();
2233      	  	}
2234      }
2235    }
2236  };
2237	$(window).on( "load", $.proxy(anchorScrolls, 'init'));
2238	//$(document).ready($.proxy(anchorScrolls, 'init'));
2239})(window.document, window.history, window.location);
2240</script>
vendor: 1 bytes, line 2240
2240
2241<script>
2242  document.addEventListener('DOMContentLoaded', function() {
2243    var links = document.querySelectorAll('a');
2244    links.forEach(function(link) {
2245      if (link.hostname != window.location.hostname) {
2246        link.target = '_blank';
2247      }
2248    });
2249  });
2250</script>
2250
2251
2252  </body>
2253</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.