Skip to main content

Commands.py file

Introduction to devices and commands

In Homeware

In Homeware a device has a definition object and a status object. In example:

Definition

{
"id": "light001",
"name": {
"defaultNames": [
"Lamp",
"My lamp"
],
"nicknames": [
"Lamp",
"My lamp"
],
"name": "Lamp"
},
"attributes": {
"commandOnlyOnOff": false,
"queryOnlyOnOff": false
},
"traits": [
"action.devices.traits.OnOff"
],
"type": "action.devices.types.LIGHT",
"deviceInfo": {
"hwVersion": "2.0",
"manufacturer": "Homeware-LAN Inc.",
"model": "Homeware-LAN awesome lamp",
"swVersion": "2.0"
}
}

Status

{
"online": true,
"on": false
}

In Google Smarthome

In Google Smarthome what a device can do its defined by its traits. For example, a lamp needs the following traits in order to work:

  • action.devices.traits.OnOff

And can have the following traits as optionals:

  • action.devices.traits.ColorSetting
  • action.devices.traits.Brightness

Each trait has attributes, status and commands. The attributes can be seen in the Homeware's definition object. The status can be seen in the Homeware's status object and is composed by params.

The on param in the lamp status indicates the lamp is turned on.

When a param must be changed, Google sends to Homeware a request. This request contains the params that must be updated organized in commands. In example:

{
"command": "action.devices.commands.OnOff",
"params": {
"on": true
}
}

Processing a Google request

Homeware process commands in different ways. Some times Homeware only updates the param in the database. Other times Homeware only sends something via MQTT to the device.

The class Commands contains the methods needed to process this commands. Each command that can be received must have a processor method in the class. The method should process the data in the proper way for the command.

The method name is the termination of the command. In example, the command action.devices.commands.OnOff is processed in the method OnOff.

Attributes

Device

The device on which the command should be applied can be found on the attribute device and can be consulted using self.device.

Params

When the commands is sent with some params like

{
"command": "action.devices.commands.OnOff",
"params": {
"on": true
}
}

the params can be found on the attribute params and can be consulted ussing self.params.

Auxiliar Methods

saveAndSend

This method save the param received in the database and alert the device.

myData.saveAndSend(input, output)

Arguments

input

The name of the received param that want to be saved.

  • Type: string
  • Example: 'on'
output

The name that must be used to save the param. Sometimes doesn't match with the recieved name, but normally does.

  • Type: string
  • Example: 'on'

Returns

None

sendCommand

This method sends a command (a text) to the device to which the Google's command should be applied.

myData.sendCommand(command)

Arguments

command

The command that must be send to the device. The command is sent to the MQTT topic: device/<device-id>/command.

  • Type: string
  • Example: 'cancel the'

Returns

None

sendDobleCommand

This method sends the true_command if the param is logic true and false_command if the param is logic false.

myData.sendDobleCommand(param, true_command, false_command)

Arguments

param

The boolean param that want to be evaluated.

  • Type: string
  • Example: 'on'
true_command

The command that must be sent to the device when the param is logic true.

  • Type: string
  • Example: 'turn on'
false_command

The command that must be sent to the device when the param is logic false.

  • Type: string
  • Example: 'turn off'

Returns

None