Patent Description:
<CIT> discloses discovering cloud-based services for IoT devices in an IoT network associated with a user.

<CIT> discloses a device capability database storing device capabilities and a database which which stores the required capabilities of a service (i. e what a service would require to be meaningfully consumed). This databases are then used to match the device types and situational parameters those the corresponding services.

There is provided a computer system according to claim <NUM>. There is further provided a method according to claim <NUM>.

Additionally or alternatively, each software interface may include a semantic description of one or more capabilities and descriptive attributes of the network connected device accessible by the plurality of software services. Additionally or alternatively, the semantic description may include a network connected device property of the network connected device. Additionally or alternatively, the network connected device property may be selected from the group consisting of a network connected device model, a network connected device serial number, a network connected device manufacturer, a network connected device operating system, a network connected device memory property, a network connected device type, and a read-write property. Additionally or alternatively, the semantic description may include one or more defined events that can be generated by the network connected device. In this aspect, additionally or alternatively, the one or more events may be selected from the group consisting of a physical property measured by the network connected device, a device state event, a device alert event, and a device error event. Additionally or alternatively, the semantic description may include one or more software commands implemented by the network connected device. Additionally or alternatively, the plurality of software interfaces and the plurality of software services may be extensible. Additionally or alternatively, if more than one software service operates on the one or more software interfaces implemented by the network connected device, the one or more processors may be configured to select a preferred software service from the more than one software service based on a ranking factor. Additionally or alternatively, the ranking factor may be selected from the group consisting of a popularity metric, a user score metric, an association factor, and a match score. Additionally or alternatively, to select one or more software services, the one or more processors may be configured to present a user with a list of software services based on the indication of one or more software interfaces implemented by the network connected device, and receive a user selection of one or more software services from the list of software services. Additionally or alternatively, the selected one or more software services may be executed by an edge computing device separate from a cloud platform configured to store the one or more software services.

There is described a method comprising, at a computer system including one or more processors, storing a plurality of software interfaces that define explicit interaction contracts between network connected devices and software services, executing a plurality of software services, each software service defining one or more software interfaces operated on by that software service, receiving, from a network connected device, an indication of one or more software interfaces implemented by the network connected device, selecting one or more software services based on a match between the one or more software interfaces implemented by the network connected device and the one or more software interfaces operated on by the plurality of software services, and processing data received from the network connected device or sending a command to the network connected device using the selected software services according to the explicit interaction contracts of the one or more software interfaces. Additionally or alternatively, each software interface may include a semantic description of one or more capabilities and descriptive attributes of the network connected device accessible by the plurality of software services. Additionally or alternatively, the semantic description may include one or more defined events that can be generated by the network connected device. Additionally or alternatively, the one or more events may be selected from the group consisting of a physical property measured by the network connected device, a device state event, a device alert event, and a device error event. Additionally or alternatively, the semantic description may include one or more software commands implemented by the network connected device. In this aspect, additionally or alternatively, the plurality of software interfaces and the plurality of software services may be extensible. Additionally or alternatively, the selected one or more software services may be executed by an edge computing device of the computer system separate from a cloud platform of the computer system configured for storing the one or more software services.

A computer system is described comprising one or more processors configured to store a plurality of software interfaces that define explicit interaction contracts between software programs associated with network connected devices and software services, store a plurality of software services, each software service defining one or more software interfaces operated on by that software service, receive, from a software program associated with a network connected device, an indication of one or more software interfaces implemented by the software program, wherein the software program is configured to control the associated network connected device, select one or more software services based on a match between the one or more software interfaces implemented by the software program associated with the network connected device and the one or more software interfaces operated on by the plurality of software services, and process data received from the software program associated with the network connected device or send a command to the software program associated with the network connected device using the selected software services according to the explicit interaction contracts of the one or more software interfaces.

To address these issues, a computer system <NUM> is provided. <FIG> illustrates a computer system <NUM> that includes a cloud platform <NUM> configured to store and manage a plurality of software interfaces <NUM>. In one example, the plurality of software interfaces <NUM> may include platform software interfaces <NUM> that are provided and controlled by the cloud platform <NUM>. The plurality of software interfaces <NUM> may further include custom software interfaces <NUM> that are created by manufacturers of network connected devices <NUM>, developers of software services <NUM>, or other users of the cloud platform <NUM>. Each software interface <NUM> defines explicit interaction contracts between network connected devices <NUM> operated by customers and users of the cloud platform <NUM> and software services <NUM> created by developers. The software services <NUM> may be developed by the manufacturers of the network connected devices <NUM>, by third party developers unrelated to the manufacturers of the network connected devices <NUM>, by the users of the network connected devices <NUM>, and by other users of the cloud platform <NUM>. An explicit interaction contract is a data file that defines the schemas and protocols according to which data should be sent and received between a client and server, for example.

