HiAndy,
unfortunately I haven't got your example working yet.
But I tested to transfer the entire content from Node-red directly to the chart, it worked.
It would work if my values (come from an SQL database) are only transferred to the chart once every minute.
that worked so far.
Only the old data would have to be deleted before the arrival of new data.
there is currently still my problem.
This is what my attempt looks like at the moment.
Anything else, what program do you work with to create the pages?
greetings Chris
Node-red:
[{"id":"d59fc4d9.664b58","type":"tab","label":"Flow 1","disabled":false,"info":""},{"id":"93a1270b.4e2a68","type":"inject","z":"d59fc4d9.664b58","name":"repeat every 10s","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":160,"y":240,"wires":[["9466ca1.384d038"]]},{"id":"fcfe28f1.29b228","type":"debug","z":"d59fc4d9.664b58","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":950,"y":320,"wires":[]},{"id":"482c5a4f.9e97e4","type":"debug","z":"d59fc4d9.664b58","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":930,"y":360,"wires":[]},{"id":"be814071.4e2f4","type":"comment","z":"d59fc4d9.664b58","name":"html","info":"copy the following and paste into `index.html`\n\n```html\n<!doctype html><html lang=\"en\"><head>\n <meta charset=\"utf-8\">\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n <meta name=\"viewport\" content=\"width=device-width, minimum-scale=1, initial-scale=1, user-scalable=yes\">\n\n <title>Chartkick/VueJS Example - Node-RED UI Builder</title>\n <meta name=\"description\" content=\"Node-RED UI Builder - Chartkick/VueJS Example\">\n\n <link rel=\"icon\" href=\"./images/node-blue.ico\">\n\n <link type=\"text/css\" rel=\"stylesheet\" href=\"../uibuilder/vendor/bootstrap/dist/css/bootstrap.min.css\" />\n <link type=\"text/css\" rel=\"stylesheet\" href=\"../uibuilder/vendor/bootstrap-vue/dist/bootstrap-vue.css\" />\n\n <link rel=\"stylesheet\" href=\"./index.css\" media=\"all\">\n</head><body>\n <div id=\"app\">\n <b-container id=\"app_container\">\n\n <h1>\n Example of using <a href=\"https://chartkick.com/vue\" target=\"_blank\">Vue Chartkick</a>\n with uibuilder, VueJS and bootstrap-vue\n </h1>\n\n <b-row>\n <b-card cols=\"5\" class=\"mr-1\" header=\"Bar Chart\" border-variant=\"primary\" header-bg-variant=\"primary\" header-text-variant=\"white\" align=\"center\">\n <column-chart :data=\"[['Sun', 32], ['Mon', 46], ['Tue', 28]]\"></column-chart>\n </b-card>\n\n <b-card class=\"mr-1\" header=\"Line Chart\" border-variant=\"primary\" header-bg-variant=\"primary\" header-text-variant=\"white\" align=\"center\">\n <line-chart :data=\"lineChartData\"></line-chart>\n </b-card>\n\n <b-card class=\"mr-1\" header=\"Multi-Series Line Chart\" border-variant=\"primary\" header-bg-variant=\"primary\" header-text-variant=\"white\" align=\"center\">\n <line-chart :data=\"lineChartData2\"></line-chart>\n </b-card>\n\n <b-card class=\"w-100 mt-3 mb-3\" header=\"Area Chart\" border-variant=\"primary\" header-bg-variant=\"primary\" header-text-variant=\"white\" align=\"center\">\n <area-chart :data=\"areaChartData\"></area-chart>\n </b-card>\n\n <b-card class=\"mr-1\" header=\"Geo Chart (Google)\" border-variant=\"primary\" header-bg-variant=\"primary\" header-text-variant=\"white\" align=\"center\">\n <geo-chart width=\"800px\" :data=\"[['United States', 44], ['Germany', 23], ['Brazil', 22]]\"></geo-chart>\n </b-card>\n\n <b-card class=\"mr-1\" header=\"Timeline (Google)\" border-variant=\"primary\" header-bg-variant=\"primary\" header-text-variant=\"white\" align=\"center\">\n <timeline width=\"800px\" :data=\"[['Washington', '1789-04-29', '1797-03-03'], ['Adams', '1797-03-03', '1801-03-03']]\"></timeline>\n </b-card>\n\n </b-row>\n\n </b-container>\n </div>\n\n <script src=\"../uibuilder/vendor/socket.io/socket.io.js\"></script>\n <script src=\"../uibuilder/vendor/vue/dist/vue.min.js\"></script>\n <script src=\"../uibuilder/vendor/bootstrap-vue/dist/bootstrap-vue.js\"></script>\n\n <!-- Loading from CDN, use uibuilder to install packages and change to vendor links -->\n <script src=\"https://unpkg.com/chart.js@2.8.0/dist/Chart.bundle.js\"></script> <!-- Chart.js -->\n <script src=\"https://www.gstatic.com/charts/loader.js\"></script> <!-- Google Charts -->\n <!-- <script src=\"https://code.highcharts.com/highcharts.js\"></script> HighCharts -->\n <script src=\"https://unpkg.com/vue-chartkick@0.5.1\"></script>\n\n <script src=\"./uibuilderfe.min.js\"></script> <!-- //prod version -->\n <script src=\"./index.js\"></script>\n\n</body></html>\n```","x":590,"y":440,"wires":[]},{"id":"fb09f259.9acb","type":"comment","z":"d59fc4d9.664b58","name":"JavaScript","info":"Copy the following and paste into `index.js`\n\n```javascript\n/* jshint browser: true, esversion: 5 */\n/* globals document,Vue,window,uibuilder */\n// @ts-nocheck\n/*\n Copyright (c) 2019 Julian Knight (Totally Information)\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n*/\n'use strict'\n\n/** @see https://github.com/TotallyInformation/node-red-contrib-uibuilder/wiki/Front-End-Library---available-properties-and-methods */\n\n// eslint-disable-next-line no-unused-vars\nvar app1 = new Vue({\n el: '#app',\n data: {\n // Single series line chart\n lineChartData: [\n ['Jan', 4], ['Feb', 2], ['Mar', 10], ['Apr', 5], ['May', 3],\n ],\n // Multi-series line chart\n lineChartData2: [\n {name: 'Workout', data: {'2017-01-01 00:00:00 -0800': 3, '2017-01-02 00:00:00 -0800': 4}},\n {name: 'Call parents', data: {'2017-01-01 00:00:00 -0800': 5, '2017-01-02 00:00:00 -0800': 3}},\n ],\n\n // Area chart\n areaChartData: [], //{\n //'2017-01-01 00:00:00 -0800': 2,\n //'2017-01-01 00:01:00 -0800': 5,\n //},\n\n }, // --- End of data --- //\n computed: {\n }, // --- End of computed --- //\n methods: {\n }, // --- End of methods --- //\n\n // Available hooks: init,mounted,updated,destroyed\n mounted: function(){\n /** **REQUIRED** Start uibuilder comms with Node-RED @since v2.0.0-dev3\n * Pass the namespace and ioPath variables if hosting page is not in the instance root folder\n * e.g. If you get continual `uibuilderfe:ioSetup: SOCKET CONNECT ERROR` error messages.\n * e.g. uibuilder.start('/nr/uib', '/nr/uibuilder/vendor/socket.io') // change to use your paths/names\n */\n uibuilder.start()\n\n var vueApp = this\n\n // Process new messages from Node-RED\n uibuilder.onChange('msg', function (newVal) {\n // We are assuming that msg.payload is an array like [datenum, value]\n\n // Add new element\n vueApp.areaChartData.push( new Array( (new Date(newVal.payload[0])), newVal.payload[1] ) )\n\n // If data array > 1000 points, keep it at that length by losing the first point\n if ( vueApp.areaChartData.length > 1000 ) vueApp.areaChartData.shift()\n\n //console.log(vueApp.areaChartData)\n })\n\n } // --- End of mounted hook --- //\n\n}) // --- End of app1 --- //\n\n// EOF\n```\n","x":760,"y":440,"wires":[]},{"id":"e4372d1a.78ebc","type":"debug","z":"d59fc4d9.664b58","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":870,"y":200,"wires":[]},{"id":"e5a1045f.45eae8","type":"function","z":"d59fc4d9.664b58","name":"","func":"\nmsg.payload=[\n{ \"name\": \"Line1\", \"data\": [[ msg.datetime, 25 ], [ msg.datetime+1,33 ], [ msg.datetime+2, 66]] }, \n{ \"name\": \"Line2\", \"data\": [[ msg.datetime, 45 ], [ msg.datetime+1, 55 ], [ msg.datetime+2, 26]] },\n{ \"name\": \"Line3\", \"data\": [[ msg.datetime, 85 ], [ msg.datetime+1, 85 ], [ msg.datetime+2, 86]] } \n\n\n\n]\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":630,"y":180,"wires":[["e4372d1a.78ebc","d3ac5c72.33bda"]]},{"id":"d3ac5c72.33bda","type":"uibuilder","z":"d59fc4d9.664b58","name":"","topic":"","url":"ChartControl","fwdInMessages":false,"allowScripts":false,"allowStyles":false,"copyIndex":true,"showfolder":false,"x":760,"y":340,"wires":[["fcfe28f1.29b228"],["482c5a4f.9e97e4"]]},{"id":"9466ca1.384d038","type":"moment","z":"d59fc4d9.664b58","name":"","topic":"","input":"","inputType":"date","inTz":"Europe/Berlin","adjAmount":0,"adjType":"days","adjDir":"add","format":"YYYY-MM-DD HH:mm:ss","locale":"en_US","output":"datetime","outputType":"msg","outTz":"Europe/Berlin","x":400,"y":200,"wires":[["e5a1045f.45eae8"]]}]
html:
<!doctype html><html lang="en"><head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, minimum-scale=1, initial-scale=1, user-scalable=yes">
<title>Chartkick/VueJS Example - Node-RED UI Builder</title>
<meta name="description" content="Node-RED UI Builder - Chartkick/VueJS Example">
<link rel="icon" href="./images/node-blue.ico">
<link type="text/css" rel="stylesheet" href="../uibuilder/vendor/bootstrap/dist/css/bootstrap.min.css" />
<link type="text/css" rel="stylesheet" href="../uibuilder/vendor/bootstrap-vue/dist/bootstrap-vue.css" />
<link rel="stylesheet" href="./index.css" media="all">
</head><body>
<div id="app">
<b-container id="app_container">
<h1>
Example of using <a href="https://chartkick.com/vue" target="_blank">Vue Chartkick</a>
with uibuilder, VueJS and bootstrap-vue
</h1>
<b-row>
<b-card class="w-100 mt-3 mb-3" header="Multi-Series Line Chart" border-variant="primary" header-bg-variant="primary" header-text-variant="white" align="center">
<line-chart :data="lineChartData"></line-chart>
</b-card>
</b-row>
</b-container>
<h1>{{lineChartData}}</h1>
</div>
<script src="../uibuilder/vendor/socket.io/socket.io.js"></script>
<script src="../uibuilder/vendor/vue/dist/vue.min.js"></script>
<script src="../uibuilder/vendor/bootstrap-vue/dist/bootstrap-vue.js"></script>
<!-- Loading from CDN, use uibuilder to install packages and change to vendor links -->
<script src="https://unpkg.com/chart.js@2.8.0/dist/Chart.bundle.js"></script> <!-- Chart.js -->
<script src="https://www.gstatic.com/charts/loader.js"></script> <!-- Google Charts -->
<!-- <script src="https://code.highcharts.com/highcharts.js"></script> HighCharts -->
<script src="https://unpkg.com/vue-chartkick@0.5.1"></script>
<script src="./uibuilderfe.min.js"></script> <!-- //prod version -->
<script src="./index.js"></script>
</body></html>
index.js
/* globals document,Vue,window,uibuilder */
'use strict';
/** @see https://github.com/TotallyInformation/node-red-contrib-uibuilder/wiki/Front-End-Library---available-properties-and-methods */
// eslint-disable-next-line no-unused-vars
var app1 = new Vue({
lineChartData:"",
el: '#app',
data: {
lineChartData: []
}, // --- End of data --- //
computed: {
}, // --- End of computed --- //
methods: {
}, // --- End of methods --- //
// Available hooks: init,mounted,updated,destroyed
mounted: function(){
uibuilder.start();
var vueApp = this;
// Process new messages from Node-RED
uibuilder.onChange('msg', function (newVal) {
vueApp.lineChartData.push(newVal.payload[0],newVal.payload[1],newVal.payload[2]);
// if ( vueApp.areaChartData.length > 2 ) vueApp.areaChartData.remove();
});
} // --- End of mounted hook --- //
}); // --- End of app1 --- //;
// EOF