[
  {
    "id": "503d4505e4a78f5f",
    "type": "group",
    "style": {
      "stroke": "#999999",
      "stroke-opacity": "1",
      "fill": "none",
      "fill-opacity": "1",
      "label": true,
      "label-position": "nw",
      "color": "#a4a4a4"
    },
    "nodes": [
      "textinput_demo",
      "inject_hello",
      "inject_world",
      "inject_empty",
      "inject_server_text",
      "e63feb98ac62ced0",
      "function_dynamic_text",
      "inject_dynamic",
      "comment_textinput_logic"
    ],
    "x": 144,
    "y": 3679,
    "w": 942,
    "h": 302
  },
  {
    "id": "textinput_demo",
    "type": "widget-TextInput",
    "g": "503d4505e4a78f5f",
    "dropdownRoom": "",
    "dropdownCategory": "",
    "dropdownWidget": "",
    "displayName": "Text Input (set device)",
    "x": 710,
    "y": 3820,
    "wires": [
      [
        "e63feb98ac62ced0"
      ]
    ]
  },
  {
    "id": "inject_hello",
    "type": "inject",
    "g": "503d4505e4a78f5f",
    "name": "Send \"Hello\"",
    "props": [
      {
        "p": "inputTarget",
        "v": "Text",
        "vt": "str"
      },
      {
        "p": "payload"
      }
    ],
    "repeat": "",
    "crontab": "",
    "once": false,
    "onceDelay": "0",
    "topic": "",
    "payload": "Hello",
    "payloadType": "str",
    "x": 270,
    "y": 3780,
    "wires": [
      [
        "textinput_demo"
      ]
    ]
  },
  {
    "id": "inject_world",
    "type": "inject",
    "g": "503d4505e4a78f5f",
    "name": "Send \"World\"",
    "props": [
      {
        "p": "inputTarget",
        "v": "Text",
        "vt": "str"
      },
      {
        "p": "payload"
      }
    ],
    "repeat": "",
    "crontab": "",
    "once": false,
    "onceDelay": "0",
    "topic": "",
    "payload": "World",
    "payloadType": "str",
    "x": 270,
    "y": 3820,
    "wires": [
      [
        "textinput_demo"
      ]
    ]
  },
  {
    "id": "inject_empty",
    "type": "inject",
    "g": "503d4505e4a78f5f",
    "name": "Clear Text",
    "props": [
      {
        "p": "inputTarget",
        "v": "Text",
        "vt": "str"
      },
      {
        "p": "payload",
        "v": "",
        "vt": "str"
      }
    ],
    "repeat": "",
    "crontab": "",
    "once": false,
    "onceDelay": "0",
    "topic": "",
    "x": 260,
    "y": 3860,
    "wires": [
      [
        "textinput_demo"
      ]
    ]
  },
  {
    "id": "inject_server_text",
    "type": "inject",
    "g": "503d4505e4a78f5f",
    "name": "Text update",
    "props": [
      {
        "p": "inputTarget",
        "v": "Text",
        "vt": "str"
      },
      {
        "p": "payload"
      }
    ],
    "repeat": "",
    "crontab": "",
    "once": false,
    "onceDelay": "0",
    "topic": "",
    "payload": "Server Message",
    "payloadType": "str",
    "x": 270,
    "y": 3900,
    "wires": [
      [
        "textinput_demo"
      ]
    ]
  },
  {
    "id": "e63feb98ac62ced0",
    "type": "debug",
    "g": "503d4505e4a78f5f",
    "name": "1 · Text Value (string)",
    "active": true,
    "tosidebar": true,
    "console": false,
    "tostatus": false,
    "complete": "payload",
    "targetType": "msg",
    "statusVal": "",
    "statusType": "auto",
    "x": 940,
    "y": 3820,
    "wires": []
  },
  {
    "id": "function_dynamic_text",
    "type": "function",
    "g": "503d4505e4a78f5f",
    "name": "Dynamic Text Generator",
    "func": "// Generate dynamic text with timestamp\nlet timestamp = new Date().toLocaleTimeString();\nlet dynamicText = `Dynamic message at ${timestamp}`;\n\n// Create message with communication object\nmsg.inputTarget = \"Text\";\nmsg.payload = dynamicText;\n\nnode.status({\n    fill: \"blue\",\n    shape: \"dot\", \n    text: `Sent: ${timestamp}`\n});\n\nreturn msg;",
    "outputs": 1,
    "timeout": 0,
    "noerr": 0,
    "initialize": "",
    "finalize": "",
    "libs": [],
    "x": 540,
    "y": 3940,
    "wires": [
      [
        "textinput_demo"
      ]
    ]
  },
  {
    "id": "inject_dynamic",
    "type": "inject",
    "g": "503d4505e4a78f5f",
    "name": "Generate Dynamic Text",
    "props": [],
    "repeat": "",
    "crontab": "",
    "once": false,
    "onceDelay": "0",
    "topic": "",
    "x": 290,
    "y": 3940,
    "wires": [
      [
        "function_dynamic_text"
      ]
    ]
  },
  {
    "id": "comment_textinput_logic",
    "type": "comment",
    "g": "503d4505e4a78f5f",
    "name": "Communication Text Input",
    "info": "## Text Input node\nDevice: double-click the device node and choose the device of your installation, then Deploy.\n\n### Input\nA string in `msg.payload`, `msg.inputTarget` optional (`Text`). The node accepts flow messages only for a VIRTUAL device; with KNX, a DPT 16 text holds 14 characters at most.\n\n### Output\n1. Text Value (string) — each time the text changes on the server.",
    "x": 360,
    "y": 3720,
    "wires": []
  }
]