> For the complete documentation index, see [llms.txt](https://docs.microart.app/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.microart.app/apis/homecore/drivers.md).

# Drivers

Properties

* **string:** *id*

  This property is a constant value defined by the driver itself and contains it's own driver id. This should be manually assigned in code by the developer or token-negotiator. This, in no case, should ever change.
* **string:** *name*

  This property is a partially constant value that contains the friendly name for this driver. It should simply state what this driver is for.
* **string:** *developer*

  This property contains the developer's name.
* **string:** *description*

  The description for this driver
* **string:** *type*

  The type of driver that this is.

  Possible types:

  * Single: This driver (device) only reports on one single controller or capability
  * Multi: This driver (device) has multiple controllers and actions
* **string:** *location*

  This property is an add-on property assigned by HomeCore, the driver can, however should not in any case assign to this property.
* **Object:** *capabilities*

  An object of capabilities for this driver (device)

```javascript
// Sample capabilties object
{
    power: 0, // 0 = a binary on/off state
    speed: 1, // 1 = a set of integers
    temp: 2, // 2 = a possible range of integers
    time: 3, // 3 = arbitrary string
    plots: 4 // 4 = custom data type (requires a HomeCore datatype to be defined)
}
```

* **Array\[Controller]:** *controllers*

  An array of all the controllers for this device

```javascript
// Sample controller object
{
    name: "Power",
    type: "binary/powerOnOrOff", // powerOnOrOff is custom name, can be anything
    id: "power",
    location: this.location, // 'this' is the driver's location
    states: [true, false] // Binary only has two states
}

// 0, Binary
states: [true, false]

// 1, Set
states: [1,2,3]

// 2, Range
states: [-20,300]

// 3, String
states: [""]
states: ["sampleStringState1", "sampleStringState2"]
states: ["{\"name\": \"Sample JSON State #1\"}"]

// 4, Custom
states: [
    {
        // State #1
    }, 
    {
        // State #2
    }
]
```

```javascript
// Sample controllers array
[
    {
        name: "Power",
        type: "binary/powerOnOrOff",
        id: "power",
        location: this.location,
        states: [true, false]
    },
    {
        name: "Fan Speed",
        type: "set/speeds",
        id: "speed",
        location: this.location,
        states: [1, 2, 3]
    }
]
```

* **function:** *onPublish*

  This property is a constant value defined by the driver itself and contains it's own driver id. This should be manually assigned in code by the developer or token-negotiator. This, in no case, should ever change.
* **function:** *init*

  This property is a constant value defined by the driver itself and contains it's own driver id. This should be manually assigned in code by the developer or token-negotiator. This, in no case, should ever change.
* **function:** *getState*

  This property is a constant value defined by the driver itself and contains it's own driver id. This should be manually assigned in code by the developer or token-negotiator. This, in no case, should ever change.
* **function:** *updateState*

  This property is a constant value defined by the driver itself and contains it's own driver id. This should be manually assigned in code by the developer or token-negotiator. This, in no case, should ever change.
* **function:** *setInternalState*

  This property is a constant value defined by the driver itself and contains it's own driver id. This should be manually assigned in code by the developer or token-negotiator. This, in no case, should ever change.
* **function:** *disconnect*

  This property is a constant value defined by the driver itself and contains it's own driver id. This should be manually assigned in code by the developer or token-negotiator. This, in no case, should ever change.
