User-configurable sensor platform

A sensor platform includes a programmable microcontroller to execute programming associated with one or more sensors in order to receive data from the one or more sensors and generate reports based on the data, and to enter a power-down mode in the absence of the data. The sensor platform also includes first and second transceivers. The first transceiver is configured to establish wireless connectivity with user devices using a first wireless protocol and to receive the programming from one or more of the user devices using the first wireless protocol. The second transceiver is configured to transmit the reports to a gateway using a second wireless protocol that is lower power, longer range, and/or lower fidelity than the first wireless protocol.

TECHNICAL FIELD

This disclosure relates to wireless sensors, and more specifically to user-configurable wireless sensors.

BACKGROUND

Consumer acceptance of wireless sensors is limited by a lack of convenient user-configurability. Sensor systems that are dedicated to a particular type of sensor are by definition limited in their use and lack universality. Expecting consumers to buy numerous different types of sensor systems is unreasonable.

Consumer acceptance of wireless sensors is also limited by poor battery life. If a user has to change or recharge the batteries in a wireless sensor frequently, the wireless sensor becomes a nuisance and the user is less likely to utilize it.

SUMMARY

According, there is a need for user-configurable wireless sensors that are low power and therefore have long battery lives.

In some embodiments, a sensor platform includes a programmable microcontroller to execute programming associated with one or more sensors in order to receive data from the one or more sensors and generate reports based on the data, and to enter a power-down mode in the absence of the data. The sensor platform also includes first and second transceivers. The first transceiver is configured to establish wireless connectivity with user devices using a first wireless protocol and to receive the programming from one or more of the user devices using the first wireless protocol. The second transceiver is configured to transmit the reports to a gateway using a second wireless protocol that is lower power, longer range, and/or lower fidelity than the first wireless protocol.

In some embodiments, a method of managing sensor operations is performed at a sensor platform that includes one or more sensors, a programmable microcontroller, a first transceiver, and a second transceiver. In the method, a wireless connection is established with a user device through the first wireless transceiver using a first wireless protocol. Programming associated with a first sensor is received from the user device through the first wireless transceiver using the first wireless protocol. The programming is configured for execution by the programmable microcontroller. The programmable microcontroller configures the first sensor in accordance with the programming and, after configuring the first sensor, receiving data from the first sensor. The programmable microcontroller generates reports based on the data in accordance with the programming and transmits the reports through the second wireless transceiver, using a second wireless protocol, to a gateway. The second wireless protocol is lower power, longer range, and/or lower fidelity than the first wireless protocol. The programmable microcontroller enters a power-down mode in response to an absence of data from the one or more sensors.

Like reference numerals refer to corresponding parts throughout the drawings and specification.

DETAILED DESCRIPTION

FIG. 1shows a network architecture100in which a sensor platform110that houses one or more sensors is wirelessly communicatively coupled to a gateway114in accordance with some embodiments. The sensor platform110may be located in a house102or other building. For example, the sensor platform110may be located in the premises of a business. Alternatively, the sensor platform110may be located in a vehicle or outdoors. While the gateway114is shown as being situated in the same house102(or other building) as the sensor platform110, it may alternatively be situated in a different location from the sensor platform110(e.g., in a different house or other different building) (e.g., on a cellular tower, radio tower, or utility pole).

Sensors in the sensor platform110may be user-configurable. For example, a user104-1uses an application running on a user device106-1to configure one or more sensors in the sensor platform110. To perform this configuration, the sensor platform110establishes a wireless connection108with the user device106-1using a first wireless protocol. In some embodiments, the first wireless protocol is a personal-area-network (PAN) protocol, such as Bluetooth Low Energy (BLE). The application then transmits configuration instructions to the sensor platform110. For example, the user104-1uses the application to select a particular sensor recipe involving a particular sensor (or group of sensors), and the user device106-1transmits programming corresponding to the particular sensor recipe to the sensor platform110. The particular sensor recipe that the user selects may be one of a plurality of recipes provided by the application (e.g., including multiple sensor recipes for the particular sensor and/or for different sensors). In some embodiments, the application allows the user104-1to create a sensor recipe (or multiple user-selectable sensor recipes). The user104-1may have one or more sensor recipes selected at a given time, such that programming corresponding to the selected recipe(s) is running on the sensor platform110. The programming is configured for execution by a processor (e.g., a programmable microcontroller402,FIG. 4) in the sensor platform110. The processor executes the programming to enable operation of the particular sensor (or group of sensors). The user device106-1may be a mobile electronic device (e.g., mobile phone), wearable computing device, laptop computer, tablet computer, desktop computer, virtual assistant, or another suitable electronic device.

