[
  {
    "id": "6f151551ceb20cd4",
    "type": "group",
    "style": {
      "stroke": "#999999",
      "stroke-opacity": "1",
      "fill": "none",
      "fill-opacity": "1",
      "label": true,
      "label-position": "nw",
      "color": "#a4a4a4"
    },
    "nodes": [
      "7e0a5a8aa5148baf",
      "43b5b9a48c473e8e",
      "102e1b9a378c2a97",
      "6e23e5e270ef1dbc",
      "36872edde0e66b7a",
      "0eef689dc6e7fb62",
      "58f0aa4c64ee74e7",
      "dcac41d0fd8693a9",
      "5aa8012da8fb08ad",
      "e5fca33132c18ece",
      "cea69f150b6017ea",
      "104e243c938021d0",
      "10b5f86c9092b470",
      "b6806c2b4c968d23",
      "8455d2e98de6cdaf",
      "ea8aad2898daf370",
      "602806eb4f65e88e",
      "81475e291a35eabe",
      "e0e6ee55bed7de31",
      "ecc505eab20cf637",
      "db4923da5d7fb24a",
      "afef134f0f4e025a",
      "8f30a570652e6cc4"
    ],
    "x": 64,
    "y": 3999,
    "w": 1062,
    "h": 502
  },
  {
    "id": "7e0a5a8aa5148baf",
    "type": "widget-Alarm",
    "g": "6f151551ceb20cd4",
    "dropdownRoom": "",
    "dropdownCategory": "",
    "dropdownWidget": "",
    "displayName": "Alarm (set device)",
    "x": 600,
    "y": 4220,
    "wires": [
      [
        "dcac41d0fd8693a9"
      ],
      [
        "5aa8012da8fb08ad"
      ],
      [
        "e5fca33132c18ece"
      ],
      [
        "cea69f150b6017ea"
      ],
      [
        "104e243c938021d0"
      ],
      [
        "10b5f86c9092b470"
      ],
      [
        "b6806c2b4c968d23"
      ]
    ]
  },
  {
    "id": "43b5b9a48c473e8e",
    "type": "inject",
    "g": "6f151551ceb20cd4",
    "name": "Arm",
    "props": [
      {
        "p": "inputTarget",
        "v": "Arm Command",
        "vt": "str"
      },
      {
        "p": "payload"
      }
    ],
    "repeat": "",
    "crontab": "",
    "once": false,
    "onceDelay": "0",
    "topic": "",
    "payload": "true",
    "payloadType": "bool",
    "x": 170,
    "y": 4120,
    "wires": [
      [
        "7e0a5a8aa5148baf"
      ]
    ]
  },
  {
    "id": "102e1b9a378c2a97",
    "type": "inject",
    "g": "6f151551ceb20cd4",
    "name": "Partial Arm",
    "props": [
      {
        "p": "inputTarget",
        "v": "Partial Arm Command",
        "vt": "str"
      },
      {
        "p": "payload"
      }
    ],
    "repeat": "",
    "crontab": "",
    "once": false,
    "onceDelay": "0",
    "topic": "",
    "payload": "true",
    "payloadType": "bool",
    "x": 180,
    "y": 4160,
    "wires": [
      [
        "7e0a5a8aa5148baf"
      ]
    ]
  },
  {
    "id": "6e23e5e270ef1dbc",
    "type": "inject",
    "g": "6f151551ceb20cd4",
    "name": "Disarm",
    "props": [
      {
        "p": "inputTarget",
        "v": "Disarm Command",
        "vt": "str"
      },
      {
        "p": "payload"
      }
    ],
    "repeat": "",
    "crontab": "",
    "once": false,
    "onceDelay": "0",
    "topic": "",
    "payload": "true",
    "payloadType": "bool",
    "x": 170,
    "y": 4200,
    "wires": [
      [
        "7e0a5a8aa5148baf"
      ]
    ]
  },
  {
    "id": "36872edde0e66b7a",
    "type": "inject",
    "g": "6f151551ceb20cd4",
    "name": "Armed Status (feedback)",
    "props": [
      {
        "p": "inputTarget",
        "v": "Armed Status",
        "vt": "str"
      },
      {
        "p": "payload"
      }
    ],
    "repeat": "",
    "crontab": "",
    "once": false,
    "onceDelay": "0",
    "topic": "",
    "payload": "true",
    "payloadType": "bool",
    "x": 220,
    "y": 4240,
    "wires": [
      [
        "7e0a5a8aa5148baf"
      ]
    ]
  },
  {
    "id": "0eef689dc6e7fb62",
    "type": "inject",
    "g": "6f151551ceb20cd4",
    "name": "Partial Armed Status (feedback)",
    "props": [
      {
        "p": "inputTarget",
        "v": "Partial Armed Status",
        "vt": "str"
      },
      {
        "p": "payload"
      }
    ],
    "repeat": "",
    "crontab": "",
    "once": false,
    "onceDelay": "0",
    "topic": "",
    "payload": "false",
    "payloadType": "bool",
    "x": 250,
    "y": 4280,
    "wires": [
      [
        "7e0a5a8aa5148baf"
      ]
    ]
  },
  {
    "id": "58f0aa4c64ee74e7",
    "type": "inject",
    "g": "6f151551ceb20cd4",
    "name": "Disarmed Status (feedback)",
    "props": [
      {
        "p": "inputTarget",
        "v": "Disarmed Status",
        "vt": "str"
      },
      {
        "p": "payload"
      }
    ],
    "repeat": "",
    "crontab": "",
    "once": false,
    "onceDelay": "0",
    "topic": "",
    "payload": "false",
    "payloadType": "bool",
    "x": 240,
    "y": 4320,
    "wires": [
      [
        "7e0a5a8aa5148baf"
      ]
    ]
  },
  {
    "id": "dcac41d0fd8693a9",
    "type": "debug",
    "g": "6f151551ceb20cd4",
    "name": "1 · Arm Command (bool)",
    "active": true,
    "tosidebar": true,
    "console": false,
    "tostatus": false,
    "complete": "payload",
    "targetType": "msg",
    "statusVal": "",
    "statusType": "auto",
    "x": 930,
    "y": 4120,
    "wires": []
  },
  {
    "id": "5aa8012da8fb08ad",
    "type": "debug",
    "g": "6f151551ceb20cd4",
    "name": "2 · Partial Arm Command (bool)",
    "active": true,
    "tosidebar": true,
    "console": false,
    "tostatus": false,
    "complete": "payload",
    "targetType": "msg",
    "statusVal": "",
    "statusType": "auto",
    "x": 950,
    "y": 4160,
    "wires": []
  },
  {
    "id": "e5fca33132c18ece",
    "type": "debug",
    "g": "6f151551ceb20cd4",
    "name": "3 · Disarm Command (bool)",
    "active": true,
    "tosidebar": true,
    "console": false,
    "tostatus": false,
    "complete": "payload",
    "targetType": "msg",
    "statusVal": "",
    "statusType": "auto",
    "x": 940,
    "y": 4200,
    "wires": []
  },
  {
    "id": "cea69f150b6017ea",
    "type": "debug",
    "g": "6f151551ceb20cd4",
    "name": "4 · Armed Status (bool)",
    "active": true,
    "tosidebar": true,
    "console": false,
    "tostatus": false,
    "complete": "payload",
    "targetType": "msg",
    "statusVal": "",
    "statusType": "auto",
    "x": 930,
    "y": 4240,
    "wires": []
  },
  {
    "id": "104e243c938021d0",
    "type": "debug",
    "g": "6f151551ceb20cd4",
    "name": "5 · Partial Armed Status (bool)",
    "active": true,
    "tosidebar": true,
    "console": false,
    "tostatus": false,
    "complete": "payload",
    "targetType": "msg",
    "statusVal": "",
    "statusType": "auto",
    "x": 950,
    "y": 4280,
    "wires": []
  },
  {
    "id": "10b5f86c9092b470",
    "type": "debug",
    "g": "6f151551ceb20cd4",
    "name": "6 · Disarmed Status (bool)",
    "active": true,
    "tosidebar": true,
    "console": false,
    "tostatus": false,
    "complete": "payload",
    "targetType": "msg",
    "statusVal": "",
    "statusType": "auto",
    "x": 940,
    "y": 4320,
    "wires": []
  },
  {
    "id": "b6806c2b4c968d23",
    "type": "debug",
    "g": "6f151551ceb20cd4",
    "name": "7 · Alarm Status (bool)",
    "active": true,
    "tosidebar": true,
    "console": false,
    "tostatus": false,
    "complete": "payload",
    "targetType": "msg",
    "statusVal": "",
    "statusType": "auto",
    "x": 920,
    "y": 4360,
    "wires": []
  },
  {
    "id": "8455d2e98de6cdaf",
    "type": "function",
    "g": "6f151551ceb20cd4",
    "name": "Emergency Sequence",
    "func": "// Emergency: Disarm -> Arm sequence\nlet messages = [];\n\n// First disarm\nmessages.push({\n    inputTarget: \"Disarm Command\",\n    payload: true,\n    delay: 0\n});\n\n// Then arm after 2 seconds\nmessages.push({\n    inputTarget: \"Arm Command\",\n    payload: true,\n    delay: 2000\n});\n\nnode.status({\n    fill: \"orange\",\n    shape: \"dot\", \n    text: \"🚨 Emergency Sequence\"\n});\n\n// Send first message immediately\nnode.send(messages[0]);\n\n// Send second message after delay\nsetTimeout(() => {\n    node.send(messages[1]);\n    node.status({\n        fill: \"green\",\n        shape: \"dot\", \n        text: \"✅ Sequence Complete\"\n    });\n}, messages[1].delay);\n\nreturn null;",
    "outputs": 1,
    "timeout": 0,
    "noerr": 0,
    "initialize": "",
    "finalize": "",
    "libs": [],
    "x": 650,
    "y": 4460,
    "wires": [
      [
        "7e0a5a8aa5148baf"
      ]
    ]
  },
  {
    "id": "ea8aad2898daf370",
    "type": "inject",
    "g": "6f151551ceb20cd4",
    "name": "Emergency Sequence",
    "props": [],
    "repeat": "",
    "crontab": "",
    "once": false,
    "onceDelay": "0",
    "topic": "",
    "x": 430,
    "y": 4460,
    "wires": [
      [
        "8455d2e98de6cdaf"
      ]
    ]
  },
  {
    "id": "602806eb4f65e88e",
    "type": "comment",
    "g": "6f151551ceb20cd4",
    "name": "Communication Alarm System",
    "info": "## Alarm node\nDevice: double-click the device node and choose the device of your installation, then Deploy.\n\n### Input targets\n- `Arm Command`, `Partial Arm Command`, `Disarm Command` — commands; the node always sends true, whatever the payload. No PIN is asked, even on a PIN-protected alarm.\n- `Armed Status`, `Partial Armed Status`, `Disarmed Status`, `Alarm Status` — feedback, true / false\n\n### Outputs\n1-3. the three commands · 4. Armed Status · 5. Partial Armed Status · 6. Disarmed Status · 7. Alarm Status\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": 320,
    "y": 4040,
    "wires": []
  },
  {
    "id": "81475e291a35eabe",
    "type": "hypervisu-input-target",
    "g": "6f151551ceb20cd4",
    "selectedWidget": "16",
    "selectedInput": "Alarm Status",
    "displayName": "Input Target",
    "x": 400,
    "y": 4420,
    "wires": [
      [
        "7e0a5a8aa5148baf"
      ]
    ]
  },
  {
    "id": "e0e6ee55bed7de31",
    "type": "inject",
    "g": "6f151551ceb20cd4",
    "name": "ON",
    "props": [
      {
        "p": "payload"
      }
    ],
    "repeat": "",
    "crontab": "",
    "once": false,
    "onceDelay": "0",
    "topic": "",
    "payload": "true",
    "payloadType": "bool",
    "x": 160,
    "y": 4420,
    "wires": [
      [
        "81475e291a35eabe"
      ]
    ]
  },
  {
    "id": "ecc505eab20cf637",
    "type": "inject",
    "g": "6f151551ceb20cd4",
    "name": "OFF",
    "props": [
      {
        "p": "payload"
      }
    ],
    "repeat": "",
    "crontab": "",
    "once": false,
    "onceDelay": "0",
    "topic": "",
    "payload": "false",
    "payloadType": "bool",
    "x": 160,
    "y": 4460,
    "wires": [
      [
        "81475e291a35eabe"
      ]
    ]
  },
  {
    "id": "db4923da5d7fb24a",
    "type": "hypervisu-input-target",
    "g": "6f151551ceb20cd4",
    "selectedWidget": "16",
    "selectedInput": "Armed Status",
    "displayName": "Input Target",
    "x": 390,
    "y": 4380,
    "wires": [
      [
        "7e0a5a8aa5148baf"
      ]
    ]
  },
  {
    "id": "afef134f0f4e025a",
    "type": "inject",
    "g": "6f151551ceb20cd4",
    "name": "ON",
    "props": [
      {
        "p": "payload"
      }
    ],
    "repeat": "",
    "crontab": "",
    "once": false,
    "onceDelay": "0",
    "topic": "",
    "payload": "true",
    "payloadType": "bool",
    "x": 160,
    "y": 4340,
    "wires": [
      [
        "db4923da5d7fb24a"
      ]
    ]
  },
  {
    "id": "8f30a570652e6cc4",
    "type": "inject",
    "g": "6f151551ceb20cd4",
    "name": "OFF",
    "props": [
      {
        "p": "payload"
      }
    ],
    "repeat": "",
    "crontab": "",
    "once": false,
    "onceDelay": "0",
    "topic": "",
    "payload": "false",
    "payloadType": "bool",
    "x": 160,
    "y": 4380,
    "wires": [
      [
        "db4923da5d7fb24a"
      ]
    ]
  }
]