[Release] Quick Chart - Chart your data, quickly and easily

From the first post in this thread:
When reporting problems...

  • Turn on debug and screenshot the issue happening in the log. One line or just the error doesn't cut it. I need a log.
  • Post the screenshot of the log with an explanation of the problem.

Hoping someone can help..trying to graph water usage...I'm using the file to store data..i started high (7000 points) ...got an error too many data points (700)...so I made less (350)...got error 325 was too large (made it 300) ...got error

300 doesn't seem like a lot... am I doing something wrong?

Probably not doing anything wrong. This is a limit imposed by the Quick Chart API, so it is what it is. Hopefully you can find a smaller data set to chart.

thanks for the quick response... do u know what the limit is ?

Not off hand. Quick search didn't turn up anything. Probably buried somehwere here.

1 Like

Many thanks to the community members who provided QuickCharts! Nice looking charts with minimal fuss!

I did not find a getting-started synopsis. These are the basic steps that I used to get started:

  1. Use HPM to download the app code to the Hubitat.
  2. From the Apps page, select Install User App. Choose QuickChart.
  3. When you initially run QuickChart, you will see two choices: Add a chart child, and Add a data collector child. The data collector child is optional, but it provides more control over which data points get charted. Creating a chart child is required per chart.
  4. The purpose of a data collector child is to write data points from one or more devices to a designated text file. I uploaded a blank text file with the corresponding name using file manager (I did this because I read that others had some difficulty in creating the file automatically, but later discovered that the upload was not needed.) Select real-time as the collection interval, unless you ONLY want data saved periodically.
  5. The purpose of a chart child is to generate a device that contains a chart. The generated device will use the Quick Chart Driver. Select the chart child to configure the chart.
  6. I provided my user credentials to setup both the collector child and chart child.
  7. Note that there is 256 data point max per chart that is enforced by the chart rendering backend. As an example of how to avoid going over the max: for a five series chart, I set the max data points per series in the collector child to be 51.
7 Likes

Hi, new poster. Been using Quickchart to map out temps of sensors across my house and wanted to capture runtime of my zwave thermostat. I had to modify the following function to add the thermostatOperatingState case. Its working so far. Thought i'd share.

def attributesHandler(theAttr) {
attr = theAttr.toString().replace("[","").replace("]","")
switch (attr) {
case "acceleration":
statusOptions = ["active", "inactive)"]
break;
case "contact":
statusOptions = ["open", "closed"]
break;
case "lock":
statusOptions = ["locked", "unlocked"]
break;
case "motion":
statusOptions = ["active","inactive"]
break;
case "presence":
statusOptions = ["present","not present"]
break;
case "switch":
statusOptions = ["on","off"]
break;
case "valve":
statusOptions = ["open","closed"]
break;
case "water":
statusOptions = ["wet","dry"]
break;
case "thermostatOperatingState":
statusOptions = ["idle","heating","cooling"]
break;
}
if(statusOptions == null) {
state.message = "Attribute not supported (yet). Please let BPTWorld know what type of duration device you want to chart."
} else {
state.message = ""
}
return statusOptions
}

Hi, I have a single line chart that is temperate sensor data from 5 sensors I have on my 2nd floor of my house. I routinely get the error "too many data points" but the thing is if I break up the chart into 2 it really limits its usefulness.

So just checking but do null values count as data points? My log here is mostly nulls. I guess bc for that timestamp one of the other sensors doesnt have a data point?