The sensor platform110wirelessly transmits reports to the gateway114via a wireless connection112that uses a second wireless protocol. In some embodiments, the second wireless protocol is a protocol for a low-power wide-area network (LPWAN). For example, the second wireless protocol may be LoRa. The second wireless protocol may be longer range, lower power, and/or lower fidelity than the first wireless protocol. The amount of data that can be transmitted during a given time period thus may be lower for the second wireless protocol than for the first wireless protocol, making the second wireless protocol unsuitable for sending programming corresponding to sensor recipes from the user device106-1to the sensor platform110, but suitable for transmitting sensor data from the sensor platform110to the gateway114. Alternatively, the second wireless protocol may be suitable for sending programming corresponding to sensor recipes, but substantially slower than the first wireless protocol. For example, a remote user device106of a remote user104may send the programming to the gateway114, which forwards the programming to the sensor platform110using the second wireless protocol. In some embodiments, signals transmitted between the sensor platform110and the gateway114using the second wireless protocol have a range of 1-10 kilometers, while signals transmitted between the user device106-1and sensor platform110using the first wireless protocol have a range of approximately 100 meters or less (e.g., a range that limits the user device106-1and sensor platform110to being in the same house102). In some embodiments, signals transmitted between the user device106-1and sensor platform110using the first wireless protocol are 2.4 GHz signals while signals transmitted between the sensor platform110and the gateway114using the second wireless protocol are sub-gigahertz signals. (In other embodiments, instead of using two different wireless protocols, a single wireless protocol may be used both to configure (e.g., send the programming to) the sensor platform110and to send the reports to the gateway114.)

The relatively long signal range achieved by the sensor platform110through the use of the second wireless protocol (e.g., LoRa) allows the gateway114to be situated in a different location that the sensor platform110, as discussed above. For example, the gateway114may be located in a first building of an apartment complex, while the sensor platform110may be located in a second building of the apartment complex. In another example, the gateway114and sensor platform110may be located in different houses in the same neighborhood. In yet another example, the gateway114may be located in a building, while the sensor platform110may be located in a vehicle that operates in a region (e.g., neighborhood) around the building. Many other examples are possible.

The reports transmitted by the sensor platform110to the gateway114may include raw sensor data and/or sensor data as processed by the sensor platform110. For example, a report may be triggered by new data being available from a sensor (e.g., because a parameter monitored by the sensor has crossed a threshold, such that a detection threshold of the sensor has been satisfied) and may include the new data. Alternatively, or in addition, a report may include one or more statistics, as calculated by the processor, about sensor data. For example, the report may include an average value (e.g., mean, median, or mode) measured by a sensor during a time period.

In some embodiments, the gateway114forwards the reports through one or more networks116to a remote server118. The remote server118may be associated with (e.g., operated and/or controlled by the provider of) the application on the user device106-1that was used to configure the one or more sensors in the sensor platform110. Reports may be stored (e.g., by the sensor platform110, gateway114, and/or remote server118) and subsequently accessed by user devices106(e.g., by instances of the application running on respective user devices106). The gateway114may receive reports from multiple sensor platforms110(e.g., within the same house102or other building, within a group of buildings, or otherwise situated within range of the gateway114) and forward those reports to the remote server118. For example, the gateway114may function like a wireless router. In some embodiments, however, the gateway114is separate from a wireless router (not shown) in the house102(or other building) that provides wireless network access (e.g., access to a local area network, such as WiFi access) to electronic devices such as the user device106-1. Alternatively, the gateway114may be integrated with such a wireless router. In yet another example, the gateway114may be integrated in a cellular base station.

The one or more networks116may include any network or combination of networks, such as the Internet, other wide area networks (WAN), metropolitan area networks (MAN), local area networks (LAN), virtual private networks (VPN), peer-to-peer networks, and/or ad-hoc connections. The one or more networks116may include public communication networks, private communication networks, or a combination of both public and private communication networks.

