Ignition Community Live with Cirrus Link: MQTT Workshop

Ignition Community Live

56 min video  /  42 minute read

A workshop building a complete end-to-end IIoT connected solution from scratch. Learn how to easily connect data to from the Edge to Ignition and beyond. See partners around the world connect in live showing the real power of MQTT.

We hope you can join us for this exciting audience participation live workshop.

Webinar Transcript

Arlen: Good morning, good afternoon, good evening. And welcome, everybody, to the sixth Ignition Community Live with Cirrus Link. And I'm hoping that this is an interesting, interactive workshop where we can learn a little bit about MQTT, what we can do with it with tools, like Ignition, and some of the partner ecosystem that's making all this work really well. So, today, I'm joined by Chris Houghton, who's CEO of Cirrus Link Solutions; Benson Hougland, VP of Marketing with Opto 22; and Jeff Knepper, Business Dev with Canary Labs. It's interesting, we were putting this deck together and Chris' daughter saw Houghton, Hougland, Knepper, Nipper, and thought it was a law firm. But anyway, everybody's gonna have their section in this. So, today's topic is a workshop to build a complete end-to-end IIoT connected solution from scratch. We're gonna load Ignition and the MQTT Transmission Module, simulating an Edge device from your home office, your basement, wherever you're coming in from. And then, see some of our partners around the world connecting in as well, showing the real power of MQTT. Chris, I'll let you talk about the prereqs.

Chris: Yeah, thanks, Arlen. So, welcome, everybody. My name is Chris Houghton, and I'm the guy who's in charge of finance here at Cirrus Link, and they thought it'd be a great idea to have me part of the demo today. So, really hoping that you guys can help me out here and show that I can demonstrate how easy it is to install the MQTT Transmission Module into Ignition. So, if you look in the handout section of the webinar, there's a PDF document in there, and that shows you the prerequisites that we need to have done before we get to the audience participation part of the presentation. If you haven't already got Ignition installed it shows you the links on how to download that. And then, also download the MQTT Transmission Module and just have that saved somewhere locally on your machine. And then, hopefully when we get to that part where I demonstrate the simplicity of loading that MQTT Transmission, we'll have great success. And I've got a bet with the guys here that I can get more than 50% of the attendees to connect in, so hopefully you can help me out there [chuckle]. Back to you, Arlen.

Arlen: Alright, thanks, Chris. Alright, let's ... Everybody connect in, so Chris doesn't lose his bet there. We're gonna quickly go over MQTT and the benefits of it. We'll walk through the topology of the workshop that we're putting together. Then also, we're gonna have partner demos, Opto22. Benson's gonna show some of the cool stuff that they've got. And then, finally, Canary Labs, who have an application that's awesome, that can plug into an MQTT infrastructure and learn as the system builds by itself.

Arlen: So, real quick, MQTT overview. Well, to get started, you gotta have an MQTT server. So, you gotta have one of those. You can have more than one for redundancy and high availability. Then, on the host side, you need a host MQTT client that can connect into that MQTT server and subscribe to interesting information and publish information. And then, conversely, and where the audience will be participating, is we need some Edge clients, and those could be MQTT Transmission running on the Edge. So, those components that we're gonna show, is we're gonna install Distributor that's gonna give us an MQTT server to get started with. We're gonna install the MQTT Engine on an existing Ignition Gateway that'll be able to connect in, subscribe information and publish information on commands and set points. And then, finally, at the Edge, we're gonna use the MQTT Transmission to be able to interface into the tags that you create in Ignition, and then be able to take those tags and publish them using MQTT Sparkplug to your MQTT infrastructure.

Arlen: Now, again, we go through the benefits of MQTT and the first and foremost, is that it lets us decouple devices from applications. So, the big benefit there, is let's think about connecting devices to infrastructure, and then being able to plug in best-in-class applications, and make our OT, our SCADA infrastructure, if you will, more plug-and-play, more have the ability to be serendipitous with the data. "I wanna try this today. Ah, that didn't work. I'm gonna unplug that. I'm gonna plug in something else and try this." But still maintaining that operational efficiency that we need for a real-time mission-critical control system.

Arlen: Second thing, is it provides us a single source of truth for all of our tags. As we migrate from siloed entrenched SCADA architectures to this world of digital transformation, we're going to have more and more consumers of the process variables that we're publishing. So, moving that single source of truth as far out to the Edge of the network that we can, so that we publish a process variable one time, and then it can be learned by as many or as few applications that wanna subscribe to that information. With Sparkplug and MQTT, now, we've got a specification that defines how best to publish those process variables and what topics we should subscribe to to be able to receive them and know what that means.

