{"id":14272,"date":"2020-03-23T20:33:59","date_gmt":"2020-03-23T19:33:59","guid":{"rendered":"http:\/\/blog.wenzlaff.de\/?p=14272"},"modified":"2020-03-23T20:42:28","modified_gmt":"2020-03-23T19:42:28","slug":"node-red-organisieren-mit-link-in-bzw-link-out-am-beispiel-covid-19-dashboard","status":"publish","type":"post","link":"http:\/\/blog.wenzlaff.de\/?p=14272","title":{"rendered":"Node-Red organisieren mit link-in bzw. link-out am Beispiel: Covid-19 Dashboard"},"content":{"rendered":"<p>Wie k\u00f6nnen die Flows in NodeRED organisiert werden? Damit ein Flow nicht \u00fcberladen wird und auch um die GUI von der Logik zu trennen (MVC, Model View Controller Konzept) k\u00f6nnen die <strong>link-in<\/strong> bzw. <strong>link-out<\/strong> Nodes verwendet werden. Das sind diese:<\/p>\n<p><a href=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/03\/link-in-out.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/03\/link-in-out.png\" alt=\"\" width=\"306\" height=\"176\" class=\"aligncenter size-full wp-image-14273\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/03\/link-in-out.png 306w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/03\/link-in-out-300x173.png 300w\" sizes=\"auto, (max-width: 306px) 100vw, 306px\" \/><\/a><\/p>\n<p>Die <strong>link-out<\/strong> Nodes werden in den Quell Flow integriert, z.B.<br \/>\n<a href=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/03\/Bildschirmfoto-2020-03-23-um-20.27.09.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/03\/Bildschirmfoto-2020-03-23-um-20.27.09.png\" alt=\"\" width=\"1074\" height=\"356\" class=\"aligncenter size-full wp-image-14274\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/03\/Bildschirmfoto-2020-03-23-um-20.27.09.png 1074w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/03\/Bildschirmfoto-2020-03-23-um-20.27.09-300x99.png 300w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/03\/Bildschirmfoto-2020-03-23-um-20.27.09-1024x339.png 1024w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/03\/Bildschirmfoto-2020-03-23-um-20.27.09-768x255.png 768w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><\/p>\n<p>Und in den neuen Ziel Flow die <strong>link-in<\/strong>:<\/p>\n<p><a href=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/03\/Bildschirmfoto-2020-03-23-um-20.26.57.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/03\/Bildschirmfoto-2020-03-23-um-20.26.57.png\" alt=\"\" width=\"1212\" height=\"880\" class=\"aligncenter size-full wp-image-14275\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/03\/Bildschirmfoto-2020-03-23-um-20.26.57.png 1212w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/03\/Bildschirmfoto-2020-03-23-um-20.26.57-300x218.png 300w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/03\/Bildschirmfoto-2020-03-23-um-20.26.57-1024x743.png 1024w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/03\/Bildschirmfoto-2020-03-23-um-20.26.57-768x558.png 768w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><\/p>\n<p>Schon haben wir ein Dashboard:<\/p>\n<p><a href=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/03\/covid-19-dashboard.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/03\/covid-19-dashboard.png\" alt=\"\" width=\"1252\" height=\"1490\" class=\"aligncenter size-full wp-image-14276\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/03\/covid-19-dashboard.png 1252w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/03\/covid-19-dashboard-252x300.png 252w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/03\/covid-19-dashboard-860x1024.png 860w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/03\/covid-19-dashboard-768x914.png 768w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><br \/>\n<!--more--><\/p>\n<p>Hier der Code des Covid-19 Dashboards:<\/p>\n<pre class=\"lang:default decode:true \" >[\r\n    {\r\n        \"id\": \"e5fe4838.e62b68\",\r\n        \"type\": \"tab\",\r\n        \"label\": \"Corona Dashboard\",\r\n        \"disabled\": false,\r\n        \"info\": \"\"\r\n    },\r\n    {\r\n        \"id\": \"61f1bbef.1e19bc\",\r\n        \"type\": \"ui_gauge\",\r\n        \"z\": \"e5fe4838.e62b68\",\r\n        \"name\": \"Best\u00e4tigt\",\r\n        \"group\": \"9a7db4b9.81f32\",\r\n        \"order\": 0,\r\n        \"width\": 0,\r\n        \"height\": 0,\r\n        \"gtype\": \"gage\",\r\n        \"title\": \"Best\u00e4tigt\",\r\n        \"label\": \"Personen\",\r\n        \"format\": \"{{msg.payload | number:0}}\",\r\n        \"min\": 0,\r\n        \"max\": \"50000\",\r\n        \"colors\": [\r\n            \"#e5e500\",\r\n            \"#e6e600\",\r\n            \"#e5e500\"\r\n        ],\r\n        \"seg1\": \"\",\r\n        \"seg2\": \"\",\r\n        \"x\": 680,\r\n        \"y\": 160,\r\n        \"wires\": []\r\n    },\r\n    {\r\n        \"id\": \"c44c7747.fd9098\",\r\n        \"type\": \"function\",\r\n        \"z\": \"e5fe4838.e62b68\",\r\n        \"name\": \"Wert ermitteln\",\r\n        \"func\": \"\/\/ Hier das gew\u00fcnschte Land angeben\\nvar land = \\\"Germany\\\"\\n\\n\/\/ Suche den Index des Land\\nfor (var i = 0; i &lt; msg.payload.length; i++){\\n    if (msg.payload[i].countryRegion == land ){\\n        land = i\\n        break\\n    }\\n}        \\n\\nvar anzahl = msg.payload[land].confirmed\\n\\nmsg.payload = anzahl\\n\\nreturn msg;\",\r\n        \"outputs\": 1,\r\n        \"noerr\": 0,\r\n        \"x\": 500,\r\n        \"y\": 160,\r\n        \"wires\": [\r\n            [\r\n                \"61f1bbef.1e19bc\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"78c20335.cf2564\",\r\n        \"type\": \"ui_gauge\",\r\n        \"z\": \"e5fe4838.e62b68\",\r\n        \"name\": \"Gestorben\",\r\n        \"group\": \"9a7db4b9.81f32\",\r\n        \"order\": 0,\r\n        \"width\": 0,\r\n        \"height\": 0,\r\n        \"gtype\": \"gage\",\r\n        \"title\": \"Gestorben\",\r\n        \"label\": \"Personen\",\r\n        \"format\": \"{{msg.payload | number:0}}\",\r\n        \"min\": 0,\r\n        \"max\": \"500\",\r\n        \"colors\": [\r\n            \"#ff4f3e\",\r\n            \"#ff4c36\",\r\n            \"#ff493f\"\r\n        ],\r\n        \"seg1\": \"\",\r\n        \"seg2\": \"\",\r\n        \"x\": 690,\r\n        \"y\": 200,\r\n        \"wires\": []\r\n    },\r\n    {\r\n        \"id\": \"4e48b5ce.a13d24\",\r\n        \"type\": \"function\",\r\n        \"z\": \"e5fe4838.e62b68\",\r\n        \"name\": \"Wert ermitteln\",\r\n        \"func\": \"\/\/ Hier das gew\u00fcnschte Land angeben\\nvar land = \\\"Germany\\\"\\n\\n\/\/ Suche den Index des Land\\nfor (var i = 0; i &lt; msg.payload.length; i++){\\n    if (msg.payload[i].countryRegion == land ){\\n        land = i\\n        break\\n    }\\n}        \\n\\nvar anzahl = msg.payload[land].deaths\\n\\nmsg.payload = anzahl\\n\\nreturn msg;\",\r\n        \"outputs\": 1,\r\n        \"noerr\": 0,\r\n        \"x\": 500,\r\n        \"y\": 200,\r\n        \"wires\": [\r\n            [\r\n                \"78c20335.cf2564\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"3b13ce0b.da418a\",\r\n        \"type\": \"ui_gauge\",\r\n        \"z\": \"e5fe4838.e62b68\",\r\n        \"name\": \"Genesen\",\r\n        \"group\": \"9a7db4b9.81f32\",\r\n        \"order\": 0,\r\n        \"width\": 0,\r\n        \"height\": 0,\r\n        \"gtype\": \"gage\",\r\n        \"title\": \"Genesen\",\r\n        \"label\": \"Personen\",\r\n        \"format\": \"{{msg.payload | number:0}}\",\r\n        \"min\": 0,\r\n        \"max\": \"500\",\r\n        \"colors\": [\r\n            \"#46b22a\",\r\n            \"#45b22a\",\r\n            \"#45b22a\"\r\n        ],\r\n        \"seg1\": \"\",\r\n        \"seg2\": \"\",\r\n        \"x\": 680,\r\n        \"y\": 240,\r\n        \"wires\": []\r\n    },\r\n    {\r\n        \"id\": \"42b25b9.3a079a4\",\r\n        \"type\": \"function\",\r\n        \"z\": \"e5fe4838.e62b68\",\r\n        \"name\": \"Wert ermitteln\",\r\n        \"func\": \"\/\/ Hier das gew\u00fcnschte Land angeben\\nvar land = \\\"Germany\\\"\\n\\n\/\/ Suche den Index des Land\\nfor (var i = 0; i &lt; msg.payload.length; i++){\\n    if (msg.payload[i].countryRegion == land ){\\n        land = i\\n        break\\n    }\\n}        \\n\\nvar anzahl = msg.payload[land].recovered\\n\\nmsg.payload = anzahl\\n\\nreturn msg;\",\r\n        \"outputs\": 1,\r\n        \"noerr\": 0,\r\n        \"x\": 500,\r\n        \"y\": 240,\r\n        \"wires\": [\r\n            [\r\n                \"3b13ce0b.da418a\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"ab1d62f3.d098f8\",\r\n        \"type\": \"link in\",\r\n        \"z\": \"e5fe4838.e62b68\",\r\n        \"name\": \"Corona Dashboard\",\r\n        \"links\": [\r\n            \"ca102a5a.f531e\",\r\n            \"fa301f7e.a515e8\"\r\n        ],\r\n        \"x\": 275,\r\n        \"y\": 200,\r\n        \"wires\": [\r\n            [\r\n                \"c44c7747.fd9098\",\r\n                \"4e48b5ce.a13d24\",\r\n                \"42b25b9.3a079a4\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"53442036.3b67b8\",\r\n        \"type\": \"comment\",\r\n        \"z\": \"e5fe4838.e62b68\",\r\n        \"name\": \"www.wenzlaff.info\",\r\n        \"info\": \"\",\r\n        \"x\": 710,\r\n        \"y\": 80,\r\n        \"wires\": []\r\n    },\r\n    {\r\n        \"id\": \"3fca9c6d.9cd794\",\r\n        \"type\": \"link in\",\r\n        \"z\": \"e5fe4838.e62b68\",\r\n        \"name\": \"\",\r\n        \"links\": [\r\n            \"fa301f7e.a515e8\"\r\n        ],\r\n        \"x\": 275,\r\n        \"y\": 380,\r\n        \"wires\": [\r\n            [\r\n                \"fd2d76fa.0bb928\",\r\n                \"86e1a9de.f78a8\",\r\n                \"7f0f952f.fb10c4\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"747550fc.314aa8\",\r\n        \"type\": \"ui_gauge\",\r\n        \"z\": \"e5fe4838.e62b68\",\r\n        \"name\": \"Best\u00e4tigt\",\r\n        \"group\": \"24fb8d4d.6a1dba\",\r\n        \"order\": 0,\r\n        \"width\": 0,\r\n        \"height\": 0,\r\n        \"gtype\": \"gage\",\r\n        \"title\": \"Best\u00e4tigt\",\r\n        \"label\": \"Personen\",\r\n        \"format\": \"{{msg.payload | number:0}}\",\r\n        \"min\": 0,\r\n        \"max\": \"500000\",\r\n        \"colors\": [\r\n            \"#e5e500\",\r\n            \"#e6e600\",\r\n            \"#e5e500\"\r\n        ],\r\n        \"seg1\": \"\",\r\n        \"seg2\": \"\",\r\n        \"x\": 680,\r\n        \"y\": 340,\r\n        \"wires\": []\r\n    },\r\n    {\r\n        \"id\": \"fd2d76fa.0bb928\",\r\n        \"type\": \"function\",\r\n        \"z\": \"e5fe4838.e62b68\",\r\n        \"name\": \"Wert ermitteln\",\r\n        \"func\": \"var anzahl = msg.payload.confirmed.value\\n\\nmsg.payload = anzahl\\n\\nreturn msg;\",\r\n        \"outputs\": 1,\r\n        \"noerr\": 0,\r\n        \"x\": 500,\r\n        \"y\": 340,\r\n        \"wires\": [\r\n            [\r\n                \"747550fc.314aa8\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"68266eb.034aa1\",\r\n        \"type\": \"ui_gauge\",\r\n        \"z\": \"e5fe4838.e62b68\",\r\n        \"name\": \"Gestorben\",\r\n        \"group\": \"24fb8d4d.6a1dba\",\r\n        \"order\": 0,\r\n        \"width\": 0,\r\n        \"height\": 0,\r\n        \"gtype\": \"gage\",\r\n        \"title\": \"Gestorben\",\r\n        \"label\": \"Personen\",\r\n        \"format\": \"{{msg.payload | number:0}}\",\r\n        \"min\": 0,\r\n        \"max\": \"50000\",\r\n        \"colors\": [\r\n            \"#ff4f3e\",\r\n            \"#ff4c36\",\r\n            \"#ff493f\"\r\n        ],\r\n        \"seg1\": \"\",\r\n        \"seg2\": \"\",\r\n        \"x\": 690,\r\n        \"y\": 380,\r\n        \"wires\": []\r\n    },\r\n    {\r\n        \"id\": \"86e1a9de.f78a8\",\r\n        \"type\": \"function\",\r\n        \"z\": \"e5fe4838.e62b68\",\r\n        \"name\": \"Wert ermitteln\",\r\n        \"func\": \"var anzahl = msg.payload.deaths.value\\n\\nmsg.payload = anzahl\\n\\nreturn msg;\",\r\n        \"outputs\": 1,\r\n        \"noerr\": 0,\r\n        \"x\": 500,\r\n        \"y\": 380,\r\n        \"wires\": [\r\n            [\r\n                \"68266eb.034aa1\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"f3857e2c.676af8\",\r\n        \"type\": \"ui_gauge\",\r\n        \"z\": \"e5fe4838.e62b68\",\r\n        \"name\": \"Genesen\",\r\n        \"group\": \"24fb8d4d.6a1dba\",\r\n        \"order\": 0,\r\n        \"width\": 0,\r\n        \"height\": 0,\r\n        \"gtype\": \"gage\",\r\n        \"title\": \"Genesen\",\r\n        \"label\": \"Personen\",\r\n        \"format\": \"{{msg.payload | number:0}}\",\r\n        \"min\": 0,\r\n        \"max\": \"500000\",\r\n        \"colors\": [\r\n            \"#46b22a\",\r\n            \"#e6e600\",\r\n            \"#ca3838\"\r\n        ],\r\n        \"seg1\": \"\",\r\n        \"seg2\": \"\",\r\n        \"x\": 680,\r\n        \"y\": 420,\r\n        \"wires\": []\r\n    },\r\n    {\r\n        \"id\": \"7f0f952f.fb10c4\",\r\n        \"type\": \"function\",\r\n        \"z\": \"e5fe4838.e62b68\",\r\n        \"name\": \"Wert ermitteln\",\r\n        \"func\": \"var anzahl = msg.payload.recovered.value\\n\\nmsg.payload = anzahl\\n\\nreturn msg;\",\r\n        \"outputs\": 1,\r\n        \"noerr\": 0,\r\n        \"x\": 500,\r\n        \"y\": 420,\r\n        \"wires\": [\r\n            [\r\n                \"f3857e2c.676af8\"\r\n            ]\r\n        ]\r\n    },\r\n    {\r\n        \"id\": \"b4c4712e.2309a8\",\r\n        \"type\": \"comment\",\r\n        \"z\": \"e5fe4838.e62b68\",\r\n        \"name\": \"Covid-19 Dashboard\",\r\n        \"info\": \"\",\r\n        \"x\": 510,\r\n        \"y\": 80,\r\n        \"wires\": []\r\n    },\r\n    {\r\n        \"id\": \"9a7db4b9.81f32\",\r\n        \"type\": \"ui_group\",\r\n        \"z\": \"\",\r\n        \"name\": \"Covid-19 in Deutschland\",\r\n        \"tab\": \"9f205757.68494\",\r\n        \"disp\": true,\r\n        \"width\": \"6\",\r\n        \"collapse\": false\r\n    },\r\n    {\r\n        \"id\": \"24fb8d4d.6a1dba\",\r\n        \"type\": \"ui_group\",\r\n        \"z\": \"\",\r\n        \"name\": \"Covid-19 Weltweit\",\r\n        \"tab\": \"9f205757.68494\",\r\n        \"disp\": true,\r\n        \"width\": \"6\",\r\n        \"collapse\": false\r\n    },\r\n    {\r\n        \"id\": \"9f205757.68494\",\r\n        \"type\": \"ui_tab\",\r\n        \"z\": \"\",\r\n        \"name\": \"wenzlaff.de\",\r\n        \"icon\": \"dashboard\",\r\n        \"disabled\": false,\r\n        \"hidden\": false\r\n    }\r\n]<\/pre>\n<p>Bleib Gesund!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wie k\u00f6nnen die Flows in NodeRED organisiert werden? Damit ein Flow nicht \u00fcberladen wird und auch um die GUI von der Logik zu trennen (MVC, Model View Controller Konzept) k\u00f6nnen die link-in bzw. link-out Nodes verwendet werden. Das sind diese: Die link-out Nodes werden in den Quell Flow integriert, z.B. Und in den neuen Ziel &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/blog.wenzlaff.de\/?p=14272\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eNode-Red organisieren mit link-in bzw. link-out am Beispiel: Covid-19 Dashboard\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[220,2520,79,2713],"tags":[3925,3930,3947,252,2516,680,2824,282],"class_list":["post-14272","post","type-post","status-publish","format-standard","hentry","category-anleitung","category-node-red","category-programmierung","category-statistik","tag-corona","tag-covid-19","tag-covid-19-dashboard","tag-dashboard","tag-flow","tag-gui","tag-nodered","tag-virus"],"_links":{"self":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/14272","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=14272"}],"version-history":[{"count":0,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/14272\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=14272"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=14272"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=14272"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}