app:52024-01-01 10:44:40.087 AMdebugbuilderChart = {type:'line',data:{datasets:[{label:'Valentina Closet Sensor',data:[67, 68, 67, 67, 67, 67, 66, 67, 68, 67, 68, 68, 67, 68, 68, 67, 68, 68, 68, 67, 68, 68, 68, 69, 69, 68, 69, 70, 70, 69, 70, 71, 71, 72, 73, 74, 73, 74, 74, 73, 74, 73, 73, 73, 72, 72, 72, 71, 72, 71]},{label:'Valentina bedroom sensor',data:[null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 68, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 70, 70, 71, 71, 71, 70, 70, 69, 69, 69, 69, 69, 68, 68, 67, 68, 68, 68, 68, 68, 69, 69, 69, 70, 70, 70, 70, 70, 69, 69, 68, 68, 67, 66, 66, 67, 66, 66, 66]},{label:'Master Bath sensor',data:[null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 64, 64, 64, 64, 64, 63, 63, 64, 63, 64, 64, 64, 64, 65, 65, 65, 65, 66, 66, 66, 67, 67, 68, 68, 68, 67, 68, 67, 67, 66, 66, 67, 66, 66, 66, 66, 65, 65, 66, 66, 66, 67, 67, 68, 68, 69, 70, 70, 70, 68]},{label:'Master Temp Sensor',data:[null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 67, 67, 67, 67, 67, 67, 67, 68, 68, 68, 68, 68, 68, 69, 69, 69, 69, 69, 69, 68, 68, 68, 68, 67, 67, 67, 67, 68, 68, 68, 68, 69, 69, 69, 69, 69, 69, 70, 70, 69, 69, 68, 68, 68, 67, 66, 66, 66, 66, 65]},{label:'Joseph sensor',data:[null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 68, 68, 68, 68, 69, 69, 69, 69, 69, 69, 69, 69, 70, 70, 70, 70, 71, 72, 72, 72, 71, 71, 71, 71, 69, 69, 69, 68, 68, 68, 68, 68, 68, 69, 69, 69, 69, 70, 70, 70, 71, 72, 72, 72, 73, 73, 72, 72, 71, 70]}], labels:[new Date('2024-01-01T10:35:49'), new Date('2024-01-01T10:20:53'), new Date('2024-01-01T10:05:49'), new Date('2024-01-01T09:35:50'), new Date('2024-01-01T09:05:50'), new Date('2024-01-01T08:55:54'), new Date('2024-01-01T08:35:51'), new Date('2024-01-01T08:20:55'), new Date('2024-01-01T08:05:51'), new Date('2024-01-01T07:45:55'), new Date('2024-01-01T07:35:51'), new Date('2024-01-01T07:30:55'), new Date('2024-01-01T07:20:55'), new Date('2024-01-01T07:05:51'), new Date('2024-01-01T06:55:55'), new Date('2024-01-01T06:35:52'), new Date('2024-01-01T06:30:56'), new Date('2024-01-01T06:20:56'), new Date('2024-01-01T06:15:56'), new Date('2024-01-01T06:05:52'), new Date('2024-01-01T05:50:56'), new Date('2024-01-01T05:35:52'), new Date('2024-01-01T05:05:53'), new Date('2024-01-01T04:55:56'), new Date('2024-01-01T04:45:57'), new Date('2024-01-01T04:35:53'), new Date('2024-01-01T04:20:57'), new Date('2024-01-01T04:05:53'), new Date('2024-01-01T04:00:57'), new Date('2024-01-01T03:50:57'), new Date('2024-01-01T03:35:54'), new Date('2024-01-01T03:20:57'), new Date('2024-01-01T03:05:54'), new Date('2024-01-01T02:55:58'), new Date('2024-01-01T02:45:58'), new Date('2024-01-01T02:35:54'), new Date('2024-01-01T02:25:58'), new Date('2024-01-01T02:15:58'), new Date('2024-01-01T02:10:58'), new Date('2024-01-01T02:05:55'), new Date('2024-01-01T01:50:58'), new Date('2024-01-01T01:40:59'), new Date('2024-01-01T01:35:55'), new Date('2024-01-01T01:30:59'), new Date('2024-01-01T01:25:59'), new Date('2024-01-01T01:20:59'), new Date('2024-01-01T01:05:55'), new Date('2024-01-01T00:55:59'), new Date('2024-01-01T00:45:59'), new Date('2024-01-01T00:40:59'), new Date('2024-01-01T10:17:13'), new Date('2024-01-01T09:17:14'), new Date('2024-01-01T08:47:14'), new Date('2024-01-01T08:17:14'), new Date('2024-01-01T07:47:14'), new Date('2024-01-01T07:17:14'), new Date('2024-01-01T06:47:14'), new Date('2024-01-01T06:17:14'), new Date('2024-01-01T05:47:14'), new Date('2024-01-01T05:17:15'), new Date('2024-01-01T04:47:15'), new Date('2024-01-01T04:17:15'), new Date('2024-01-01T03:47:15'), new Date('2024-01-01T03:17:15'), new Date('2024-01-01T02:47:15'), new Date('2024-01-01T01:47:16'), new Date('2024-01-01T01:17:16'), new Date('2024-01-01T00:47:16'), new Date('2024-01-01T00:17:16'), new Date('2023-12-31T23:47:16'), new Date('2023-12-31T23:17:16'), new Date('2023-12-31T22:17:17'), new Date('2023-12-31T22:07:21'), new Date('2023-12-31T21:47:17'), new Date('2023-12-31T21:42:21'), new Date('2023-12-31T21:17:17'), new Date('2023-12-31T20:47:17'), new Date('2023-12-31T20:17:17'), new Date('2023-12-31T19:47:18'), new Date('2023-12-31T19:17:18'), new Date('2023-12-31T18:47:18'), new Date('2023-12-31T18:17:18'), new Date('2023-12-31T17:47:18'), new Date('2023-12-31T17:17:18'), new Date('2023-12-31T16:47:19'), new Date('2023-12-31T16:17:19'), new Date('2023-12-31T15:47:19'), new Date('2023-12-31T15:17:19'), new Date('2023-12-31T15:02:23'), new Date('2023-12-31T14:47:19'), new Date('2023-12-31T14:37:23'), new Date('2023-12-31T14:17:21'), new Date('2023-12-31T14:07:23'), new Date('2023-12-31T13:47:19'), new Date('2023-12-31T13:17:20'), new Date('2023-12-31T12:47:20'), new Date('2023-12-31T12:17:20'), new Date('2023-12-31T11:47:20'), new Date('2023-12-31T11:17:20'), new Date('2023-12-31T10:47:20'), new Date('2024-01-01T10:30:10'), new Date('2024-01-01T10:00:11'), new Date('2024-01-01T09:30:12'), new Date('2024-01-01T09:00:12'), new Date('2024-01-01T08:55:13'), new Date('2024-01-01T08:30:13'), new Date('2024-01-01T08:00:14'), new Date('2024-01-01T07:30:14'), new Date('2024-01-01T07:20:15'), new Date('2024-01-01T07:00:14'), new Date('2024-01-01T06:30:15'), new Date('2024-01-01T06:00:15'), new Date('2024-01-01T05:55:16'), new Date('2024-01-01T05:30:16'), new Date('2024-01-01T05:00:16'), new Date('2024-01-01T04:30:17'), new Date('2024-01-01T04:20:18'), new Date('2024-01-01T04:00:18'), new Date('2024-01-01T03:30:18'), new Date('2024-01-01T03:20:19'), new Date('2024-01-01T03:00:19'), new Date('2024-01-01T02:55:19'), new Date('2024-01-01T02:30:19'), new Date('2024-01-01T02:00:20'), new Date('2024-01-01T01:30:20'), new Date('2024-01-01T01:20:21'), new Date('2024-01-01T01:10:21'), new Date('2024-01-01T01:00:21'), new Date('2024-01-01T00:20:24'), new Date('2024-01-01T00:00:22'), new Date('2023-12-31T23:55:22'), new Date('2023-12-31T23:40:23'), new Date('2023-12-31T23:30:22'), new Date('2023-12-31T23:00:23'), new Date('2023-12-31T22:30:24'), new Date('2023-12-31T22:25:24'), new Date('2023-12-31T22:00:25'), new Date('2023-12-31T21:30:25'), new Date('2023-12-31T21:00:25'), new Date('2023-12-31T20:30:26'), new Date('2023-12-31T20:00:26'), new Date('2023-12-31T19:30:27'), new Date('2023-12-31T19:00:28'), new Date('2023-12-31T18:30:28'), new Date('2023-12-31T18:00:29'), new Date('2023-12-31T17:30:30'), new Date('2023-12-31T17:20:30'), new Date('2023-12-31T17:10:31'), new Date('2023-12-31T17:05:31'), new Date('2023-12-31T17:00:30'), new Date('2024-01-01T10:27:02'), new Date('2024-01-01T09:57:02'), new Date('2024-01-01T09:27:03'), new Date('2024-01-01T08:57:03'), new Date('2024-01-01T08:27:04'), new Date('2024-01-01T07:57:04'), new Date('2024-01-01T07:27:05'), new Date('2024-01-01T06:57:05'), new Date('2024-01-01T06:27:05'), new Date('2024-01-01T05:57:06'), new Date('2024-01-01T05:27:06'), new Date('2024-01-01T04:57:06'), new Date('2024-01-01T04:27:07'), new Date('2024-01-01T03:57:07'), new Date('2024-01-01T03:27:08'), new Date('2024-01-01T02:57:08'), new Date('2024-01-01T02:27:08'), new Date('2024-01-01T01:57:09'), new Date('2024-01-01T01:27:09'), new Date('2024-01-01T00:57:09'), new Date('2024-01-01T00:27:10'), new Date('2023-12-31T23:57:10'), new Date('2023-12-31T23:27:10'), new Date('2023-12-31T22:57:11'), new Date('2023-12-31T22:27:11'), new Date('2023-12-31T21:57:12'), new Date('2023-12-31T21:27:12'), new Date('2023-12-31T20:57:12'), new Date('2023-12-31T20:27:13'), new Date('2023-12-31T19:57:13'), new Date('2023-12-31T19:27:14'), new Date('2023-12-31T18:57:14'), new Date('2023-12-31T18:27:15'), new Date('2023-12-31T17:57:15'), new Date('2023-12-31T17:27:16'), new Date('2023-12-31T16:57:16'), new Date('2023-12-31T16:27:16'), new Date('2023-12-31T15:57:17'), new Date('2023-12-31T15:27:17'), new Date('2023-12-31T14:57:17'), new Date('2023-12-31T14:47:22'), new Date('2023-12-31T14:27:18'), new Date('2023-12-31T14:17:22'), new Date('2023-12-31T13:57:18'), new Date('2023-12-31T13:47:23'), new Date('2023-12-31T13:27:19'), new Date('2023-12-31T12:57:20'), new Date('2023-12-31T12:27:20'), new Date('2023-12-31T11:57:20'), new Date('2023-12-31T11:27:21'), new Date('2024-01-01T10:22:22'), new Date('2024-01-01T09:52:23'), new Date('2024-01-01T09:22:23'), new Date('2024-01-01T08:52:23'), new Date('2024-01-01T07:52:25'), new Date('2024-01-01T07:22:25'), new Date('2024-01-01T06:52:26'), new Date('2024-01-01T06:22:26'), new Date('2024-01-01T05:52:27'), new Date('2024-01-01T05:22:28'), new Date('2024-01-01T04:52:28'), new Date('2024-01-01T04:22:29'), new Date('2024-01-01T03:52:29'), new Date('2024-01-01T03:47:34'), new Date('2024-01-01T03:22:30'), new Date('2024-01-01T03:17:34'), new Date('2024-01-01T02:52:30'), new Date('2024-01-01T02:22:32'), new Date('2024-01-01T01:52:32'), new Date('2024-01-01T01:32:36'), new Date('2024-01-01T01:22:32'), new Date('2024-01-01T01:07:37'), new Date('2024-01-01T00:52:33'), new Date('2024-01-01T00:22:33'), new Date('2023-12-31T23:52:34'), new Date('2023-12-31T23:22:35'), new Date('2023-12-31T22:52:36'), new Date('2023-12-31T22:22:37'), new Date('2023-12-31T21:52:36'), new Date('2023-12-31T21:22:37'), new Date('2023-12-31T20:52:38'), new Date('2023-12-31T20:22:38'), new Date('2023-12-31T19:52:39'), new Date('2023-12-31T19:22:40'), new Date('2023-12-31T18:52:40'), new Date('2023-12-31T18:22:41'), new Date('2023-12-31T17:52:41'), new Date('2023-12-31T17:22:42'), new Date('2023-12-31T16:52:42'), new Date('2023-12-31T16:47:47'), new Date('2023-12-31T16:22:43'), new Date('2023-12-31T15:52:43'), new Date('2023-12-31T15:47:48'), new Date('2023-12-31T15:22:44'), new Date('2023-12-31T15:17:48'), new Date('2023-12-31T14:52:45'), new Date('2023-12-31T14:32:49'), new Date('2023-12-31T14:22:45'), new Date('2023-12-31T14:07:50'), new Date('2023-12-31T13:52:46')]},options: {title: {display: true, text: 'Temperature', fontColor: 'White'},legend:{display: true, labels: {boxWidth:40, fontSize:10, fontColor:'White'}},scales: {xAxes: [{display: true, stacked: true, type: 'time', time: {unit: 'minute', displayFormats: {minute: 'ddd hh:mm'}}, ticks: {source:'auto', fontColor: 'White'}, gridLines:{display: false, zeroLineColor: 'White', color: 'White'}}], yAxes: [{display: true, stacked: false, ticks: {min: 60, fontColor: 'White'}, gridLines:{display: true, zeroLineColor: 'White', color: 'White'}}]}}}