In one example, the cloud platform <NUM> comprises one or more processors <NUM> configured to execute the processes and functions of the cloud platform <NUM> described herein. The cloud platform includes one or more server devices configured to operate in a cloud computing configuration. As illustrated in <FIG>, the cloud platform <NUM> is configured to execute a plurality of software services <NUM>, each software service defining one or more software interfaces <NUM> operated on by that software service <NUM>. In one example, the plurality of software services <NUM> are configured to process data according to the explicit interaction contracts of the one or more software interfaces <NUM> that the software service <NUM> has been developed to utilize. These software services <NUM> may be developed by first or third parties, and uploaded to the cloud platform <NUM>. In one example, the cloud platform <NUM> may perform testing, authentication, and certification processes on each uploaded software service before making those software services available on the cloud platform <NUM>. For example, the cloud platform <NUM> may be configured to test whether each software service <NUM> correctly implements one or more software interfaces <NUM>. These software services <NUM> may then be stored and executed on the cloud platform <NUM> to process data from network connected devices <NUM> operated by users of the cloud platform <NUM>.

<FIG> illustrates an example of a plurality of network connected devices <NUM> distributed around an example physical environment, namely, a house of a user. The network connected devices may be configured to connect to a wide area network (WAN) via a router <NUM>. As a specific example, the router <NUM> may take the form of a wireless network device mediating a wireless network that may be utilized by the plurality of network connected devices <NUM> in the physical environment. In another example, the plurality of network connected devices <NUM> may be configured to communicate with a user computing device <NUM> configured to connect to the WAN via the router <NUM>.

The plurality of network connected devices <NUM> may take different forms and may perform different processes and functions. In the specific example illustrated in <FIG>, the network connected devices <NUM> include a thermostat <NUM>, a fireplace thermometer <NUM>, a body thermometer <NUM>, and a pet food measuring device <NUM>. It should be appreciated that the specific example network connected devices <NUM> illustrated in <FIG> are merely exemplary, and that the network connected devices may take other suitable forms. As a few other non-limiting examples, the network connected devices <NUM> may take the form of a GPS unit, a vibration/movement sensor, printer, router, lights, HVAC unit, robot, smart speaker, smart watch, asset tracker, a speaker, a smart coffee machine, a refrigerator sensor, other types of sensors and measurement devices, other type of consumer or industrial IoT device, etc. that include processors, memory, stored programs, and communications interfaces that are able to connect to remote servers via computer networks. In the example illustrated in <FIG>, each network connected device <NUM> is configured to measure a physical parameter, such as a temperature or a pet food level. However, it should be appreciated that the network connected devices <NUM> may take other forms that do not necessarily measure physical parameters, such as, for example, a network connected output device such a printer or display.

In one example, each network connected device <NUM> may include a processor or another type of hardware-logic component such as, for example, field-programmable gate arrays (FPGAs), program- and application-specific integrated circuits (PASIC / ASICs), program- and application-specific standard products (PSSP / ASSPs), system-on-a-chip (SOC), complex programmable logic devices (CPLDs), etc. The processor of each network connected device <NUM> may be configured to collect measured physical values via a sensor, perform a process or output, etc. The processor of each network connected device <NUM> may be further configured to send messages <NUM> from the network connected device <NUM> to the computing system <NUM> via the wireless network mediated by the router <NUM> and/or via the user computing device <NUM>. In the illustrated example, the user computing device <NUM> takes the form of a large format display, and may include its own processor, non-volatile storage, volatile storage, and other suitable computer components. However, it will be appreciated that the client computer device <NUM> may take other suitable forms, such as, for example, a desktop computer device, a laptop computer device, smartphone, tablet computer device, etc..

Turning back to <FIG>, in one example, when first connecting to a network, each network connected device <NUM> may be configured to communicate with a provisioning service <NUM> to perform an initialization process <NUM>. The initialization process <NUM> may include checking whether any updates to the firmware/software of the network connected device <NUM> are available. The initialization process <NUM> may also include initializing the network connected device <NUM> with an address of a gateway <NUM> for the cloud platform <NUM>. After receiving the address of the gateway <NUM> for the cloud platform <NUM>, each network connected device <NUM> may be configured to communicate with the cloud platform <NUM> via a WAN. In this example, the internet protocol address of the provisioning service <NUM> may be provided to each network connected device <NUM> by the manufacturer or seller of that network connected device <NUM>. In another example, the internet protocol address of the gateway <NUM> for the cloud platform <NUM> may be directly provided to the network connected device 18A by the manufacturer or seller of the network connected device <NUM>.

