Dashboard data

This commit is contained in:
proddy
2024-10-10 21:22:21 +01:00
parent 03ae9735ef
commit 594a48afed

View File

@@ -58,6 +58,13 @@ const enum DeviceType {
UNKNOWN UNKNOWN
} }
const enum DeviceTypeUniqueID {
SCHEDULER_UID = 96,
ANALOGSENSOR_UID = 97,
TEMPERATURESENSOR_UID = 98,
CUSTOM_UID = 99 // always 99
}
function updateMask(entity: any, de: any, dd: any) { function updateMask(entity: any, de: any, dd: any) {
const current_mask = parseInt(entity.slice(0, 2), 16); const current_mask = parseInt(entity.slice(0, 2), 16);
@@ -833,26 +840,6 @@ const emsesp_coredata = {
] ]
}; };
const emsesp_coredata2 = {
connected: true,
// connected: false,
// devices: []
devices: [
{
id: 4,
t: 6,
tn: 'Thermostat',
b: 'Nefit',
n: 'Moduline 1000',
d: 16,
p: 165,
v: '04.01',
e: 3,
url: 'thermostat'
}
]
};
const emsesp_coredata_custom = { const emsesp_coredata_custom = {
id: 99, id: 99,
t: 4, t: 4,
@@ -3869,7 +3856,7 @@ let emsesp_schedule = {
time: '', time: '',
cmd: 'system/message', cmd: 'system/message',
value: '"hello world"', value: '"hello world"',
name: 'immediate' name: '' // empty
} }
] ]
}; };
@@ -4373,9 +4360,8 @@ router
// add the custom entity data // add the custom entity data
dashboard_object = { dashboard_object = {
id: 99, // unique ID for custom entities id: DeviceTypeUniqueID.CUSTOM_UID, // unique ID for custom entities
n: 'Custom Entities', // this is translated in the C++ code t: DeviceType.CUSTOM,
t: 4, // DeviceType::CUSTOM
nodes: getDashboardEntityData(99) nodes: getDashboardEntityData(99)
}; };
// only add to dashboard if we have values // only add to dashboard if we have values
@@ -4386,17 +4372,16 @@ router
// add temperature sensor data. no command c // add temperature sensor data. no command c
let sensor_data: any[] = []; let sensor_data: any[] = [];
sensor_data = emsesp_sensordata.ts.map((item, index) => ({ sensor_data = emsesp_sensordata.ts.map((item, index) => ({
id: 980 + index, id: DeviceTypeUniqueID.TEMPERATURESENSOR_UID * 100 + index,
dv: { dv: {
id: ' ' + item.n, id: item.n,
v: item.t, // value is called t in ts (temperature) v: item.t, // value is called t in ts (temperature)
u: item.u u: item.u
} }
})); }));
dashboard_object = { dashboard_object = {
id: 98, id: DeviceTypeUniqueID.TEMPERATURESENSOR_UID,
n: 'Temperature Sensors', t: DeviceType.TEMPERATURESENSOR,
t: 1, // DeviceType::TEMPERATURESENSOR
nodes: sensor_data nodes: sensor_data
}; };
// only add to dashboard if we have values // only add to dashboard if we have values
@@ -4408,24 +4393,45 @@ router
// remove disabled sensors first (t = 0) // remove disabled sensors first (t = 0)
sensor_data = emsesp_sensordata.as.filter((item) => item.t !== 0); sensor_data = emsesp_sensordata.as.filter((item) => item.t !== 0);
sensor_data = sensor_data.map((item, index) => ({ sensor_data = sensor_data.map((item, index) => ({
id: 970 + index, id: DeviceTypeUniqueID.ANALOGSENSOR_UID * 100 + index,
dv: { dv: {
id: ' ' + item.n, id: item.n,
v: item.v, v: item.v,
u: item.u u: item.u
} }
})); }));
dashboard_object = { dashboard_object = {
id: 97, id: DeviceTypeUniqueID.ANALOGSENSOR_UID,
n: 'Analog Sensors', t: DeviceType.ANALOGSENSOR,
t: 2, // DeviceType::ANALOGSENSOR
nodes: sensor_data nodes: sensor_data
}; };
// only add to dashboard if we have values // only add to dashboard if we have values
if ((dashboard_object.nodes ?? []).length > 0) { if ((dashboard_object.nodes ?? []).length > 0) {
dashboard_data.push(dashboard_object); dashboard_data.push(dashboard_object);
} }
// add the scheduler data
// filter emsesp_schedule with only if it has a name
let scheduler_data = emsesp_schedule.schedule.filter((item) => item.name);
let scheduler_data2 = scheduler_data.map((item, index) => ({
id: DeviceTypeUniqueID.SCHEDULER_UID * 100 + index,
dv: {
id: item.name,
v: item.active
// u: item.u // don't need uom
}
}));
dashboard_object = {
id: DeviceTypeUniqueID.SCHEDULER_UID,
t: DeviceType.SCHEDULER,
nodes: scheduler_data2
};
// only add to dashboard if we have values
if ((dashboard_object.nodes ?? []).length > 0) {
dashboard_data.push(dashboard_object);
}
//
} else { } else {
// for testing // for testing
// single object // single object
@@ -4443,6 +4449,8 @@ router
console.log('dashboard_data: ', dashboard_data); console.log('dashboard_data: ', dashboard_data);
} }
// console.log('dashboard_data: ', dashboard_data);
// return dashboard_data; // if not using msgpack // return dashboard_data; // if not using msgpack
return new Response(encoder.encode(dashboard_data), { headers }); // msgpack it return new Response(encoder.encode(dashboard_data), { headers }); // msgpack it
}) })
@@ -4490,6 +4498,24 @@ router
// Scheduler // Scheduler
.post(EMSESP_SCHEDULE_ENDPOINT, async (request: any) => { .post(EMSESP_SCHEDULE_ENDPOINT, async (request: any) => {
const content = await request.json(); const content = await request.json();
// check if we're changing active from the Dashboard
if (content.schedule.id === 0) {
console.log(
"Toggle schedule '" +
content.schedule.name +
"' to " +
content.schedule.active
);
// find the schedule in emsesp_schedule via the name and toggle the active
const objIndex = emsesp_schedule.schedule.findIndex(
(obj) => obj.name === content.schedule.name
);
if (objIndex !== -1) {
emsesp_schedule.schedule[objIndex].active = content.schedule.active;
}
return status(200);
}
emsesp_schedule = content; emsesp_schedule = content;
console.log('schedule saved', emsesp_schedule); console.log('schedule saved', emsesp_schedule);
return status(200); return status(200);