app:52024-01-01 10:44:40.065 AMdebugIn eventChartingHandler -- tdata detected as number -- tdata: [date:2023-12-31 13:52:46.262, value:69.91]

app:52024-01-01 10:44:40.062 AMdebugIn eventChartingHandler -- tdata.date = 2023-12-31 13:52:46.262 --

app:52024-01-01 10:44:40.058 AMdebugIn eventChartingHandler -- tdata detected as number -- tdata: [date:2023-12-31 14:07:50.318, value:70.81]

app:52024-01-01 10:44:40.056 AMdebugIn eventChartingHandler -- tdata.date = 2023-12-31 14:07:50.318 --

app:52024-01-01 10:44:40.052 AMdebugIn eventChartingHandler -- tdata detected as number -- tdata: [date:2023-12-31 14:22:45.788, value:71.66]

app:52024-01-01 10:44:40.049 AMdebugIn eventChartingHandler -- tdata.date = 2023-12-31 14:22:45.788 --

app:52024-01-01 10:44:40.046 AMdebugIn eventChartingHandler -- tdata detected as number -- tdata: [date:2023-12-31 14:32:49.899, value:72.43]

app:52024-01-01 10:44:40.043 AMdebugIn eventChartingHandler -- tdata.date = 2023-12-31 14:32:49.899 --