In some embodiments, the remote server118receives the reports from gateways114, stores and processes the reports, and generates notifications to be sent to user devices106to notify users104of sensor readings. Examples of notifications include, without limitation, SMS messages, emails, and phone messages (e.g., automated text-to-speech messages or pre-recorded voice messages). In the example ofFIG. 1, the remote server118may send notifications to the user device106-1of the user104-1and/or to a different user device106-2of a different user104-2. A notification may be sent to the user device106-2of the user104-2through one or more networks116and a wireless access point120(e.g., a WiFi access point, cellular base station, etc.) that is in a different location than the building102. Notifications thus may be sent to user devices106of one or more users104regardless of their current locations.

The notifications may include data from one or more reports as processed by the sensor platform110. For example, a notification may be triggered by new data being available from a sensor (e.g., because a detection threshold of the sensor has been satisfied) and may include the new data, as sent from the sensor platform110to the remote server118in a report. Alternatively, or in addition, a notification may include one or more statistics, as calculated by the sensor platform110and/or the remote server118. For example, a notification may include an average value (e.g., mean, median, or mode) measured by a sensor during a time period. In still another example, a report may indicate that an issue exists with a sensor (e.g., provide a warning regarding a sensor, such as an indication that a detection threshold has been satisfied), with or without including data. Notifications may also or alternatively include information regarding the health status of the sensor platform110(e.g., battery-life indications, indications as to whether the sensor platform110is functioning, indications as to whether particular sensors and/or other components are functioning, etc.).

The notifications may be user-configurable. For example, the user104-1and/or the user104-2may use an application (e.g., the same application used to configure the sensor platform110, or a different application) running on a respective user device106-1and/or106-2to specify the type of content and/or format for notifications corresponding to a respective sensor (or group of sensors). The user104-1and/or the user104-2may use the application to specify one or more conditions under which notifications are to be generated and sent. The type of content, format, and/or conditions may be specified in a particular sensor recipe, such that selecting a sensor recipe results in both configuration of the sensor platform110and configuration of the remote server118regarding notifications. For example, selection of a sensor recipe on the user device106-1may cause a first message to be sent to the sensor platform110using the first wireless protocol to enable a sensor or group of sensors and configure the sensor platform110accordingly, and a second message to be sent to the remote server118(e.g., through the gateway114or a wireless access point) to configure notifications associated with the sensor or group of sensors. The user device106-1may send the second message using a wireless protocol distinct from both the first and second protocols (e.g., using WiFi), or alternatively using the first wireless protocol.

The network architecture100is merely an example of a network architecture for a sensor platform. Other examples are possible. For example, the remote server118may be omitted and notifications may be provided to users in a different manner (e.g., may be generated and transmitted by the gateway114).

FIG. 2Ashows a sensor platform200that is an example of the sensor platform110(FIG. 1), in accordance with some embodiments. The sensor platform200includes a first portion202mechanically coupled (e.g., screwed) to a second portion204. In some embodiments, the first portion202houses sensors and the second portion204houses batteries.

In some embodiments, the first portion202includes holes206through its exterior (e.g., on a top surface). The holes206provide sensors in the sensor platform200with access to the environment outside of the sensor platform200. In some embodiments, respective sensors and/or transmitters within the sensor platform200may be configured to extend through respective holes206and to retract back into the sensor platform200when not in use.

A user106may mechanically de-couple (e.g., unscrew) the first portion202from the second portion204and add one or more expansion modules210between the first portion202and the second portion204. For example, as shown inFIG. 2Bin accordance with some embodiments, a single expansion module210may be added between the first portion202and the second portion204, such that the expansion module210is mechanically coupled to (e.g., screwed to) both the first portion202and the second portion204. In another example (not shown), a stack of multiple expansion modules210may be added between the first portion202and the second portion204. Successive expansion modules210in the stack may be mechanically coupled to (e.g., screwed to) each other, with the top expansion module210in the stack being mechanically coupled to (e.g., screwed to) the first portion202and the bottom expansion module210in the stack being mechanically coupled to (e.g., screwed to) the second portion204.

FIG. 2Cshows a cross-section of an expansion module210in accordance with some embodiments. A screw212is used to mechanically couple the expansion module210to an expansion module210above it or to the top portion202. A screw hole214is used to mechanically couple the expansion module210to an expansion module210below it or to the bottom portion204. The expansion module210contains an expansion board218on which one or more sensors and/or transceivers (not shown) are mounted. Electrical contacts216communicatively couple the one or more sensors and/or transceivers on the expansion board218to an overlying expansion board218or to the top portion202. Similar electrical contacts (not shown) may provide an electrical connection to an underlying expansion board and/or the second portion204.

