# US 10,313,455 B2 · Data streaming service for an internet-of-things platform

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 10,313,455 B2
- Document ID: US10313455B2
- Status: Granted
- Kind: B2
- Application number: 15/251,516
- Filed: 2016-08-30
- Published: 2017-03-02
- Granted: 2019-06-04
- Earliest claimed: 2015-08-31
- Assignees: Ayla Networks, Inc.
- Applicants: Ayla Networks, Inc.
- Inventors: Wayland William Quan; Vikram Vasantha Kumar; Sudha Sundaresan; Ishaan Sutaria
- Web page: https://patentgrep.com/patent/US10313455B2

## CPC

- H04L 67/53: using third party service providers
- H04L 63/083: {using passwords (cryptographic mechanisms or cryptographic arrangements for entity authentication using a predetermined code H04L9/3226)}
- H04L 67/55: Push-based network services
- H04L 63/10: {for controlling access to devices or network resources}
- H04L: TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION (arrangements common to telegraphic and telephonic communication H04M)

## Abstract

A processing device receives a subscription request to a streaming data feed, the subscription request specifying one or more devices and at least one device property. The processing device generates the streaming data feed. The processing device receives a plurality of event messages, each of the plurality of event messages comprising data for an event that occurred on a device. The processing device determines a set of event messages from the plurality of event messages, wherein event messages in the set of event messages are associated with the one or more devices and the at least one device property. The processing device sends the set of event messages to a subscriber that subscribes to the streaming data feed.

## Claims

### Claim 1

A method of data streaming for an internet-of-things platform comprising:
receiving, by a processing device, a subscription request to a streaming data feed, the subscription request specifying one or more devices and at least one device property;
generating the streaming data feed, the streaming data feed comprising a queue;
receiving a plurality of event messages, each of the plurality of event messages comprising data for an event that occurred on a device;
determining, by the processing device, a set of event messages from the plurality of event messages in view of the one or more devices and the at least one device property specified in the subscription request, wherein event messages in the set of event messages are associated with the one or more devices and the at least one device property specified in the subscription request, and the at least one device property includes at least one of an attribute, a setting, or a parameter of the one or more devices;
storing the set of event messages in the queue;
sending at least a subset of the set of event messages to a subscriber; and
deleting the set of event messages from the queue.

### Claim 2 (depends on 1)

The method of claim 1, wherein the each of the one or more devices comprises an embedded system, the method further comprising performing the following prior to generating the streaming data feed:
determining an account associated with the subscription request;
determining a role associated with the account; and
determining that the role has permission to stream data from the one or more devices and to stream data for the at least one device property.

### Claim 3 (depends on 1)

The method of claim 1, further comprising:
generating a group for a plurality of devices having at least one of the device property, a shared device type, a shared location or a shared owner, wherein the group comprises the one or more devices and the streaming data feed is for the group;
wherein determining the set of event messages that are associated with the one or more devices and the at least one device property comprises determining that the set of event messages are associated with the group.

### Claim 4 (depends on 1)

The method of claim 1, further comprising:
generating a first key associated with the streaming data feed;
sending the first key to the subscriber;
receiving a connection request to establish a connection to the streaming data feed, the connection request comprising a second key;
determining whether the first key matches the second key; and
establishing an asynchronous long-lived connection between the streaming data feed and the subscriber responsive to determining that the first key matches the second key.

### Claim 5 (depends on 1)

The method of claim 1, further comprising:
determining an amount of data added to the queue in a time period;
determining a size for a replay buffer that is sufficient to hold the amount of data added to the queue in the time period;
generating the replay buffer in accordance with the size; and
storing the set of event messages in the replay buffer.

### Claim 6 (depends on 5)

The method of claim 5, further comprising:
determining a new amount of data added to the queue in a subsequent time period;
determining a new size for the replay buffer based on the new amount of data added to the queue in the subsequent time period; and
resizing the replay buffer in accordance with the new size.

### Claim 7 (depends on 5)

The method of claim 5, wherein each event message in the set of event messages comprises a sequence identifier, the method further comprising:
receiving a replay request to replay event messages, the replay request comprising a specified range of sequence identifiers;
determining an additional set of event messages having the specified range of sequence identifiers; and
sending the additional set of event messages to the subscriber in sequence.

### Claim 8 (depends on 1)

The method of claim 1, further comprising:
determining a policy to apply to the streaming data feed, wherein the policy comprises a criterion associated with content of event messages;
receiving a new plurality of event messages;
determining a new set of event messages from the new plurality of event messages, wherein event messages in the new set of event messages are associated with the one or more devices and the at least one device property;
determining, from the new set of event messages, a subset of event messages that comply with the criterion; and
sending the subset of event messages to the subscriber.

### Claim 9 (depends on 1)

The method of claim 1, wherein the subscriber is a third party service, the method further comprising:
determining the subset of the set of event messages that are associated with user accounts that have opted in to use the third party service, wherein event messages from the set of event messages that are not in the subset are not sent to the third party service.

### Claim 10