As illustrated in <FIG>, each network connected device <NUM> may be configured to send an indication of software interfaces <NUM> to the cloud platform <NUM> implemented by that network connected device <NUM>. The indication takes the form of a list <NUM>. In one example, each network connected device <NUM> may be manufactured to implement one or more software interfaces <NUM>, such as, for example, platform software interfaces <NUM> or custom software interfaces <NUM> indexed by the cloud platform <NUM>. For example, the software/firmware of the network connected device <NUM> may be developed to conform to the explicit interaction contracts of the one or more software interfaces <NUM> the network connected device <NUM> is implementing. In one example, the list <NUM> of software interfaces may sent to the cloud platform <NUM> by the provisioning service <NUM>, such as, for example, during the initialization process <NUM>. In another example, an edge computing device <NUM>, such as an edge gateway, may be configured to communicate with the network connected device <NUM>, and forward the list <NUM> of software interfaces to the cloud platform <NUM>.

In another example, the one or more software interfaces <NUM> for a network connected device <NUM> may be implemented by a network connected device associated software program <NUM> executed by a cloud computer device <NUM>. The network connected device associated software program <NUM> may be configured to command and control one or more associated network connected devices <NUM>. In the example illustrated in <FIG>, the network connected device associated software program <NUM> is configured to communicate with the example network connected device 18B. The network connected device associated software program <NUM> is further configured to perform the functions and processes of the network connected devices <NUM> described herein. For example, the network connected device associated software program <NUM> may be configured to send the list of software interfaces <NUM> to the cloud platform <NUM> as well as send and received messages <NUM> with software services <NUM> executed on the cloud platform <NUM>. The cloud computer device <NUM> executing the network connected device associated software program <NUM> may be a cloud server of the cloud platform <NUM>, or may be a computer device separate from the cloud platform <NUM>. In another example, an edge computing device <NUM> may implement the network connected device associated software program <NUM>, and may similarly be configured to command and control one or more associated network connected devices <NUM>, and send and received messages with the cloud platform <NUM>.

As a specific example, the network connected device associated software program <NUM> may take the form of a software-controlled conference room. The network connected devices <NUM> associated with the network connected device associated software program <NUM> may include network connected lights that may be turned on/off by the network connected device associated software program <NUM>, occupancy sensors that may send occupancy data to the network connected device associated software program <NUM>, network connected air conditioning devices, etc. Further in this example, the network connected device associated software program <NUM> may be configured to implement one or more software interfaces <NUM>, and may send/receive messages with software services <NUM> on the cloud platform. For example, a software service on the cloud platform may include code to command the network connected device associated software program <NUM> to turn the network connected light devices of the conference room on or off based on occupancy data received from an occupancy sensor network connected device.

In one example, each software interface <NUM> includes a semantic description of one or more capabilities and descriptive attributes of the network connected device <NUM> accessible by the plurality of software services <NUM>. As a specific example, the semantic descriptions of the software interfaces <NUM> may be described using JavaScript Object Notation for Linked Data (JSON-LD). JSON-LD is designed to be usable directly as JSON as well as usable in Resource Description Framework (RDF) systems that provides a standard for describing resources in a distributed, extensible way. The semantic descriptions of the software interfaces <NUM> provide semantic type annotations of the one or more capabilities and descriptive attributes of the network connected devices <NUM>, so that analytics, machine learning, user interfaces, and other computation can reason about the semantics of data received from that network connected device <NUM>. It will be understood that semantic type annotations are human readable and machine readable, and can form the basis for downstream searching and data analytics of human readable and machine readable categories of data. For example, physical values measured by the thermostat <NUM>, the fireplace thermometer <NUM>, and/or the body thermometer <NUM> example networked connected devices <NUM> of <FIG> may be semantically annotated as "temperature". In this manner, the measured physical values sent to the cloud platform <NUM> by the these example network connected devices <NUM> can be reasoned about as temperature (charted together, compared, converted to like units, etc.).

