diff --git a/mock-api/restServer.ts b/mock-api/restServer.ts index 0ea13ac1c..b2d16edb0 100644 --- a/mock-api/restServer.ts +++ b/mock-api/restServer.ts @@ -116,17 +116,15 @@ let system_status = { let DEV_VERSION_IS_UPGRADEABLE: boolean; let STABLE_VERSION_IS_UPGRADEABLE: boolean; let THIS_VERSION: string; -let version_test: number; - let LATEST_STABLE_VERSION = '3.7.2'; let LATEST_DEV_VERSION = '3.7.3-dev.6'; // scenarios for testing versioning -version_test = 0; // on latest stable, or switch to dev -// version_test = 1; // on latest dev, or switch back to stable -// version_test = 2; // upgrade an older stable to latest stable or switch to latest dev -// version_test = 3; // upgrade dev to latest, or switch to stable -// version_test = 4; // downgrade to an older dev, or switch back to stable +let version_test = 0; // on latest stable, or switch to dev +// let version_test = 1; // on latest dev, or switch back to stable +// let version_test = 2; // upgrade an older stable to latest stable or switch to latest dev +// let version_test = 3; // upgrade dev to latest, or switch to stable +// let version_test = 4; // downgrade to an older dev, or switch back to stable switch (version_test as number) { case 0: @@ -278,10 +276,10 @@ function updateMask(entity: any, de: any, dd: any) { const old_custom_name = dd.nodes[dd_objIndex].cn; console.log( 'comparing names, old (' + - old_custom_name + - ') with new (' + - new_custom_name + - ')' + old_custom_name + + ') with new (' + + new_custom_name + + ')' ); if (old_custom_name !== new_custom_name) { changed = true; @@ -377,15 +375,15 @@ function check_upgrade(version: string) { console.log( 'Upgrade this version (' + - THIS_VERSION + - ') to dev (' + - dev_version + - ') is ' + - (DEV_VERSION_IS_UPGRADEABLE ? 'YES' : 'NO') + - ' and to stable (' + - stable_version + - ') is ' + - (STABLE_VERSION_IS_UPGRADEABLE ? 'YES' : 'NO') + THIS_VERSION + + ') to dev (' + + dev_version + + ') is ' + + (DEV_VERSION_IS_UPGRADEABLE ? 'YES' : 'NO') + + ' and to stable (' + + stable_version + + ') is ' + + (STABLE_VERSION_IS_UPGRADEABLE ? 'YES' : 'NO') ); data = { emsesp_version: THIS_VERSION, @@ -4380,78 +4378,78 @@ router function deviceData(id: number) { if (id == 1) { - return new Response(encoder.encode(emsesp_devicedata_1), { headers }); + return new Response(encoder.encode(emsesp_devicedata_1) as BodyInit, { headers }); } if (id == 2) { - return new Response(encoder.encode(emsesp_devicedata_2), { headers }); + return new Response(encoder.encode(emsesp_devicedata_2) as BodyInit, { headers }); } if (id == 3) { - return new Response(encoder.encode(emsesp_devicedata_3), { headers }); + return new Response(encoder.encode(emsesp_devicedata_3) as BodyInit, { headers }); } if (id == 4) { - return new Response(encoder.encode(emsesp_devicedata_4), { headers }); + return new Response(encoder.encode(emsesp_devicedata_4) as BodyInit, { headers }); } if (id == 5) { - return new Response(encoder.encode(emsesp_devicedata_5), { headers }); + return new Response(encoder.encode(emsesp_devicedata_5) as BodyInit, { headers }); } if (id == 6) { - return new Response(encoder.encode(emsesp_devicedata_6), { headers }); + return new Response(encoder.encode(emsesp_devicedata_6) as BodyInit, { headers }); } if (id == 7) { - return new Response(encoder.encode(emsesp_devicedata_7), { headers }); + return new Response(encoder.encode(emsesp_devicedata_7) as BodyInit, { headers }); } if (id == 8) { // test changing the selected flow temp on a Bosch Compress 7000i AW Heat Pump (Boiler/HP) emsesp_devicedata_8.nodes[4].v = Math.floor(Math.random() * 100); - return new Response(encoder.encode(emsesp_devicedata_8), { headers }); + return new Response(encoder.encode(emsesp_devicedata_8) as BodyInit, { headers }); } if (id == 9) { - return new Response(encoder.encode(emsesp_devicedata_9), { headers }); + return new Response(encoder.encode(emsesp_devicedata_9) as BodyInit, { headers }); } if (id == 10) { - return new Response(encoder.encode(emsesp_devicedata_10), { headers }); + return new Response(encoder.encode(emsesp_devicedata_10) as BodyInit, { headers }); } if (id == 11) { - return new Response(encoder.encode(emsesp_devicedata_11), { headers }); + return new Response(encoder.encode(emsesp_devicedata_11) as BodyInit, { headers }); } if (id == 99) { - return new Response(encoder.encode(emsesp_devicedata_99), { headers }); + return new Response(encoder.encode(emsesp_devicedata_99) as BodyInit, { headers }); } } function deviceEntities(id: number) { if (id == 1) { - return new Response(encoder.encode(emsesp_deviceentities_1), { headers }); + return new Response(encoder.encode(emsesp_deviceentities_1) as BodyInit, { headers }); } if (id == 2) { - return new Response(encoder.encode(emsesp_deviceentities_2), { headers }); + return new Response(encoder.encode(emsesp_deviceentities_2) as BodyInit, { headers }); } if (id == 3) { - return new Response(encoder.encode(emsesp_deviceentities_3), { headers }); + return new Response(encoder.encode(emsesp_deviceentities_3) as BodyInit, { headers }); } if (id == 4) { - return new Response(encoder.encode(emsesp_deviceentities_4), { headers }); + return new Response(encoder.encode(emsesp_deviceentities_4) as BodyInit, { headers }); } if (id == 5) { - return new Response(encoder.encode(emsesp_deviceentities_5), { headers }); + return new Response(encoder.encode(emsesp_deviceentities_5) as BodyInit, { headers }); } if (id == 6) { - return new Response(encoder.encode(emsesp_deviceentities_6), { headers }); + return new Response(encoder.encode(emsesp_deviceentities_6) as BodyInit, { headers }); } if (id == 7) { - return new Response(encoder.encode(emsesp_deviceentities_7), { headers }); + return new Response(encoder.encode(emsesp_deviceentities_7) as BodyInit, { headers }); } if (id == 8) { - return new Response(encoder.encode(emsesp_deviceentities_8), { headers }); + return new Response(encoder.encode(emsesp_deviceentities_8) as BodyInit, { headers }); } if (id == 9) { - return new Response(encoder.encode(emsesp_deviceentities_9), { headers }); + return new Response(encoder.encode(emsesp_deviceentities_9) as BodyInit, { headers }); } if (id == 10) { - return new Response(encoder.encode(emsesp_deviceentities_10), { headers }); + return new Response(encoder.encode(emsesp_deviceentities_10) as BodyInit, { headers }); } // not found, return empty - return new Response(encoder.encode(emsesp_deviceentities_none), { headers }); + return new Response(encoder.encode(emsesp_deviceentities_none) as BodyInit, { headers }); } // prepare dashboard data @@ -4558,65 +4556,61 @@ router } // add temperature sensor data. no command c - let sensor_data: any[] = []; - sensor_data = emsesp_sensordata.ts.map((item, index) => ({ - id: DeviceTypeUniqueID.TEMPERATURESENSOR_UID * 100 + index, - dv: { - id: '00' + item.n, - v: item.t, // value is called t in ts (temperature) - u: item.u - } - })); - dashboard_object = { - id: DeviceTypeUniqueID.TEMPERATURESENSOR_UID, - t: DeviceType.TEMPERATURESENSOR, - nodes: sensor_data - }; - // only add to dashboard if we have values - if ((dashboard_object.nodes ?? []).length > 0) { + if (emsesp_sensordata.ts.length > 0) { + const sensor_data = emsesp_sensordata.ts.map((item, index) => ({ + id: DeviceTypeUniqueID.TEMPERATURESENSOR_UID * 100 + index, + dv: { + id: '00' + item.n, + v: item.t, // value is called t in ts (temperature) + u: item.u + } + })); + dashboard_object = { + id: DeviceTypeUniqueID.TEMPERATURESENSOR_UID, + t: DeviceType.TEMPERATURESENSOR, + nodes: sensor_data + }; dashboard_nodes.push(dashboard_object); } // add analog sensor data. no command c - // remove disabled sensors first (t = 0) - sensor_data = emsesp_sensordata.as.filter((item) => item.t !== 0); - sensor_data = sensor_data.map((item, index) => ({ - id: DeviceTypeUniqueID.ANALOGSENSOR_UID * 100 + index, - dv: { - id: '00' + item.n, - v: item.v, - u: item.u - } - })); - dashboard_object = { - id: DeviceTypeUniqueID.ANALOGSENSOR_UID, - t: DeviceType.ANALOGSENSOR, - nodes: sensor_data - }; - // only add to dashboard if we have values - if ((dashboard_object.nodes ?? []).length > 0) { + // remove disabled sensors first (t = 0) and create data in one pass + const enabledAnalogSensors = emsesp_sensordata.as.filter((item) => item.t !== 0); + if (enabledAnalogSensors.length > 0) { + const sensor_data = enabledAnalogSensors.map((item, index) => ({ + id: DeviceTypeUniqueID.ANALOGSENSOR_UID * 100 + index, + dv: { + id: '00' + item.n, + v: item.v, + u: item.u + } + })); + dashboard_object = { + id: DeviceTypeUniqueID.ANALOGSENSOR_UID, + t: DeviceType.ANALOGSENSOR, + nodes: sensor_data + }; dashboard_nodes.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: '00' + item.name, - v: item.active ? 'on' : 'off', - c: item.name, - l: ['off', 'on'] - } - })); - 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) { + // filter emsesp_schedule with only if it has a name and create data in one pass + const namedSchedules = emsesp_schedule.schedule.filter((item) => item.name); + if (namedSchedules.length > 0) { + const scheduler_data = namedSchedules.map((item, index) => ({ + id: DeviceTypeUniqueID.SCHEDULER_UID * 100 + index, + dv: { + id: '00' + item.name, + v: item.active ? 'on' : 'off', + c: item.name, + l: ['off', 'on'] + } + })); + dashboard_object = { + id: DeviceTypeUniqueID.SCHEDULER_UID, + t: DeviceType.SCHEDULER, + nodes: scheduler_data + }; dashboard_nodes.push(dashboard_object); } } else { @@ -4660,8 +4654,12 @@ router }; // console.log('dashboardData: ', dashboardData); + // Clear references to help with garbage collection + dashboard_nodes = []; + dashboard_object = {}; + // return dashboard_data; // if not using msgpack - return new Response(encoder.encode(dashboardData), { headers }); // msgpack it + return new Response(encoder.encode(dashboardData) as BodyInit, { headers }); // msgpack it }) // Customizations @@ -4852,10 +4850,12 @@ router } else { if (as.deleted) { emsesp_sensordata.as[objIndex].d = true; - var filtered = emsesp_sensordata.as.filter(function (value, index, arr) { - return !value.d; - }); - emsesp_sensordata.as = filtered; + // Remove deleted items in-place to avoid creating new arrays + for (let i = emsesp_sensordata.as.length - 1; i >= 0; i--) { + if (emsesp_sensordata.as[i].d) { + emsesp_sensordata.as.splice(i, 1); + } + } } else { emsesp_sensordata.as[objIndex].n = as.name; emsesp_sensordata.as[objIndex].f = as.factor;