[
  {
    "id": "93f0ef4d4a682f3a",
    "type": "group",
    "style": {
      "stroke": "#999999",
      "stroke-opacity": "1",
      "fill": "none",
      "fill-opacity": "1",
      "label": true,
      "label-position": "nw",
      "color": "#a4a4a4"
    },
    "nodes": [
      "inject_up",
      "inject_down",
      "inject_stop",
      "inject_position_50",
      "inject_slat_position",
      "debug_moving_up",
      "debug_moving_down",
      "debug_blind_position",
      "debug_slat_position",
      "debug_up_output",
      "debug_stop_output",
      "debug_slat_cmd",
      "comment_shutter_logic",
      "96a62a5a0c8257f3",
      "8b8d0a1b01bc1f8a",
      "bb94c912660e4608",
      "912a20eb4e345e24",
      "93d30954feb2d747",
      "74093c36071d1cc8",
      "e3b818986f909454",
      "f1357eda670b343b",
      "8333960f272d0836",
      "2fb068023705a75f",
      "e9f842e7ab4ccc9d",
      "601d8f12ef55034e",
      "4002093bdf5e4d53",
      "0cf241b6a482516b",
      "292ebda1e1f77c55",
      "4691f50b9dbc7ab4"
    ],
    "x": 134,
    "y": 679,
    "w": 1132,
    "h": 502
  },
  {
    "id": "inject_up",
    "type": "inject",
    "g": "93f0ef4d4a682f3a",
    "name": "Up Command",
    "props": [
      {
        "p": "payload"
      }
    ],
    "repeat": "",
    "crontab": "",
    "once": false,
    "onceDelay": "0",
    "topic": "",
    "payload": "false",
    "payloadType": "bool",
    "x": 270,
    "y": 760,
    "wires": [
      [
        "bb94c912660e4608"
      ]
    ]
  },
  {
    "id": "inject_down",
    "type": "inject",
    "g": "93f0ef4d4a682f3a",
    "name": "Down Command",
    "props": [
      {
        "p": "payload"
      }
    ],
    "repeat": "",
    "crontab": "",
    "once": false,
    "onceDelay": "0",
    "topic": "",
    "payload": "true",
    "payloadType": "bool",
    "x": 280,
    "y": 800,
    "wires": [
      [
        "bb94c912660e4608"
      ]
    ]
  },
  {
    "id": "inject_stop",
    "type": "inject",
    "g": "93f0ef4d4a682f3a",
    "name": "Stop Command",
    "props": [
      {
        "p": "payload"
      }
    ],
    "repeat": "",
    "crontab": "",
    "once": false,
    "onceDelay": "0",
    "topic": "",
    "payload": "true",
    "payloadType": "bool",
    "x": 280,
    "y": 840,
    "wires": [
      [
        "912a20eb4e345e24"
      ]
    ]
  },
  {
    "id": "inject_position_50",
    "type": "inject",
    "g": "93f0ef4d4a682f3a",
    "name": "Position 50%",
    "props": [
      {
        "p": "payload"
      }
    ],
    "repeat": "",
    "crontab": "",
    "once": false,
    "onceDelay": "0",
    "topic": "",
    "payload": "50",
    "payloadType": "num",
    "x": 270,
    "y": 900,
    "wires": [
      [
        "93d30954feb2d747"
      ]
    ]
  },
  {
    "id": "inject_slat_position",
    "type": "inject",
    "g": "93f0ef4d4a682f3a",
    "name": "Position 75%",
    "props": [
      {
        "p": "payload"
      }
    ],
    "repeat": "",
    "crontab": "",
    "once": false,
    "onceDelay": "0",
    "topic": "",
    "payload": "75",
    "payloadType": "num",
    "x": 270,
    "y": 940,
    "wires": [
      [
        "74093c36071d1cc8"
      ]
    ]
  },
  {
    "id": "debug_moving_up",
    "type": "debug",
    "g": "93f0ef4d4a682f3a",
    "name": "5 · Moving Up input",
    "active": true,
    "tosidebar": true,
    "console": false,
    "tostatus": false,
    "complete": "payload",
    "targetType": "msg",
    "statusVal": "",
    "statusType": "auto",
    "x": 1110,
    "y": 940,
    "wires": []
  },
  {
    "id": "debug_moving_down",
    "type": "debug",
    "g": "93f0ef4d4a682f3a",
    "name": "6 · Moving Down input",
    "active": true,
    "tosidebar": true,
    "console": false,
    "tostatus": false,
    "complete": "payload",
    "targetType": "msg",
    "statusVal": "",
    "statusType": "auto",
    "x": 1100,
    "y": 980,
    "wires": []
  },
  {
    "id": "debug_blind_position",
    "type": "debug",
    "g": "93f0ef4d4a682f3a",
    "name": "3 · Blind Position input",
    "active": true,
    "tosidebar": true,
    "console": false,
    "tostatus": false,
    "complete": "payload",
    "targetType": "msg",
    "statusVal": "",
    "statusType": "auto",
    "x": 1100,
    "y": 860,
    "wires": []
  },
  {
    "id": "debug_slat_position",
    "type": "debug",
    "g": "93f0ef4d4a682f3a",
    "name": "7 · Slat Position input",
    "active": true,
    "tosidebar": true,
    "console": false,
    "tostatus": false,
    "complete": "payload",
    "targetType": "msg",
    "statusVal": "",
    "statusType": "auto",
    "x": 1100,
    "y": 1020,
    "wires": []
  },
  {
    "id": "debug_up_output",
    "type": "debug",
    "g": "93f0ef4d4a682f3a",
    "name": "1 · Up/Down output",
    "active": true,
    "tosidebar": true,
    "console": false,
    "tostatus": false,
    "complete": "payload",
    "targetType": "msg",
    "statusVal": "",
    "statusType": "auto",
    "x": 1090,
    "y": 780,
    "wires": []
  },
  {
    "id": "debug_stop_output",
    "type": "debug",
    "g": "93f0ef4d4a682f3a",
    "name": "2 · Stop output",
    "active": true,
    "tosidebar": true,
    "console": false,
    "tostatus": false,
    "complete": "payload",
    "targetType": "msg",
    "statusVal": "",
    "statusType": "auto",
    "x": 1080,
    "y": 820,
    "wires": []
  },
  {
    "id": "debug_slat_cmd",
    "type": "debug",
    "g": "93f0ef4d4a682f3a",
    "name": "8 · Slat Position output",
    "active": true,
    "tosidebar": true,
    "console": false,
    "tostatus": false,
    "complete": "payload",
    "targetType": "msg",
    "statusVal": "",
    "statusType": "auto",
    "x": 1100,
    "y": 1060,
    "wires": []
  },
  {
    "id": "comment_shutter_logic",
    "type": "comment",
    "g": "93f0ef4d4a682f3a",
    "name": "Communication Shutter/Blind",
    "info": "## Shutter / Blind node\nDevice: double-click the device node and choose the device of your installation, then Deploy.\n\n### Input targets\n- `Up/Down output` — command: false = up, true = down\n- `Stop output` — command: true = stop\n- `Blind Position output` — command: position 0-100 % (100 = fully closed)\n- `Slat Position output` — command: slat angle 0-100 % (shutters with slats)\n- `Blind Position input` — feedback: position 0-100 %\n- `Moving Up input`, `Moving Down input` — feedback: true while moving\n- `Slat Position input` — feedback: slat angle 0-100 %\n\n### Outputs (8, in the same order)\n1. Up/Down output · 2. Stop output · 3. Blind Position input · 4. Blind Position output · 5. Moving Up input · 6. Moving Down input · 7. Slat Position input · 8. Slat Position output\n\nUp/Down and Stop leave on their output every time, even when the value repeats.\n\n### Rules (node-red-cgen-widget-nodes 1.15)\n- `msg.inputTarget` must match a name above exactly (case-sensitive). Use an **Input Target** node to pick it from a list. A message with a missing or unknown target is ignored.\n- A message from the flow is sent to the server and also leaves on the output of the same name.\n- Outputs also fire when the device changes elsewhere: a **command** output when the app, a scenario, an automation or another flow commands it (only when the value changes), a **feedback** output each time the device reports a value.\n- Writing a feedback / status target updates the value HyperVisu shows; nothing is sent to the device. Use it with VIRTUAL devices.",
    "x": 360,
    "y": 720,
    "wires": []
  },
  {
    "id": "96a62a5a0c8257f3",
    "type": "widget-ShutterBlind",
    "g": "93f0ef4d4a682f3a",
    "dropdownRoom": "",
    "dropdownCategory": "",
    "dropdownWidget": "",
    "displayName": "Shutter / Blind (set device)",
    "x": 780,
    "y": 900,
    "wires": [
      [
        "debug_up_output"
      ],
      [
        "debug_stop_output"
      ],
      [
        "debug_blind_position"
      ],
      [
        "8b8d0a1b01bc1f8a"
      ],
      [
        "debug_moving_up"
      ],
      [
        "debug_moving_down"
      ],
      [
        "debug_slat_position"
      ],
      [
        "debug_slat_cmd"
      ]
    ]
  },
  {
    "id": "8b8d0a1b01bc1f8a",
    "type": "debug",
    "g": "93f0ef4d4a682f3a",
    "name": "4 · Blind Position output",
    "active": true,
    "tosidebar": true,
    "console": false,
    "tostatus": false,
    "complete": "payload",
    "targetType": "msg",
    "statusVal": "",
    "statusType": "auto",
    "x": 1110,
    "y": 900,
    "wires": []
  },
  {
    "id": "bb94c912660e4608",
    "type": "hypervisu-input-target",
    "g": "93f0ef4d4a682f3a",
    "selectedWidget": "4",
    "selectedInput": "Up/Down output",
    "displayName": "Input Target",
    "x": 520,
    "y": 780,
    "wires": [
      [
        "96a62a5a0c8257f3"
      ]
    ]
  },
  {
    "id": "912a20eb4e345e24",
    "type": "hypervisu-input-target",
    "g": "93f0ef4d4a682f3a",
    "selectedWidget": "4",
    "selectedInput": "Stop output",
    "displayName": "Input Target",
    "x": 510,
    "y": 820,
    "wires": [
      [
        "96a62a5a0c8257f3"
      ]
    ]
  },
  {
    "id": "93d30954feb2d747",
    "type": "hypervisu-input-target",
    "g": "93f0ef4d4a682f3a",
    "selectedWidget": "4",
    "selectedInput": "Blind Position input",
    "displayName": "Input Target",
    "x": 530,
    "y": 860,
    "wires": [
      [
        "96a62a5a0c8257f3"
      ]
    ]
  },
  {
    "id": "74093c36071d1cc8",
    "type": "hypervisu-input-target",
    "g": "93f0ef4d4a682f3a",
    "selectedWidget": "4",
    "selectedInput": "Blind Position output",
    "displayName": "Input Target",
    "x": 540,
    "y": 900,
    "wires": [
      [
        "96a62a5a0c8257f3"
      ]
    ]
  },
  {
    "id": "e3b818986f909454",
    "type": "hypervisu-input-target",
    "g": "93f0ef4d4a682f3a",
    "selectedWidget": "4",
    "selectedInput": "Moving Up input",
    "displayName": "Input Target",
    "x": 520,
    "y": 940,
    "wires": [
      [
        "96a62a5a0c8257f3"
      ]
    ]
  },
  {
    "id": "f1357eda670b343b",
    "type": "hypervisu-input-target",
    "g": "93f0ef4d4a682f3a",
    "selectedWidget": "4",
    "selectedInput": "Moving Down input",
    "displayName": "Input Target",
    "x": 550,
    "y": 1000,
    "wires": [
      [
        "96a62a5a0c8257f3"
      ]
    ]
  },
  {
    "id": "8333960f272d0836",
    "type": "hypervisu-input-target",
    "g": "93f0ef4d4a682f3a",
    "selectedWidget": "4",
    "selectedInput": "Slat Position input",
    "displayName": "Input Target",
    "x": 530,
    "y": 1100,
    "wires": [
      [
        "96a62a5a0c8257f3"
      ]
    ]
  },
  {
    "id": "2fb068023705a75f",
    "type": "hypervisu-input-target",
    "g": "93f0ef4d4a682f3a",
    "selectedWidget": "4",
    "selectedInput": "Slat Position output",
    "displayName": "Input Target",
    "x": 530,
    "y": 1140,
    "wires": [
      [
        "96a62a5a0c8257f3"
      ]
    ]
  },
  {
    "id": "e9f842e7ab4ccc9d",
    "type": "inject",
    "g": "93f0ef4d4a682f3a",
    "name": "OFF",
    "props": [
      {
        "p": "payload"
      }
    ],
    "repeat": "",
    "crontab": "",
    "once": false,
    "onceDelay": "0",
    "topic": "",
    "payload": "false",
    "payloadType": "bool",
    "x": 230,
    "y": 1020,
    "wires": [
      [
        "e3b818986f909454"
      ]
    ]
  },
  {
    "id": "601d8f12ef55034e",
    "type": "inject",
    "g": "93f0ef4d4a682f3a",
    "name": "ON",
    "props": [
      {
        "p": "payload"
      }
    ],
    "repeat": "",
    "crontab": "",
    "once": false,
    "onceDelay": "0",
    "topic": "",
    "payload": "true",
    "payloadType": "bool",
    "x": 230,
    "y": 980,
    "wires": [
      [
        "e3b818986f909454"
      ]
    ]
  },
  {
    "id": "4002093bdf5e4d53",
    "type": "inject",
    "g": "93f0ef4d4a682f3a",
    "name": "Position 50%",
    "props": [
      {
        "p": "payload"
      }
    ],
    "repeat": "",
    "crontab": "",
    "once": false,
    "onceDelay": "0",
    "topic": "",
    "payload": "50",
    "payloadType": "num",
    "x": 270,
    "y": 1100,
    "wires": [
      [
        "8333960f272d0836"
      ]
    ]
  },
  {
    "id": "0cf241b6a482516b",
    "type": "inject",
    "g": "93f0ef4d4a682f3a",
    "name": "Position 75%",
    "props": [
      {
        "p": "payload"
      }
    ],
    "repeat": "",
    "crontab": "",
    "once": false,
    "onceDelay": "0",
    "topic": "",
    "payload": "75",
    "payloadType": "num",
    "x": 270,
    "y": 1140,
    "wires": [
      [
        "2fb068023705a75f"
      ]
    ]
  },
  {
    "id": "292ebda1e1f77c55",
    "type": "inject",
    "g": "93f0ef4d4a682f3a",
    "name": "OFF",
    "props": [
      {
        "p": "payload"
      }
    ],
    "repeat": "",
    "crontab": "",
    "once": false,
    "onceDelay": "0",
    "topic": "",
    "payload": "false",
    "payloadType": "bool",
    "x": 370,
    "y": 1060,
    "wires": [
      [
        "f1357eda670b343b"
      ]
    ]
  },
  {
    "id": "4691f50b9dbc7ab4",
    "type": "inject",
    "g": "93f0ef4d4a682f3a",
    "name": "ON",
    "props": [
      {
        "p": "payload"
      }
    ],
    "repeat": "",
    "crontab": "",
    "once": false,
    "onceDelay": "0",
    "topic": "",
    "payload": "true",
    "payloadType": "bool",
    "x": 370,
    "y": 1020,
    "wires": [
      [
        "f1357eda670b343b"
      ]
    ]
  }
]