<FIG> illustrates an example software interface <NUM>. The one or more capabilities and descriptive attributes of the network connected devices <NUM> may include device property data <NUM>, telemetry data <NUM>, software commands <NUM>, and audio and/or video streaming capabilities <NUM> implemented by the network connected device, as a few non-limiting examples. However, it should be appreciated that other types of capabilities and descriptive attributes not described herein may also be included in the software interfaces <NUM>. These capabilities describe related sets of functionalities utilized by the particular type of network connected device <NUM>, such as, for example, the capabilities of a thermometer, a pet food measurement unit, an asset tracker, etc. In one example, the semantic description of the software interface <NUM> includes a network connected device property <NUM> selected from the group consisting of a network connected device model, a network connected device serial number, a network connected device manufacturer, a network connected device operating system, a network connected device memory property, and a network connected device type. The network connected device model may be a model number or identification set by a manufacturer of that network connected device <NUM>. The network connected device serial number may be a serial number set by a manufacturer of that network connected device <NUM>. The network connected device manufacturer may be a name of a manufacturer of that network connected device <NUM>. The network connected device memory property may be a total memory size, a memory type, a manufacturer of the network connected device's memory, etc. The network connected device type may be a semantic description of the networked connected device, such as, for example, "thermometer", "asset tracker", etc. However, it should be appreciated that other types of read-only or read/write properties of a network connected device <NUM> may also be included in the software interface <NUM> for the network connected device property data <NUM>.

In another example, the semantic description of the software interface <NUM> includes one or more defined events that can be generated by the network connected device <NUM> and emitted as telemetry data <NUM>. The one or more defined events are selected from the group consisting of a physical property measured by the network connected device, a device state event, a device alert event, and a device error event. The semantic description for the physical property measured by the network connected device <NUM> may describe the physical property being measured and a data type for the property. For example, the semantic description for a thermometer network connected device <NUM> may indicate that the physical property being measured is a temperature, and that the value sent by the thermometer network connected device <NUM> is a double data type. The semantic description for the device state events may indicate how the network connected device <NUM> will be configured to emit device state information that may be captured by the software services <NUM>. The semantic description for the network connected device alert and error events may indicate what type of alerts and events that the network connected device <NUM> is configured to emit, and a type for those alerts and errors. It should be appreciated that the defined events described above are merely exemplary, and that other types of events may be semantically described in the software interfaces <NUM>.

In another example, the semantic description of the software interfaces <NUM> includes one or more software commands implemented by the network connected device <NUM>. The semantic description may describe the functions and operations that the network connected device <NUM> can be instructed to execute by the software services <NUM>. For example, the semantic description may describe a function name for the available commands, a developer comment describing what that command will do, a type of command execution such as synchronous or asynchronous, a data type for an input to the command, and a data type for an output of the command.

<FIG> illustrates a specific example of a software interface <NUM>. The example software interface <NUM> includes a semantic description <NUM> of one or more capabilities and descriptive attributes of the network connected devices <NUM>. In the illustrated example, the semantic description <NUM> includes a defined telemetry event <NUM> for physical property data measured by the network connected device. As illustrated in <FIG>, the defined telemetry event <NUM> further includes an additional semantic type "Temperature", which may be used to indicate that the telemetry data can be reasoned about as both telemetry and temperature. The semantic description <NUM> also indicates that the physical property measured by the associated network connected device <NUM> will be emitted as a double data type. Thus, any software service <NUM> configured for the illustrated software interface <NUM> can expect that the data emitted by the network connected device is a temperature value of the double data type, and may process that data accordingly. In this manner, the data emitted by the network connected device can be reasoned about as temperature (charted together, compared, converted to like units, etc.) by those software services <NUM>. As another specific example, a body thermometer network connected device may implement a software interface <NUM> that includes a defined telemetry event <NUM> that further includes a BodyTemperature semantic type (e.g. { "@type": [ "Telemetry", "Temperature", "BodyTemperature" ], "name": "temp", "schema": "double" }), which may be used to indicate that the telemetry data can be reasoned about as telemetry, temperature, and body temperature. It should be appreciated that while the examples illustrated in <FIG> and described above are based on the JSON-LD way of expressing semantic types, the software interfaces <NUM> are not limited to the JSON-LD. The software interfaces <NUM> may utilize any other suitable programming language, and may express semantic type via other suitable means.