Another thought I had and was peaking at the code for this but was to try and remove duplicates. However if they are just filled with nulls then maybe that doesnt work well.

You can see here that the orange line has like 10 data points with the same value of 69. So if we just got rid of the the middle ones, that would save our precious data points.

The null values are part of formatting the input to the QuickCharts API, for multiple data sets in the chart type you selected. Can't get rid of them, and I don't know that they are the problem anyway.

The duplicative data values (e.g., 69) are something you can try to remove though. If you use a data collector to log to file, you can ignore duplicates by making sure the below option is unchecked:

Hi Justin, before you posted I actually was in the midst of trying that.
I created a collector child. Save data every 30 min on 6 sensors. Even though its collecting them at the same time the second is different so what ends up happening is the last one has all of these null values.

I am not sure they are counting against my total but I guess tomorrow I will find out. I could modify the data collector child to just round to the closest minute so all of my 6 sensors look like they are just a single time, eliminating the nulls.

builderChart = {type:'line',data:{datasets:[{label:'Upstairs Thermostat ',data:[68]},{label:'Master Temp Sensor',data:[null, 66]},{label:'Valentina Closet Sensor',data:[null, null, 68]},{label:'Valentina bedroom sensor',data:[null, null, null, 68]},{label:'Master Bath sensor',data:[null, null, null, null, 64]},{label:'Joseph sensor',data:[null, null, null, null, null, 68]}], labels:[new Date('2024-01-01T21:05:41'), new Date('2024-01-01T21:05:41'), new Date('2024-01-01T21:05:41'), new Date('2024-01-01T21:05:41'), new Date('2024-01-01T21:05:41'), new Date('2024-01-01T21:05:41')]},options: {title: {display: true, text: 'Temperature', fontColor: 'white'},legend:{display: true, labels: {boxWidth:40, fontSize:12, fontColor:'white'}},scales: {xAxes: [{display: true, stacked: true, type: 'time', time: {unit: 'minute', displayFormats: {minute: 'ddd hh:mm'}}, ticks: {source:'auto', fontColor: 'white'}, gridLines:{display: true, zeroLineColor: 'white', color: 'white'}}], yAxes: [{display: true, stacked: false, ticks: {min: 60, fontColor: 'white'}, gridLines:{display: true, zeroLineColor: 'white', color: 'white'}}]}}}