FIGS. 2A-2Care merely one example of how to add expansion boards and corresponding sensors and/or transceivers to a sensor platform110. Other examples are possible. For example, a sensor platform110may have one or more slots into which respective expansion boards may be inserted.

FIG. 3is a flowchart illustrating a method300of managing sensor operations in accordance with some embodiments. The method300is performed at (302) a sensor platform (e.g., the sensor platform100,FIG. 1, such as the sensor platform200,FIG. 2; the sensor platform400,FIG. 4) that includes one or more sensors, a programmable microcontroller, a first transceiver, and a second transceiver.

In the method300, a wireless connection is established (304) with a user device (e.g., user device106-1,FIG. 1). The wireless connection is established through the first wireless transceiver using the first wireless protocol.

Programming associated with a first sensor is received (306) from the user device through the wireless connection. The programming is thus received through the first wireless transceiver using the first wireless protocol. The programming is configured for execution by the programmable microcontroller.

The programmable microcontroller configures (308) the first sensor in accordance with the programming (e.g., as part of executing the programming).

After configuring the first sensor, the programmable microcontroller receives (310) data from the first sensor. In some embodiments, when new data is available from the first sensor (e.g., when a value of a parameter measured by the first sensor satisfies a threshold, such as a user-configurable threshold), the first sensor sends an interrupt to the programmable microcontroller, which then reads the data. In some embodiments, the programmable microcontroller polls the first sensor at specified times (e.g., periodically) to obtain new data.

The programmable microcontroller generates (312) reports based on the data, in accordance with the programming (e.g., as part of executing the programming). In some embodiments, a report is generated in response to new data from the first sensor. In some embodiments, a report is generated based on multiple data points from the first sensor (e.g., as measured over a specified period of time). For example, reports may be generated periodically.

The reports are transmitted (314) through the second wireless transceiver, using the second wireless protocol, to a gateway (e.g., gateway114,FIG. 1, which forwards the reports to the remote server118). The second wireless protocol is lower power, longer range, and/or lower fidelity than the first wireless protocol.

The programmable microcontroller enters (316) a power-down mode in response to an absence of data from the one or more sensors. For example, the programmable microcontroller powers down, in whole or in part, in the absence of interrupts from the one or more sensors and/or when not polling any of the one or more sensors, such that the programmable microcontroller is not receiving or processing data (e.g., is not generating or transmitting any reports).

In some embodiments of the method300, the first sensor is mounted on a first expansion board. The sensor platform mechanically receives the first expansion board before configuring (308) the first sensor. In this manner, the first sensor becomes one or the “one or more sensors” of steps302and316. The sensor platform may mechanically receive a second expansion board on which a second sensor is mounted. In this manner, the second sensor becomes one of the “one or more sensors” of steps302and316. In some embodiments, the first expansion board is removed and replaced with the second expansion board. In other embodiments, the second expansion board is mechanically received by the sensor platform, and thus installed in the sensor platform, while the first expansion board is installed in the sensor platform (i.e., remains received by the sensor platform). Equivalents of steps304-314or a portion thereof are performed for the second sensor.

In some embodiments of the method300, the first sensor is fixedly attached to the sensor platform (e.g., fixedly mounted inside the sensor platform), and thus is not removable and replaceable (at least, not without damaging the sensor platform).

The use of separate wireless protocols to configure the sensor platform and report sensor data in the method300allows for easy user-configurability along with long battery life. A low-power second wireless protocol allows the sensor platform to report sensor data for an extended period of time (e.g., months) without exhausting its batteries. A higher power, higher fidelity first wireless protocol allows for quick configuring and updating of the sensor platform. Because such configuration and updating is typically infrequent, battery life is not significantly impacted. Furthermore, the availability of expansion boards in some embodiments increases the options for user configurability.