Arlen: Now, most cases, in the last 22 years that we've been using MQTT, we've shown that if we replace typical poll response infrastructures with MQTT, for the same number of registers at the same update rate, we can realize an 80% to 90% bandwidth reduction. Now, when we first invented MQTT 22 years ago, that meant cost savings. But in 2020, what that means, is that's 80% to 90% more of that stranded information that we're leaving out in the field that we could bring back in the same bandwidth. And then, of course, now, we've gotten really sophisticated with all of our MQTT drivers, whereas five years ago, when we first started doing this, people were just happy to get their data. And if the network went down, they lost it. Well, now, with Sparkplug and some of the Edge compute capabilities, we've got the ability now to take those MQTT messages, place 'em into a queue, and then upon establishment or re-establishment of our MQTT session, we can publish that historical data and backfill that into the Ignition Historian.

Arlen: Now, for our workshop topology today... I'm gonna get out of presentation mode here. We have Ignition, and just to let everybody know, now this is an Ignition 8.0.12 instance running on an Amazon EC2 instance, we're going to install Engine and we're gonna install Distributor. Now, Distributor really doesn't matter where it's at. It's just, it's very easy to install and that will give us our MQTT server that everybody's gonna connect into. Then, hopefully out in the field, you guys, you participants, you're looking at the instructions to be able to download Ignition, and then you're gonna have the Transmission Module on each of your participants. So, we will have multiple transmissions out here, they're gonna be connecting in, and they'll be publishing information. Now, in addition to that, we've got some of our partner ecosystem; OnLogic, Moxa, Opto22, SignalFire, with a very interesting transmitter that I wanna show everybody; those will all be connecting into this infrastructure as well.

Arlen: Now, if we have time by the end, we are going to give you a little bit of a preview on some technology that we're working with in conjunction with Amazon to be able to connect our Transmission Module into Amazon's IoT Core MQTT server. And so, again, these icons represent MQTT Transmission, Distributor, and Engine. And it's really interesting, is that as we build this up, of course, Engine is sitting here, learning the tags as they come in, the Canary, and I'll let Jeff explain his product in more detail, but Canary is a time-series database, and it's going to auto-learn all of the tag and the metadata as well as we build out this infrastructure. So, that'll be very interesting as we see this all come together. Because, realize, as I'm talking right now, we don't know anything. Everybody... We know there's gonna be a broker somewhere, but that's all we know.

Arlen: So, now, I'm gonna go into my Ignition dashboard and we'll see what we've got. So, again, this is my Ignition Gateway. You see, I've got all of the standard modules installed. But I wanna go to Inductive Automation, go to the Download (page). I'm gonna go to other Operating Systems And Versions, and I'm going to go to Strategic Partner Modules for 8.0.12, and I'm gonna download Distributor, which is my MQTT server. And I'm gonna download Engine, that's my MQTT client that connects to that, and I wanna download the Transmission Module that we're gonna use to connect into AWS. Now that I've got those modules, I'm gonna come over to my Ignition Gateway, go down here to the install. I'm gonna choose my Distributor, and I'm gonna install it. So, now, we are installing an MQTT server up in the cloud. Now, realize, everything that I'm demoing here could be ... And typically for most of our customers still, can be on-prem.

Arlen: So, now, we've got a new setting over here for our Distributor, and you see here that we've been able ... For local connections, we've got connectivity using non-TLS port 1883. And if we're using TLS, we can connect to port 8883. And we've already set up the default credentials, so that everybody will be able to connect in and be validated or authenticated to the MQTT server. So, the next thing we're gonna do, is we're gonna go back to modules. And we downloaded MQTT Engine, so we're gonna install Engine now.

Arlen: Now, Engine is the MQTT client that knows ... We're gonna tell it where the MQTT server is, then it's gonna connect to it, then it's gonna subscribe to all messages that are being published on MQTT on the Sparkplug topics. So, now, if we go, we'll see we've got ... Now, we've got a new tab for Engine. And we see here, we're gonna tell it that we're gonna use the MQTT server that's running on this Ignition 8 instance on port 8883, and we've given it our username and our passwords. But notice, that in the settings, in the general settings, I don't have MQTT enabled yet. So, think about our infrastructure. We've got a broker and we've got an Ignition Gateway, and it's got the potential to plug into that MQTT server and learn about infrastructure. But before I enable the MQTT Engine, I want Chris to go through the installation of the Transmission Module on his Ignition Gateway. So, Chris, over to you.

Chris: Alrighty, here we go, people. And I'm gonna go pretty slowly through this, so that everybody can keep up. Again, there's the PDF and the handout, if you wanna follow along on the steps there. So, hopefully everybody's at least at this stage with their Ignition Gateway installation. We hit Gateway start, we're gonna log in here. So, as soon as we touch anything, it's gonna want to know our username and password that we set up there as we have first installed this. So, now, sign in. And then, in the same way that Arlen did, we're gonna go to modules, and then we're gonna scroll all the way to the bottom, and we're gonna hit install and upgrade a module.

Chris: And, again, here, we're gonna go and find the file that we downloaded and install our Transmission. So, Transmission is the module that takes any tags from Ignition and will publish them using MQTT Sparkplug. So, it's up to you to point to a particular folder structure within your Ignition project to tell it which information to send. So, everybody I'm sure has read this ULA in great detail and can click accept. And then, this certificate is proving that the software has arrived to you unaltered and unchanged from when we created it. So, that gives you the assurance there's nothing bad in here.