A computing device to stream data for an internet-of-things platform comprising:
a memory; and
a processing device operatively coupled to the memory, the processing device to:
receive a subscription request to a streaming data feed, the subscription request specifying one or more devices and at least one device property;
generate the streaming data feed, the streaming data feed comprising a queue in the memory;
receive a plurality of event messages, each of the plurality of event messages comprising data for an event that occurred on a device;
determine a set of event messages from the plurality of event messages in view of the one or more devices and the at least one device property specified in the subscription request, wherein event messages in the set of event messages are associated with the one or more devices and the at least one device property specified in the subscription request, and the at least one device property includes at least one of an attribute, a setting, or a parameter of the one or more devices;
store the set of event messages in the queue;
send the set of event messages in the queue to a subscriber; and
delete the set of event messages from the queue.

### Claim 11 (depends on 10)

The computing device of claim 10, wherein the each of the one or more devices comprises an embedded system, the and wherein the processing device is further to perform the following prior to generating the streaming data feed:
determine an account associated with the subscription request;
determine a role associated with the account; and
determine that the role has permission to stream data from the one or more devices and to stream data for the at least one device property.

### Claim 12 (depends on 10)

The computing device of claim 10, wherein the processing device is further to:
generate a group for a plurality of devices having at least one of the device property, a shared device type, a shared location or a shared owner, wherein the group comprises the one or more devices and the streaming data feed is for the group;
wherein determining the set of event messages that are associated with the one or more devices and the at least one device property comprises determining that the set of event messages are associated with the group.

### Claim 13 (depends on 10)

The computing device of claim 10, wherein the processing device is further to:
generate a first key associated with the streaming data feed;
send the first key to the subscriber;
receive a connection request to establish a connection to the streaming data feed, the connection request comprising a second key;
determine whether the first key matches the second key; and
establish an asynchronous long-lived connection between the streaming data feed and the subscriber responsive to determining that the first key matches the second key.

### Claim 14 (depends on 10)

The computing device of claim 10, wherein the processing device is further to:
determine an amount of data added to the queue in a time period;
determine a size for a replay buffer that is sufficient to hold the amount of data added to the queue in the time period;
generate the replay buffer in accordance with the size; and
store the set of event messages in the replay buffer.

### Claim 15 (depends on 14)

The computing device of claim 14, wherein the processing device is further to:
determine a new amount of data added to the queue in a subsequent time period;
determine a new size for the replay buffer based on the new amount of data added to the queue in the subsequent time period; and
resize the replay buffer in accordance with the new size.

### Claim 16 (depends on 14)

The computing device of claim 14, wherein each event message in the set of event messages comprises a sequence identifier, and wherein the processing device is further to:
receive a replay request to replay event messages, the replay request comprising a specified range of sequence identifiers;
determine an additional set of event messages having the specified range of sequence identifiers; and
send the additional set of event messages to the subscriber in sequence.

### Claim 17 (depends on 10)

The computing device of claim 10, wherein the processing device is further to:
determine a policy to apply to the streaming data feed, wherein the policy comprises a criterion associated with content of event messages;
receive a new plurality of event messages;
determine a new set of event messages from the new plurality of event messages, wherein event messages in the new set of event messages are associated with the one or more devices and the at least one device property;
determine, from the new set of event messages, a subset of event messages that comply with the criterion; and
send the subset of event messages to the subscriber.

### Claim 18

A non-transitory computer readable storage medium to stream data for an internet-of-things platform comprising instructions that, when executed by a processing device, cause the processing device to perform operations comprising:
receiving, by the processing device, a subscription request to a streaming data feed, the subscription request specifying one or more devices and at least one device property;
generating the streaming data feed, the streaming data feed comprising a queue;
receiving a plurality of event messages, each of the plurality of event messages comprising data for an event that occurred on a device;
determining, by the processing device, a set of event messages from the plurality of event messages in view of the one or more devices and the at least one device property specified in the subscription request, wherein event messages in the set of event messages are associated with the one or more devices and the at least one device property specified in the subscription request, and the at least one device property includes at least one of an attribute, a setting, or a parameter of the one or more devices;
storing the set of event messages in the queue;
sending the set of event messages in the queue to a subscriber; and
deleting the set of event messages from the queue.

### Claim 19 (depends on 18)

The non-transitory computer readable storage medium of claim 18, wherein the each of the one or more devices comprises an embedded system, the operations further comprising performing the following prior to generating the streaming data feed:
determining an account associated with the subscription request;
determining a role associated with the account; and
determining that the role has permission to stream data from the one or more devices and to stream data for the at least one device property.

### Claim 20 (depends on 18)

The non-transitory computer readable storage medium of claim 18, the operations further comprising:
generating a group for a plurality of devices having at least one of the device property, a shared device type, a shared location or a shared owner, wherein the group comprises the one or more devices and the streaming data feed is for the group;
wherein determining the set of event messages that are associated with the one or more devices and the at least one device property comprises determining that the set of event messages are associated with the group.

### Claim 21 (depends on 18)

The non-transitory computer readable storage medium of claim 18, the operations further comprising:
determining an amount of data added to the queue in a time period;
determining a size for a replay buffer that is sufficient to hold the amount of data added to the queue in the time period;
generating the replay buffer in accordance with the size; and
storing the set of event messages in the replay buffer.