In the illustrated example, the software interface further includes a semantic description for an example network connected device property <NUM>. However, it should be appreciated that software interfaces <NUM> may include semantic descriptions for any suitable number of capabilities and attributes of network connected devices, such as, for example, one, three, seven, etc. As illustrated, the semantic description <NUM> for the example network connected device property <NUM> indicates that the network connected device includes a SETPOINTTEMP property that is writable with a double data type value. Similarly as described above with the defined telemetry event <NUM>, the SETPOINTTEMP writable property may include a temperature semantic type (e.g. { "@type": [ "Property", "Temperature" ],) Thus, software services <NUM> configured to operate on the software interface illustrated in <FIG> may reason that the SETPOINTTEMP is both a property and a temperature, and may send instructions to the thermostat network connected device to set its SETPOINTTEMP value to particular temperature value. As both the thermostat network connected device and the particular software service <NUM> are configured for the example software interface illustrated in <FIG>, both the manufacturer of the thermostat network connected device and the developer of the particular software service <NUM> may have a common understanding of how the SETPOINTTEMP value of the thermostat network connected device may be manipulated. Further, in this manner, the software service <NUM> implementing the software interface will also be compatible with other network connected devices which may take other forms or created by other manufacturers, if those other network connected devices are implanting the software interface <NUM> illustrated in <FIG>.

Turning back to <FIG>, each network connected device <NUM> may be configured to implement one or more of the software interfaces <NUM>. The cloud platform <NUM> is configured to receive, from a network connected device <NUM>, an indication which is a list <NUM> of the one or more software interfaces <NUM> implemented by the network connected device <NUM>. In one example, the one or more software interfaces <NUM> includes one or more platform software interfaces <NUM> managed by the cloud platform <NUM> and/or one or more custom software interfaces <NUM> created by manufacturers and developers. The platform software interfaces <NUM> may include, for example, software interfaces <NUM> for device information, application management, certification management, diagnostic logs, factory reset functions, reboot management, etc. However, it should be appreciated that developers and manufacturers may create and manage their own custom software interfaces <NUM> that may be implemented by the software services <NUM> and network connected devices <NUM>.

After receiving the list <NUM> of software interfaces from the network connected device <NUM>, the cloud platform <NUM> may be configured to select one or more software services <NUM> based on a match between the one or more software interfaces <NUM> implemented by the network connected device <NUM> and the one or more software interfaces <NUM> operated on by the plurality of software services <NUM>. In the example illustrated in <FIG>, the network connected device 18A is configured to implement the software interfaces A and software interface B of the plurality of software interfaces <NUM>. After receiving the list <NUM> of software interface <NUM> from the network connected device 18A, which, in this specific example, includes software interface A and software interface B, the cloud platform <NUM> is configured to compare the receive list <NUM> of software interfaces to the software services <NUM> known to the cloud platform <NUM>. In particular, the cloud platform <NUM> may be configured to filter the plurality of cloud services <NUM> based on the list <NUM> of software interfaces <NUM> received from the network connected device 18A. In the illustrated example, the software service 20A is configured to operate on the software interface A, and the software service 20B is configured to operate on the software interface B. Thus, the cloud platform <NUM> may be configured to select the software services 20A and 20B to process data and operate the network connected device 18A.

In one example, the software services <NUM> are executed by one or more server devices of the cloud platform <NUM>, and the cloud platform <NUM> is configured to process data received from the network connected device <NUM> using the selected software services <NUM> according to the explicit interaction contracts of the one or more software interfaces <NUM>. As a specific example, messages <NUM> received from and sent to the network connected device <NUM> may include a software interface tag <NUM> which indicates a particular software interface <NUM> that the data in the message <NUM> is associated with or otherwise conforms to. As a specific example, the thermostat network connected device may be configured to tag each message <NUM> that includes measured values for temperature data with a software interface tag <NUM> indicating the example software interface <NUM> of <FIG>.

After receiving a message <NUM>, the cloud platform <NUM> may be configured to route the message <NUM> to the selected software service <NUM> configured for the software interface <NUM> indicated in the software interface tag <NUM> of that message <NUM>. In this manner, each message <NUM> may be routed to and processed by the appropriate software service <NUM>. Messages <NUM> sent by software services <NUM>, such as, for example, software commands <NUM>, may also be tagged with the appropriate software interface tag <NUM> and sent to the network connected device <NUM> over the WAN.

In another example, the cloud platform <NUM> may be configured to identify an edge computing device <NUM> that may be configured to execute one or more software services <NUM> managed by the cloud platform <NUM>, and is logically located on the same side of a WAN as the network connected device <NUM> relative to the cloud platform <NUM>. As illustrated in <FIG>, after identifying an edge computing device <NUM>, the cloud platform <NUM> may be configured to send one or more of the selected software services <NUM> to the edge computing device <NUM>, which may be configured to execute those software services <NUM>. The cloud platform <NUM> may configure the network connected device <NUM> to route messages processed by the selected software service <NUM> to the edge computing device <NUM>. Additionally, commands and messages from the cloud platform <NUM> to the network connected device <NUM> may also be routed through the edge computing device <NUM>. In this example, the traffic from the cloud platform <NUM> may be processed by the edge computing device <NUM>, which may send further commands and/or messages to the network connected device <NUM>. The edge computing device <NUM> may be configured to process the messages <NUM> with the selected software service <NUM> as described herein, and perform and functions or processes of the selected software service <NUM>. In this manner, the one or more selected software services <NUM> are executed by the edge computing device <NUM> that is separate from the cloud platform <NUM> configured to store the one or more software services <NUM>. In the example illustrated in <FIG>, software service 20B has been sent to the edge computing device <NUM>. Thus, the example network connected device 18A may be instructed to route messages <NUM> associated with the software interface B to the edge computing device <NUM>. On the other hand, messages <NUM> associated with the software interface A may be routed to the cloud platform <NUM>, which is configured to execute the software service 20A configured to operate on the software interface A.

The cloud platform <NUM> is further configured to match the one or more software services <NUM> to the network connected devices <NUM> based on a ranking factor <NUM> for the software services <NUM>. For example, if more than one software service <NUM> operates on the one or more software interfaces <NUM> implemented by the network connected device <NUM>, the cloud platform <NUM> may be configured to select a preferred software service from the more than one software service <NUM> based on a ranking factor <NUM>. The preferred software service <NUM> is subsequently used to process data from the network connected device <NUM> as described above. The ranking factor <NUM> includes a popularity metric, a user score metric, an association factor, and a match score. The popularity metric may track how often that particular software service <NUM> is selected compared to other similar software services <NUM> that operate on similar software interfaces. The user score metric may track a user input of a score for each software service, such as a score of <NUM>-<NUM>. The association factor may track whether the developer of a software service <NUM> is associated with the manufacturer of a network connected device, such that software services and network connected devices created by the same or associated parties may be selected together. The match score indicates how closely the software interfaces <NUM> of the software service <NUM> matches the software interfaces of the network connected device.

In the example illustrated in <FIG>, while both the software service 20A and the software service 20D operate on software interface A implemented by the network connected device 18A, the software service 20D also operates on software interface B which is also implemented by the network connected device 18A. Thus, based on the ranking factor <NUM> of a match score factor, the cloud platform <NUM> may be configured to select the software service 20D to match with the network connected device 18A.

In these examples, the cloud platform <NUM> has been described as selecting and matching software services <NUM> to the network connected devices <NUM> automatically. In another example, the cloud platform <NUM> may be further configured to present a list of selected software services <NUM> that match with the network connected device <NUM> to the user of the network connected device <NUM>. As a specific example, the user may access a user account on the cloud platform <NUM> via a computing device, such as, for example, the user computing device <NUM> illustrated in <FIG>. The user may control their selected software services <NUM> for operating their network connected devices through their user account on the cloud platform <NUM>. In this example, the list of selected software services <NUM> may be presented to the user via an interface of the cloud platform <NUM> shown on a display of the user computing device <NUM>. The list of selected software services <NUM> may be ranked based on the ranking factor for software services <NUM>. The user may then select one or more software services <NUM> from the list. The user selected software services <NUM> may then be used to process data and operate the network connected device <NUM> as described herein.

In one example, the plurality of software interfaces <NUM> and the plurality of software services <NUM> are extensible. For example, users may select a software interface <NUM>, and add additional semantic description and/or additional interaction contracts to the selected software interface <NUM>. After extending the selected software interface, the extended software interface may be uploaded to the cloud platform <NUM>.

Similarly, the software services <NUM> are extensible. Users may select one or more software services <NUM> stored on the cloud platform <NUM>, and add additional code to the selected software service. The extended software service <NUM> may then be uploaded to the cloud platform <NUM> and used to process data from a network connected device <NUM> of that user. In this manner, users may utilize already existing software interfaces <NUM> and software services <NUM> available on the cloud platform <NUM> to generate their own software solutions by extending those existing software interfaces <NUM> and software services <NUM> to meet their specific needs.

As another example, the software interface of <FIG> may be applied to the thermostat <NUM>, the fireplace thermometer <NUM>, and the body thermometer <NUM> network connected devices illustrated in <FIG>. However, while all three network connected devices measure the physical property of temperature, the ranges of expected temperatures for each network connected device may be different. For example, the thermostat network connected device <NUM> may expect temperature ranges between <NUM>-<NUM> degrees Fahrenheit, the fireplace thermometer network connected device <NUM> may expect temperature ranges between <NUM>-<NUM> degrees Fahrenheit, and the body thermometer network connected device <NUM> may expect temperature ranges at around <NUM>-<NUM> degrees Fahrenheit. Thus, the user may extend the example software interfaces of <FIG> to semantically describe the temperature measured by the specific network connected device. For example, the software interface for the thermostat network connected device <NUM> may be extended to semantically describe its measurements as "ROOM TEMP" while the software interface for the body thermometer network connected device may be extended to semantically describe its measurements as 'BODY TEMP". Further, the user may extend the example software interfaces of <FIG> to add additional data and capabilities to the software interfaces. For example, the user may add an operational range to a temperature value, such as, for example, <NUM>-<NUM> degrees Fahrenheit for the fireplace thermometer network connected device <NUM>. The operational range may control the range of temperatures that the network connected device will be configured to detect. Once the example software interface of <FIG> has been extended with an operational range capability, software services <NUM> on the cloud platform <NUM> may then be configured to send commands to a network connected device to set and manage its operational range according to the extended software interface.

<FIG> illustrates an example extended software interface <NUM>. In this example, the user has selected the example software interface <NUM> illustrated in <FIG>, and has added a new telemetry capability <NUM> to the software interface <NUM>. As illustrated, the extended software interface <NUM> includes a telemetry capability with a semantic description identifying that the physical value being measured is a "GPS" value that is provided in the double data type. The extended software interface <NUM> may then be uploaded by the user to the cloud platform <NUM>. The user may further select a software service stored on the cloud platform <NUM>, and add additional code to the selected software service to appropriately process the user's extended software interface <NUM>. In another example, the extension to the software interface <NUM> may be authored and stored separately from the original software interface. In the specific example illustrated in <FIG>, rather than adding the new telemetry capability <NUM> to the code of the original software interface <NUM>, the new telemetry capability <NUM> could be authored and stored separately from the original interface, and uploaded to the cloud platform <NUM> with an indication that the new telemetry capability <NUM> is an extension to the original software interface stored on the cloud platform <NUM>.

<FIG> is a flow chart of a method <NUM> implemented at a computer system including one or more processors. Method <NUM> may be executed using the systems described above or utilizing other suitable hardware and software elements.

At <NUM>, the method <NUM> may include, at a computer system including one or more processors, storing a plurality of software interfaces that define explicit interaction contracts between network connected devices and software services. In one example, the plurality of software interfaces and the plurality of software services are extensible. As a specific example, the semantic descriptions of the software interfaces <NUM> may be described using JSON-LD. JSON-LD is designed to be usable directly as JSON as well as usable in Resource Description Framework (RDF) systems that provides a standard for describing resources in a distributed, extensible way. A specific example of extending a software interface is illustrated in <FIG>.

In one example, each software interface includes a semantic description of one or more capabilities and descriptive attributes of the network connected device accessible by the plurality of software services. The semantic descriptions of the software interfaces <NUM> provide semantic type annotations of the one or more capabilities and descriptive attributes of the network connected devices <NUM>, so that analytics, machine learning, user interfaces, and other computation can reason about the semantics of data received from that network connected device <NUM>.

In this example, the semantic description may include a network connected device property selected from the group consisting of a network connected device model, a network connected device serial number, and a network connected device type. The network connected device model may be a model number or identification set by a manufacturer of that network connected device <NUM>. The network connected device serial number may be a serial number set by a manufacturer of that network connected device <NUM>. The network connected device type may be a semantic description of the networked connected device, such as, for example, "thermometer", "asset tracker", etc..

In another example, the semantic description may include one or more defined events that can be generated by the network connected device. In this example, the one or more events are selected from the group consisting of a physical property measured by the network connected device, a device state event, a device alert event, and a device error event. The semantic description for the physical property measured by the network connected device <NUM> may describe the physical property being measured and a data type for the property. For example, the semantic description for a thermometer network connected device <NUM> may indicate that the physical property being measured is a temperature, and that the value sent by the thermometer network connected device <NUM> is a double data type.

In another example, the semantic description includes one or more software commands implemented by the network connected device. The semantic description may describe the functions and operations that the network connected device <NUM> can be instructed to execute by the software services <NUM>. For example, the semantic description may describe a function name for the available commands, a developer comment describing what that command will do, a type of command execution such as synchronous or asynchronous, a data type for an input to the command, and a data type for an output of the command.

At <NUM>, the method <NUM> may include, at the computer system, executing a plurality of software services, each software service defining one or more software interfaces operated on by that software service. The software services may be developed by first or third parties, and uploaded to the computer system. Each software service specifies one or more software interfaces that the software service is configured to interact with.

At <NUM>, the method <NUM> may include, at a network connected device, sending an indication, which is a list, of one or more software interfaces implemented by the network connected device. The list indicates each of the software interfaces that the network connected device was manufactured to comply with. These software interfaces may be selected from a plurality of platform software interfaces and/or custom software interfaces.

At <NUM>, the method <NUM> may include, at the computer system, receiving the list of one or more software interfaces implemented by the network connected device.

At <NUM>, the method <NUM> may include, at the computer system, selecting one or more software services based on a match between the one or more software interfaces implemented by the network connected device and the one or more software interfaces operated on by the plurality of software services. For example, if more than one software service <NUM> operates on the one or more software interfaces <NUM> implemented by the network connected device <NUM>, step <NUM> may further include selecting a preferred software service from the more than one software service <NUM> based on a ranking factor <NUM>. In one example, the ranking factor <NUM> may include a popularity metric, a user score metric, an association factor, and a match score.

At <NUM>, the method <NUM> may include, at the network connected device <NUM>, sending data to the computer system. The sent data may include various events, such as, for example, a measured physical property, a device state event, a device error or alert event, etc. The measured physical properties may, for example, include sensor data measured by sensors of the network connected device. Sent messages may further include a software interface tag <NUM> which indicates a particular software interface that the data in the message <NUM> is associated with or otherwise conforms to.

At <NUM>, the method <NUM> may include, at the network connected device <NUM>, processing data received from the network connected device using the selected software services according to the explicit interaction contracts of the one or more software interfaces. In one example, the selected one or more software services may be executed by an edge computing device of the computer system separate from a cloud platform of the computer system configured for storing the one or more software services, as illustrated in <FIG>.

At <NUM>, the method <NUM> may include, at the computer system <NUM>, sending a command to the network connected device according to the explicit interaction contracts of the one or more software interfaces. The commands that the software service executed by the computer system may send to the network connected device are defined in the implemented one or more software interfaces. The one or more software interfaces may further define arguments for the commands, return values for the commands, etc. In examples where the one or more software services are executed on an edge computing device, the commands may be sent from the edge computing device to the associated network connected device. It should be appreciated that steps <NUM> and <NUM> may be enacted any suitable number of times and in any order.

At <NUM>, the method <NUM> may include, at the network connected device <NUM>, receiving the command from the computer system <NUM>. The network connected device <NUM> may then process and enact the command, and return one or more values to the computer system <NUM> if applicable.

Computing system <NUM> may embody the computer system <NUM>, the network connected devices <NUM>, the edge computing device <NUM>, the client computing device <NUM>, and other computing devices described above and illustrated in <FIG> and <FIG>. Computing system <NUM> may take the form of one or more personal computers, server computers, tablet computers, home-entertainment computers, network computing devices, gaming devices, mobile computing devices, mobile communication devices (e.g., smart phone), and/or other computing devices such as industrial devices (e.g. industrial equipment, robots, etc.) and consumer devices (e.g. cars, coffee machines, appliances, etc.), and wearable computing devices such as smart wristwatches and head mounted augmented reality devices.

Claim 1:
A computer system (<NUM>) comprising:
one or more processors (<NUM>) of one or more server devices of a cloud platform (<NUM>) configured to:
store a plurality of software interfaces (<NUM>) at the cloud platform that are implemented by network connected devices (<NUM>) and cloud based software services (<NUM>), wherein each software interface (<NUM>) defines explicit interaction contracts between network connected devices (<NUM>) and cloud based software services (<NUM>) and includes a semantic description of one or more capabilities and descriptive attributes of the network connected device (<NUM>) accessible by a cloud based software service (<NUM>) that implements that software interface (<NUM>);
execute a plurality of cloud based software services (<NUM>), each software service (<NUM>) defining one or more software interfaces (<NUM>) operated on by that software service (<NUM>);
receive, from a network connected device (<NUM>), a list of one or more software interfaces (<NUM>) implemented by the network connected device (<NUM>);
select one or more cloud based software services (<NUM>) based on a match between the one or more software interfaces (<NUM>) of the list implemented by the network connected device (<NUM>) and one or more of the software interfaces (<NUM>) stored at the cloud platform (<NUM>) and operated on by the software services (<NUM>); and
process data received from the network connected device (<NUM>) or send a command to the network connected device (<NUM>) using the selected cloud based software services (<NUM>) according to the explicit interaction contracts of the one or more software interfaces (<NUM>), wherein if more than one software service (<NUM>) operates on the one or more software interfaces (<NUM>) implemented by the network connected device (<NUM>), the one or more processors (<NUM>) are configured to select a preferred software service (<NUM>) from the more than one software service (<NUM>) based on a match score which indicates how closely the software interface (<NUM>) of the software services (<NUM>) match the software interfaces (<NUM>) of the network connected device (<NUM>).