FIG. 4is a block diagram of a sensor platform400in accordance with some embodiments. The sensor platform400is an example of the sensor platform110(FIG. 1), such as the sensor platform200(FIGS. 2A-2C). The sensor platform400includes a programmable microcontroller402, a plurality of wireless network interfaces404, one or more sensors412, one or more outputs420, memory430, and one or more communication buses428interconnecting these components. In some embodiments, the programmable microcontroller402is a programmable system on a chip (e.g., a PSoC® from Cypress Semiconductor Corporation). In some embodiments, the memory430or a portion thereof (e.g., including nonvolatile memory) is integrated with (e.g., situated on the same chip as) the programmable microcontroller402. In some embodiments, one or more of the wireless network interfaces404is integrated with (e.g., situated on the same chip as) the programmable microcontroller402. The plurality of wireless network interfaces404may include a first transceiver406for the first wireless protocol and a second transceiver408for the second wireless protocol. In some embodiments, the first transceiver406is integrated with the programmable microcontroller402and the second transceiver408is on a different chip.

The one or more sensors412may include a location sensor414for determining a location of the sensor platform400. The location sensor414may use one or more global navigation satellite systems (GNSSs, such as GPS, GLONASS, Galileo, or BeiDou) and/or trilateration of wireless signal strengths. The location sensor414may be fixedly situated within the sensor platform400or available on an expansion board450.

The one or more sensors412may include one or more fixed sensors416that are fixedly situated within (e.g., mounted inside) or otherwise fixedly attached to the sensor platform400. In addition to or as an alternative to the location sensor414and/or fixed sensors416, the sensor platform400may include one or more expansion ports418, each of which may receive an expansion board450(e.g., an expansion board218in an expansion module210,FIG. 2) on which are mounted one or more sensors452. Each expansion board450is removable from the expansion port(s)418and may be replaced in an expansion port418with another expansion board450(e.g., with different sensor(s)452).

Examples of sensors412include, without limitation, the location sensor414, a scale (e.g., a load cell), a proximity detector, a motion detector, a distance detector, an accelerometer, a capacitive-touch sensor, a leak detector, a motion detector, a temperature sensor, a humidity sensor, an air-quality detector, a microphone, a visible light detector, an ultraviolet (UV) light detector, an infrared (IR) light detector, a color detector, a compass, a food detector, a total dissolved solids (TDS) detector, a pH detector, and a sensor to detect breaking glass. Each of these examples may be a fixed sensor416or a sensor452provided on an expansion board450.

In some embodiments, the fixed sensors416are or include the follow sensors, or a portion thereof: an accelerometer, a capacitive-touch sensor, a leak detector, a motion detector, a temperature sensor, a humidity sensor, a microphone, and a light detector.

In some embodiments, an expansion board received in an expansion port418includes a wireless transceiver to allow the sensor platform400to communicate wirelessly using a wireless protocol (e.g., WiFi, Zigbee, Zwave, Sigfox, a cellular protocol such as 4G/LTE or 5G, etc.) distinct from the first and second wireless protocols. In some embodiments, an expansion board received in an expansion port418includes a wire-line transceiver (e.g., for Ethernet or another wire-line protocol) and corresponding cable connector. The expansion board may include the transceiver(s) instead of or in addition to one or more sensors452. A corresponding network communication module may be stored in the memory430(e.g., may be downloaded from the application running on the user device106-1or from the remote server118,FIG. 1).

In some embodiments, the sensor platform400includes one or more outputs420, including without limitation a light422(e.g., a light-emitting diode (LED)), speaker424, and/or infrared (IR) transmitter426. Each output420may be activated in response to sensor data. The programmable microcontroller402may execute programming (e.g., as received from the user device106-1,FIG. 1) to activate one or more of the outputs420in response to a determination that data for a sensor412satisfies a criterion (e.g., a threshold, which may be user-configurable). For example, the light422may be activated as a warning and/or the speaker424may be activated to play a warning sound or message. In another example, the IR transmitter426may transmit a control signal to another electronic device (e.g., a device for playing media, such as a television, Blu-Ray/DVD player, set-top box, video/audio streaming device, audio receiver/amplifier, etc.) in response to detection of a corresponding user gesture (e.g., a touch gesture made by a user on an exterior surface of the sensor platform400, as detected by a capacitive touch sensor; a gesture made in the air by a user, as detected by a motion detector). More generally, the programming may instruct the programmable microprocessor402to perform respective operations in response to respective detected gestures (e.g., touch gestures; air gestures).

Furthermore, one or more of the outputs420(e.g., the light422and/or the speaker424) may be activated in response to a determination that data for a sensor in another sensor platform satisfies a criterion. For example, outputs420on multiple (e.g., all) sensor platforms400in a specified region (e.g., within a house102or other building) may be activated (e.g., as a warning) in response to a determination that data for a sensor in one of the sensor platforms400in the specified region satisfies a criterion. In some embodiments, the instructions for such output activation on multiple sensor platforms400are provided by the remote server118or the gateway114.

