While devices look like seperate Flow-cards in the Editor, they are actually dynamically generated from your app's cards.

To make them show up, add at least one "type": "device" argument in a flow trigger, condition or action. Then add filter: "driver_id=my_driver" (replace my_driver with your driver's id) to transform the card to a separate icon in the Flow Editor's sidebar.


  "id": "com.athom.example",
  "flow": {
    "triggers": [
        "id": "turned_on",
        "title": {
          "en": "Turned on"
        "args": [
            "name": "my_device",
            "type": "device",
            "filter": "driver_id=my_driver"

If your driver has a class that Homey already has support for, like light or socket, your custom card will be added to those cards. For example, if your driver supports a Light bulb that has a special disco mode, the user will see 'Turn on', 'Turn off', 'Dim', 'Set color', 'Disco mode'.


Instead of creating a regular FlowCardTrigger instance, create a FlowCardTriggerDevice instance.


class MyDriver extends Homey.Driver {

  onInit() {

    this._flowTriggerTurnedOn = new Homey.FlowCardTriggerDevice('turned_on')


  triggerMyFlow( device, tokens, state ) {
      .trigger( device, tokens, state )
        .then( this.log )
        .catch( this.error )



class MyDevice extends Homey.Device {

  onInit() {

    let device = this; // We're in a Device instance
    let tokens = {};
    let state = {};

    this._driver = this.getDriver();
    this._driver.ready(() => {
      this._driver.triggerMyFlow( device, tokens, state );



Conditions and Actions

These are not different from regular Flow cards. The device's instance will be in args.my_device.