# Improvements of the xAAL Home Automation System
## 4 The Basic Schema  
This is the basement of every schema. This is normative. All other schemas must inherit from it somehow. It is named basic.basic. Attributes  
* _Attributes involved in the protocol_
* dev_type: string, the name of the schema to which the device obeys;
* address: byte string of 16 bytes, a UUID (the address of the device);
* _Attributes describing the device_
* vendor_id: string, the name or identifier of the vendor;
* product_id: string, an identifier of the product assigned by the vendor;
* version: string, version or revision of the product assigned by the vendor;
* hw_id: any type, some hardware identifier of the device (e.g., low-level addresses of the underlying protocol, a pairing code, a serial number, or any piece of information that may help to retrieve a device within a facility for maintenance);
* group_id: bytesring [16], a UUID shared by all devices belonging to the same physical equipment (e.g., each plug of a multi-plug outlet, each thermometer and hydrometer of a weather station);
* url: string, the URL of a website with extra information
* schema: string, the URL to download the schema file in case the device is of a non-standard dev_type;
* info: string, any additional information, if any, about this device that should make sense for the end user; (e.g., on the thermometer of a weather station this may indicate that this is the _indoor thermometer_ or the _outdoor thermometer_, or on a plug belonging to multi-plug outlets this may indicate the position of the plug.) * unsupported_attributes: array of strings (hopefully empty), with names of attributes of the schema that are actually not supported by the device for some (bad) reason. * unsupported_methods: array of strings (hopefully empty), with names of methods of the schema that are actually not supported by the device for some (bad) reason. * unsupported_notifications: array of strings (hopefully empty), with names of notifications of the schema that are actually not supported by the device for some (bad) reason. The attributes of the basic.basic schema are mostly considered as _internal_, or dedicated to the description of the device, and are not likely to change along the life of the device. Unlike attributes of extending schemas, they must not be involved in the attributes_change notification nor in the get_attributes method described below, but via the get_description method. Notifications  
* alive: emitted when starting the device and then periodically emitted at a rate left to the discretion of the device. The notification message may contain a timeout parameter indicating to others when the next alive should arise. * attributes_change: emitted at every change of one of the attributes (except those belonging to basic.basic). The body of the message contains only attributes that changed. A schema gives the list of all possible attributes that may appear within this notification message. So, in a given message, some of those attributes may be present, some others may not be. This is normal. However, the generic schema defines this method with no attributes, since the default attributes defined above are relating to the description of the device, and do not characterize the real-time operation of a specific feature. Schemas extending basic.basic may overload the attributes_change notification according to the extra attributes introduced by the extending schema. * error: issued when the device detects a major error or a failure. The notification may contain a description (a textual description of the error), and a code (the numeric code of error). Remember that xAAL is of the best-effort philosophy. Therefore, a wrong method invocation does not issue error notifications. (The called device does its best with what it received, and possibly change its attributes accordingly, but there is no one-to-one dialogue to explain mistakes to the caller.) Errors are issued only on major failure of the device. This is intended to be overridden in the definitions of extending schemas.