Memory430includes volatile and/or non-volatile memory. Memory430(e.g., the non-volatile memory within memory430) includes a non-transitory computer-readable storage medium. Memory430optionally includes one or more storage devices remotely located from the programmable microcontroller402and/or a non-transitory computer-readable storage medium that is removably inserted into the sensor platform400. In some embodiments, memory430(e.g., the non-transitory computer-readable storage medium of memory430) stores the following modules and data:a first network communication module432that is used for communications between the sensor platform400and other computing devices (e.g., the first user device106-1,FIG. 1) via the first transceiver406, using the first wireless protocol;a second network communication module434that is used for communications between the sensor platform400and other computing devices (e.g., the gateway114,FIG. 1) via the second transceiver408, using the second wireless protocol;a sensor-operation module436, which may include a sensor-configuration module438for configuring the sensors412(e.g., in accordance with programming received from the user device106-1,FIG. 1), a sensor-data analysis module440for analyzing data received from the sensors412(e.g., for calculating statistics), a report-generation module442to generate the reports sent to the gateway114(e.g., to the remote server118through the gateway114), and an output-device activation module444to activate the outputs420as described above (e.g., in accordance with programming received from the user device106-1,FIG. 1); anda database446that stores sensor data448.

The sensor-operation module436may include the programming received from the user device106-1(FIG. 1). The memory430(e.g., the first and second network communication modules432and434together with the sensor-operation module436) includes instructions for performing the method300(FIG. 3) or a portion thereof.

Each of the modules stored in the memory430corresponds to a set of instructions for performing one or more functions described herein. Separate modules need not be implemented as separate software programs. The modules and various subsets of the modules may be combined or otherwise re-arranged. In some embodiments, the memory430stores a subset or superset of the modules and/or data structures identified above.

In some embodiments, the sensor platform400is battery powered. Alternatively, the sensor platform400may be powered by a DC power supply (internal or external) that connects to an AC source (e.g., electrical mains). In some embodiments, an expansion board may provide a connector for connecting to an external power supply.

FIG. 4is intended more as a functional description of the various features that may be present in a sensor platform than as a structural schematic. In practice, items shown separately could be combined and some items could be separated.

FIG. 5is a block diagram of a server system500in accordance with some embodiments. The server system500is an example of the remote server118(FIG. 1). The server system500typically includes one or more processors502(e.g., CPUs and/or GPUs), one or more network interfaces504(wired and/or wireless), memory506, and one or more communication buses505interconnecting these components.

Memory506includes volatile and/or non-volatile memory. Memory506(e.g., the non-volatile memory within memory506) includes a non-transitory computer-readable storage medium. Memory506optionally includes one or more storage devices remotely located from the processors502and/or a non-transitory computer-readable storage medium that is removably inserted into the server system500. In some embodiments, memory506(e.g., the non-transitory computer-readable storage medium of memory506) stores the following modules and data:an operating system508that includes procedures for handling various basic system services and for performing hardware-dependent tasks;a network communication module510that is used for connecting the server system500to other computing devices via one or more network interfaces504connected to one or more networks116(FIG. 1);a sensor module512, which may include a sensor-report analysis module514for analyzing the reports received from sensor platforms110via gateways114and the one or more networks116(FIG. 1), and a user-notification module516for generating and sending the notifications to users (e.g., to the user devices106-1and/or106-2,FIG. 1) based on the data in the reports; anda database520that stores data522from the reports received from sensor platforms110and a sensor-control application524(e.g., the application used by the user device106-1to configure the sensor platform110,FIG. 1) that may be downloaded by user device106. The sensor-control application524may include and/or allow for the creation of sensor recipes.

Each of the modules stored in memory506corresponds to a set of instructions for performing one or more functions described herein. Separate modules need not be implemented as separate software programs. The modules and various subsets of the modules may be combined or otherwise re-arranged. In some embodiments, memory506stores a subset or superset of the modules and/or data structures identified above.

FIG. 5is intended more as a functional description of the various features that may be present in a server system than as a structural schematic. In practice, items shown separately could be combined and some items could be separated. For example, some items shown separately inFIG. 5could be implemented on a single server and single items could be implemented by one or more servers. The actual number of servers used to implement the server system500, and how features are allocated among them, will vary from one implementation to another.