ActionsΒΆ

If you have actions dierctory in your plans path actions will be accessable from you API

/srv/robotice/config/actions/my_actions.yml
...
/srv/robotice/config/devices.yml
/srv/robotice/config/plans.yml

Now you can define your actions into my_actions.yml

1:
  name: 'Turn light 4 on in the kitchen'
  short_name: 'Light in kitchen'
  description: 'Long description for this action'
  command: 'reactor.commit_action'
  options:
    queue: reactor
    args:
      device:
        os_family: "Arch"
        socket: 4
        device: sispm
        port: 0
      value: 1

this_is_uuid:
  name: 'Turn light 4 off in the kitchen'
  short_name: 'Light in kitchen'
  description: 'Long description for this action'
  command: 'reactor.commit_action'
  options:
    queue: reactor
    args:
      device:
        os_family: "Arch"
        socket: 4
        device: sispm
        port: 0
      value: 0

navigate your browser to localhost:8004/action/list and see result

root@samsung:~# http 10.10.10.23:8004/action/list
HTTP/1.1 200 OK
Content-Length: 611
Content-Type: application/json; charset=UTF-8
Date: Mon, 12 Jan 2015 19:22:54 GMT

[
    {
        "command": "reactor.commit_action",
        "description": "Long description for this action",
        "id": 1,
        "name": "Turn light 4 on in the kitchen",
        "options": {
            "args": {
                "device": {
                    "device": "sispm",
                    "os_family": "Arch",
                    "port": 0,
                    "socket": 4
                },
                "value": 1
            },
            "queue": "reactor"
        },
        "short_name": "Light in kitchen"
    }
]

Why ?

Now do your actions !

root@samsung:~# http POST 10.10.10.23:8004/action/do/1
HTTP/1.1 200 OK
Content-Length: 288
Content-Type: application/json; charset=UTF-8
Date: Mon, 12 Jan 2015 19:21:21 GMT

{
    "action": {
        "command": "reactor.commit_action",
        "description": "Long description for this action",
        "id": 1,
        "name": "Turn light 4 on in the kitchen",
        "options": {
            "queue": "reactor"
        },
        "short_name": "Light in kitchen"
    },
    "state": "PENDING",
    "task-id": "e2b8925a-fb68-4390-ae9f-da725ea4c53e"
}

For more examplanation what you can do, see code below:

options = action.options
args = options.pop("args")
kwargs = options.pop("kwargs")

result = app.send_task(
    command, args=args, kwargs=kwargs, **options)

For example:

command: 'reactor.commit_action'
options:
  queue: reactor
  exchange: reactor
  args:
    device:
      os_family: "Arch"
      socket: 4
      device: sispm
      port: 0
    value: 0

will send this task:

send_task("reactor.commi_action", args=[{"os_family":"Arch", "socket":4, "device":"sispm", "port":0},0], queue="reactor", exhcange="reactor")