[RELEASE] Watchtower long-term metrics app

No, the graph_xyz files are not created or managed by Watchtower.

Updated my 8-Pro hub to 2.5.0.136 and I'm now getting this error from watchtower 4.2


FYI.

A general interest script:

I'm using WatchTower for a graph of air pressure data from 5 sources. Normally, the graph lines are between about 990 hPa and 1030 hPa. Occasionally, one of the sources goes off-line, and the AP values for that device are 0. That causes the graph to expand its scale to be 0 to 1200, compressing the non-zero values to a nearly straight line (the values of the sensors typically differ by only 2-3 hPa when online).

I had a script that colored each data line. Below is an augmented version of that script that ChatGPT generated to ignore values below a “Minimum plausible pressure value“.

// Minimum plausible pressure value.
// Any value below this will be treated as bad/offline data and not graphed.
const MIN_VALID_PRESSURE_HPA = 100;

// false = show gaps where readings were bad/offline
// true  = connect the line across missing readings
const CONNECT_ACROSS_BAD_VALUES = false;

$config.data.datasets[0].borderColor = '#00FF00';
$config.data.datasets[0].backgroundColor = 'transparent';

$config.data.datasets[1].borderColor = '#FF0000';
$config.data.datasets[1].backgroundColor = 'transparent';

$config.data.datasets[2].borderColor = '#FF00FF';
$config.data.datasets[2].backgroundColor = 'transparent';

$config.data.datasets[3].borderColor = '#0000FF';
$config.data.datasets[3].backgroundColor = 'transparent';

$config.data.datasets[4].borderColor = '#000000';
$config.data.datasets[4].backgroundColor = 'transparent';

//$config.data.datasets[5].borderColor = '#000000';
//$config.data.datasets[5].backgroundColor = 'transparent';

$config.options.scales.y.title.text = 'Pressure (hPa)';

// Example to suggest limits; actual bad/offline values are removed below
$config.options.scales.y.suggestedMin = 990;
$config.options.scales.y.suggestedMax = 1030;

$config.data.datasets[0].label = 'Garage Pressure';
$config.data.datasets[0].unit = ' hPa';
$config.data.datasets[1].label = 'Office Pressure';
$config.data.datasets[1].unit = ' hPa';
$config.data.datasets[2].label = 'Air Things Pressure';
$config.data.datasets[2].unit = ' hPa';
$config.data.datasets[3].label = 'AWS Pressure';
$config.data.datasets[3].unit = ' hPa';
$config.data.datasets[4].label = 'Average Pressure';
$config.data.datasets[4].unit = ' hPa';
//$config.data.datasets[5].label = 'Average';
//$config.data.datasets[5].unit = ' hPa';


// Null out implausibly low pressure values so they do not affect graph scaling.
$config.data.datasets.forEach(function(ds) {
    if (!ds || !Array.isArray(ds.data)) return;

    ds.data = ds.data.map(function(p) {
        // Case 1: simple numeric data array
        // Example: [1013.2, 1013.4, 25.5, 1013.1]
        if (typeof p === 'number') {
            return p < MIN_VALID_PRESSURE_HPA ? null : p;
        }

        // Case 2: numeric values stored as strings
        if (typeof p === 'string') {
            var n = Number(p);
            return n < MIN_VALID_PRESSURE_HPA ? null : p;
        }

        // Case 3: Chart.js object points
        // Example: [{x: time, y: 1013.2}, {x: time, y: 25.5}]
        if (p && typeof p === 'object' && 'y' in p) {
            var yNum = Number(p.y);
            if (yNum < MIN_VALID_PRESSURE_HPA) {
                return Object.assign({}, p, { y: null });
            }
        }

        return p;
    });

    ds.spanGaps = CONNECT_ACROSS_BAD_VALUES;
});

Have been wanting to use straight line segments between points, instead of the interpolated lines.

Google Search AI gave me this configuration:

$config.options.elements = {
line: {
cubicInterpolationMode: 'monotone'
}
};

Works great....

Anyone else notice that the tool-tip in weekly view shows the wrong date/time range?


The 5 minute graph is also incorrect. The end time appears correct or close, but the start time is 55 minutes too early.

getting an error in logs and the db size is not changing how to fix?

removed and will not reinsall from package manager clicker on it does nothing

this is all that shows in the logs..

**app:398**2026-09-08 11:38:57.322 am

debug

prefInstallRepositorySearchResults

**app:398**2026-09-08 11:38:51.273 am

debug

prefInstallRepositorySearch

**app:398**2026-09-08 11:38:48.071 am

debug

how do i manually install it

prefPkgInstall

Feature request (or guidance if it is already possible)

Delete events?
Two use cases:
1- Entered with a typo, incorrect timestamp, or incorrect category and need to delete and correct
2- migrated a hub and may want to delete all history (Although, I am thinking of keeping it regardless)