[
{
"id": "289c4fb42bfdacf9",
"type": "tab",
"label": "表示系ウィジェット",
"disabled": false,
"info": "Dashboard 2.0 表示系ウィジェットのサンプル"
},
{
"id": "8a360052a6ac4aa9",
"type": "comment",
"z": "289c4fb42bfdacf9",
"name": "━━━ 📝 ui-text サンプル ━━━",
"info": "",
"x": 160,
"y": 40,
"wires": []
},
{
"id": "491423b783369936",
"type": "comment",
"z": "289c4fb42bfdacf9",
"name": "パターン1: シンプルなテキスト表示",
"info": "",
"x": 180,
"y": 80,
"wires": []
},
{
"id": "cba24325da99bcbf",
"type": "inject",
"z": "289c4fb42bfdacf9",
"name": "センサー値",
"props": [
{
"p": "payload"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "現在の温度: 25.5℃",
"payloadType": "str",
"x": 130,
"y": 120,
"wires": [
[
"ad4de93c829d850f"
]
]
},
{
"id": "ad4de93c829d850f",
"type": "ui-text",
"z": "289c4fb42bfdacf9",
"group": "sample_ui_group_text",
"order": 1,
"width": 0,
"height": 0,
"name": "シンプルテキスト",
"label": "ステータス:",
"format": "{{msg.payload}}",
"layout": "row-spread",
"style": false,
"font": "",
"fontSize": 16,
"color": "#000000",
"wrapText": false,
"className": "",
"value": "payload",
"valueType": "msg",
"x": 340,
"y": 120,
"wires": []
},
{
"id": "5ab02164fa917931",
"type": "comment",
"z": "289c4fb42bfdacf9",
"name": "パターン2: HTML装飾付きテキスト(Template経由)",
"info": "",
"x": 220,
"y": 180,
"wires": []
},
{
"id": "b196d12c5d24f7bd",
"type": "inject",
"z": "289c4fb42bfdacf9",
"name": "データ送信",
"props": [
{
"p": "payload"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "FlowFuse",
"payloadType": "str",
"x": 130,
"y": 220,
"wires": [
[
"567e1f367c19f46b"
]
]
},
{
"id": "567e1f367c19f46b",
"type": "template",
"z": "289c4fb42bfdacf9",
"name": "HTML生成",
"field": "payload",
"fieldType": "msg",
"format": "handlebars",
"syntax": "mustache",
"template": "
FlowFuseへようこそ!\n
\n
重要: 警告メッセージ",
"output": "str",
"x": 300,
"y": 220,
"wires": [
[
"f4ba7b48dedccb2f"
]
]
},
{
"id": "f4ba7b48dedccb2f",
"type": "ui-text",
"z": "289c4fb42bfdacf9",
"group": "sample_ui_group_text",
"order": 2,
"width": 0,
"height": 0,
"name": "HTMLテキスト",
"label": "",
"format": "{{msg.payload}}",
"layout": "row-left",
"style": false,
"font": "",
"fontSize": 16,
"color": "#000000",
"wrapText": false,
"className": "",
"value": "payload",
"valueType": "msg",
"x": 480,
"y": 220,
"wires": []
},
{
"id": "c6aa3f00cb2154ce",
"type": "comment",
"z": "289c4fb42bfdacf9",
"name": "パターン3: JSONata式で値をフォーマット",
"info": "",
"x": 200,
"y": 280,
"wires": []
},
{
"id": "af07ce26dd544d63",
"type": "inject",
"z": "289c4fb42bfdacf9",
"name": "温度値",
"props": [
{
"p": "payload"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "25.678",
"payloadType": "num",
"x": 120,
"y": 320,
"wires": [
[
"ca66755d1cc0bede"
]
]
},
{
"id": "ca66755d1cc0bede",
"type": "ui-text",
"z": "289c4fb42bfdacf9",
"group": "sample_ui_group_text",
"order": 3,
"width": 0,
"height": 0,
"name": "JSONataフォーマット",
"label": "温度:",
"format": "{{msg.payload}}",
"layout": "row-spread",
"style": false,
"font": "",
"fontSize": 16,
"color": "#000000",
"wrapText": false,
"className": "",
"value": "$round(payload, 1)",
"valueType": "jsonata",
"x": 360,
"y": 320,
"wires": []
},
{
"id": "8939939a8777513a",
"type": "comment",
"z": "289c4fb42bfdacf9",
"name": "パターン4: プレフィックス/サフィックスの追加",
"info": "",
"x": 210,
"y": 380,
"wires": []
},
{
"id": "2b2ed53f581d2a99",
"type": "inject",
"z": "289c4fb42bfdacf9",
"name": "温度値",
"props": [
{
"p": "payload"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "25.5",
"payloadType": "num",
"x": 120,
"y": 420,
"wires": [
[
"39d1630f4220d208"
]
]
},
{
"id": "39d1630f4220d208",
"type": "template",
"z": "289c4fb42bfdacf9",
"name": "単位追加",
"field": "payload",
"fieldType": "msg",
"format": "handlebars",
"syntax": "mustache",
"template": "{{payload}} ℃",
"output": "str",
"x": 290,
"y": 420,
"wires": [
[
"3f23b4684076a184"
]
]
},
{
"id": "3f23b4684076a184",
"type": "ui-text",
"z": "289c4fb42bfdacf9",
"group": "sample_ui_group_text",
"order": 4,
"width": 0,
"height": 0,
"name": "単位付き表示",
"label": "温度:",
"format": "{{msg.payload}}",
"layout": "row-spread",
"style": false,
"font": "",
"fontSize": 16,
"color": "#000000",
"wrapText": false,
"className": "",
"value": "payload",
"valueType": "msg",
"x": 480,
"y": 420,
"wires": []
},
{
"id": "09b1386036e9f9fd",
"type": "comment",
"z": "289c4fb42bfdacf9",
"name": "━━━ 📰 ui-markdown サンプル ━━━",
"info": "",
"x": 180,
"y": 500,
"wires": []
},
{
"id": "f644e84296d5bd65",
"type": "comment",
"z": "289c4fb42bfdacf9",
"name": "パターン1: 静的ドキュメント表示",
"info": "",
"x": 180,
"y": 540,
"wires": []
},
{
"id": "ebe7dc4c54c38776",
"type": "ui-markdown",
"z": "289c4fb42bfdacf9",
"group": "sample_ui_group_markdown",
"name": "操作説明",
"order": 1,
"width": 0,
"height": 0,
"content": "## 📖 操作説明\n\n### 基本操作\n1. **開始ボタン**をクリックして処理を開始\n2. ステータスを確認\n3. 完了後、**停止ボタン**で終了\n\n### 注意事項\n- 処理中は画面を閉じないでください\n- エラー時は管理者に連絡\n\n---\n*詳細は[マニュアル](https://example.com)を参照*",
"className": "",
"x": 130,
"y": 580,
"wires": [
[]
]
},
{
"id": "dc8e3ab53f9fa6d5",
"type": "comment",
"z": "289c4fb42bfdacf9",
"name": "パターン2: 動的レポート生成",
"info": "",
"x": 170,
"y": 640,
"wires": []
},
{
"id": "3ddf9ce3aa2880c8",
"type": "inject",
"z": "289c4fb42bfdacf9",
"name": "センサーデータ",
"props": [
{
"p": "payload.temperature",
"v": "25.5",
"vt": "num"
},
{
"p": "payload.humidity",
"v": "60",
"vt": "num"
},
{
"p": "payload.timestamp",
"v": "",
"vt": "date"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"x": 140,
"y": 680,
"wires": [
[
"d16f4b82d6161953"
]
]
},
{
"id": "d16f4b82d6161953",
"type": "ui-markdown",
"z": "289c4fb42bfdacf9",
"group": "sample_ui_group_markdown",
"name": "センサーレポート",
"order": 2,
"width": 0,
"height": 0,
"content": "## 📊 センサーレポート\n\n| 項目 | 値 |\n|------|----|\n| 🌡️ 温度 | **{{ msg?.payload?.temperature || '--' }}** ℃ |\n| 💧 湿度 | **{{ msg?.payload?.humidity || '--' }}** % |\n\n---\n\n*最終更新: {{ msg?.payload?.timestamp || '取得中...' }}*",
"className": "",
"x": 380,
"y": 680,
"wires": [
[]
]
},
{
"id": "83cc66b8b8f069e7",
"type": "comment",
"z": "289c4fb42bfdacf9",
"name": "パターン3: Mermaidチャート表示",
"info": "",
"x": 180,
"y": 740,
"wires": []
},
{
"id": "86dc89394e7a12aa",
"type": "ui-markdown",
"z": "289c4fb42bfdacf9",
"group": "sample_ui_group_markdown",
"name": "システム構成図",
"order": 3,
"width": 0,
"height": 0,
"content": "## 🔧 システム構成図\n\n```mermaid\ngraph TD;\n A[センサー] --> B[Node-RED];\n B --> C[Dashboard];\n B --> D[データベース];\n C --> E[ユーザー];\n```",
"className": "",
"x": 150,
"y": 780,
"wires": [
[]
]
},
{
"id": "3d78ef1f081d306c",
"type": "comment",
"z": "289c4fb42bfdacf9",
"name": "━━━ 🔔 ui-notification サンプル ━━━",
"info": "",
"x": 190,
"y": 860,
"wires": []
},
{
"id": "2d48715fd01e8025",
"type": "comment",
"z": "289c4fb42bfdacf9",
"name": "パターン1: シンプルな通知",
"info": "",
"x": 160,
"y": 900,
"wires": []
},
{
"id": "b8e4a95adb057146",
"type": "inject",
"z": "289c4fb42bfdacf9",
"name": "完了通知",
"props": [
{
"p": "payload"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "処理が完了しました",
"payloadType": "str",
"x": 130,
"y": 940,
"wires": [
[
"e36825aeb356a81a"
]
]
},
{
"id": "e36825aeb356a81a",
"type": "ui-notification",
"z": "289c4fb42bfdacf9",
"ui": "6692685697ac2af1",
"position": "top right",
"colorDefault": true,
"color": "#000000",
"displayTime": "3",
"showCountdown": true,
"outputs": 1,
"allowDismiss": true,
"dismissText": "OK",
"allowConfirm": false,
"confirmText": "",
"raw": false,
"className": "",
"name": "シンプル通知",
"x": 350,
"y": 940,
"wires": [
[]
]
},
{
"id": "c2bcf1928674b982",
"type": "comment",
"z": "289c4fb42bfdacf9",
"name": "パターン2: HTMLを含むリッチ通知",
"info": "",
"x": 180,
"y": 1000,
"wires": []
},
{
"id": "fb417647e0580698",
"type": "inject",
"z": "289c4fb42bfdacf9",
"name": "警告データ",
"props": [
{
"p": "payload",
"v": "85",
"vt": "num"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"x": 130,
"y": 1040,
"wires": [
[
"a74fa659a6bdb19c"
]
]
},
{
"id": "a74fa659a6bdb19c",
"type": "function",
"z": "289c4fb42bfdacf9",
"name": "HTML生成",
"func": "msg.payload = `\n⚠️ 警告\nセンサー値が閾値を超えました\n現在値: ${msg.payload}℃\n`;\nreturn msg;",
"outputs": 1,
"timeout": 0,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 290,
"y": 1040,
"wires": [
[
"313db1b819a9b152"
]
]
},
{
"id": "313db1b819a9b152",
"type": "ui-notification",
"z": "289c4fb42bfdacf9",
"ui": "6692685697ac2af1",
"position": "top center",
"colorDefault": false,
"color": "#ff9800",
"displayTime": "5",
"showCountdown": true,
"outputs": 1,
"allowDismiss": true,
"dismissText": "閉じる",
"allowConfirm": false,
"confirmText": "",
"raw": true,
"className": "",
"name": "リッチ通知",
"x": 470,
"y": 1040,
"wires": [
[]
]
},
{
"id": "3e84d02bf90fc690",
"type": "comment",
"z": "289c4fb42bfdacf9",
"name": "パターン3: 確認ダイアログと結果の処理分岐",
"info": "",
"x": 210,
"y": 1100,
"wires": []
},
{
"id": "89633e5bf0977894",
"type": "inject",
"z": "289c4fb42bfdacf9",
"name": "確認要求",
"props": [
{
"p": "payload"
},
{
"p": "ui_update",
"v": "{\"allowConfirm\":true,\"confirmText\":\"実行\",\"allowDismiss\":true,\"dismissText\":\"キャンセル\",\"displayTime\":0,\"position\":\"center center\",\"color\":\"#2196f3\"}",
"vt": "json"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "この操作を実行しますか?",
"payloadType": "str",
"x": 130,
"y": 1140,
"wires": [
[
"4441429339a04176"
]
]
},
{
"id": "4441429339a04176",
"type": "ui-notification",
"z": "289c4fb42bfdacf9",
"ui": "6692685697ac2af1",
"position": "center center",
"colorDefault": false,
"color": "#2196f3",
"displayTime": "0",
"showCountdown": false,
"outputs": 1,
"allowDismiss": true,
"dismissText": "キャンセル",
"allowConfirm": true,
"confirmText": "実行",
"raw": false,
"className": "",
"name": "確認ダイアログ",
"x": 360,
"y": 1140,
"wires": [
[
"pattern3_switch"
]
]
},
{
"id": "pattern3_switch",
"type": "switch",
"z": "289c4fb42bfdacf9",
"name": "実行/キャンセル判定",
"property": "payload",
"propertyType": "msg",
"rules": [
{
"t": "eq",
"v": "実行",
"vt": "str"
},
{
"t": "eq",
"v": "キャンセル",
"vt": "str"
}
],
"checkall": "false",
"repair": false,
"outputs": 2,
"x": 570,
"y": 1140,
"wires": [
[
"pattern3_debug_exec"
],
[
"pattern3_debug_cancel"
]
]
},
{
"id": "pattern3_debug_exec",
"type": "debug",
"z": "289c4fb42bfdacf9",
"name": "実行処理",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": true,
"complete": "payload",
"targetType": "msg",
"statusVal": "'実行されました'",
"statusType": "jsonata",
"x": 770,
"y": 1120,
"wires": []
},
{
"id": "pattern3_debug_cancel",
"type": "debug",
"z": "289c4fb42bfdacf9",
"name": "キャンセル処理",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": true,
"complete": "payload",
"targetType": "msg",
"statusVal": "'キャンセルされました'",
"statusType": "jsonata",
"x": 780,
"y": 1160,
"wires": []
},
{
"id": "5f776d012acd26d3",
"type": "comment",
"z": "289c4fb42bfdacf9",
"name": "パターン4: 全クライアントへの一斉通知",
"info": "",
"x": 200,
"y": 1200,
"wires": []
},
{
"id": "faf9ea5cbf24b8b9",
"type": "inject",
"z": "289c4fb42bfdacf9",
"name": "緊急通知",
"props": [
{
"p": "payload"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "🚨 システムメンテナンスを開始します",
"payloadType": "str",
"x": 130,
"y": 1240,
"wires": [
[
"220bb51fa0b8dd39"
]
]
},
{
"id": "220bb51fa0b8dd39",
"type": "change",
"z": "289c4fb42bfdacf9",
"name": "_client削除",
"rules": [
{
"t": "delete",
"p": "_client",
"pt": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 310,
"y": 1240,
"wires": [
[
"2929a71cada84ecd"
]
]
},
{
"id": "2929a71cada84ecd",
"type": "ui-notification",
"z": "289c4fb42bfdacf9",
"ui": "6692685697ac2af1",
"position": "top center",
"colorDefault": false,
"color": "#f44336",
"displayTime": "10",
"showCountdown": true,
"outputs": 1,
"allowDismiss": true,
"dismissText": "確認",
"allowConfirm": false,
"confirmText": "",
"raw": false,
"className": "",
"name": "全員通知",
"x": 490,
"y": 1240,
"wires": [
[]
]
},
{
"id": "3511b9fdece8deef",
"type": "comment",
"z": "289c4fb42bfdacf9",
"name": "━━━ 🔊 ui-audio サンプル(⚠️音が鳴ります)━━━",
"info": "",
"x": 170,
"y": 1320,
"wires": []
},
{
"id": "00e5d1548bef800c",
"type": "comment",
"z": "289c4fb42bfdacf9",
"name": "パターン1: BGM再生(Audio Player)",
"info": "",
"x": 190,
"y": 1360,
"wires": []
},
{
"id": "audio_reset_inject",
"type": "inject",
"z": "289c4fb42bfdacf9",
"name": "起動時リセット",
"props": [
{
"p": "playback",
"v": "stop",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": true,
"onceDelay": 0.5,
"topic": "",
"x": 140,
"y": 1400,
"wires": [
[
"e403d7f609744706"
]
]
},
{
"id": "7330d4e44b92a815",
"type": "inject",
"z": "289c4fb42bfdacf9",
"name": "URL設定",
"props": [
{
"p": "payload"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3",
"payloadType": "str",
"x": 110,
"y": 1440,
"wires": [
[
"e403d7f609744706"
]
]
},
{
"id": "e403d7f609744706",
"type": "ui-audio",
"z": "289c4fb42bfdacf9",
"group": "sample_ui_group_audio",
"name": "Audio Player",
"order": 1,
"width": 0,
"height": 0,
"mode": "src",
"voice": "",
"src": "",
"autoplay": false,
"loop": false,
"muted": false,
"className": "",
"x": 330,
"y": 1420,
"wires": [
[]
]
},
{
"id": "da23772057ce8f26",
"type": "comment",
"z": "289c4fb42bfdacf9",
"name": "パターン2: アラート音声(TTS)",
"info": "",
"x": 170,
"y": 1500,
"wires": []
},
{
"id": "0a0e894c02267584",
"type": "inject",
"z": "289c4fb42bfdacf9",
"name": "温度データ",
"props": [
{
"p": "payload.temperature",
"v": "85",
"vt": "num"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"x": 130,
"y": 1540,
"wires": [
[
"85188f3a9cd9d566"
]
]
},
{
"id": "85188f3a9cd9d566",
"type": "function",
"z": "289c4fb42bfdacf9",
"name": "閾値判定",
"func": "if (msg.payload.temperature > 80) {\n msg.payload = {\n text: \"警告!温度が80度を超えました\",\n rate: 1.2,\n volume: 100\n };\n return msg;\n}\nreturn null;",
"outputs": 1,
"timeout": 0,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 300,
"y": 1540,
"wires": [
[
"935347c615c04902"
]
]
},
{
"id": "935347c615c04902",
"type": "ui-audio",
"z": "289c4fb42bfdacf9",
"group": "",
"ui": "6692685697ac2af1",
"name": "TTS",
"order": "",
"width": "",
"height": "",
"mode": "tts",
"voice": "urn:moz-tts:osx:com.apple.voice.compact.ja-JP.Kyoko",
"src": "",
"autoplay": false,
"loop": false,
"muted": false,
"className": "",
"x": 470,
"y": 1540,
"wires": [
[]
]
},
{
"id": "e534c25ce7de35f9",
"type": "comment",
"z": "289c4fb42bfdacf9",
"name": "パターン3: 多言語音声案内",
"info": "",
"x": 160,
"y": 1600,
"wires": []
},
{
"id": "8101307a1fecb87c",
"type": "inject",
"z": "289c4fb42bfdacf9",
"name": "日本語",
"props": [
{
"p": "payload",
"v": "{\"text\":\"ようこそ、ダッシュボードへ\",\"lang\":\"ja-JP\"}",
"vt": "json"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"x": 120,
"y": 1640,
"wires": [
[
"176c70581fe252da"
]
]
},
{
"id": "e7fbfe3e98ddb96b",
"type": "inject",
"z": "289c4fb42bfdacf9",
"name": "英語",
"props": [
{
"p": "payload",
"v": "{\"text\":\"Welcome to the dashboard\",\"lang\":\"en-US\"}",
"vt": "json"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"x": 110,
"y": 1680,
"wires": [
[
"176c70581fe252da"
]
]
},
{
"id": "176c70581fe252da",
"type": "ui-audio",
"z": "289c4fb42bfdacf9",
"group": "",
"ui": "6692685697ac2af1",
"name": "多言語TTS",
"order": "",
"width": "",
"height": "",
"mode": "tts",
"voice": "",
"src": "",
"autoplay": false,
"loop": false,
"muted": false,
"className": "",
"x": 290,
"y": 1660,
"wires": [
[]
]
},
{
"id": "sample_ui_group_text",
"type": "ui-group",
"name": "📝 テキスト表示",
"page": "sample_ui_page",
"width": "6",
"height": "-1",
"order": 1,
"showTitle": true,
"className": "",
"visible": true,
"disabled": false,
"groupType": "default"
},
{
"id": "sample_ui_group_markdown",
"type": "ui-group",
"name": "📰 Markdown表示",
"page": "sample_ui_page",
"width": "6",
"height": "-1",
"order": 2,
"showTitle": true,
"className": "",
"visible": true,
"disabled": false,
"groupType": "default"
},
{
"id": "6692685697ac2af1",
"type": "ui-base",
"name": "My Dashboard",
"path": "/dashboard",
"appIcon": "",
"includeClientData": true,
"acceptsClientConfig": [
"ui-notification",
"ui-control"
],
"showPathInSidebar": false,
"headerContent": "page",
"navigationStyle": "default",
"titleBarStyle": "default",
"showPageTitle": true,
"showReconnectNotification": true,
"notificationDisplayTime": 1,
"showDisconnectNotification": true,
"allowInstall": false
},
{
"id": "sample_ui_group_audio",
"type": "ui-group",
"name": "🔊 オーディオ(⚠️音が鳴ります)",
"page": "sample_ui_page",
"width": "6",
"height": "-1",
"order": 3,
"showTitle": true,
"className": "",
"visible": true,
"disabled": false,
"groupType": "default"
},
{
"id": "sample_ui_page",
"type": "ui-page",
"name": "表示系サンプル",
"ui": "6692685697ac2af1",
"path": "/display-widgets",
"icon": "mdi-monitor",
"layout": "grid",
"theme": "sample_ui_theme",
"breakpoints": [
{
"name": "Default",
"px": 0,
"cols": 3
},
{
"name": "Tablet",
"px": 576,
"cols": 6
},
{
"name": "Small Desktop",
"px": 768,
"cols": 9
},
{
"name": "Desktop",
"px": 1024,
"cols": 12
}
],
"order": 1,
"className": "",
"visible": "true",
"disabled": "false"
},
{
"id": "sample_ui_theme",
"type": "ui-theme",
"name": "Default Theme",
"colors": {
"surface": "#ffffff",
"primary": "#b92d5d",
"bgPage": "#eeeeee",
"groupBg": "#ffffff",
"groupOutline": "#cccccc"
},
"sizes": {
"pagePadding": "12px",
"groupGap": "12px",
"groupBorderRadius": "4px",
"widgetGap": "12px",
"density": "default"
}
},
{
"id": "b39caf71bb018d4b",
"type": "global-config",
"env": [],
"modules": {
"@flowfuse/node-red-dashboard": "1.29.0"
}
}
]