Chris: Here we go. Alright. So, now, as you notice on the left-hand side, we've got... Right at the bottom here we've got Transmission and it's running. And on the left-hand side, we have a new tab that's called settings. So, we're gonna go into settings, and then we're gonna come across here to the tab for service. And the one thing... So, when it default loads, it's gonna try and connect to a local host, just in case you were loading everything on your one machine. But we want to connect to Arlen's broker that's running up in the cloud on EC2, so we're gonna hit edit on this.

Chris: Now, in the document, there is a new URL and I've got it in this text document here. But all you need to update, is change that URL to SSL: //ignition8.chariot.io:8883. So, we're using the secure socket to connect into that broker up in the cloud. Absolutely nothing else changes, so that should be the only change you need. Everybody hopefully get that typed in. And we're gonna scroll down to the bottom here and hit save changes, and cross our fingers. Yes. So, hopefully everybody sees that: "Connected 1 of 1." So, what that means, even though Arlen doesn't have the Engine plugged in right yet, so Ignition isn't seeing this information, we're plugged into the infrastructure, we're plugged into that broker that's sitting up there in the cloud.

Chris: So, next thing I wanna do, is just we're gonna download the Designer, so that we can go in and look at a project, and just see some tags that we're creating and sending up there. So, hit the download, install that, accept all the defaults and watch that install. It's pretty quick here. And the power of all this, is how quickly you can set all this up. Alright. Okay. So, hopefully the launcher will detect that you've got a local Ignition running, and so it will automatically create this launcher for you. So, once you got that, you can just hit launch. If it didn't for any reason, you can hit add a designer, and go in there and do it manually, but hopefully it's done it automatically for you. So, we're gonna hit launch.

Chris: Alright. Now, hopefully everybody remembers the username and password. And as Carl told us, don't use "admin" password; that's what I did. And then, we're gonna create a new project. The only thing we need to fill in here is a project name, and create a project. Now, we're launching the actual project Designer. Okay. So, now, on the left hand-side, there's a tag... There's a section called tag browser. If you're on a small screen, sometimes you need to scroll down to be able to see this on the left. And underneath here, we've got a couple of tag structures. We wanna look under the old providers, and then we want to look under default MQTT tags PLC1. And what we've done, is we've just created two memory tags as examples for you to just get started real quickly. And the other thing to expand, is this Transmission info. And when Arlen shows his screen with us all connecting in, you'll see this unique ID, which will be how you'll recognize which one is you connecting into the system.

Chris: So, we've got a couple of tags here. I can actually click on this tag and enter a new value. I'll have to click the right enable and that will get that sent. So, that's been sent to the broker. But as of yet, nobody's plugged in, so nobody's seeing that information. Now, I ... Well, the real power, I just wanna show you guys ... I'm gonna create a new tag here, so we're gonna create a memory tag. So, this is the power of Edge. So, you can come in here, create a tag, it's whatever information you want it to be. We can create the engineering units in miles per hour. We can set the engineering high and low, so the alarms can be generated.

Chris: And when this connects in and sends this information, it's gonna not only tell the Ignition SCADA system as well as the Canary Labs, it's gonna tell every other application you've got throughout your enterprise that's connecting to this data. So, once you've got all your tags set exactly how you want them, you would come down here to Transmission Control and hit refresh. And now, you've told everybody who's allowed to see that data of this new information. And I think that's the real power of what we're trying to show you here today. So, with that, Arlen, I'm hoping that that data has made it to the broker and that you can now show us the other side of the puzzle.

Arlen: Alright. So, let's see what happened. So, let's... I opened my Designer while you were doing that, Chris. So, this is our Community Live Designer, if you will. And you'll notice here that it knows I've got an MQTT Engine, but I'm looking in my Edge Nodes and I don't have any information. So, what we're gonna do is go into the dashboard, where we installed the Engine, gonna go into MQTT Engine, enable it, and save the changes. Now, if we go back to our Designer, and oh, we've got Edge Nodes now. And Chris, what was your ID?

Chris: Oh, hold on a second here.

Arlen: Let's hope, 69B7C8.

Chris: No, I'm 72C9C7.

Arlen: 729C7? Well, somebody got this one in. [chuckle] I'll refresh the tag providers again.

Arlen: Somebody's got an IgnitionOnDockerEdge, where they're connected in. Then, let's see what else we found here. We found Opto22 and we found that it's got a turbine and it's got a groov EPIC, and that groov EPIC is connected to an Allen-Bradley PLC. And that Allen-Bradley PLC has a stack light. So, hey, Benson, you wanna turn on your camera? Alright. So, this is Benson's home studio. And we [chuckle].. If you look on that stack light up on the Allen-Bradley, on top of the Allen-Bradley PLC, we're gonna try to take that... And let's see, that would be the stack light, and I'm gonna try to ... I'm gonna turn on my commands, and then I'm gonna publish a command. Now, just so everybody knows, I'm literally in my basement lair in Kansas City, we're connected to a MQTT server in the cloud. Man, we've got a lot of people coming in here, Chris. Then, I discovered that there is a Moxa ... Or sorry, a groov EPIC out there and it's connected to Allen-Bradley and it's telling me it's got a stack light. So, I'm gonna click on, turn that stack light on. Oh, there it turned on.

Arlen: Now, Benson, on the other hand, is in his home studio in Temecula, California. So, I'm gonna turn it off now, I'm gonna turn it on. So, that shows you the speed and the efficiencies of how fast MQTT really is. And we'll get back to some other cool stuff that Benson's got going on there as well. So, we also found a Moxa device out there that's running Ignition Edge with all of its I/O. We found a ... Let's see, what else did we find? We found an OnLogic-embedded computer, an IGN300, which is a Panel PC. So, we know all of its I/O and all of its parameters. And let's see what else we can find here? Oh, we've got a ... I've got a local Ignition Edge running on an embedded Linux box. So, one of the things I wanna show very quickly here as we go through this, is that notion of a single source of truth that Chris brought up a while ago.

Arlen: So, I'm gonna open the Designer running on Ignition Edge. And this is a very simple example, where I've got an Edge Group, a Modbus PLC folder, and underneath that, I've got a PLC at the IP address, and I've got three process variables. But also notice that on those process variables, if I go in and edit these, I can give ... As Chris said, I can give it ranges and give it engineering units. So, if we look at the tag structure on the Edge, come over here to our main Ignition Gateway and look at the same folder structure and there's those same process variables. You can see they're updating once a second.

Arlen: Now, the interesting thing here is to show that single source of truth, first thing I'm gonna do, is I'm gonna create another process variable here. So, I'm gonna copy, paste. And let's go in. We got pressure, temperature, RPM. Let's call this Level. And we'll go to Holding Register Four, Modbus Holding Register Four, and we're gonna make that zero to 50. And let's do that in let's see, your engineering units. So, let's make that in feet, and zero to 50, and say okay. Okay. So, we've added a new process variable out here in the field level. And let's go into our temperature and change its engineering units from degrees F to degrees C, say, okay. Now, when I hit refresh, you see these tags went stale. Now, it's gonna republish a Sparkplug birth message. And after it does that, then it will create a new set of values over here.

Chris: So, Arlen, the reason mine hadn't connected in, it was because I hadn't hit the Transmission refresh, and I wonder if some people maybe have had that same issue. Because we're not using the primary host, it may not have shown up. But if you look under mine right now, you should see, which is, 72C9C7.

Arlen: Yup, 729C7.

Chris: Yup, that's me. You should see my tag that I created for wind speed with those parameters.

Arlen: Yup, I see it.

Chris: Yup.

Arlen: Alright. So, with that ... Let's see. So, we've discovered all the... And the last thing I did say I was gonna show you ... So, we've got this OnLogic device connected in, we've got the Moxa MC-1112 connected in. We're gonna go over to Benson with the Opto22 stuff. But the final thing I'm gonna show you, is this is a very interesting sensor. It's battery-powered, it's got an analog input, two digital inputs, a digital output. And I didn't even know about this device until somebody sent it to me and said, "Hey, Arlen, this thing is MQTT Sparkplug B-enabled." So, I've got this device sitting on the desk right in front of me, it's not plugged in, and, again, I'm sitting in my basement. So, we're going to just watch the groups here and I'm going to plug this transmitter in, it's gonna connect over LTE, and let's see how long it takes for another group to show up here that is SignalFire. It's got to register on the network. And we'll just watch that. But that should show up as another sensor here, and then we'll be able to discover all of its information as well. So, with that, Benson, I think I'm gonna turn it over to you.

Benson: Great, Arlen. Thanks. And while you're there, why don't you click on Opto 22 real quick and ... 'Cause I'm gonna add some ... We have a turbine there, you don't have to go any further.

Arlen: Oh.

Benson: But we're gonna talk about how we're gonna add actually another Opto22 system directly to this and it should pop up into Engine there. So, yes, if you wanna pass over presenter (capabilities), I'll give you guys a quick tour from my end. Terrific. So, this is the workshop topology that Arlen was showing previously. And, indeed, this is the architecture, and the different devices, and so on, that are plugged into this MQTT server or MQTT infrastructure. Of course, that is being represented by the MQTT Distributor Module running on Arlen's machine. So, for those of you guys that have been following Opto for the past several years, you know that we launched a groov EPIC controller, and this, of course, is an Edge programmable industrial controller. And this is after a very close collaboration with both Inductive and Cirrus Link to develop a PLC that has a built-in HMI, a built-in I/O, just a very powerful next generation PLC for the industrial automation marketplace and for IIoT.

Benson: But that was released two years ago. What I wanna show you guys today, is something we just released this month, and it's something that we call groov RIO or I/O for the IIoT. So, let's take a peek, and then we'll actually configure this device to publish into Infrastructure like we saw a moment ago. But first, real quick overview, groov RIO is indeed Edge-based remote ethernet I/O for IIoT and automation applications. But what makes this product really unique, is the channel configuration. It has 10 channels of I/O, eight of those are multi-signal, multifunction, and then we added in two Form C relays. Now, multi-signal, multifunction; that means analog, digital, ins, outs, you name it. And when you do all the math, you get 61,260 unique field I/O combinations from a single device, and that's groov RIO. What's more we made it PoE-powered to make it really easy to install just about anywhere, and really easy to configure because it actually has a built-in HTTPS web server.

Benson: So, I can actually log in to it and completely configure out with no tools, nothing to download, nothing to install on your PC. But probably the best news, and the reason why we're so excited to be part of this workshop, is because RIO has MQTT Sparkplug B built right in, and it's why a lot of people have labeled this thing, Ignition I/O, and I think you'll see why in just a moment. Now, we do get a lot of questions about, "Okay, you have EPIC and now you have RIO. What's the diff?" Well, here it is: Both products offer industrial I/O with built-in Sparkplug B over MQTT and Node-RED logic. Both offer very secure ways of accessing the device and secure ways to remotely access the device through both built-in VPN clients, firewalls, etcetera. Now, EPIC stands apart in that it is a real-time controller with two real-time control engines. One of those being the CODESYS IEC-11... IEC-61131 real-time control engine, and our own flowchart-based control engine. And then, we're doing lots of HMI, edge processing, gateway functions, and so on.

Benson: Now, also what sets 'em apart, is EPIC runs Ignition and Ignition Edge. Your choice, pre-installed, ready to go with MQTT and OPC UA drivers. Now, why does that matter? Well, just like Arlen showed you in a demo a moment ago, we actually have... And I'll just bring it out here on the screen for you to see. We actually have an EPIC here that is, indeed, on its own network segment and it's connected to an Allen-Bradley and a Siemens PLC over here. So, in this case, we're able to connect to existing PLCs, unsecure PLCs, I might add, over its own secure or non-routable PLC network into the EPIC. And then, by using these independent non-routable interfaces, will then publish that data out through Infrastructure, up to Arlen's MQTT Distributor Module, which of course, is the MQTT broker.

Benson: Finally, one last thing about EPIC: It does have this built-in, there's a built-in display on this, plus an HDMI port to go to an industrial touchscreen. So, those are some of the differences there. A better way, maybe, to look at the differences as well, is through architectures. And this is what it looks like, the groov EPIC here on the left, which has been out for, as I said, several years. Lots of software, lots of control engines, lots of options here for your digital transformation projects, your real-time control applications, and of course, being able to pull in unsecure PLC data and put it into infrastructure, wherever that may be; on-premise, in the cloud, or on your devices.

Benson: And this illustration also does show remote I/O, or groov RIO, as remote I/O to the EPIC. But what we're gonna focus on, is this half of the screen. I've got a little RIO here on my desk, so I'll show you that in a moment. And I'm gonna, able to take a fair amount of different digital and analog I/O wired up to the RIO, and with the software on, embedded on the device, I will use the Sparkplug MQTT method to move that data securely to on-premise applications, cloud and devices as well. And in this case, I'm gonna configure the MQTT Sparkplug, Sparkplug B, to publish to Arlen's MQTT Distributor Module running somewhere in Kansas City. [chuckle] A lair, as I recall him saying.

Benson: So, let's take a look at what this is gonna ... What device I'm gonna be working with. So, I'm gonna click on here and change my camera over to a nice little RIO right here on my desktop. Okay, pretty cool. The other thing I'm gonna do, is scroll over here to the login screen. So, here's my RIO, it's mounted on a DIN rail here. This thing is industrial, ready-to-go, it... Minus 20 to 70 degrees C, Class 1, Div 2. Completely autonomous, there's nothing connected to this device, except this one cable, and this is my Power over Ethernet and communications all over a single cable. I've also got a couple other things in here that I'm sure Jeff from Canary Labs and Arlen will be messing with from afar. One's a little blue LED here on this button. And then, I'm gonna show you a little bit more about this potentiometer, which is simulating a tank level. So, by turning this, I'll be publishing the data from that, that's wired right up here to this terminal, and publish that into infrastructure. Now, note one other thing, that my PoE and cable here is the only power to this device, so it indeed is powering my groov RIO and all of my I/O. So, that's pretty cool.

Benson: Alright, let's take a look at how this is done. As I said, it is a secured connection, so I need to log in with a username and password. And I'm actually logging directly into the RIO's built-in web server, and so there I am. Really nice, easy homepage here to configure my system. There's a lot here, and I welcome you to visit Opto22's website to see a webinar that covers virtually every button you see on the screen. But for us, we're gonna focus on two things. One, is of course, MQTT, and I'll get back to that in a moment. The second, is the I/O channels. What data are we gonna send? What kind of information do we wanna publish to infrastructure?

Benson: So, I click into there, and there you see my 10 channels of configured I/O from my RIO. My top button, my bottom button. But let's focus on channel two here, this Fuel Level. Okay, so, I'm gonna click on that. And indeed, look at this, I've got Fuel Level's the name, and it's a zero to 10 input, zero to 10 volts DC. Well, I think most of us know that zero to 10 volts DC is not very meaningful data, so why not make it something that is meaningful? And indeed, that's what we've done here. We've given it... Just like what Arlen was showing a moment ago, we've given it engineering units and we've given it some scaling.

Arlen: So, here it is, this is how you actually configure the channel. Again, I'm just through my web browser. I give the device a name. Now, this is important. This is the single source of truth. We are literally taking a zero to 10 volt transmitter and giving it the name, Fuel Level. Well, how do we configure that channel? Very easy. By clicking this hyperlink here, this will present all of the valid channel types... All the valid signals, I should say, for this particular channel. So there, you can see the enormous amount of configurability available on just channel two, in this case. Once I've selected that, then I can select my scaling. I put in my unit, my upper and lower-scaled values, and those will be published to MQTT. If I need to, I can do some calibrations, some filtering, and so on. But this is where the juice is, right here in public access. This is the information I'll publish to the MQTT Infrastructure. Naturally, I wanna send the value, and I wanna send the value unchanged. Because as we know, MQTT is a pub/sub model, and we only publish data when it changes.

Arlen: Now, I can also change the deadband. So, this is a 5000-gallon tank. I may not wanna change or publish new data every time that just jitters a bit. I wanna have a deadband. So, here, I'm using, what is that? A 0.1% deadband. Only if it falls outside of that deadband, will I publish to infrastructure. Now, also when I publish, I also wanna send the maximum and the minimum reading that the RIO has latched in its software. So, if I ever go above or below that, I may write that to MQTT, and then maybe squirrel that away in a database, and reset it at the end of each day, something like that. And that's why writable is here. This writable allows me, from the Ignition Gateway at Arlen's facility, to actually reset or set the maximum and minimum readings into a reset mode. So, there's all my data. Pretty straightforward, just fill out a couple of forms and there you go.

Benson: So, now, let's publish it in infrastructure. Well, this is simple. Check this out. I'm gonna come into here, and as you can see, I don't have MQTT configured yet. So, I'm gonna do basically the same thing that you all did out there on your own gateways, and I'm gonna put in... First, I'm gonna put my topic namespace together. So, you saw, I had a group ID in there of Opto22. Now, my Edge I/O ID, I'm gonna do RIO-Benson, and I'm gonna finally add a device. So, these are the three levels of your topic name spaces defined by Sparkplug B. So, here, I'm simply gonna name it Ignition IO. And I do have a Historic Queue and some other things here but in the interest of time, we're gonna move forward. I'm gonna click on Add MQTT Broker. And like what Chris did, I've actually got a copy and paste here, make things a little bit simpler. 'Cause when everybody's watching, you always type it wrong. And then, I'll put in a unique client ID here, no big deal. And the same, admin, and the password. Change me, and I'm done.

Benson: So, I click, okay. Now, I've got everything set up in just two settings; the topic namespace and the broker destination. I'll click, simply click, save. Now, what happens next is the RIO says, "Okay. We've got the configuration saved, but do you want to start the service?" And this is like hitting that little checkbox that Chris and Arlen were showing you to start Transmission. So, I say yes, and MQTT will get started, it may take a moment. And with that, I'm gonna actually change presenter back over to Arlen, so we can see that guy pop in with its data. And then, while I'm there, I'm gonna change my webcam for you guys to there. And hopefully you can see it. There it is.

Benson: Okay. We'll give that a whirl, too, and see how long it takes to show up. But we are essentially publishing in infrastructure, I'm showing my status running. Wanna make sure your Distributor is accepting those messages.

Arlen: Okay. And then, in the meantime, let's see, it's ... Just keep a time check here. Actually, while we're doing that, Jeff, do you wanna take the screen and show us what you've learned so far and kinda go through what your product is?

Jeff Knepper: Yeah, absolutely. Thanks, Arlen.

Arlen: And oh, by the way, Chris, just a check here, we've got 25 end-users are connected in right now.

Chris: Pretty proud of that.

Jeff: Alright. Well, thanks, everybody. Again, my name is Jeff with Canary, and we just simply wanna make it easy to use your process data. Today, what we're talking about, is how we can collect data from an MQTT server, and it's real simple. We just install our collector, the collector watches the broker, we subscribe to the namespace. And for today's demo, I just did a wild card and said, "Everything that hits the broker, I wanna grab," and we're gonna publish it back here to my laptop out in Pennsylvania.

Jeff: So, what is Canary? Well, we're a system that's built around a NoSQL time-series database. The database itself doesn't require any type of DBA administration or skillset. So, it makes it really operational friendly, and we can scale the database to over two million tags on a single server. Performance, one-and-a-half million writes a second, two-and-a-half million reads. And the most important thing you'll ever hear me say about the Historian, and the last point: Completely lossless compression. That means, raw data stays raw data, forever.

Jeff: So, let's take a look and see what we have learned so far, Arlen and team. I'm gonna open up my administrator, which is where I have my MQTT collector currently configured. And right now, it looks like I have successfully enabled, connected to the Chariot, Ignition 8 Chariot server, got a single connection, subscribed to everything. There are 630 tags on there. We're currently logging 440 of them that have rebirthed and we're picking up about 20 to 100 different updates per second. So, if I take a look at that in my Historian, here's all of the data I'm currently writing. It just started today, so there was no cheating, I didn't start grabbing it yesterday. And here's all of the different tags that are coming in right now. Now, Benson, I'm gonna see if I picked up the LED yet. So, we'll search for blue and it looks like...

Arlen: No, Jeff, you won't have done that. In the full disclosure, demos are really cool. So, what we did, is we hit the maximum number of connections on the Distributor, so I'm trying to get that fixed right now. But we had so many people come in and connect, they maxed it out.

Jeff: Well, let's take a look at Chris's tag. Chris, you were user 72C9, and you had a wind speed tag, right?

Chris: That is correct. Yeah, and I can...

Jeff: Alright. Chris, what's your current value on your wind speed? I've got 75.

Chris: It's at 75 miles per hour and it's just gonna drop to 50.

Jeff: Alright. And I've got your 50, Chris.

Chris: There we go.

Jeff: So, one of the cool things that Canary also offers, is a trending and dashboard tool, which, of course, I've built out for a bit, ahead of time to show some LED. But let's go ahead, real quick, and edit this guy. And I'm gonna just throw your wind speed on, Chris. So, how about we use a circular gauge? What's your range on your wind speed there, Chris?

Benson: Zero to 60.

Jeff: Alright. I'm gonna just go ahead and link some data. And instead of having to browse to the tag, I'm going just straight for wind speed, and there he is, right there. Alright, I've got you at 50. You wanna make a change again? Oh, you just went to 40. And, oh, now he's down to 30. And at the same time, I think I'll just go ahead and add a little bit of a Spark chart. But what we're really known for folks, is our trending and our... I'm gonna throw a trend chart on here as well and bring it in this way. So, let's drop the Spark chart. We'll bring in the trend chart, put it in live mode. And last thing I wanna do, I wanna play nice because we love being interoperable. So, we're gonna save this off. It's all built in HTML. We'll save it as our MQTT project and write it up. And I've got an Ignition project going on here. See, Canary can also write data right back to Ignition as a tag history provider. We have a module to do that. And if I open up my Ignition project, I can drop everything we just did into my web browser. Oh, security issue. That's alright. I'll get around that. Well, that's okay. If I can't embed it right now, I will show you this. I could come in with Easy Chart, and bring that same data in, right out of Canary.

Jeff: And there's our history coming back into Ignition. Alright. Arlen, you want me to pass it back to you?

Arlen: Alrighty. Alright. So, Wes is working on extending the number of connections. Our Distributor standard has 25 connect ... or 50 connections and we basically exceeded that with all of the users that came in. Now, here's the list of all the users. So, you can find your unique ID out here at the end. But we basically added... All of these clients are coming in, and these are all people running Transmission on their Ignition instances, being able to come in and publish information. So, last thing I wanted to cover real quick before we get into a few of the questions that have been coming in, is since we're maxed out, I was just gonna show everybody here the... Actually, it looks (like) I have a new module coming in. Let's go to our Amazon instance, and this is a new service that Amazon's put together.

Arlen: So, the AWS IoT is their MQTT server, which that's not new, that we can connect to now. But what is new, is this new service called IoT SiteWise. And with SiteWise, it literally gives us ... It kinda fills it in that gap that we've all seen as we try to move to cloud services, is that there's really nothing that caters to SCADA process variable information. In other words, you throw everything up into an S3 bucket. But really, if you think about that, you're kicking the can down the road because you still gotta have somebody to write lambdas or functions to pull those tags out of your data lakes, and then be able to put 'em into a time-series database and do something interesting with them. Well, with the SiteWise service, now you can come in, and you can see here, we're building models based on the Sparkplug namespace.

Arlen: So, ultimately, what ... hopefully here in a few weeks, we'll be able to have another Community Live and show the ability to come in, just like we've been showing, with self-discovering devices, tags, engineering units, ranges, and then be able to take that all the way to the ability to build a model, I call it a PLC here. And I can see that in my PLC, I've got some measurement definitions and some units. So that now, when we take process variable information to cloud services, SiteWise gives us somewhere to land that data that has "SCADA-like structure," if you will.

Arlen: So, we're very excited about this development. And I think that will finally give some really good use cases to using MQTT Sparkplug, the AWS IoT MQTT server, and some of their new services, like the SiteWise service. So, you can see it here, and you can ... You all can Google AWS SiteWise as well. So, with that, Chris, why don't you go through a couple of questions? And then, I will, while you're doing that, actually install a distributor that will give us some more connections, and we'll go from there.

Chris: Alright. Well, whilst you're doing that, a couple of questions have come in for Canary. So, Jeff, one question was: How does Canary differ from OSI PI, if I can utter those words on this call?

Jeff: That's a great question. And it's one we get often. So, we've been around for the same amount of time. And the products are both built on proprietary non-SQL databases. Functionality, very similar. We actually embrace MQTT fully with Sparkplug, so we're ahead of them on that. But you're gonna find completely different business models because a second question that was asked was, "What's Canary cost?" Canary server starts at $4000. If you go completely unlimited on tags, up to two million per server, you're in for under $65,000.

Chris: Alright, great.

Jeff: Check out canarylabs.com for the pricing.

Chris: Arlen, if you can do this one whilst you're installing that, one question that always comes up is about redundancy and standby configurations for MQTT.

Arlen: We ... there are some very good videos. I'll go through that really quick, Chris. But there are some very good videos around on Inductive's website and on our website. But long story short, is that redundancy, if you think about one MQTT server, well, because of the Sparkplug specification, the way everything's designed, you can have N number of MQTT servers. Phillips 66 has six MQTT servers, Plains Midstream has four. And with multiple servers and multiple availability groups, we're seeing five-nines of availability. Because if an MQTT server would fail or if a network would fail, everything knows that it's got multiple MQTT servers that it can go connect to, so. And now, we've got our SignalFire sensor in, we've probably got the Opto RIO is in. Benson, so, if you wanna throw your camera up real quick, we'll just go show what we learned here. OptoMMP, Modules, Channels, Blue Ring LED.

Benson: And there we go, you can probably check it.

Arlen: Oops. Do I have your camera up?

Benson: It is on my side.

Arlen: Oh, okay. You just turned it off.

Benson: Yup.

Arlen: You just turned it on.

Benson: And now it's on, yup.

Arlen: Now, let's go to the Fuel Level. Because, again, the thing here ... Sorry about the “fubar” on the broker. But the fact is, is that when we started this webinar an hour ago, we didn't know anything about your RIO, we didn't know anything about Fuel Level, we didn't know anything about your blue ring LED. And now, we do. And now, as you pointed out, Benson, that single source of truth. And the SignalFire came in and now we know that we've got this device out there, and I've got a digital input, and I've actually got a switch here. So, again, this is over LTE, battery-powered, but you're gonna hear the switch. And boom! Those digital values just came in. So, really, what we wanted to show here, is how quickly and easily it is to build out a complete MQTT-based infrastructure with the modules and with all the cool tools you get with Ignition. And let's see, Chris, real quick, let's go to the group, and there's all the people that have connected in so far. So, you can take a screenshot of that.

Chris: Very cool. I will.

Arlen: Alright, any other questions?

Chris: One question is coming, again, a Canary question about measuring fully-tested throughput. Jeff, can you talk to that?

Jeff: Yeah. So, on a basic, standard server, over a regular network, you're gonna get over a million updates per second, AWS. We've stood up a machine, forcing data at over 12 million updates per second, 24/7 operation. So, we've not yet found an enterprise solution that needed more throughput than the ... Let me say it this way: The Historian is not the bottleneck, it's almost always the network. Hope that answers your question.

Chris: Yeah, yup. A couple of questions have come in. Again, the Canary seems to be the source of all the questions. "Can the embedded graphics run on Perspective?"

Jeff: Yeah, in fact, they can. So, I saw that and hadn't... Couldn't find the question back to answer it. It works in both Vision and Perspective, and can provide the history to both projects as well. So, you don't need to embed Canary into the Ignition project, but you could as an iframe.

Chris: Okay. Alright, I think we'll take one last question, then we can wrap things up here. "Arlen, any special configuration for a VPN connection from the Edge?"

Arlen: Not really. It's a remote-originated ... And, again, that's one of the beauties of MQTT. When ... It was completely by accident that Andy and I made it remote-originated, so we didn't have to know IP addresses at a central location. So, if you ... Once that VPN is set up, you're basically ... Remember, MQTT is built on top of TCP. So, a lot of people ask, they say, "Well, Arlen, we read the MQTT spec, and there's no security." Well, that's true because we use TCP security. So, when TLS 1.2 goes to 1.3, goes to 2.0, we're gonna take advantage of that, all the way through the life cycle of network security. So, should connect just fine over a VPN as well. Really cool. There was a ton of people that stayed on the call the whole time. Really great. I hope everybody enjoyed this. Again, thanks to Inductive Automation for giving us all this opportunity to do something during the COVID lockdown. I hope everybody has a really good day today. Thank you very much.

Posted on May 13, 2020