V10 (Battery %) uploads accepted but not stored/displayed

Hi all,

I’m seeing an issue where extended data v10 (Battery %) is uploaded successfully, but is never stored or displayed in Data View or Extended Data charts.

Details:
• Username: helvsmit
• System ID: 58119
• Account: Donator (active until 2026)
• Upload method: HomeyScript via API
• Example POST body sent to /service/r2/addstatus.jsp:

d=20250814&t=20:35&v2=1234&v4=567&v6=230.1&v5=21.1&v7=50&v10=100

What I see:
• API response is always “OK”
• v5 and v7 values are stored and displayed correctly
• v10 is configured in Settings → Systems → Extended Data as:
• Label: Battery %
• Units: %
• Decimals: 0
• Low: 0 / High: 100
• Axis: Right Axis (Bottom)
• Display: On
• However, v10 never appears in Data View or Extended Data graphs.

code:

// HomeyScript — PVOutput upload (no tariffs), includes v10 Battery %
// REDACTED placeholders: <API_KEY>, <SYSTEM_ID>, <SIG_DEVICE_ID>, <NETATMO_DEVICE_ID>

const apiKey = ‘<API_KEY>’; // e.g. xxxxxxxxxxxxxxxxx
const systemId = ‘<SYSTEM_ID>’; // e.g. 58119

// Devices
const sig = await Homey.devices.getDevice({ id: ‘<SIG_DEVICE_ID>’ });
const netatmo = await Homey.devices.getDevice({ id: ‘<NETATMO_DEVICE_ID>’ });

// Readings
const v2 = Math.round(sig.capabilitiesObj[‘measure_power.pv’].value); // W
const v4 = Math.round(sig.capabilitiesObj[‘measure_power.consumed’].value); // W
const v6raw = sig.capabilitiesObj[‘measure_voltage.phase1’].value;
const v6 = typeof v6raw === ‘number’ ? v6raw.toFixed(1) : ‘0’;

// Optional env from Netatmo
let v5 = null;
const tRaw = netatmo.capabilitiesObj[‘measure_temperature’].value;
if (typeof tRaw === ‘number’ && isFinite(tRaw) && tRaw > 0) v5 = parseFloat(tRaw.toFixed(1));

let v7 = null;
const hRaw = netatmo.capabilitiesObj[‘measure_humidity’].value;
if (typeof hRaw === ‘number’ && isFinite(hRaw)) v7 = Math.round(hRaw);

// Battery SoC → v10
let v10 = null;
const socRaw = sig.capabilitiesObj[‘measure_battery’]?.value; // 0–100 %
if (typeof socRaw === ‘number’ && isFinite(socRaw)) v10 = Math.max(0, Math.min(100, Math.round(socRaw)));

// NL time (Europe/Amsterdam) → yyyyMMdd + HH:mm
const now = new Date();
const d = new Intl.DateTimeFormat(‘en-CA’, { timeZone: ‘Europe/Amsterdam’ }).format(now).replace(/-/g, ‘’);
const t = new Intl.DateTimeFormat(‘en-GB’, { timeZone: ‘Europe/Amsterdam’, hour: ‘2-digit’, minute: ‘2-digit’ })
.format(now);

// Build body (no v8/v9)
let body = d=${d}&t=${t}&v2=${v2}&v4=${v4}&v6=${v6};
if (typeof v5 === ‘number’) body += &v5=${v5};
if (typeof v7 === ‘number’) body += &v7=${v7};
if (typeof v10 === ‘number’) body += &v10=${v10};

// Send + log response
console.log(‘Upload body ->’, body);

const resp = await fetch(‘https://pvoutput.org/service/r2/addstatus.jsp’, {
method: ‘POST’,
headers: {
‘X-Pvoutput-Apikey’: apiKey,
‘X-Pvoutput-SystemId’: systemId,
‘Content-Type’: ‘application/x-www-form-urlencoded’,
},
body
});

const text = await resp.text();
console.log(‘PVOutput response ->’, resp.status, text);
if (!text.startsWith(‘OK’)) throw new Error(PVOutput error: ${text});

return OK ${t} v2=${v2}W v4=${v4}W v5=${v5}°C v6=${v6}V v7=${v7}% v10=${v10}%;

Could this be an API/DB-side issue specific to v10, or is there any other requirement for storing this value?

Thanks in advance for helping.

Ab Helversteijn-Smit

The data is there, click on the Extended Data (5th) square below the graph to switch to the Extended Data view.

That is the thing, I can’t find anything about Extended data… yes… sorry I do see it now :grin::

Where can I find raw data ? is it possible to find this somewhere?

Hi @helvsmit

You need to select the rightmost coloured square in order to display your extended data. It’s a PINK coloured square on my computer. Hovering your mouse over the icons will explain what each does.

Grannos

1 Like

If you’re logged on, click “Download” below the graph retrieve the 5-minute v1 to v12 data in csv format for the current date.