app:362024-01-01 09:15:05.336 PMdebugIn eventChartingHandler -- tdata detected as number -- tdata: [date:2024-01-01 21:05:41.034, value:67.75]

app:362024-01-01 09:15:05.333 PMdebugIn eventChartingHandler -- tdata.date = 2024-01-01 21:05:41.034 --

app:362024-01-01 09:15:05.329 PMdebugIn eventChartingHandler -- tdata detected as number -- tdata: [date:2024-01-01 21:05:41.034, value:64.39]

app:362024-01-01 09:15:05.326 PMdebugIn eventChartingHandler -- tdata.date = 2024-01-01 21:05:41.034 --

app:362024-01-01 09:15:05.319 PMdebugIn eventChartingHandler -- tdata detected as number -- tdata: [date:2024-01-01 21:05:41.034, value:68.27]

app:362024-01-01 09:15:05.317 PMdebugIn eventChartingHandler -- tdata.date = 2024-01-01 21:05:41.034 --

app:362024-01-01 09:15:05.306 PMdebugIn eventChartingHandler -- tdata detected as number -- tdata: [date:2024-01-01 21:05:41.034, value:67.70]

app:362024-01-01 09:15:05.303 PMdebugIn eventChartingHandler -- tdata.date = 2024-01-01 21:05:41.034 --

