[WIP] fix graph bugs
This commit is contained in:
parent
f0e8553c24
commit
4ee1709386
Binary file not shown.
|
@ -9,10 +9,12 @@
|
|||
<TargetFramework>net6.0</TargetFramework>
|
||||
<InvariantGlobalization>true</InvariantGlobalization>
|
||||
<SuppressTrimAnalysisWarnings>false</SuppressTrimAnalysisWarnings>
|
||||
<RootNamespace>$([System.Text.RegularExpressions.Regex]::Match($(MSBuildProjectExtensionsPath), "[/\\]csharp[/\\].*[/\\]obj").ToString().Replace("/",".").Replace("\\",".").Replace(".csharp", $(Company)).Replace(".obj", ""))</RootNamespace>
|
||||
<RootNamespace>Please.reload.the.project.Rider.is.stupid</RootNamespace>
|
||||
<Authors>$(Company) Team</Authors>
|
||||
<!-- <ProjectPath>$([System.Text.RegularExpressions.Regex]::Match($(MSBuildProjectExtensionsPath), "[/\\]csharp[/\\].*[/\\]obj").ToString().Replace("/",".").Replace("\\",".").Replace(".csharp", $(Company)).Replace(".obj", ""))</ProjectPath>-->
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(SolutionDir)' != ''">
|
||||
<RootNamespace>$(Company).$(MSBuildProjectDirectory.Replace($(SolutionDir), "").Replace("/",".").Replace("\","."))</RootNamespace>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
|
@ -42,7 +42,6 @@
|
|||
"react-plotly.js": "^2.6.0",
|
||||
"react-router-dom": "^6.8.0",
|
||||
"react-scripts": "5.0.1",
|
||||
"react-window": "^1.8.9",
|
||||
"reactflow": "^11.5.6",
|
||||
"rxjs": "^7.8.0",
|
||||
"sass": "^1.58.3",
|
||||
|
@ -17199,11 +17198,6 @@
|
|||
"node": ">= 4.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/memoize-one": {
|
||||
"version": "5.2.1",
|
||||
"resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz",
|
||||
"integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q=="
|
||||
},
|
||||
"node_modules/merge-descriptors": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
|
||||
|
@ -20585,22 +20579,6 @@
|
|||
"react-dom": ">=16.13"
|
||||
}
|
||||
},
|
||||
"node_modules/react-window": {
|
||||
"version": "1.8.9",
|
||||
"resolved": "https://registry.npmjs.org/react-window/-/react-window-1.8.9.tgz",
|
||||
"integrity": "sha512-+Eqx/fj1Aa5WnhRfj9dJg4VYATGwIUP2ItwItiJ6zboKWA6EX3lYDAXfGF2hyNqplEprhbtjbipiADEcwQ823Q==",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.0.0",
|
||||
"memoize-one": ">=3.1.1 <6"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">8.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0",
|
||||
"react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/reactflow": {
|
||||
"version": "11.5.6",
|
||||
"resolved": "https://registry.npmjs.org/reactflow/-/reactflow-11.5.6.tgz",
|
||||
|
@ -38023,11 +38001,6 @@
|
|||
"fs-monkey": "^1.0.3"
|
||||
}
|
||||
},
|
||||
"memoize-one": {
|
||||
"version": "5.2.1",
|
||||
"resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz",
|
||||
"integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q=="
|
||||
},
|
||||
"merge-descriptors": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
|
||||
|
@ -40347,15 +40320,6 @@
|
|||
"debounce": "^1.2.1"
|
||||
}
|
||||
},
|
||||
"react-window": {
|
||||
"version": "1.8.9",
|
||||
"resolved": "https://registry.npmjs.org/react-window/-/react-window-1.8.9.tgz",
|
||||
"integrity": "sha512-+Eqx/fj1Aa5WnhRfj9dJg4VYATGwIUP2ItwItiJ6zboKWA6EX3lYDAXfGF2hyNqplEprhbtjbipiADEcwQ823Q==",
|
||||
"requires": {
|
||||
"@babel/runtime": "^7.0.0",
|
||||
"memoize-one": ">=3.1.1 <6"
|
||||
}
|
||||
},
|
||||
"reactflow": {
|
||||
"version": "11.5.6",
|
||||
"resolved": "https://registry.npmjs.org/reactflow/-/reactflow-11.5.6.tgz",
|
||||
|
|
|
@ -37,7 +37,6 @@
|
|||
"react-plotly.js": "^2.6.0",
|
||||
"react-router-dom": "^6.8.0",
|
||||
"react-scripts": "5.0.1",
|
||||
"react-window": "^1.8.9",
|
||||
"reactflow": "^11.5.6",
|
||||
"rxjs": "^7.8.0",
|
||||
"sass": "^1.58.3",
|
||||
|
|
|
@ -1,33 +1,48 @@
|
|||
import { createContext, ReactNode, SetStateAction, useState } from "react";
|
||||
import { TreeElement, ToggleElement } from "../Installations/Log/CheckboxTree";
|
||||
import { createContext, ReactNode, useState } from "react";
|
||||
import { TreeElement } from "../Installations/Log/CheckboxTree";
|
||||
import React from "react";
|
||||
|
||||
interface LogContextProviderProps {
|
||||
toggles: TreeElement[] | null;
|
||||
setToggles: (value: TreeElement[]) => void;
|
||||
checkedToggles: ToggleElement | null;
|
||||
setCheckedToggles: React.Dispatch<SetStateAction<ToggleElement | null>>;
|
||||
checkedToggles: string[];
|
||||
setChecked: (newValue: string) => void;
|
||||
removeChecked: (value: string) => void;
|
||||
}
|
||||
|
||||
export const LogContext = createContext<LogContextProviderProps>({
|
||||
toggles: [],
|
||||
setToggles: () => {},
|
||||
checkedToggles: {},
|
||||
setCheckedToggles: () => {},
|
||||
checkedToggles: [],
|
||||
setChecked: () => {},
|
||||
removeChecked: () => {},
|
||||
});
|
||||
|
||||
const LogContextProvider = ({ children }: { children: ReactNode }) => {
|
||||
const [toggles, setToggles] = useState<TreeElement[] | null>(null);
|
||||
const [checkedToggles, setCheckedToggles] = useState<ToggleElement | null>(
|
||||
null
|
||||
);
|
||||
const [checkedToggles, setCheckedToggles] = useState<string[]>([]);
|
||||
|
||||
const setChecked = (newValue: string) => {
|
||||
if (checkedToggles.length === 5) {
|
||||
const removedChecked = checkedToggles.slice(1);
|
||||
setCheckedToggles([...removedChecked, newValue]);
|
||||
} else {
|
||||
setCheckedToggles([...checkedToggles, newValue]);
|
||||
}
|
||||
};
|
||||
|
||||
const removeChecked = (value: string) => {
|
||||
setCheckedToggles(checkedToggles.filter((toggle) => toggle !== value));
|
||||
};
|
||||
|
||||
return (
|
||||
<LogContext.Provider
|
||||
value={{
|
||||
toggles,
|
||||
setToggles,
|
||||
checkedToggles,
|
||||
setCheckedToggles,
|
||||
setChecked,
|
||||
removeChecked,
|
||||
}}
|
||||
>
|
||||
{children}
|
||||
|
|
|
@ -20,7 +20,8 @@ export interface TreeElement {
|
|||
}
|
||||
|
||||
const CheckboxTree = () => {
|
||||
const { toggles, setCheckedToggles, checkedToggles } = useContext(LogContext);
|
||||
const { toggles, setChecked, checkedToggles, removeChecked } =
|
||||
useContext(LogContext);
|
||||
const routeMatch = useRouteMatch([
|
||||
routes.installations + routes.list + routes.log + ":id",
|
||||
]);
|
||||
|
@ -29,29 +30,17 @@ const CheckboxTree = () => {
|
|||
return element.children.length > 0 ? renderTree(element.children) : null;
|
||||
};
|
||||
|
||||
const handleCheckChildren = (children: TreeElement[], checked?: boolean) => {
|
||||
if (children.length > 0) {
|
||||
children.forEach((child) => {
|
||||
setCheckedToggles((prevState) => {
|
||||
return {
|
||||
...prevState,
|
||||
[child.id]: !checked,
|
||||
};
|
||||
});
|
||||
if (child.children.length > 0) {
|
||||
handleCheckChildren(child.children, checked);
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
const handleClick = (
|
||||
event: React.MouseEvent<HTMLButtonElement, MouseEvent>,
|
||||
element: TreeElement,
|
||||
checked?: boolean
|
||||
checked?: string
|
||||
) => {
|
||||
event.stopPropagation();
|
||||
handleCheckChildren([element], checked);
|
||||
if (checked) {
|
||||
removeChecked(element.id);
|
||||
} else {
|
||||
event.stopPropagation();
|
||||
setChecked(element.id);
|
||||
}
|
||||
};
|
||||
|
||||
const handleExpandClick = (
|
||||
|
@ -62,7 +51,7 @@ const CheckboxTree = () => {
|
|||
|
||||
const renderTree = (data: TreeElement[]): ReactNode => {
|
||||
return data.map((element) => {
|
||||
const checked = checkedToggles?.[element.id];
|
||||
const checked = checkedToggles.find((toggle) => element.id === toggle);
|
||||
const splitName = element.name.split("/");
|
||||
return (
|
||||
<TreeItem
|
||||
|
@ -72,15 +61,17 @@ const CheckboxTree = () => {
|
|||
onClick={handleExpandClick}
|
||||
label={
|
||||
<>
|
||||
<Checkbox
|
||||
checked={checked}
|
||||
onClick={(e) => handleClick(e, element, checked)}
|
||||
/>
|
||||
{element.children.length === 0 && (
|
||||
<Checkbox
|
||||
checked={!!checked}
|
||||
onClick={(e) => handleClick(e, element, checked)}
|
||||
/>
|
||||
)}
|
||||
{splitName[splitName.length - 1]}
|
||||
</>
|
||||
}
|
||||
sx={{
|
||||
".MuiTreeItem-content": { paddingY: "5px" },
|
||||
".MuiTreeItem-content": { paddingY: "5px", minHeight: "52px" },
|
||||
}}
|
||||
>
|
||||
{getNodes(element)}
|
||||
|
|
|
@ -3,7 +3,6 @@ import { DataRecord, RecordSeries } from "../../../dataCache/data";
|
|||
import {
|
||||
GraphData,
|
||||
createTimes,
|
||||
flattenToggles,
|
||||
getTreeElements,
|
||||
isNumeric,
|
||||
parseCsv,
|
||||
|
@ -11,21 +10,13 @@ import {
|
|||
transformToBarGraphData,
|
||||
} from "../../../util/graph.util";
|
||||
import { TimeRange, TimeSpan, UnixTime } from "../../../dataCache/time";
|
||||
import {
|
||||
memo,
|
||||
useCallback,
|
||||
useContext,
|
||||
useEffect,
|
||||
useMemo,
|
||||
useState,
|
||||
} from "react";
|
||||
import { useCallback, useContext, useEffect, useMemo, useState } from "react";
|
||||
import { BehaviorSubject, startWith, throttleTime, withLatestFrom } from "rxjs";
|
||||
import { S3Access } from "../../../dataCache/S3/S3Access";
|
||||
import DataCache, { FetchResult } from "../../../dataCache/dataCache";
|
||||
import { LogContext } from "../../Context/LogContextProvider";
|
||||
import { isDefined } from "../../../dataCache/utils/maybe";
|
||||
import { Data, Layout, PlotRelayoutEvent } from "plotly.js";
|
||||
import { VariableSizeList as List, areEqual } from "react-window";
|
||||
import { AdapterDayjs } from "@mui/x-date-pickers/AdapterDayjs";
|
||||
import { FormattedMessage } from "react-intl";
|
||||
import DateRangePicker from "./DateRangePicker";
|
||||
|
@ -34,462 +25,6 @@ import { Alert } from "@mui/material";
|
|||
|
||||
const NUMBER_OF_NODES = 100;
|
||||
|
||||
export const testData = `/AcDc/SystemControl/Alarms;;
|
||||
/AcDc/SystemControl/CommunicationTimeout;00:00:10;
|
||||
/AcDc/SystemControl/SystemConfig;AcDcAndDcDc;
|
||||
/AcDc/SystemControl/ResetAlarmsAndWarnings;False;
|
||||
/AcDc/SystemControl/TargetSlave;0;
|
||||
/AcDc/SystemControl/UseSlaveIdForAddressing;False;
|
||||
/AcDc/SystemControl/ReferenceFrame;Producer;
|
||||
/AcDc/SystemControl/SlaveErrorHandling;Relaxed;
|
||||
/AcDc/SystemControl/SubSlaveErrorHandling;Strict;
|
||||
/AcDc/SystemControl/PowerSetPointActivation;Immediate;
|
||||
/AcDc/SystemControl/PowerSetPointTrigger;Wait;
|
||||
/AcDc/SystemControl/DeviceState;Operation;
|
||||
/AcDc/SystemControl/NumberOfConnectedSlaves;2;
|
||||
/AcDc/SystemControl/NumberOfConnectedSubSlaves;0;
|
||||
/AcDc/SystemControl/Warnings;;
|
||||
/AcDc/Devices/1/Status/Ac/L1/Voltage;0;V
|
||||
/AcDc/Devices/1/Status/Ac/L1/Current;0;A
|
||||
/AcDc/Devices/1/Status/Ac/L1/Power/Apparent;0;VA
|
||||
/AcDc/Devices/1/Status/Ac/L1/Power/Active;0;W
|
||||
/AcDc/Devices/1/Status/Ac/L1/Power/Reactive;0;var
|
||||
/AcDc/Devices/1/Status/Ac/L1/Power/Phi;0;rad
|
||||
/AcDc/Devices/1/Status/Ac/L1/Power/CosPhi;1;
|
||||
/AcDc/Devices/1/Status/Ac/L2/Voltage;0;V
|
||||
/AcDc/Devices/1/Status/Ac/L2/Current;0;A
|
||||
/AcDc/Devices/1/Status/Ac/L2/Power/Apparent;0;VA
|
||||
/AcDc/Devices/1/Status/Ac/L2/Power/Active;0;W
|
||||
/AcDc/Devices/1/Status/Ac/L2/Power/Reactive;0;var
|
||||
/AcDc/Devices/1/Status/Ac/L2/Power/Phi;0;rad
|
||||
/AcDc/Devices/1/Status/Ac/L2/Power/CosPhi;1;
|
||||
/AcDc/Devices/1/Status/Ac/L3/Voltage;0;V
|
||||
/AcDc/Devices/1/Status/Ac/L3/Current;0;A
|
||||
/AcDc/Devices/1/Status/Ac/L3/Power/Apparent;0;VA
|
||||
/AcDc/Devices/1/Status/Ac/L3/Power/Active;0;W
|
||||
/AcDc/Devices/1/Status/Ac/L3/Power/Reactive;0;var
|
||||
/AcDc/Devices/1/Status/Ac/L3/Power/Phi;0;rad
|
||||
/AcDc/Devices/1/Status/Ac/L3/Power/CosPhi;1;
|
||||
/AcDc/Devices/1/Status/Ac/Power/Apparent;0;VA
|
||||
/AcDc/Devices/1/Status/Ac/Power/Active;0;W
|
||||
/AcDc/Devices/1/Status/Ac/Power/Reactive;0;var
|
||||
/AcDc/Devices/1/Status/Ac/Power/Phi;0;rad
|
||||
/AcDc/Devices/1/Status/Ac/Power/CosPhi;1;
|
||||
/AcDc/Devices/1/Status/Ac/Frequency;0;Hz
|
||||
/AcDc/Devices/1/Status/Dc/Voltage;0;V
|
||||
/AcDc/Devices/1/Status/Dc/Current;0;A
|
||||
/AcDc/Devices/1/Status/Dc/Power;0;W
|
||||
/AcDc/Devices/1/Status/PowerLimitedBy;Nothing;
|
||||
/AcDc/Devices/1/Status/InverterState/Current;Idle;
|
||||
/AcDc/Devices/1/Status/InverterState/OnLastAlarm;Idle;
|
||||
/AcDc/Devices/1/Status/ActiveGridType;GridTied400V50Hz;
|
||||
/AcDc/Devices/1/Status/Voltage/Intern/DcUpperHalf;0;V
|
||||
/AcDc/Devices/1/Status/Voltage/Intern/DcLowerHalf;0;V
|
||||
/AcDc/Devices/1/Status/Voltage/Intern/NToPe;0;V
|
||||
/AcDc/Devices/1/Status/Voltage/Extern/DcUpperHalf;0;V
|
||||
/AcDc/Devices/1/Status/Voltage/Extern/DcLowerHalf;0;V
|
||||
/AcDc/Devices/1/Status/Voltage/Extern/NToPe;0;V
|
||||
/AcDc/Devices/1/Status/Temperature/InletAir;0;°C
|
||||
/AcDc/Devices/1/Status/Temperature/IgbtL1;0;°C
|
||||
/AcDc/Devices/1/Status/Temperature/IgbtL2;0;°C
|
||||
/AcDc/Devices/1/Status/Temperature/IgbtL3;0;°C
|
||||
/AcDc/Devices/1/Status/Temperature/IgbtBalancer;0;°C
|
||||
/AcDc/Devices/1/Status/OverloadCapacity/L1;0;%
|
||||
/AcDc/Devices/1/Status/OverloadCapacity/L2;0;%
|
||||
/AcDc/Devices/1/Status/OverloadCapacity/L3;0;%
|
||||
/AcDc/Devices/1/Status/Nominal/AcFrequency;50;Hz
|
||||
/AcDc/Devices/1/Status/Nominal/AcVoltage;400;V
|
||||
/AcDc/Devices/1/Status/Nominal/Power;25000;W
|
||||
/AcDc/Devices/1/Status/Alarms;;
|
||||
/AcDc/Devices/1/Status/Warnings;;
|
||||
/AcDc/Devices/1/Control/Ac/PhaseControl;Symmetric;
|
||||
/AcDc/Devices/1/Control/Ac/GridType;GridTied400V50Hz;
|
||||
/AcDc/Devices/1/Control/Ac/IslandMode/FrequencyOffset;0;Hz
|
||||
/AcDc/Devices/1/Control/Ac/IslandMode/VoltageAdjustmentFactor;100;%
|
||||
/AcDc/Devices/1/Control/Dc/ReferenceVoltage;750;V
|
||||
/AcDc/Devices/1/Control/Dc/MinVoltage;730;V
|
||||
/AcDc/Devices/1/Control/Dc/MaxVoltage;770;V
|
||||
/AcDc/Devices/1/Control/Dc/PrechargeConfig;PrechargeDcWithSystemCtl;
|
||||
/AcDc/Devices/1/Control/PowerStageEnable;True;
|
||||
/AcDc/Devices/1/Control/ResetAlarmsAndWarnings;False;
|
||||
/AcDc/Devices/2/Status/Ac/L1/Voltage;0;V
|
||||
/AcDc/Devices/2/Status/Ac/L1/Current;0;A
|
||||
/AcDc/Devices/2/Status/Ac/L1/Power/Apparent;0;VA
|
||||
/AcDc/Devices/2/Status/Ac/L1/Power/Active;0;W
|
||||
/AcDc/Devices/2/Status/Ac/L1/Power/Reactive;0;var
|
||||
/AcDc/Devices/2/Status/Ac/L1/Power/Phi;0;rad
|
||||
/AcDc/Devices/2/Status/Ac/L1/Power/CosPhi;1;
|
||||
/AcDc/Devices/2/Status/Ac/L2/Voltage;0;V
|
||||
/AcDc/Devices/2/Status/Ac/L2/Current;0;A
|
||||
/AcDc/Devices/2/Status/Ac/L2/Power/Apparent;0;VA
|
||||
/AcDc/Devices/2/Status/Ac/L2/Power/Active;0;W
|
||||
/AcDc/Devices/2/Status/Ac/L2/Power/Reactive;0;var
|
||||
/AcDc/Devices/2/Status/Ac/L2/Power/Phi;0;rad
|
||||
/AcDc/Devices/2/Status/Ac/L2/Power/CosPhi;1;
|
||||
/AcDc/Devices/2/Status/Ac/L3/Voltage;0;V
|
||||
/AcDc/Devices/2/Status/Ac/L3/Current;0;A
|
||||
/AcDc/Devices/2/Status/Ac/L3/Power/Apparent;0;VA
|
||||
/AcDc/Devices/2/Status/Ac/L3/Power/Active;0;W
|
||||
/AcDc/Devices/2/Status/Ac/L3/Power/Reactive;0;var
|
||||
/AcDc/Devices/2/Status/Ac/L3/Power/Phi;0;rad
|
||||
/AcDc/Devices/2/Status/Ac/L3/Power/CosPhi;1;
|
||||
/AcDc/Devices/2/Status/Ac/Power/Apparent;0;VA
|
||||
/AcDc/Devices/2/Status/Ac/Power/Active;0;W
|
||||
/AcDc/Devices/2/Status/Ac/Power/Reactive;0;var
|
||||
/AcDc/Devices/2/Status/Ac/Power/Phi;0;rad
|
||||
/AcDc/Devices/2/Status/Ac/Power/CosPhi;1;
|
||||
/AcDc/Devices/2/Status/Ac/Frequency;0;Hz
|
||||
/AcDc/Devices/2/Status/Dc/Voltage;0;V
|
||||
/AcDc/Devices/2/Status/Dc/Current;0;A
|
||||
/AcDc/Devices/2/Status/Dc/Power;0;W
|
||||
/AcDc/Devices/2/Status/PowerLimitedBy;Nothing;
|
||||
/AcDc/Devices/2/Status/InverterState/Current;Idle;
|
||||
/AcDc/Devices/2/Status/InverterState/OnLastAlarm;Idle;
|
||||
/AcDc/Devices/2/Status/ActiveGridType;GridTied400V50Hz;
|
||||
/AcDc/Devices/2/Status/Voltage/Intern/DcUpperHalf;0;V
|
||||
/AcDc/Devices/2/Status/Voltage/Intern/DcLowerHalf;0;V
|
||||
/AcDc/Devices/2/Status/Voltage/Intern/NToPe;0;V
|
||||
/AcDc/Devices/2/Status/Voltage/Extern/DcUpperHalf;0;V
|
||||
/AcDc/Devices/2/Status/Voltage/Extern/DcLowerHalf;0;V
|
||||
/AcDc/Devices/2/Status/Voltage/Extern/NToPe;0;V
|
||||
/AcDc/Devices/2/Status/Temperature/InletAir;0;°C
|
||||
/AcDc/Devices/2/Status/Temperature/IgbtL1;0;°C
|
||||
/AcDc/Devices/2/Status/Temperature/IgbtL2;0;°C
|
||||
/AcDc/Devices/2/Status/Temperature/IgbtL3;0;°C
|
||||
/AcDc/Devices/2/Status/Temperature/IgbtBalancer;0;°C
|
||||
/AcDc/Devices/2/Status/OverloadCapacity/L1;0;%
|
||||
/AcDc/Devices/2/Status/OverloadCapacity/L2;0;%
|
||||
/AcDc/Devices/2/Status/OverloadCapacity/L3;0;%
|
||||
/AcDc/Devices/2/Status/Nominal/AcFrequency;50;Hz
|
||||
/AcDc/Devices/2/Status/Nominal/AcVoltage;400;V
|
||||
/AcDc/Devices/2/Status/Nominal/Power;25000;W
|
||||
/AcDc/Devices/2/Status/Alarms;;
|
||||
/AcDc/Devices/2/Status/Warnings;;
|
||||
/AcDc/Devices/2/Control/Ac/PhaseControl;Symmetric;
|
||||
/AcDc/Devices/2/Control/Ac/GridType;GridTied400V50Hz;
|
||||
/AcDc/Devices/2/Control/Ac/IslandMode/FrequencyOffset;0;Hz
|
||||
/AcDc/Devices/2/Control/Ac/IslandMode/VoltageAdjustmentFactor;100;%
|
||||
/AcDc/Devices/2/Control/Dc/ReferenceVoltage;750;V
|
||||
/AcDc/Devices/2/Control/Dc/MinVoltage;730;V
|
||||
/AcDc/Devices/2/Control/Dc/MaxVoltage;770;V
|
||||
/AcDc/Devices/2/Control/Dc/PrechargeConfig;PrechargeDcWithSystemCtl;
|
||||
/AcDc/Devices/2/Control/PowerStageEnable;True;
|
||||
/AcDc/Devices/2/Control/ResetAlarmsAndWarnings;False;
|
||||
/AcDc/Alarms;;
|
||||
/AcDc/Warnings;;
|
||||
/AcDc/Ac/L1/Voltage;0;V
|
||||
/AcDc/Ac/L1/Current;0;A
|
||||
/AcDc/Ac/L1/Power/Apparent;0;VA
|
||||
/AcDc/Ac/L1/Power/Active;0;W
|
||||
/AcDc/Ac/L1/Power/Reactive;0;var
|
||||
/AcDc/Ac/L1/Power/Phi;0;rad
|
||||
/AcDc/Ac/L1/Power/CosPhi;1;
|
||||
/AcDc/Ac/L2/Voltage;0;V
|
||||
/AcDc/Ac/L2/Current;0;A
|
||||
/AcDc/Ac/L2/Power/Apparent;0;VA
|
||||
/AcDc/Ac/L2/Power/Active;0;W
|
||||
/AcDc/Ac/L2/Power/Reactive;0;var
|
||||
/AcDc/Ac/L2/Power/Phi;0;rad
|
||||
/AcDc/Ac/L2/Power/CosPhi;1;
|
||||
/AcDc/Ac/L3/Voltage;0;V
|
||||
/AcDc/Ac/L3/Current;0;A
|
||||
/AcDc/Ac/L3/Power/Apparent;0;VA
|
||||
/AcDc/Ac/L3/Power/Active;0;W
|
||||
/AcDc/Ac/L3/Power/Reactive;0;var
|
||||
/AcDc/Ac/L3/Power/Phi;0;rad
|
||||
/AcDc/Ac/L3/Power/CosPhi;1;
|
||||
/AcDc/Ac/Power/Apparent;0;VA
|
||||
/AcDc/Ac/Power/Active;0;W
|
||||
/AcDc/Ac/Power/Reactive;0;var
|
||||
/AcDc/Ac/Power/Phi;0;rad
|
||||
/AcDc/Ac/Power/CosPhi;1;
|
||||
/AcDc/Ac/Frequency;0;Hz
|
||||
/AcDc/Dc/Voltage;0;V
|
||||
/AcDc/Dc/Current;0;A
|
||||
/AcDc/Dc/Power;0;W
|
||||
/DcDc/Dc/Link/Voltage;0;V
|
||||
/DcDc/Dc/Link/Current;0;A
|
||||
/DcDc/Dc/Link/Power;0;W
|
||||
/DcDc/Dc/Battery/Voltage;0;V
|
||||
/DcDc/Dc/Battery/Current;0;A
|
||||
/DcDc/Dc/Battery/Power;0;W
|
||||
/DcDc/SystemControl/Alarms;;
|
||||
/DcDc/SystemControl/CommunicationTimeout;00:00:10;
|
||||
/DcDc/SystemControl/SystemConfig;DcDcOnly;
|
||||
/DcDc/SystemControl/ResetAlarmsAndWarnings;False;
|
||||
/DcDc/SystemControl/TargetSlave;0;
|
||||
/DcDc/SystemControl/UseSlaveIdForAddressing;False;
|
||||
/DcDc/SystemControl/ReferenceFrame;Producer;
|
||||
/DcDc/SystemControl/SlaveErrorHandling;Relaxed;
|
||||
/DcDc/SystemControl/SubSlaveErrorHandling;Strict;
|
||||
/DcDc/SystemControl/PowerSetPointActivation;Immediate;
|
||||
/DcDc/SystemControl/PowerSetPointTrigger;Wait;
|
||||
/DcDc/SystemControl/DeviceState;Operation;
|
||||
/DcDc/SystemControl/NumberOfConnectedSlaves;2;
|
||||
/DcDc/SystemControl/NumberOfConnectedSubSlaves;0;
|
||||
/DcDc/SystemControl/Warnings;;
|
||||
/DcDc/Devices/1/Status/Dc/Link/Voltage;0;V
|
||||
/DcDc/Devices/1/Status/Dc/Link/Current;0;A
|
||||
/DcDc/Devices/1/Status/Dc/Link/Power;0;W
|
||||
/DcDc/Devices/1/Status/Dc/Battery/Voltage;0;V
|
||||
/DcDc/Devices/1/Status/Dc/Battery/Current;0;A
|
||||
/DcDc/Devices/1/Status/Dc/Battery/Power;0;W
|
||||
/DcDc/Devices/1/Status/OverloadCapacity;0;%
|
||||
/DcDc/Devices/1/Status/Temperature/InletAir;0;°C
|
||||
/DcDc/Devices/1/Status/Temperature/HighVoltageModule;0;°C
|
||||
/DcDc/Devices/1/Status/Temperature/LowVoltageModule;0;°C
|
||||
/DcDc/Devices/1/Status/PowerLimitedBy;;
|
||||
/DcDc/Devices/1/Status/Alarms;;
|
||||
/DcDc/Devices/1/Status/Warnings;;
|
||||
/DcDc/Devices/1/Control/Vcc/EndPointCurrent;50;A
|
||||
/DcDc/Devices/1/Control/Vcc/EndPointVoltage;50;V
|
||||
/DcDc/Devices/1/Control/Vcc/StartPointCurrent;5;A
|
||||
/DcDc/Devices/1/Control/VoltageLimits/MinBatteryVoltageAlarm;0;V
|
||||
/DcDc/Devices/1/Control/VoltageLimits/MaxBatteryVoltageAlarm;60;V
|
||||
/DcDc/Devices/1/Control/VoltageLimits/MinBatteryVoltage;42;V
|
||||
/DcDc/Devices/1/Control/VoltageLimits/MaxBatteryVoltage;57;V
|
||||
/DcDc/Devices/1/Control/DroopControl/ReferenceVoltage;750;V
|
||||
/DcDc/Devices/1/Control/DroopControl/LowerVoltage;55;V
|
||||
/DcDc/Devices/1/Control/DroopControl/UpperVoltage;55;V
|
||||
/DcDc/Devices/1/Control/DroopControl/VoltageDeadband;0;V
|
||||
/DcDc/Devices/1/Control/CurrentControl/CurrentSetpoint;0;A
|
||||
/DcDc/Devices/1/Control/CurrentControl/MaxCurrentChangePerMs;100;A
|
||||
/DcDc/Devices/1/Control/MaxDcPower;5;W
|
||||
/DcDc/Devices/1/Control/ControlMode;VoltageDroop;
|
||||
/DcDc/Devices/1/Control/ResetAlarmsAndWarnings;False;
|
||||
/DcDc/Devices/1/Control/PowerStageEnable;True;
|
||||
/DcDc/Devices/2/Status/Dc/Link/Voltage;0;V
|
||||
/DcDc/Devices/2/Status/Dc/Link/Current;0;A
|
||||
/DcDc/Devices/2/Status/Dc/Link/Power;0;W
|
||||
/DcDc/Devices/2/Status/Dc/Battery/Voltage;0;V
|
||||
/DcDc/Devices/2/Status/Dc/Battery/Current;0;A
|
||||
/DcDc/Devices/2/Status/Dc/Battery/Power;0;W
|
||||
/DcDc/Devices/2/Status/OverloadCapacity;0;%
|
||||
/DcDc/Devices/2/Status/Temperature/InletAir;0;°C
|
||||
/DcDc/Devices/2/Status/Temperature/HighVoltageModule;0;°C
|
||||
/DcDc/Devices/2/Status/Temperature/LowVoltageModule;0;°C
|
||||
/DcDc/Devices/2/Status/PowerLimitedBy;;
|
||||
/DcDc/Devices/2/Status/Alarms;;
|
||||
/DcDc/Devices/2/Status/Warnings;;
|
||||
/DcDc/Devices/2/Control/Vcc/EndPointCurrent;50;A
|
||||
/DcDc/Devices/2/Control/Vcc/EndPointVoltage;50;V
|
||||
/DcDc/Devices/2/Control/Vcc/StartPointCurrent;5;A
|
||||
/DcDc/Devices/2/Control/VoltageLimits/MinBatteryVoltageAlarm;0;V
|
||||
/DcDc/Devices/2/Control/VoltageLimits/MaxBatteryVoltageAlarm;60;V
|
||||
/DcDc/Devices/2/Control/VoltageLimits/MinBatteryVoltage;42;V
|
||||
/DcDc/Devices/2/Control/VoltageLimits/MaxBatteryVoltage;57;V
|
||||
/DcDc/Devices/2/Control/DroopControl/ReferenceVoltage;750;V
|
||||
/DcDc/Devices/2/Control/DroopControl/LowerVoltage;55;V
|
||||
/DcDc/Devices/2/Control/DroopControl/UpperVoltage;55;V
|
||||
/DcDc/Devices/2/Control/DroopControl/VoltageDeadband;0;V
|
||||
/DcDc/Devices/2/Control/CurrentControl/CurrentSetpoint;0;A
|
||||
/DcDc/Devices/2/Control/CurrentControl/MaxCurrentChangePerMs;100;A
|
||||
/DcDc/Devices/2/Control/MaxDcPower;5;W
|
||||
/DcDc/Devices/2/Control/ControlMode;VoltageDroop;
|
||||
/DcDc/Devices/2/Control/ResetAlarmsAndWarnings;False;
|
||||
/DcDc/Devices/2/Control/PowerStageEnable;True;
|
||||
/DcDc/Alarms;;
|
||||
/DcDc/Warnings;;
|
||||
/Battery/Dc/Voltage;51.898;V
|
||||
/Battery/Dc/Current;0.21000000000000002;A
|
||||
/Battery/Dc/Power;10.898580000000003;W
|
||||
/Battery/Eoc;True;
|
||||
/Battery/Warnings;;
|
||||
/Battery/Alarms;;
|
||||
/Battery/Soc;99.9;%
|
||||
/Battery/Devices/1/Dc/Voltage;51.69;V
|
||||
/Battery/Devices/1/Dc/Current;0.05;A
|
||||
/Battery/Devices/1/Dc/Power;2.5845000000000002;W
|
||||
/Battery/Devices/1/Leds/Blue;Off;
|
||||
/Battery/Devices/1/Leds/Red;Off;
|
||||
/Battery/Devices/1/Leds/Green;On;
|
||||
/Battery/Devices/1/Leds/Amber;Off;
|
||||
/Battery/Devices/1/Temperatures/Heating;True;
|
||||
/Battery/Devices/1/Temperatures/Board;46.5;°C
|
||||
/Battery/Devices/1/Temperatures/Cells/Center;249.9;°C
|
||||
/Battery/Devices/1/Temperatures/Cells/Left;249.5;°C
|
||||
/Battery/Devices/1/Temperatures/Cells/Right;249.5;°C
|
||||
/Battery/Devices/1/Temperatures/State;Operation;
|
||||
/Battery/Devices/1/ConnectedToDcBus;True;
|
||||
/Battery/Devices/1/Eoc;True;
|
||||
/Battery/Devices/1/Warnings;;
|
||||
/Battery/Devices/1/Alarms;;
|
||||
/Battery/Devices/1/Soc;100;%
|
||||
/Battery/Devices/1/MaxChargePower;5418.875;W
|
||||
/Battery/Devices/1/MaxDischargePower;-4668.75;W
|
||||
/Battery/Devices/2/Dc/Voltage;51.49;V
|
||||
/Battery/Devices/2/Dc/Current;0.02;A
|
||||
/Battery/Devices/2/Dc/Power;1.0298;W
|
||||
/Battery/Devices/2/Leds/Blue;Off;
|
||||
/Battery/Devices/2/Leds/Red;Off;
|
||||
/Battery/Devices/2/Leds/Green;On;
|
||||
/Battery/Devices/2/Leds/Amber;Off;
|
||||
/Battery/Devices/2/Temperatures/Heating;True;
|
||||
/Battery/Devices/2/Temperatures/Board;55;°C
|
||||
/Battery/Devices/2/Temperatures/Cells/Center;251.4;°C
|
||||
/Battery/Devices/2/Temperatures/Cells/Left;249.8;°C
|
||||
/Battery/Devices/2/Temperatures/Cells/Right;254.2;°C
|
||||
/Battery/Devices/2/Temperatures/State;Operation;
|
||||
/Battery/Devices/2/ConnectedToDcBus;True;
|
||||
/Battery/Devices/2/Eoc;True;
|
||||
/Battery/Devices/2/Warnings;;
|
||||
/Battery/Devices/2/Alarms;;
|
||||
/Battery/Devices/2/Soc;100;%
|
||||
/Battery/Devices/2/MaxChargePower;5398.95;W
|
||||
/Battery/Devices/2/MaxDischargePower;-4648.900000000001;W
|
||||
/Battery/Devices/3/Dc/Voltage;52.2;V
|
||||
/Battery/Devices/3/Dc/Current;0.02;A
|
||||
/Battery/Devices/3/Dc/Power;1.044;W
|
||||
/Battery/Devices/3/Leds/Blue;Off;
|
||||
/Battery/Devices/3/Leds/Red;Off;
|
||||
/Battery/Devices/3/Leds/Green;On;
|
||||
/Battery/Devices/3/Leds/Amber;Off;
|
||||
/Battery/Devices/3/Temperatures/Heating;True;
|
||||
/Battery/Devices/3/Temperatures/Board;47.5;°C
|
||||
/Battery/Devices/3/Temperatures/Cells/Center;250.5;°C
|
||||
/Battery/Devices/3/Temperatures/Cells/Left;249.8;°C
|
||||
/Battery/Devices/3/Temperatures/Cells/Right;251.4;°C
|
||||
/Battery/Devices/3/Temperatures/State;Operation;
|
||||
/Battery/Devices/3/ConnectedToDcBus;True;
|
||||
/Battery/Devices/3/Eoc;True;
|
||||
/Battery/Devices/3/Warnings;;
|
||||
/Battery/Devices/3/Alarms;;
|
||||
/Battery/Devices/3/Soc;100;%
|
||||
/Battery/Devices/3/MaxChargePower;5469.95;W
|
||||
/Battery/Devices/3/MaxDischargePower;-4719.900000000001;W
|
||||
/Battery/Devices/4/Dc/Voltage;51.94;V
|
||||
/Battery/Devices/4/Dc/Current;0.03;A
|
||||
/Battery/Devices/4/Dc/Power;1.5581999999999998;W
|
||||
/Battery/Devices/4/Leds/Blue;Off;
|
||||
/Battery/Devices/4/Leds/Red;Off;
|
||||
/Battery/Devices/4/Leds/Green;On;
|
||||
/Battery/Devices/4/Leds/Amber;Off;
|
||||
/Battery/Devices/4/Temperatures/Heating;True;
|
||||
/Battery/Devices/4/Temperatures/Board;47;°C
|
||||
/Battery/Devices/4/Temperatures/Cells/Center;250;°C
|
||||
/Battery/Devices/4/Temperatures/Cells/Left;249.8;°C
|
||||
/Battery/Devices/4/Temperatures/Cells/Right;252.1;°C
|
||||
/Battery/Devices/4/Temperatures/State;Operation;
|
||||
/Battery/Devices/4/ConnectedToDcBus;False;
|
||||
/Battery/Devices/4/Eoc;True;
|
||||
/Battery/Devices/4/Warnings;;
|
||||
/Battery/Devices/4/Alarms;;
|
||||
/Battery/Devices/4/Soc;99.9;%
|
||||
/Battery/Devices/4/MaxChargePower;5443.925;W
|
||||
/Battery/Devices/4/MaxDischargePower;-4693.849999999999;W
|
||||
/Battery/Devices/5/Dc/Voltage;52.17;V
|
||||
/Battery/Devices/5/Dc/Current;0.09;A
|
||||
/Battery/Devices/5/Dc/Power;4.6953;W
|
||||
/Battery/Devices/5/Leds/Blue;Off;
|
||||
/Battery/Devices/5/Leds/Red;Off;
|
||||
/Battery/Devices/5/Leds/Green;On;
|
||||
/Battery/Devices/5/Leds/Amber;Off;
|
||||
/Battery/Devices/5/Temperatures/Heating;True;
|
||||
/Battery/Devices/5/Temperatures/Board;48.5;°C
|
||||
/Battery/Devices/5/Temperatures/Cells/Center;250.6;°C
|
||||
/Battery/Devices/5/Temperatures/Cells/Left;249.8;°C
|
||||
/Battery/Devices/5/Temperatures/Cells/Right;250.8;°C
|
||||
/Battery/Devices/5/Temperatures/State;Operation;
|
||||
/Battery/Devices/5/ConnectedToDcBus;True;
|
||||
/Battery/Devices/5/Eoc;True;
|
||||
/Battery/Devices/5/Warnings;;
|
||||
/Battery/Devices/5/Alarms;;
|
||||
/Battery/Devices/5/Soc;100;%
|
||||
/Battery/Devices/5/MaxChargePower;5466.775;W
|
||||
/Battery/Devices/5/MaxDischargePower;-4716.55;W
|
||||
/GridMeter/Ac/L1/Voltage;243;V
|
||||
/GridMeter/Ac/L1/Current;-12.360750198364258;A
|
||||
/GridMeter/Ac/L1/Power/Apparent;3009.25;VA
|
||||
/GridMeter/Ac/L1/Power/Active;-2969;W
|
||||
/GridMeter/Ac/L1/Power/Reactive;502;var
|
||||
/GridMeter/Ac/L1/Power/Phi;2.974096306323614;rad
|
||||
/GridMeter/Ac/L1/Power/CosPhi;-0.9860052513602484;
|
||||
/GridMeter/Ac/L2/Voltage;243.60000610351562;V
|
||||
/GridMeter/Ac/L2/Current;-12.548500061035156;A
|
||||
/GridMeter/Ac/L2/Power/Apparent;3043;VA
|
||||
/GridMeter/Ac/L2/Power/Active;-3033;W
|
||||
/GridMeter/Ac/L2/Power/Reactive;351;var
|
||||
/GridMeter/Ac/L2/Power/Phi;3.026378172298827;rad
|
||||
/GridMeter/Ac/L2/Power/CosPhi;-0.9933701504473591;
|
||||
/GridMeter/Ac/L3/Voltage;244.39999389648438;V
|
||||
/GridMeter/Ac/L3/Current;-13.57349967956543;A
|
||||
/GridMeter/Ac/L3/Power/Apparent;3317;VA
|
||||
/GridMeter/Ac/L3/Power/Active;-3313;W
|
||||
/GridMeter/Ac/L3/Power/Reactive;-73.25;var
|
||||
/GridMeter/Ac/L3/Power/Phi;-3.1194863851016974;rad
|
||||
/GridMeter/Ac/L3/Power/CosPhi;-0.9997556663972327;
|
||||
/GridMeter/Ac/Power/Apparent;9347.579101697936;VA
|
||||
/GridMeter/Ac/Power/Active;-9315;W
|
||||
/GridMeter/Ac/Power/Reactive;779.75;var
|
||||
/GridMeter/Ac/Power/Phi;3.058078286561564;rad
|
||||
/GridMeter/Ac/Power/CosPhi;-0.9965147016844159;
|
||||
/GridMeter/Ac/Frequency;50;Hz
|
||||
/CriticalLoad/Ac/L1/Voltage;244;V
|
||||
/CriticalLoad/Ac/L1/Current;0;A
|
||||
/CriticalLoad/Ac/L1/Power/Apparent;0;VA
|
||||
/CriticalLoad/Ac/L1/Power/Active;0;W
|
||||
/CriticalLoad/Ac/L1/Power/Reactive;0;var
|
||||
/CriticalLoad/Ac/L1/Power/Phi;0;rad
|
||||
/CriticalLoad/Ac/L1/Power/CosPhi;1;
|
||||
/CriticalLoad/Ac/L2/Voltage;243;V
|
||||
/CriticalLoad/Ac/L2/Current;0;A
|
||||
/CriticalLoad/Ac/L2/Power/Apparent;0;VA
|
||||
/CriticalLoad/Ac/L2/Power/Active;0;W
|
||||
/CriticalLoad/Ac/L2/Power/Reactive;0;var
|
||||
/CriticalLoad/Ac/L2/Power/Phi;0;rad
|
||||
/CriticalLoad/Ac/L2/Power/CosPhi;1;
|
||||
/CriticalLoad/Ac/L3/Voltage;245.6999969482422;V
|
||||
/CriticalLoad/Ac/L3/Current;0;A
|
||||
/CriticalLoad/Ac/L3/Power/Apparent;0;VA
|
||||
/CriticalLoad/Ac/L3/Power/Active;0;W
|
||||
/CriticalLoad/Ac/L3/Power/Reactive;0;var
|
||||
/CriticalLoad/Ac/L3/Power/Phi;0;rad
|
||||
/CriticalLoad/Ac/L3/Power/CosPhi;1;
|
||||
/CriticalLoad/Ac/Power/Apparent;0;VA
|
||||
/CriticalLoad/Ac/Power/Active;0;W
|
||||
/CriticalLoad/Ac/Power/Reactive;0;var
|
||||
/CriticalLoad/Ac/Power/Phi;0;rad
|
||||
/CriticalLoad/Ac/Power/CosPhi;1;
|
||||
/CriticalLoad/Ac/Frequency;50;Hz
|
||||
/Relays/K1AcInIsConnectedToGrid;True;
|
||||
/Relays/K2AcInIsConnectedToAcOut;True;
|
||||
/Relays/K3Inverter1IsConnectedToAcOut;True;
|
||||
/Relays/K3Inverter2IsConnectedToAcOut;True;
|
||||
/Relays/K3Inverter3IsConnectedToAcOut;True;
|
||||
/Relays/K3Inverter4IsConnectedToAcOut;True;
|
||||
/Relays/FiWarning;False;
|
||||
/Relays/FiError;False;
|
||||
/Relays/K2ConnectAcInToAcOut;True;
|
||||
/Relays/K3InvertersAreConnectedToAcOut;True;
|
||||
/Mppt/Dc/Voltage;772.454;V
|
||||
/Mppt/Dc/Current;10.655000000000001;A
|
||||
/Mppt/Dc/Power;8230.497370000001;W
|
||||
/Mppt/Strings/1/Voltage;690.09;V
|
||||
/Mppt/Strings/1/Current;3.221;A
|
||||
/Mppt/Strings/1/Power;2222.7798900000003;W
|
||||
/Mppt/Strings/2/Voltage;599.549;V
|
||||
/Mppt/Strings/2/Current;3.23;A
|
||||
/Mppt/Strings/2/Power;1936.54327;W
|
||||
/Mppt/Strings/3/Voltage;695.46;V
|
||||
/Mppt/Strings/3/Current;3.371;A
|
||||
/Mppt/Strings/3/Power;2344.39566;W
|
||||
/Mppt/Strings/4/Voltage;623.849;V
|
||||
/Mppt/Strings/4/Current;2.868;A
|
||||
/Mppt/Strings/4/Power;1789.198932;W
|
||||
/Config/MinSoc;20;
|
||||
/Config/LastEoc;0;
|
||||
/Config/PConstant;0.5;
|
||||
/Config/ForceChargePower;1000000;
|
||||
/Config/ForceDischargePower;-1000000;
|
||||
/Config/MaxInverterPower;32000;
|
||||
/Config/GridSetPoint;0;
|
||||
/Config/SelfDischargePower;200;
|
||||
/Config/HoldSocZone;1;
|
||||
/Config/ControllerPConstant;0.5;
|
||||
/SystemState/Message;Panic: Unknown State!;
|
||||
/SystemState/Id;100;
|
||||
/LoadOnDc/Power;100;`;
|
||||
|
||||
const s3Access = new S3Access(
|
||||
"saliomameiringen",
|
||||
"sos-ch-dk-2",
|
||||
|
@ -510,7 +45,6 @@ export const fetchData = (
|
|||
return Promise.resolve(FetchResult.notAvailable);
|
||||
} else if (r.status === 200) {
|
||||
const text = await r.text();
|
||||
console.log("csv", parseCsv(text));
|
||||
return parseCsv(text);
|
||||
} else {
|
||||
console.error("unexpected status code");
|
||||
|
@ -533,11 +67,9 @@ const ScalarGraph = () => {
|
|||
timeRange[0].toDate(),
|
||||
timeRange[timeRange.length - 1].toDate(),
|
||||
]);
|
||||
const [uiRevision, setUiRevision] = useState(Math.random());
|
||||
const [plotTitles, setPlotTitles] = useState<string[]>([]);
|
||||
|
||||
const { toggles, setToggles, setCheckedToggles, checkedToggles } =
|
||||
useContext(LogContext);
|
||||
const { toggles, setToggles, checkedToggles } = useContext(LogContext);
|
||||
|
||||
const times$ = useMemo(() => new BehaviorSubject(timeRange), []);
|
||||
|
||||
|
@ -556,7 +88,6 @@ const ScalarGraph = () => {
|
|||
if (toggles === null && toggleValues && toggleValues.value) {
|
||||
const treeElements = getTreeElements(toggleValues.value);
|
||||
setToggles(treeElements);
|
||||
setCheckedToggles(flattenToggles(treeElements));
|
||||
}
|
||||
});
|
||||
return () => subscription.unsubscribe();
|
||||
|
@ -628,113 +159,95 @@ const ScalarGraph = () => {
|
|||
const range0 = new Date(xaxisRange0);
|
||||
const range1 = new Date(xaxisRange1);
|
||||
setRange([range0, range1]);
|
||||
setUiRevision(Math.random());
|
||||
getCacheSeries(range0, range1);
|
||||
}
|
||||
},
|
||||
[getCacheSeries]
|
||||
);
|
||||
|
||||
const Row = memo((props: any) => {
|
||||
const { data, index, style } = props;
|
||||
const visibleGraphs = Object.keys(data).filter((path) => {
|
||||
return checkedToggles ? checkedToggles[path] : false;
|
||||
});
|
||||
if (data[visibleGraphs[index]]) {
|
||||
const isScalar = isNumeric(data[visibleGraphs[index]].y[0]);
|
||||
const graphData = isScalar
|
||||
? [
|
||||
{
|
||||
...data[visibleGraphs[index]],
|
||||
type: "scatter",
|
||||
mode: "lines+markers",
|
||||
fill: "tozeroy",
|
||||
},
|
||||
]
|
||||
: transformToBarGraphData(data[visibleGraphs[index]]);
|
||||
const barGraphLayout: Partial<Layout> = !isScalar
|
||||
? {
|
||||
bargap: 0,
|
||||
barmode: "stack",
|
||||
barnorm: "percent",
|
||||
const renderGraphs = () => {
|
||||
if (checkedToggles.length > 0) {
|
||||
const coordinateTimeSeries = transformToGraphData(timeSeries);
|
||||
const visibleGraphs = Object.keys(coordinateTimeSeries).filter((path) => {
|
||||
console.log('checkedToggles',coordinateTimeSeries, checkedToggles)
|
||||
return checkedToggles.find((toggle) => toggle === path)
|
||||
}
|
||||
: {};
|
||||
return (
|
||||
<div style={style}>
|
||||
<Plot
|
||||
key={index}
|
||||
data={graphData as Data[]}
|
||||
layout={{
|
||||
width: 1000,
|
||||
height: 500,
|
||||
autosize: true,
|
||||
title: visibleGraphs[index],
|
||||
xaxis: {
|
||||
autorange: false,
|
||||
range: range,
|
||||
type: "date",
|
||||
},
|
||||
yaxis: {
|
||||
rangemode: "tozero",
|
||||
},
|
||||
...barGraphLayout,
|
||||
}}
|
||||
config={{
|
||||
modeBarButtonsToRemove: [
|
||||
"lasso2d",
|
||||
"select2d",
|
||||
"pan2d",
|
||||
"autoScale2d",
|
||||
],
|
||||
}}
|
||||
onRelayout={handleRelayout}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
console.log('visibleGraphs', visibleGraphs)
|
||||
if (visibleGraphs.length > 0) {
|
||||
return (
|
||||
<div style={{ marginTop: "20px" }}>
|
||||
<LocalizationProvider dateAdapter={AdapterDayjs}>
|
||||
<DateRangePicker
|
||||
setRange={setRange}
|
||||
range={range}
|
||||
getCacheSeries={getCacheSeries}
|
||||
/>
|
||||
</LocalizationProvider>
|
||||
{visibleGraphs.map((path) => {
|
||||
const isScalar = isNumeric(coordinateTimeSeries[path].y[0]);
|
||||
const data = isScalar
|
||||
? [
|
||||
{
|
||||
...coordinateTimeSeries[path],
|
||||
type: "scatter",
|
||||
mode: "lines",
|
||||
fill: "tozeroy",
|
||||
},
|
||||
]
|
||||
: transformToBarGraphData(coordinateTimeSeries[path]);
|
||||
const barGraphLayout: Partial<Layout> = !isScalar
|
||||
? {
|
||||
bargap: 0,
|
||||
barmode: "stack",
|
||||
barnorm: "percent",
|
||||
}
|
||||
: {};
|
||||
console.log("graphdata", coordinateTimeSeries);
|
||||
return (
|
||||
<Plot
|
||||
key={path}
|
||||
data={data as Data[]}
|
||||
layout={{
|
||||
width: 1000,
|
||||
height: 500,
|
||||
title: path,
|
||||
xaxis: {
|
||||
autorange: false,
|
||||
range: range,
|
||||
type: "date",
|
||||
},
|
||||
yaxis: {
|
||||
rangemode: "tozero",
|
||||
},
|
||||
...barGraphLayout,
|
||||
}}
|
||||
config={{
|
||||
modeBarButtonsToRemove: [
|
||||
"lasso2d",
|
||||
"select2d",
|
||||
"pan2d",
|
||||
"autoScale2d",
|
||||
],
|
||||
}}
|
||||
onRelayout={handleRelayout}
|
||||
/>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}, areEqual);
|
||||
|
||||
if (
|
||||
checkedToggles &&
|
||||
Object.keys(checkedToggles).find((toggle) => {
|
||||
return checkedToggles[toggle];
|
||||
})
|
||||
) {
|
||||
const coordinateTimeSeries = transformToGraphData(timeSeries);
|
||||
return (
|
||||
<div style={{ marginTop: "20px" }}>
|
||||
<LocalizationProvider dateAdapter={AdapterDayjs}>
|
||||
<DateRangePicker
|
||||
setRange={setRange}
|
||||
range={range}
|
||||
getCacheSeries={getCacheSeries}
|
||||
/>
|
||||
</LocalizationProvider>
|
||||
<List
|
||||
height={1000}
|
||||
itemCount={
|
||||
Object.keys(checkedToggles).filter(
|
||||
(toggle) => checkedToggles[toggle]
|
||||
).length - 1
|
||||
}
|
||||
itemSize={() => 500}
|
||||
width="100%"
|
||||
itemData={coordinateTimeSeries}
|
||||
>
|
||||
{Row}
|
||||
</List>
|
||||
</div>
|
||||
<Alert sx={{ mt: 2 }} severity="info">
|
||||
<FormattedMessage
|
||||
id="makeASelection"
|
||||
defaultMessage="Please make a selection on the left"
|
||||
/>
|
||||
</Alert>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<Alert sx={{ mt: 2 }} severity="info">
|
||||
<FormattedMessage
|
||||
id="makeASelection"
|
||||
defaultMessage="Please make a selection on the left"
|
||||
/>
|
||||
</Alert>
|
||||
);
|
||||
return <>{renderGraphs()}</>;
|
||||
};
|
||||
export default ScalarGraph;
|
||||
|
|
|
@ -1,79 +1,79 @@
|
|||
import { Box } from "@mui/material";
|
||||
import { getBoxColor } from "../../../util/graph.util";
|
||||
import {Box} from "@mui/material";
|
||||
import {getBoxColor} from "../../../util/graph.util";
|
||||
|
||||
export type BoxData = {
|
||||
label: string;
|
||||
values: (string | number)[];
|
||||
unit: string;
|
||||
label: string;
|
||||
values: (string | number)[];
|
||||
unit: string;
|
||||
};
|
||||
|
||||
export type TopologyBoxProps = {
|
||||
title?: string;
|
||||
data?: BoxData;
|
||||
title?: string;
|
||||
data?: BoxData;
|
||||
};
|
||||
|
||||
const isInt = (value: number) => {
|
||||
return value % 1 === 0;
|
||||
return value % 1 === 0;
|
||||
};
|
||||
|
||||
export const BOX_SIZE = 85;
|
||||
const TopologyBox = (props: TopologyBoxProps) => {
|
||||
const { titleColor, boxColor } = getBoxColor(props.title);
|
||||
if (props.title === "Battery") console.log(props.data?.values, "data");
|
||||
return (
|
||||
<Box
|
||||
sx={{
|
||||
visibility: props.title ? "visible" : "hidden",
|
||||
height: BOX_SIZE + "px",
|
||||
width: BOX_SIZE + "px",
|
||||
borderRadius: "4px",
|
||||
color: "white",
|
||||
}}
|
||||
>
|
||||
<p
|
||||
style={{
|
||||
marginBlockStart: "0",
|
||||
marginBlockEnd: "0",
|
||||
backgroundColor: titleColor,
|
||||
padding: "5px",
|
||||
borderTopLeftRadius: "4px",
|
||||
borderTopRightRadius: "4px",
|
||||
display: "flex",
|
||||
justifyContent: "center",
|
||||
}}
|
||||
>
|
||||
{props.title}
|
||||
</p>
|
||||
<div
|
||||
style={{
|
||||
backgroundColor: boxColor,
|
||||
borderBottomLeftRadius: "4px",
|
||||
borderBottomRightRadius: "4px",
|
||||
padding: "5px",
|
||||
height: "51px",
|
||||
}}
|
||||
>
|
||||
{props.data && (
|
||||
<>
|
||||
{props.data.values.map((value, index) => {
|
||||
return (
|
||||
<p
|
||||
style={{ marginBlockStart: "0", marginBlockEnd: "2px" }}
|
||||
// eslint-disable-next-line formatjs/no-literal-string-in-jsx
|
||||
>{`${
|
||||
props.data && props.data.values.length === 3
|
||||
? "L" + (index + 1) + " "
|
||||
: ""
|
||||
}${
|
||||
!isInt(Number(value)) ? Number(value).toPrecision(4) : value
|
||||
}${props.data?.unit}`}</p>
|
||||
);
|
||||
})}
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
</Box>
|
||||
);
|
||||
const {titleColor, boxColor} = getBoxColor(props.title);
|
||||
return (
|
||||
<Box
|
||||
sx={{
|
||||
visibility: props.title ? "visible" : "hidden",
|
||||
height: BOX_SIZE + "px",
|
||||
width: BOX_SIZE + "px",
|
||||
borderRadius: "4px",
|
||||
color: "white",
|
||||
}}
|
||||
>
|
||||
<p
|
||||
style={{
|
||||
marginBlockStart: "0",
|
||||
marginBlockEnd: "0",
|
||||
backgroundColor: titleColor,
|
||||
padding: "5px",
|
||||
borderTopLeftRadius: "4px",
|
||||
borderTopRightRadius: "4px",
|
||||
display: "flex",
|
||||
justifyContent: "center",
|
||||
}}
|
||||
>
|
||||
{props.title}
|
||||
</p>
|
||||
<div
|
||||
style={{
|
||||
backgroundColor: boxColor,
|
||||
borderBottomLeftRadius: "4px",
|
||||
borderBottomRightRadius: "4px",
|
||||
padding: "5px",
|
||||
height: "51px",
|
||||
}}
|
||||
>
|
||||
{props.data && (
|
||||
<>
|
||||
{props.data.values.map((value, index) => {
|
||||
return (
|
||||
<p
|
||||
key={props.title + '-' + index}
|
||||
style={{marginBlockStart: "0", marginBlockEnd: "2px"}}
|
||||
// eslint-disable-next-line formatjs/no-literal-string-in-jsx
|
||||
>{`${
|
||||
props.data && props.data.values.length === 3
|
||||
? "L" + (index + 1) + " "
|
||||
: ""
|
||||
}${
|
||||
!isInt(Number(value)) ? Number(value).toPrecision(4) : value
|
||||
}${props.data?.unit}`}</p>
|
||||
);
|
||||
})}
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
</Box>
|
||||
);
|
||||
};
|
||||
|
||||
export default TopologyBox;
|
||||
|
|
|
@ -9,7 +9,6 @@ export type TopologyFlowProps = {
|
|||
hidden?: boolean;
|
||||
};
|
||||
const TopologyFlow = (props: TopologyFlowProps) => {
|
||||
console.log("amount", props.amount, props.data?.values);
|
||||
const length = Math.abs((props.amount ?? 1) * BOX_SIZE);
|
||||
const values = props.data?.values;
|
||||
return (
|
||||
|
|
|
@ -109,7 +109,6 @@ export default class DataCache<T extends Record<string, CsvEntry>> {
|
|||
//What about string nodes? like Alarms
|
||||
for (const k of Object.keys(dataBefore)) {
|
||||
const beforeData = dataBefore[k].value;
|
||||
console.log(dataAfter[k]);
|
||||
const afterData = Number(dataAfter[k].value);
|
||||
let foo = interpolated[k];
|
||||
if (foo) {
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import { Datum, TypedArray } from "plotly.js";
|
||||
import {
|
||||
TreeElement,
|
||||
ToggleElement,
|
||||
} from "../components/Installations/Log/CheckboxTree";
|
||||
import { TimeRange, UnixTime } from "../dataCache/time";
|
||||
import { DataPoint, DataRecord } from "../dataCache/data";
|
||||
|
@ -143,7 +142,6 @@ export const extractTopologyValues = (
|
|||
const values = topologyPaths[topologyKey as keyof TopologyValues].map(
|
||||
(topologyPath) => timeSeriesValue[topologyPath]
|
||||
);
|
||||
console.log("values", values, topologyKey);
|
||||
switch (topologyKey as keyof TopologyValues) {
|
||||
case "gridToAcInConnection":
|
||||
topologyValues = [
|
||||
|
@ -153,7 +151,6 @@ export const extractTopologyValues = (
|
|||
default:
|
||||
topologyValues = values.map((element) => element.value);
|
||||
}
|
||||
console.log("topologyValues", topologyValues);
|
||||
return {
|
||||
...acc,
|
||||
[topologyKey]: {
|
||||
|
@ -200,8 +197,9 @@ export const parseCsv = (text: string): DataRecord => {
|
|||
});
|
||||
const x = y
|
||||
.map((fields) => {
|
||||
if (isNaN(Number(fields[1]))) {
|
||||
console.log("fields", fields[1]);
|
||||
if (fields[0] === "/AcDc/Warnings")
|
||||
console.log("warnings", fields[1], isNaN(+fields[1]));
|
||||
if (isNaN(Number(fields[1])) || fields[1] === "") {
|
||||
return { [fields[0]]: { value: fields[1], unit: fields[2] } };
|
||||
}
|
||||
return { [fields[0]]: { value: parseFloat(fields[1]), unit: fields[2] } };
|
||||
|
@ -210,17 +208,6 @@ export const parseCsv = (text: string): DataRecord => {
|
|||
return x;
|
||||
};
|
||||
|
||||
export const flattenToggles = (toggles: TreeElement[]): ToggleElement => {
|
||||
return toggles.reduce((acc, current) => {
|
||||
if (current.children.length > 0) {
|
||||
acc[current.id] = false;
|
||||
return { ...acc, ...flattenToggles(current.children) };
|
||||
}
|
||||
acc[current.id] = false;
|
||||
return acc;
|
||||
}, {} as ToggleElement);
|
||||
};
|
||||
|
||||
export const insertTreeElements = (
|
||||
children: TreeElement[] = [],
|
||||
[head, ...tail]: string[]
|
||||
|
@ -291,7 +278,7 @@ export const transformToBarGraphData = (data: GraphCoordinates) => {
|
|||
marker: { color: stringToColor(split) },
|
||||
type: "bar",
|
||||
name: split,
|
||||
showlegend: !foundName,
|
||||
showlegend: split.length > 0 ? !foundName : false,
|
||||
} as any;
|
||||
});
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue