Internet of Things

 Basically, our cloud is a control point for a multipleof smart devices, and primarily how we’re providing that service is through an EdgeServer, right. So, there’s some kind of software agentthat runs inside the so-called Edge of the network, and that agent detects smart deviceswith a series of plugins, right, so there’s a plugin that is designed for, for example,LIFX, which is a certain kind of smart bulb, and a plugin designed for Philips Hue, andso on and so on and so on. And in this way it’s an extensibility modelthat lets us add in new device connections by only defining a really small amount ofcode that understands exactly just how that device communicates over a network. The other way that we connect to things iswith a cloud to cloud system we call conduits, and conduits lets us integrate devices throughtheir own first-party clouds. So for example, if you have a Nest thermostat,there’s no way to talk to that directly, you know, on the local network anymore, andso we integrate their cloud directly into our cloud. Actually, that service provides quite a bitof moving parts. We’re not only providing, you know, real-timeconnections to the third-party cloud, but we’re handling all of the user life cycleas well. Our API understands the notion of your enduser, and so you’ve gone and made one API call that says I have a user that I call “A”and I would like to add a Nest Thermostat for user A. And we say, okay, here’s a speciallink just for user A,

just to add a Nest Thermostat. Hand that to the user and send them to it,and then go route to Nest's page and they’ll login. And once they’ve done that we are now connectedto their back-end and know exactly what their thermostats are and we can associate it withthat user and put it in the right security containers, and you don’t have to do anything,right. And, once all that is done you’ll just seea Nest Thermostat show up and now you can send commands to it. It’s now seamlessly integrated with thesame back-end API that you’re using to control devices through the hub, and also it’s unifiedthrough a similar interface to any other kind of thermostat that we integrate. So, we’re implementing a Nest Thermostat,we’re implementing an Ecobee thermostat, we have aVenstar themostat, and those will all have the same exact software API interface, orvery, very similar, right. And we provide a unified interface and alsosome access to any of the platform specific functionality of that device. So, there’s a lot of leg work being doneinside of our cloud that routes the right kind of information to the right device totranslate between different protocols or non standards or standards, and then also providethe right security containers to organize all the devices in a way that you can build,you know, the sort of user-facing application on top it. 

And, in addition to that core functionality,we also provide an API we call metadata API, which lets you apply any custom informationyou want to any of these things in our platform as well. So, that basically lets you create a littlebit of rich user interface on top of these devices. So instead of it just being all utilitariandata where it’s just the core functionality we need to operate the device, you can putcustom data on it as well so it lets you render your user interface from the data that’sassociated with these devices in the back-end. So, there’s quite a bit of power and flexibilitythere, and our goal isn’t to totally eliminate the need to run some other database, but todramatically reduce the number of round trips that you have to make from the front-end tothe back-end, so that we can provide as much of the information as you might need to rendera screen for example on your user interface without having to go to another web service somewhere else and do kind of a Tango between the two web services. Okay, so there’s a concept in our platformcalled service classes, and service classes basically let you define a model, or a setof models, for what a device is capable of. They’re a combination of, I’m going toscroll past some text here because you don’t need to read all of this stuff, so what Iwant you to see is this part right here. They’re a combination of properties, methods,and events, and they’re just defined in JSON, so there’s a JSON file and the JSONfile says I have a service class called binary switch, and binary switch is a thing thatcan be turned on and off. It has one property called switch. Switch has two possible values, on and off. So, just like in programming, properties arestateful. 

We can write to them and we can read fromthem, and they represent the current state of that device in real-time, and methods arecommands basically to the device that aren’t stateful, so I can say switch on or switchoff. Then there are also events, not representedby binary switch, which let’s the device tell us unstateful things that happen, sofor example, if you have a motion sensor, it might have a motion event, and that eventcan be fired anytime it detects new motion. So, defining these service classes as thesereally simple JSON documents basically defines a template for the basic notion of a binaryswitch, for example, a thing that can be turned on and off. And that template can now be applied to anydevice in our ecosystem, and so everything which has the ability to turn on and turnoff has the same exact software interface now. This structure lets you define any combinationof these capabilities and combine them onto a single device. I’m going to scroll down, there’s a lotof stuff here. I’m going to scroll past all that to showyou this diagram. So, for example, we’re modeling a Sonossmart speaker here, and it’s a combination of a binary switch and audio output mediacontrols and media info. Audio output being the ability to controlthe volume of the speaker itself. Media controls being the ability to changethe play state from play to pause or skip tracks. And media info being the ability to see whatthe media is that is playing. Right, what is the name of the artist, thealbum, the track, and so on. 

What’s interesting there is we’ve combineda combination of those interfaces and you can envision a device which doesn’t haveexactly those same interfaces, right so, so for example, if you had a bluetooth smartspeaker, it might actually only know the volume and be able to skip tracks, that are a commonbluetooth set of controls for people to be able to skip to the next track, so it wouldn’thave media info but it would have audio output and media controls. So, basically, this allows us to build thissort of compositing of functionality that might exist on some devices but not on others,or other devices may have additional functionality. Furthermore, as I mentioned, you can takethose services and apply them to a combination of different devices in the right combination,so shown here is an example of different brands and different models of bulbs and switcheswhere a binary switch is applied to all of them but, for example, colored light is onlyapplied to the Hue color and the LIFX edition bulbs, so now I can command those two to changecolor but the others just to change brightness where brightness is applied. Everything is organized into ecosystems, environments,and zones. And so ecosystems represent the largest possiblecontainer of things. Generally, you use ecosystems to representa single product or product line that’s going to integrate together. You know, in your case it might be an entirecustomer. 

You’re looking at being able to take oneecosystem of products where you’ve got a smart device in the field and then a combinationof other smart devices that that smart device can integrate with or can interact with fromsmart lights to smart speakers or whatever they are and put the knowledge of those thingsall into one ecosystem, so all of your service definitions and all of your plugins get loadedinto that ecosystem. And then each user gets their own environment. So, as a user boots up and they connect toyour connected device, that device gets automatically loaded into a unique environment. That user also connects to other things. Let’s say they connected to a thermostator a smart speaker. Those things will also automatically get loadedinto that same environment. So, you have this sort of convenient containerthat you can work with to understand what user owns which things. And a user to environment mapping is manyto many, so a user can have many environments and so on. There’s a user API that lets you create,as I mentioned earlier, any user. You can call that user whatever you want aslong as it is unique to that ecosystem, right, because that ecosystem is representing thefull scope of the product anywhere in the world. So, then that user you can refer to as whatevertoken you want to refer to them as can be assigned access to a given environment, andof course the environment can have many users and the users can have many environments. So generally an environment would representan entire facility. It might represent two or three buildings,and then you can use zones to organize subsets beyond that. You don’t have to worry about filteringyour address space down. 

You can just say everything in this zone thatcan turn off, turn off. So, if you want to dim a light bulb you wouldsay dimmable switch dot brightness and specify the brightness and anything which does notsupport brightness would simply ignore it. If you want to be able to filter down to acertain kind of device separate from what capability set it has, that would be a featurethat is coming in a future release called tagging, which we can tag then say this thingis a light bulb. So maybe there’s some other things thatfeature brightness but they aren’t light bulbs, and we want to be able to say withthose, but you can always address a custom set of devices either way. This structure was designed with the ideathat it would handle pretty much any situation that could come up. We’ve not seen it done in any of our competitors. They generally just have a flat structure,a giant pile of stuff, and you kind of have to sort it out on your end. But us providing the right security containersand the right ability to customize groups of devices and map those groups, it’s really,really powerful because then we can apply security knowledge to those containers aswell and custom metadata to those containers and then be able to issue commands at somecustom subset of those devices and so on and so on. So, there’s a lot of power that comes fromthis very basic idea of building this 3-tiered structure. It also allows you to launch your own, youknow, if you need to launch a combination of different products and customers that aretotally insulated from each other, you simply just create a new ecosystem, and as with environments,developer accounts are many to many on ecosystems as well. So, you can have multiple developers, multipleecosystems, and map them according to whatever projects they are actually working on. Here is our developer portal. And, essentially what you can do from hereis you can manage all of your ecosystems. You notice that I have I think two ecosystemsin here. I can manage them and I can switch betweenthem. I’ve been working on an ecosystem. 

I can manage my set of service classes. Here I’ve registered some service classes,binary switch, dimmable switch, and so on. And, you can kind of see you know exactlywhat those look like in here and be able to understand the, hold on, there we go, peopleto understand the capabilities of each one. Registering the service classes gives thesystem a little bit more knowledge about what the devices do, but to be honest from a developmentstandpoint, you actually don’t have to create service classes. They’re simply a suggested format for howyou interact with the devices. The system will support any arbitrary commandsthat you pass through it even if they aren’t defined. It simply won’t suggest what you could dobecause it doesn’t know what the capabilities of that service are. Here I’ve mentioned you can manage clients. Basically you can use clients to create eitheran application or a server, so you can have direct server to server communication throughwhat we call a client token, and your application is connected through a secure token that canbe rotated out over time, not through a specific user’s account. We also have a webhook API in here as well,so you can go in and create basically a real-time call back to your server every time an eventhappens in a certain ecosystem. And, you can actually create as many of thoseas you want, so if you have eight different servers, you want to get notified when thishappens so you can create eight different webhooks right, and so every time a lightchanges its state, or anything happens in the environment, we’ll actually give youa real-time call back on your server. The inside of the ecosystem, as I’ve mentioned,there’s always a set of environments. Here I only have one environment where we’regoing to test it, but inside that environment we have these devices. And so, right here I can see. Right here I can see all the devices and itsreally actually kind of nice because you can actually see all the capabilities of the devicemapped out. So, I’m going to show you the, I’m goingto show you the LIFX light bulb here. So’ I’m going to grab a light here. This is LIFX right. And so if I hit this binary switch interface,because it knows the services that it’s capable of, it automatically suggests thatI might want to set this property to on or off. And when I set the property to on you seethe light lights up over there, that light actually turned on. 

And, similarly if I hit this left one, thisLIFX left set its property to on, you see that light turned on, and there’s this littleanimation that happened in the portal as well. That actually is the result of the systemdetecting the state change of the light, not because I set it. So, the light actually does not respond, isnot turned on, then this little light bulb will not switch on. But more importantly, there’s a textualrepresentation of it you can click that of the state of that device. So, I’ll show you kind of what I mean bythat, and just to kind of prove that it works, I’m going to jump up here to, I’ve gottwo Sonos devices here and I’ve got the Sonos interface open, and so I’m going tosend some commands through to let me resize this through Sonos, apparently I can’t resizethat. So, right now if you look at the media stateon these, on this office Sonos, it’s set to stop, so if I hit play you’ll actuallysee these two Sonos speakers turn on in real time and you’ll see this is on, what’sthe name, Staying Alive from the Bee Gees. So, I’m going to go over to the Sonos interfaceand I’m going to skip to the next track, and notice all these interfaces updated inreal time because of that, so I got, you know the, apparently Greatest Hits, hold on a second. So by clicking into the Sonos interface, thisis really cool too, we get an actual live log of those things, so let’s say I pausethe music, you’ll see the media states change, the media info has changed. I’ll play it again and we can see the realtime stream of that come through. I’ll skip tracks once more and boom here’sall the information about the new track appearing as well. So you get this really nice stream of datathat comes off the device. 

That’s available then through our webhooksAPI and that’s available through another API which I haven’t talked about yet, whichis our WebSockets API. So you can connect WebSockets directly toyour mobile app and be able to have the app be, you know, be real-time responsive to thesechanges as well. This interface here basically gives you directaccess to, you know, similar to the other interface with a little bit more rich, givingyou direct access to all of the custom properties. I can actually go in here and change, youknow, the volume of the music. I can go in and change, you know, skip tracksand so on. You see here there’s a section called metadata. This things called office Sonos. The label that you see is actually part ofthe metadata on the, you know, the metadata interface, but our UI knows about that andit pulls it up here, but I can actually go in here, you would normally do this programmatically,but we got this for, you know, just easy development. I can actually go in here and add some customfield. Right, and associate that with, with thisoffice Sonos. So, this kind of capability is accessiblethrough the API for the device, and like I say, you can write any custom informationyou want to it. We have support for custom data metadata scopesas well. 

You can actually decide whether to supplythe information directly to everyone who looks at this device or to only this specific user. So you can write a custom property that’suser specific so this user looks at it they see one thing, this other user looks at itthey see another thing. You can also do it at an app specific levelas well, so that if one application is doing the custom data they see a different viewof it then when a different application is viewing it. So, let’s say you had a management interfaceversus a user facing interface that was defined. They can have custom scopes metadata as well. So the metadata system is really rich. It’s a very nice way to apply data and it’ssimply a matter of writing, you know, an update to that record. So whether it’s the device, the ecosystem,I’m sorry, whether it’s the device or the environment or the zone, you know justapplying custom data to it is really, really simple. 

Comments

Popular posts from this blog

Folding Homes That Define Innovation