app:362024-01-01 09:15:05.298 PMdebugIn eventChartingHandler -- tdata detected as number -- tdata: [date:2024-01-01 21:05:41.034, value:66.44]

app:362024-01-01 09:15:05.296 PMdebugIn eventChartingHandler -- tdata.date = 2024-01-01 21:05:41.034 --

app:362024-01-01 09:15:05.291 PMdebugIn eventChartingHandler -- tdata detected as number -- tdata: [date:2024-01-01 21:05:41.034, value:68.0]

app:362024-01-01 09:15:05.289 PMdebugIn eventChartingHandler -- tdata.date = 2024-01-01 21:05:41.034 --

app:362024-01-01 09:15:05.286 PMdebugIn eventChartingHandler -- Building Numerical Chart --

FYI I am working on an improvement that will separate out periodic updates from realtime updates with device attribute values, as well as allowing update at the same time as another chart (to keep the time axes in sync). This will however be a breaking change if you use realtime or device attribute updates, as those will be moving to a different input value. Now would be the time to turn off automatic HPM updates if you want to control when the breaking update is applied.

1 Like

V1.0.0 - separated periodic update from updating with device attribute, so that you can selectively update with either or both options. Also added option to update when another chart updates, e.g., to keep x-axes in sync.

2 Likes

Hi @JustinL ,
As I am using this app for a long time now I would ask to better understand what is being changed before I update using HPM.
I am using this app mainly for creating graphs from attributes gathered by Hubitat Information driver (Hub temp, Free memory and Hub CPU usage).
This data is stored (every 30 minutes or 1 hour) at a file and then presented on the dashboard with the device created by the app.
Will my setup be affected by your changes?

Looking forward to see your improvments to this app. Thansk for stepping in.

Depends on your settings. Will need more info. But it would just be a simple matter of reselecting inputs to get you back to the same point.

1 Like

Hi @JustinL - this app works great, thank you for continuing to update it. I did notice some strange behavior after the 1.0.0 update. My charts no longer show the X-Axis time labels on a dashboard until I go into the app and manually trigger a chart. The top chart I've already manually triggered, the bottom I have not yet. I'll try to upload a picture, but given this is my first post, it is not allowing me to upload any.

Settings for the bottom chart verify that X-Axis is turned on.

Have you adjusted the chart update options on both charts? Because that was one of the biggest changes from the last version. If you don't, then the chart may not update on its own.

Interestingly the chart was updating with values, the X Axis was just not rendering the timestamps. It was showing the larger tick for the day. I ended up changing to values from a file instead of device and that has solved my issues all together.

Great app! Looking a capturing data over a long time period, lets say one data point every day for 256 days (to stay within the 256 points limitation). Is there a way to do that? It seems that the longest sample interval is 3 hours.
Thanks.

Yes that’s possible. Do you care at what time of day the sample is taken?

Yes, it would optimal to be able to set the time, if that’s an option.