= Discussion = == Network == * Use a normal home network. Assume existing DHCP server. * Service discovery: Zeroconf (http://en.wikipedia.org/wiki/Zeroconf) * Remote control protocol: SNMP (http://en.wikipedia.org/wiki/Simple_Network_Management_Protocol) == Devices == * 2 types of devices * Smart Devices * Support SNMP * Support Zeroconf * Both would use UDP over existing network * Dumb devices * Support a variant of SNMP. We basically want SNMP without requiring any network knowledge. * Can connect to a smart device using any means necessary. Each device also has a set of variables and associated values which are manipulated using the SNMP protocol == Device Connection == When a device boots: * Smart devices connect to network using DHCP * Dumb devices connect to smart devices and us it as a sort of proxy * All devices' metadata is published to the network with Zeroconf. This would probably include IP/port, name, type (i.e., dishwasher, microwave), location, and category (i.e., security, entertainment). The genius behind the system is that we may not have to implement any new protocols at all. SNMP and Zeroconf, along with a home network, is all that is needed to make this thing work. If we decide SNMP and Zeroconf are simple enough to implement cheaply, then there is no new development needed. == Protocol Abilities == * '''Get Bulk''' all varibles, values, and schema from device * '''Get''' specific variable value from device * '''Set''' specific variable value on device * Will produce either an ok or error message. Error produced if the change would cause an invalid state; however, input should be limited to the schema. * '''Request Notify''' a specify variable change from device * A controller requests to receive a Notify when the specified variable is changed. See the uncertainty in definition of Notify. * '''Notify''' controller * Sent in response to a variable value that changed. * Typically the notification was requested beforehand, however, some devices (such as a fire alarm, or security system) may want to Notify without a previous Request Notify. * Unsure if this is a broadcast to all devices, notifying only one other device, or notifying a list of devices. == Other Implementation == * http://en.wikipedia.org/wiki/Domotics * Eric and I found this while looking around for things. It is basically a system that does something very similar to what we are doing. Found it very amusing. It has use case ideas.