mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-06 15:59:52 +03:00
Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -40,6 +40,7 @@ yarn.lock
|
|||||||
analyse.html
|
analyse.html
|
||||||
interface/vite.config.ts.timestamp*
|
interface/vite.config.ts.timestamp*
|
||||||
*.local
|
*.local
|
||||||
|
|
||||||
# i18n generated files
|
# i18n generated files
|
||||||
interface/src/i18n/i18n-react.tsx
|
interface/src/i18n/i18n-react.tsx
|
||||||
interface/src/i18n/i18n-types.ts
|
interface/src/i18n/i18n-types.ts
|
||||||
|
|||||||
@@ -1,26 +1,32 @@
|
|||||||
import { type FC, useContext } from 'react';
|
import { type FC, useContext } from 'react';
|
||||||
import { Navigate, Route, Routes } from 'react-router-dom';
|
import { Navigate, Route, Routes } from 'react-router-dom';
|
||||||
|
|
||||||
|
import CustomEntities from 'app/main/CustomEntities';
|
||||||
|
import Customization from 'app/main/Customization';
|
||||||
|
import Devices from 'app/main/Devices';
|
||||||
|
import Modules from 'app/main/Modules';
|
||||||
|
import Scheduler from 'app/main/Scheduler';
|
||||||
|
import Sensors from 'app/main/Sensors';
|
||||||
|
import APSettings from 'app/settings/APSettings';
|
||||||
|
import ApplicationSettings from 'app/settings/ApplicationSettings';
|
||||||
|
import MqttSettings from 'app/settings/MqttSettings';
|
||||||
|
import NTPSettings from 'app/settings/NTPSettings';
|
||||||
|
import Settings from 'app/settings/Settings';
|
||||||
|
import UploadDownload from 'app/settings/UploadDownload';
|
||||||
|
import Network from 'app/settings/network/Network';
|
||||||
|
import Security from 'app/settings/security/Security';
|
||||||
|
import APStatus from 'app/status/APStatus';
|
||||||
|
import Activity from 'app/status/Activity';
|
||||||
|
import HardwareStatus from 'app/status/HardwareStatus';
|
||||||
|
import MqttStatus from 'app/status/MqttStatus';
|
||||||
|
import NTPStatus from 'app/status/NTPStatus';
|
||||||
|
import NetworkStatus from 'app/status/NetworkStatus';
|
||||||
|
import Status from 'app/status/Status';
|
||||||
|
import SystemLog from 'app/status/SystemLog';
|
||||||
import { Layout } from 'components';
|
import { Layout } from 'components';
|
||||||
import { AuthenticatedContext } from 'contexts/authentication';
|
import { AuthenticatedContext } from 'contexts/authentication';
|
||||||
import Settings from 'framework/Settings';
|
|
||||||
import AccessPoint from 'framework/ap/AccessPoint';
|
|
||||||
import Mqtt from 'framework/mqtt/Mqtt';
|
|
||||||
import Network from 'framework/network/Network';
|
|
||||||
import NetworkTime from 'framework/ntp/NetworkTime';
|
|
||||||
import Security from 'framework/security/Security';
|
|
||||||
import ESPSystemStatus from 'framework/system/ESPSystemStatus';
|
|
||||||
import System from 'framework/system/System';
|
|
||||||
import UploadDownload from 'framework/system/UploadDownload';
|
|
||||||
import ApplicationSettings from 'project/ApplicationSettings';
|
|
||||||
import CustomEntities from 'project/CustomEntities';
|
|
||||||
import Customization from 'project/Customization';
|
|
||||||
import Devices from 'project/Devices';
|
|
||||||
import Modules from 'project/Modules';
|
|
||||||
import Scheduler from 'project/Scheduler';
|
|
||||||
import Sensors from 'project/Sensors';
|
|
||||||
|
|
||||||
import Help from './project/Help';
|
import Help from './app/main/Help';
|
||||||
|
|
||||||
const AuthenticatedRouting: FC = () => {
|
const AuthenticatedRouting: FC = () => {
|
||||||
const { me } = useContext(AuthenticatedContext);
|
const { me } = useContext(AuthenticatedContext);
|
||||||
@@ -29,24 +35,34 @@ const AuthenticatedRouting: FC = () => {
|
|||||||
<Routes>
|
<Routes>
|
||||||
<Route path="/devices/*" element={<Devices />} />
|
<Route path="/devices/*" element={<Devices />} />
|
||||||
<Route path="/sensors/*" element={<Sensors />} />
|
<Route path="/sensors/*" element={<Sensors />} />
|
||||||
<Route path="/system/*" element={<System />} />
|
<Route path="/status/*" element={<Status />} />
|
||||||
<Route path="/help/*" element={<Help />} />
|
<Route path="/help/*" element={<Help />} />
|
||||||
<Route path="/*" element={<Navigate to="/" />} />
|
<Route path="/*" element={<Navigate to="/" />} />
|
||||||
|
|
||||||
|
<Route path="/status/hardwarestatus/*" element={<HardwareStatus />} />
|
||||||
|
<Route path="/status/activity" element={<Activity />} />
|
||||||
|
<Route path="/status/log" element={<SystemLog />} />
|
||||||
|
<Route path="/status/mqtt" element={<MqttStatus />} />
|
||||||
|
<Route path="/status/ntp" element={<NTPStatus />} />
|
||||||
|
<Route path="/status/ap" element={<APStatus />} />
|
||||||
|
<Route path="/status/network" element={<NetworkStatus />} />
|
||||||
|
|
||||||
{me.admin && (
|
{me.admin && (
|
||||||
<>
|
<>
|
||||||
<Route path="/customizations/*" element={<Customization />} />
|
<Route path="/settings" element={<Settings />} />
|
||||||
<Route path="/scheduler/*" element={<Scheduler />} />
|
<Route path="/settings/application" element={<ApplicationSettings />} />
|
||||||
<Route path="/customentities/*" element={<CustomEntities />} />
|
<Route path="/settings/mqtt" element={<MqttSettings />} />
|
||||||
<Route path="/settings/*" element={<Settings />} />
|
<Route path="/settings/ntp" element={<NTPSettings />} />
|
||||||
|
<Route path="/settings/ap" element={<APSettings />} />
|
||||||
|
<Route path="/settings/modules" element={<Modules />} />
|
||||||
|
<Route path="/settings/upload" element={<UploadDownload />} />
|
||||||
|
|
||||||
<Route path="/settings/network/*" element={<Network />} />
|
<Route path="/settings/network/*" element={<Network />} />
|
||||||
<Route path="/settings/ems-esp/*" element={<ApplicationSettings />} />
|
|
||||||
<Route path="/settings/ap/*" element={<AccessPoint />} />
|
|
||||||
<Route path="/settings/ntp/*" element={<NetworkTime />} />
|
|
||||||
<Route path="/settings/mqtt/*" element={<Mqtt />} />
|
|
||||||
<Route path="/settings/security/*" element={<Security />} />
|
<Route path="/settings/security/*" element={<Security />} />
|
||||||
<Route path="/settings/modules/*" element={<Modules />} />
|
|
||||||
<Route path="/system/espsystemstatus/*" element={<ESPSystemStatus />} />
|
<Route path="/customizations" element={<Customization />} />
|
||||||
<Route path="/settings/upload/*" element={<UploadDownload />} />
|
<Route path="/scheduler" element={<Scheduler />} />
|
||||||
|
<Route path="/customentities" element={<CustomEntities />} />
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
</Routes>
|
</Routes>
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ import {
|
|||||||
import { useTheme } from '@table-library/react-table-library/theme';
|
import { useTheme } from '@table-library/react-table-library/theme';
|
||||||
import { dialogStyle } from 'CustomTheme';
|
import { dialogStyle } from 'CustomTheme';
|
||||||
import { useRequest } from 'alova';
|
import { useRequest } from 'alova';
|
||||||
|
import RestartMonitor from 'app/status/RestartMonitor';
|
||||||
import {
|
import {
|
||||||
BlockNavigation,
|
BlockNavigation,
|
||||||
ButtonRow,
|
ButtonRow,
|
||||||
@@ -48,7 +49,6 @@ import {
|
|||||||
SectionContent,
|
SectionContent,
|
||||||
useLayoutTitle
|
useLayoutTitle
|
||||||
} from 'components';
|
} from 'components';
|
||||||
import RestartMonitor from 'framework/system/RestartMonitor';
|
|
||||||
import { useI18nContext } from 'i18n/i18n-react';
|
import { useI18nContext } from 'i18n/i18n-react';
|
||||||
|
|
||||||
import * as EMSESP from './api';
|
import * as EMSESP from './api';
|
||||||
@@ -18,7 +18,7 @@ import {
|
|||||||
Typography
|
Typography
|
||||||
} from '@mui/material';
|
} from '@mui/material';
|
||||||
|
|
||||||
import * as EMSESP from 'project/api';
|
import * as EMSESP from 'app/main/api';
|
||||||
import { useRequest } from 'alova';
|
import { useRequest } from 'alova';
|
||||||
import { SectionContent, useLayoutTitle } from 'components';
|
import { SectionContent, useLayoutTitle } from 'components';
|
||||||
import { useI18nContext } from 'i18n/i18n-react';
|
import { useI18nContext } from 'i18n/i18n-react';
|
||||||
@@ -50,9 +50,6 @@ export const writeAnalogSensor = (as: WriteAnalogSensor) =>
|
|||||||
// Activity
|
// Activity
|
||||||
export const readActivity = () => alovaInstance.Get<Activity>('/rest/activity');
|
export const readActivity = () => alovaInstance.Get<Activity>('/rest/activity');
|
||||||
|
|
||||||
// Scan devices
|
|
||||||
export const scanDevices = () => alovaInstance.Post('/rest/scanDevices');
|
|
||||||
|
|
||||||
// API, used in HelpInformation
|
// API, used in HelpInformation
|
||||||
export const API = (apiCall: APIcall) => alovaInstance.Post('/api', apiCall);
|
export const API = (apiCall: APIcall) => alovaInstance.Post('/api', apiCall);
|
||||||
|
|
||||||
@@ -15,7 +15,8 @@ import {
|
|||||||
FormLoader,
|
FormLoader,
|
||||||
SectionContent,
|
SectionContent,
|
||||||
ValidatedPasswordField,
|
ValidatedPasswordField,
|
||||||
ValidatedTextField
|
ValidatedTextField,
|
||||||
|
useLayoutTitle
|
||||||
} from 'components';
|
} from 'components';
|
||||||
import { useI18nContext } from 'i18n/i18n-react';
|
import { useI18nContext } from 'i18n/i18n-react';
|
||||||
import { range } from 'lodash-es';
|
import { range } from 'lodash-es';
|
||||||
@@ -47,6 +48,8 @@ const APSettings: FC = () => {
|
|||||||
|
|
||||||
const { LL } = useI18nContext();
|
const { LL } = useI18nContext();
|
||||||
|
|
||||||
|
useLayoutTitle(LL.SETTINGS_OF(LL.ACCESS_POINT(0)));
|
||||||
|
|
||||||
const [fieldErrors, setFieldErrors] = useState<ValidateFieldsError>();
|
const [fieldErrors, setFieldErrors] = useState<ValidateFieldsError>();
|
||||||
|
|
||||||
const updateFormValue = updateValueDirty(
|
const updateFormValue = updateValueDirty(
|
||||||
@@ -20,6 +20,7 @@ import {
|
|||||||
import * as SystemApi from 'api/system';
|
import * as SystemApi from 'api/system';
|
||||||
|
|
||||||
import { useRequest } from 'alova';
|
import { useRequest } from 'alova';
|
||||||
|
import RestartMonitor from 'app/status/RestartMonitor';
|
||||||
import type { ValidateFieldsError } from 'async-validator';
|
import type { ValidateFieldsError } from 'async-validator';
|
||||||
import {
|
import {
|
||||||
BlockFormControlLabel,
|
BlockFormControlLabel,
|
||||||
@@ -31,15 +32,14 @@ import {
|
|||||||
ValidatedTextField,
|
ValidatedTextField,
|
||||||
useLayoutTitle
|
useLayoutTitle
|
||||||
} from 'components';
|
} from 'components';
|
||||||
import RestartMonitor from 'framework/system/RestartMonitor';
|
|
||||||
import { useI18nContext } from 'i18n/i18n-react';
|
import { useI18nContext } from 'i18n/i18n-react';
|
||||||
import { numberValue, updateValueDirty, useRest } from 'utils';
|
import { numberValue, updateValueDirty, useRest } from 'utils';
|
||||||
import { validate } from 'validators';
|
import { validate } from 'validators';
|
||||||
|
|
||||||
import * as EMSESP from './api';
|
import * as EMSESP from '../main/api';
|
||||||
import { BOARD_PROFILES } from './types';
|
import { BOARD_PROFILES } from '../main/types';
|
||||||
import type { Settings } from './types';
|
import type { Settings } from '../main/types';
|
||||||
import { createSettingsValidator } from './validators';
|
import { createSettingsValidator } from '../main/validators';
|
||||||
|
|
||||||
export function boardProfileSelectItems() {
|
export function boardProfileSelectItems() {
|
||||||
return Object.keys(BOARD_PROFILES).map((code) => (
|
return Object.keys(BOARD_PROFILES).map((code) => (
|
||||||
@@ -115,7 +115,7 @@ const ApplicationSettings: FC = () => {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
useLayoutTitle(LL.APPLICATION());
|
useLayoutTitle(LL.SETTINGS_OF(LL.APPLICATION()));
|
||||||
|
|
||||||
const content = () => {
|
const content = () => {
|
||||||
if (!data) {
|
if (!data) {
|
||||||
@@ -23,7 +23,8 @@ import {
|
|||||||
FormLoader,
|
FormLoader,
|
||||||
SectionContent,
|
SectionContent,
|
||||||
ValidatedPasswordField,
|
ValidatedPasswordField,
|
||||||
ValidatedTextField
|
ValidatedTextField,
|
||||||
|
useLayoutTitle
|
||||||
} from 'components';
|
} from 'components';
|
||||||
import { useI18nContext } from 'i18n/i18n-react';
|
import { useI18nContext } from 'i18n/i18n-react';
|
||||||
import type { MqttSettingsType } from 'types';
|
import type { MqttSettingsType } from 'types';
|
||||||
@@ -48,6 +49,7 @@ const MqttSettings: FC = () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const { LL } = useI18nContext();
|
const { LL } = useI18nContext();
|
||||||
|
useLayoutTitle(LL.SETTINGS_OF('MQTT'));
|
||||||
|
|
||||||
const [fieldErrors, setFieldErrors] = useState<ValidateFieldsError>();
|
const [fieldErrors, setFieldErrors] = useState<ValidateFieldsError>();
|
||||||
|
|
||||||
@@ -15,7 +15,8 @@ import {
|
|||||||
ButtonRow,
|
ButtonRow,
|
||||||
FormLoader,
|
FormLoader,
|
||||||
SectionContent,
|
SectionContent,
|
||||||
ValidatedTextField
|
ValidatedTextField,
|
||||||
|
useLayoutTitle
|
||||||
} from 'components';
|
} from 'components';
|
||||||
import { useI18nContext } from 'i18n/i18n-react';
|
import { useI18nContext } from 'i18n/i18n-react';
|
||||||
import type { NTPSettingsType } from 'types';
|
import type { NTPSettingsType } from 'types';
|
||||||
@@ -43,6 +44,7 @@ const NTPSettings: FC = () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const { LL } = useI18nContext();
|
const { LL } = useI18nContext();
|
||||||
|
useLayoutTitle(LL.SETTINGS_OF('NTP'));
|
||||||
|
|
||||||
const updateFormValue = updateValueDirty(
|
const updateFormValue = updateValueDirty(
|
||||||
origData,
|
origData,
|
||||||
@@ -79,15 +79,15 @@ const Settings: FC = () => {
|
|||||||
<ListMenuItem
|
<ListMenuItem
|
||||||
icon={TuneIcon}
|
icon={TuneIcon}
|
||||||
bgcolor="#134ba2"
|
bgcolor="#134ba2"
|
||||||
label={LL.APPLICATION()}
|
label={LL.SETTINGS_OF(LL.APPLICATION())}
|
||||||
text={LL.APPLICATION_SETTINGS_1()}
|
text={LL.APPLICATION_SETTINGS_1()}
|
||||||
to="ems-esp"
|
to="application"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<ListMenuItem
|
<ListMenuItem
|
||||||
icon={SettingsEthernetIcon}
|
icon={SettingsEthernetIcon}
|
||||||
bgcolor="#40828f"
|
bgcolor="#40828f"
|
||||||
label={LL.NETWORK(0)}
|
label={LL.SETTINGS_OF(LL.NETWORK(0))}
|
||||||
text={LL.CONFIGURE(LL.SETTINGS_OF(LL.NETWORK(1)))}
|
text={LL.CONFIGURE(LL.SETTINGS_OF(LL.NETWORK(1)))}
|
||||||
to="network"
|
to="network"
|
||||||
/>
|
/>
|
||||||
@@ -95,7 +95,7 @@ const Settings: FC = () => {
|
|||||||
<ListMenuItem
|
<ListMenuItem
|
||||||
icon={SettingsInputAntennaIcon}
|
icon={SettingsInputAntennaIcon}
|
||||||
bgcolor="#5f9a5f"
|
bgcolor="#5f9a5f"
|
||||||
label={LL.ACCESS_POINT(0)}
|
label={LL.SETTINGS_OF(LL.ACCESS_POINT(0))}
|
||||||
text={LL.CONFIGURE(LL.ACCESS_POINT(1))}
|
text={LL.CONFIGURE(LL.ACCESS_POINT(1))}
|
||||||
to="ap"
|
to="ap"
|
||||||
/>
|
/>
|
||||||
@@ -103,7 +103,7 @@ const Settings: FC = () => {
|
|||||||
<ListMenuItem
|
<ListMenuItem
|
||||||
icon={AccessTimeIcon}
|
icon={AccessTimeIcon}
|
||||||
bgcolor="#c5572c"
|
bgcolor="#c5572c"
|
||||||
label="NTP"
|
label={LL.SETTINGS_OF('NTP')}
|
||||||
text={LL.CONFIGURE(LL.LOCAL_TIME(1))}
|
text={LL.CONFIGURE(LL.LOCAL_TIME(1))}
|
||||||
to="ntp"
|
to="ntp"
|
||||||
/>
|
/>
|
||||||
@@ -111,14 +111,14 @@ const Settings: FC = () => {
|
|||||||
<ListMenuItem
|
<ListMenuItem
|
||||||
icon={DeviceHubIcon}
|
icon={DeviceHubIcon}
|
||||||
bgcolor="#68374d"
|
bgcolor="#68374d"
|
||||||
label="MQTT"
|
label={LL.SETTINGS_OF('MQTT')}
|
||||||
text={LL.CONFIGURE('MQTT')}
|
text={LL.CONFIGURE('MQTT')}
|
||||||
to="mqtt"
|
to="mqtt"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<ListMenuItem
|
<ListMenuItem
|
||||||
icon={LockIcon}
|
icon={LockIcon}
|
||||||
label={LL.SECURITY(0)}
|
label={LL.SETTINGS_OF(LL.SECURITY(0))}
|
||||||
text={LL.SECURITY_1()}
|
text={LL.SECURITY_1()}
|
||||||
to="security"
|
to="security"
|
||||||
/>
|
/>
|
||||||
@@ -6,8 +6,9 @@ import { Box, Button, Divider, Link, Typography } from '@mui/material';
|
|||||||
|
|
||||||
import * as SystemApi from 'api/system';
|
import * as SystemApi from 'api/system';
|
||||||
|
|
||||||
import * as EMSESP from 'project/api';
|
import * as EMSESP from 'app/main/api';
|
||||||
import { useRequest } from 'alova';
|
import { useRequest } from 'alova';
|
||||||
|
import type { APIcall } from 'app/main/types';
|
||||||
import {
|
import {
|
||||||
FormLoader,
|
FormLoader,
|
||||||
SectionContent,
|
SectionContent,
|
||||||
@@ -15,9 +16,8 @@ import {
|
|||||||
useLayoutTitle
|
useLayoutTitle
|
||||||
} from 'components';
|
} from 'components';
|
||||||
import { useI18nContext } from 'i18n/i18n-react';
|
import { useI18nContext } from 'i18n/i18n-react';
|
||||||
import type { APIcall } from 'project/types';
|
|
||||||
|
|
||||||
import RestartMonitor from './RestartMonitor';
|
import RestartMonitor from '../status/RestartMonitor';
|
||||||
|
|
||||||
const UploadDownload: FC = () => {
|
const UploadDownload: FC = () => {
|
||||||
const { LL } = useI18nContext();
|
const { LL } = useI18nContext();
|
||||||
@@ -9,13 +9,12 @@ import { useI18nContext } from 'i18n/i18n-react';
|
|||||||
import type { WiFiNetwork } from 'types';
|
import type { WiFiNetwork } from 'types';
|
||||||
|
|
||||||
import NetworkSettings from './NetworkSettings';
|
import NetworkSettings from './NetworkSettings';
|
||||||
import NetworkStatus from './NetworkStatus';
|
|
||||||
import { WiFiConnectionContext } from './WiFiConnectionContext';
|
import { WiFiConnectionContext } from './WiFiConnectionContext';
|
||||||
import WiFiNetworkScanner from './WiFiNetworkScanner';
|
import WiFiNetworkScanner from './WiFiNetworkScanner';
|
||||||
|
|
||||||
const Network: FC = () => {
|
const Network: FC = () => {
|
||||||
const { LL } = useI18nContext();
|
const { LL } = useI18nContext();
|
||||||
useLayoutTitle(LL.NETWORK(0));
|
useLayoutTitle(LL.SETTINGS_OF(LL.NETWORK(0)));
|
||||||
|
|
||||||
const { routerTab } = useRouterTab();
|
const { routerTab } = useRouterTab();
|
||||||
|
|
||||||
@@ -45,11 +44,9 @@ const Network: FC = () => {
|
|||||||
>
|
>
|
||||||
<RouterTabs value={routerTab}>
|
<RouterTabs value={routerTab}>
|
||||||
<Tab value="settings" label={LL.SETTINGS_OF(LL.NETWORK(1))} />
|
<Tab value="settings" label={LL.SETTINGS_OF(LL.NETWORK(1))} />
|
||||||
<Tab value="status" label={LL.STATUS_OF(LL.NETWORK(1))} />
|
|
||||||
<Tab value="scan" label={LL.NETWORK_SCAN()} />
|
<Tab value="scan" label={LL.NETWORK_SCAN()} />
|
||||||
</RouterTabs>
|
</RouterTabs>
|
||||||
<Routes>
|
<Routes>
|
||||||
<Route path="status" element={<NetworkStatus />} />
|
|
||||||
<Route path="scan" element={<WiFiNetworkScanner />} />
|
<Route path="scan" element={<WiFiNetworkScanner />} />
|
||||||
<Route path="settings" element={<NetworkSettings />} />
|
<Route path="settings" element={<NetworkSettings />} />
|
||||||
<Route path="*" element={<Navigate replace to="settings" />} />
|
<Route path="*" element={<Navigate replace to="settings" />} />
|
||||||
@@ -44,7 +44,7 @@ import { updateValueDirty, useRest } from 'utils';
|
|||||||
import { validate } from 'validators';
|
import { validate } from 'validators';
|
||||||
import { createNetworkSettingsValidator } from 'validators/network';
|
import { createNetworkSettingsValidator } from 'validators/network';
|
||||||
|
|
||||||
import RestartMonitor from '../system/RestartMonitor';
|
import RestartMonitor from '../../status/RestartMonitor';
|
||||||
import { WiFiConnectionContext } from './WiFiConnectionContext';
|
import { WiFiConnectionContext } from './WiFiConnectionContext';
|
||||||
import { isNetworkOpen, networkSecurityMode } from './WiFiNetworkSelector';
|
import { isNetworkOpen, networkSecurityMode } from './WiFiNetworkSelector';
|
||||||
|
|
||||||
@@ -11,7 +11,7 @@ import SecuritySettings from './SecuritySettings';
|
|||||||
|
|
||||||
const Security: FC = () => {
|
const Security: FC = () => {
|
||||||
const { LL } = useI18nContext();
|
const { LL } = useI18nContext();
|
||||||
useLayoutTitle(LL.SECURITY(0));
|
useLayoutTitle(LL.SETTINGS_OF(LL.SECURITY(0)));
|
||||||
|
|
||||||
const { routerTab } = useRouterTab();
|
const { routerTab } = useRouterTab();
|
||||||
|
|
||||||
@@ -19,7 +19,7 @@ import type { Theme } from '@mui/material';
|
|||||||
import * as APApi from 'api/ap';
|
import * as APApi from 'api/ap';
|
||||||
|
|
||||||
import { useRequest } from 'alova';
|
import { useRequest } from 'alova';
|
||||||
import { ButtonRow, FormLoader, SectionContent } from 'components';
|
import { ButtonRow, FormLoader, SectionContent, useLayoutTitle } from 'components';
|
||||||
import { useI18nContext } from 'i18n/i18n-react';
|
import { useI18nContext } from 'i18n/i18n-react';
|
||||||
import type { APStatusType } from 'types';
|
import type { APStatusType } from 'types';
|
||||||
import { APNetworkStatus } from 'types';
|
import { APNetworkStatus } from 'types';
|
||||||
@@ -41,6 +41,7 @@ const APStatus: FC = () => {
|
|||||||
const { data: data, send: loadData, error } = useRequest(APApi.readAPStatus);
|
const { data: data, send: loadData, error } = useRequest(APApi.readAPStatus);
|
||||||
|
|
||||||
const { LL } = useI18nContext();
|
const { LL } = useI18nContext();
|
||||||
|
useLayoutTitle(LL.STATUS_OF(LL.ACCESS_POINT(0)));
|
||||||
|
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
|
|
||||||
@@ -19,15 +19,15 @@ import { ButtonRow, FormLoader, SectionContent, useLayoutTitle } from 'component
|
|||||||
import { useI18nContext } from 'i18n/i18n-react';
|
import { useI18nContext } from 'i18n/i18n-react';
|
||||||
import type { Translation } from 'i18n/i18n-types';
|
import type { Translation } from 'i18n/i18n-types';
|
||||||
|
|
||||||
import * as EMSESP from './api';
|
import * as EMSESP from '../main/api';
|
||||||
import type { Stat } from './types';
|
import type { Stat } from '../main/types';
|
||||||
|
|
||||||
const SystemActivity: FC = () => {
|
const SystemActivity: FC = () => {
|
||||||
const { data: data, send: loadData, error } = useRequest(EMSESP.readActivity);
|
const { data: data, send: loadData, error } = useRequest(EMSESP.readActivity);
|
||||||
|
|
||||||
const { LL } = useI18nContext();
|
const { LL } = useI18nContext();
|
||||||
|
|
||||||
useLayoutTitle(LL.SYSTEM(0));
|
useLayoutTitle(LL.DATA_TRAFFIC());
|
||||||
|
|
||||||
const stats_theme = tableTheme({
|
const stats_theme = tableTheme({
|
||||||
Table: `
|
Table: `
|
||||||
@@ -26,7 +26,7 @@ import { useRequest } from 'alova';
|
|||||||
import { ButtonRow, FormLoader, SectionContent, useLayoutTitle } from 'components';
|
import { ButtonRow, FormLoader, SectionContent, useLayoutTitle } from 'components';
|
||||||
import { useI18nContext } from 'i18n/i18n-react';
|
import { useI18nContext } from 'i18n/i18n-react';
|
||||||
|
|
||||||
import BBQKeesIcon from '../../project/bbqkees.svg';
|
import BBQKeesIcon from './bbqkees.svg';
|
||||||
|
|
||||||
function formatNumber(num: number) {
|
function formatNumber(num: number) {
|
||||||
return new Intl.NumberFormat().format(num);
|
return new Intl.NumberFormat().format(num);
|
||||||
@@ -20,7 +20,7 @@ import type { Theme } from '@mui/material';
|
|||||||
import * as MqttApi from 'api/mqtt';
|
import * as MqttApi from 'api/mqtt';
|
||||||
|
|
||||||
import { useRequest } from 'alova';
|
import { useRequest } from 'alova';
|
||||||
import { ButtonRow, FormLoader, SectionContent } from 'components';
|
import { ButtonRow, FormLoader, SectionContent, useLayoutTitle } from 'components';
|
||||||
import { useI18nContext } from 'i18n/i18n-react';
|
import { useI18nContext } from 'i18n/i18n-react';
|
||||||
import type { MqttStatusType } from 'types';
|
import type { MqttStatusType } from 'types';
|
||||||
import { MqttDisconnectReason } from 'types';
|
import { MqttDisconnectReason } from 'types';
|
||||||
@@ -61,6 +61,7 @@ const MqttStatus: FC = () => {
|
|||||||
const { data: data, send: loadData, error } = useRequest(MqttApi.readMqttStatus);
|
const { data: data, send: loadData, error } = useRequest(MqttApi.readMqttStatus);
|
||||||
|
|
||||||
const { LL } = useI18nContext();
|
const { LL } = useI18nContext();
|
||||||
|
useLayoutTitle(LL.STATUS_OF('MQTT'));
|
||||||
|
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
|
|
||||||
@@ -31,7 +31,7 @@ import * as NTPApi from 'api/ntp';
|
|||||||
|
|
||||||
import { dialogStyle } from 'CustomTheme';
|
import { dialogStyle } from 'CustomTheme';
|
||||||
import { useRequest } from 'alova';
|
import { useRequest } from 'alova';
|
||||||
import { ButtonRow, FormLoader, SectionContent } from 'components';
|
import { ButtonRow, FormLoader, SectionContent, useLayoutTitle } from 'components';
|
||||||
import { useI18nContext } from 'i18n/i18n-react';
|
import { useI18nContext } from 'i18n/i18n-react';
|
||||||
import type { NTPStatusType, Time } from 'types';
|
import type { NTPStatusType, Time } from 'types';
|
||||||
import { NTPSyncStatus } from 'types';
|
import { NTPSyncStatus } from 'types';
|
||||||
@@ -45,6 +45,7 @@ const NTPStatus: FC = () => {
|
|||||||
const [processing, setProcessing] = useState<boolean>(false);
|
const [processing, setProcessing] = useState<boolean>(false);
|
||||||
|
|
||||||
const { LL } = useI18nContext();
|
const { LL } = useI18nContext();
|
||||||
|
useLayoutTitle(LL.STATUS_OF('NTP'));
|
||||||
|
|
||||||
const { send: updateTime } = useRequest(
|
const { send: updateTime } = useRequest(
|
||||||
(local_time: Time) => NTPApi.updateTime(local_time),
|
(local_time: Time) => NTPApi.updateTime(local_time),
|
||||||
@@ -23,7 +23,7 @@ import type { Theme } from '@mui/material';
|
|||||||
import * as NetworkApi from 'api/network';
|
import * as NetworkApi from 'api/network';
|
||||||
|
|
||||||
import { useRequest } from 'alova';
|
import { useRequest } from 'alova';
|
||||||
import { ButtonRow, FormLoader, SectionContent } from 'components';
|
import { ButtonRow, FormLoader, SectionContent, useLayoutTitle } from 'components';
|
||||||
import { useI18nContext } from 'i18n/i18n-react';
|
import { useI18nContext } from 'i18n/i18n-react';
|
||||||
import type { NetworkStatusType } from 'types';
|
import type { NetworkStatusType } from 'types';
|
||||||
import { NetworkConnectionStatus } from 'types';
|
import { NetworkConnectionStatus } from 'types';
|
||||||
@@ -91,6 +91,7 @@ const NetworkStatus: FC = () => {
|
|||||||
} = useRequest(NetworkApi.readNetworkStatus);
|
} = useRequest(NetworkApi.readNetworkStatus);
|
||||||
|
|
||||||
const { LL } = useI18nContext();
|
const { LL } = useI18nContext();
|
||||||
|
useLayoutTitle(LL.STATUS_OF(LL.NETWORK(1)));
|
||||||
|
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
|
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
import { type FC, useContext, useState } from 'react';
|
import { type FC, useContext, useState } from 'react';
|
||||||
|
import { useNavigate } from 'react-router-dom';
|
||||||
import { toast } from 'react-toastify';
|
import { toast } from 'react-toastify';
|
||||||
|
|
||||||
import AccessTimeIcon from '@mui/icons-material/AccessTime';
|
import AccessTimeIcon from '@mui/icons-material/AccessTime';
|
||||||
@@ -6,6 +7,7 @@ import BuildIcon from '@mui/icons-material/Build';
|
|||||||
import CancelIcon from '@mui/icons-material/Cancel';
|
import CancelIcon from '@mui/icons-material/Cancel';
|
||||||
import DeviceHubIcon from '@mui/icons-material/DeviceHub';
|
import DeviceHubIcon from '@mui/icons-material/DeviceHub';
|
||||||
import DirectionsBusIcon from '@mui/icons-material/DirectionsBus';
|
import DirectionsBusIcon from '@mui/icons-material/DirectionsBus';
|
||||||
|
import LogoDevIcon from '@mui/icons-material/LogoDev';
|
||||||
import MemoryIcon from '@mui/icons-material/Memory';
|
import MemoryIcon from '@mui/icons-material/Memory';
|
||||||
import PermScanWifiIcon from '@mui/icons-material/PermScanWifi';
|
import PermScanWifiIcon from '@mui/icons-material/PermScanWifi';
|
||||||
import PowerSettingsNewIcon from '@mui/icons-material/PowerSettingsNew';
|
import PowerSettingsNewIcon from '@mui/icons-material/PowerSettingsNew';
|
||||||
@@ -13,6 +15,7 @@ import RefreshIcon from '@mui/icons-material/Refresh';
|
|||||||
import RouterIcon from '@mui/icons-material/Router';
|
import RouterIcon from '@mui/icons-material/Router';
|
||||||
import SettingsInputAntennaIcon from '@mui/icons-material/SettingsInputAntenna';
|
import SettingsInputAntennaIcon from '@mui/icons-material/SettingsInputAntenna';
|
||||||
import TimerIcon from '@mui/icons-material/Timer';
|
import TimerIcon from '@mui/icons-material/Timer';
|
||||||
|
import UpgradeIcon from '@mui/icons-material/Upgrade';
|
||||||
import WifiIcon from '@mui/icons-material/Wifi';
|
import WifiIcon from '@mui/icons-material/Wifi';
|
||||||
import {
|
import {
|
||||||
Avatar,
|
Avatar,
|
||||||
@@ -22,7 +25,6 @@ import {
|
|||||||
DialogActions,
|
DialogActions,
|
||||||
DialogContent,
|
DialogContent,
|
||||||
DialogTitle,
|
DialogTitle,
|
||||||
Divider,
|
|
||||||
List,
|
List,
|
||||||
ListItem,
|
ListItem,
|
||||||
ListItemAvatar,
|
ListItemAvatar,
|
||||||
@@ -32,14 +34,14 @@ import {
|
|||||||
|
|
||||||
import * as SystemApi from 'api/system';
|
import * as SystemApi from 'api/system';
|
||||||
|
|
||||||
import * as EMSESP from 'project/api';
|
import * as EMSESP from 'app/main/api';
|
||||||
import { dialogStyle } from 'CustomTheme';
|
import { dialogStyle } from 'CustomTheme';
|
||||||
import { useRequest } from 'alova';
|
import { useRequest } from 'alova';
|
||||||
|
import { busConnectionStatus } from 'app/main/types';
|
||||||
import { FormLoader, SectionContent, useLayoutTitle } from 'components';
|
import { FormLoader, SectionContent, useLayoutTitle } from 'components';
|
||||||
import ListMenuItem from 'components/layout/ListMenuItem';
|
import ListMenuItem from 'components/layout/ListMenuItem';
|
||||||
import { AuthenticatedContext } from 'contexts/authentication';
|
import { AuthenticatedContext } from 'contexts/authentication';
|
||||||
import { useI18nContext } from 'i18n/i18n-react';
|
import { useI18nContext } from 'i18n/i18n-react';
|
||||||
import { busConnectionStatus } from 'project/types';
|
|
||||||
import { NTPSyncStatus, NetworkConnectionStatus } from 'types';
|
import { NTPSyncStatus, NetworkConnectionStatus } from 'types';
|
||||||
|
|
||||||
import RestartMonitor from './RestartMonitor';
|
import RestartMonitor from './RestartMonitor';
|
||||||
@@ -47,12 +49,13 @@ import RestartMonitor from './RestartMonitor';
|
|||||||
const SystemStatus: FC = () => {
|
const SystemStatus: FC = () => {
|
||||||
const { LL } = useI18nContext();
|
const { LL } = useI18nContext();
|
||||||
|
|
||||||
useLayoutTitle(LL.SYSTEM(0));
|
const navigate = useNavigate();
|
||||||
|
|
||||||
|
useLayoutTitle(LL.STATUS_OF(''));
|
||||||
|
|
||||||
const { me } = useContext(AuthenticatedContext);
|
const { me } = useContext(AuthenticatedContext);
|
||||||
|
|
||||||
const [confirmRestart, setConfirmRestart] = useState<boolean>(false);
|
const [confirmRestart, setConfirmRestart] = useState<boolean>(false);
|
||||||
const [confirmScan, setConfirmScan] = useState<boolean>(false);
|
|
||||||
const [processing, setProcessing] = useState<boolean>(false);
|
const [processing, setProcessing] = useState<boolean>(false);
|
||||||
const [restarting, setRestarting] = useState<boolean>();
|
const [restarting, setRestarting] = useState<boolean>();
|
||||||
|
|
||||||
@@ -70,10 +73,6 @@ const SystemStatus: FC = () => {
|
|||||||
error
|
error
|
||||||
} = useRequest(SystemApi.readSystemStatus, { force: true });
|
} = useRequest(SystemApi.readSystemStatus, { force: true });
|
||||||
|
|
||||||
const { send: scanDevices } = useRequest(EMSESP.scanDevices, {
|
|
||||||
immediate: false
|
|
||||||
});
|
|
||||||
|
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
|
|
||||||
const formatDurationSec = (duration_sec: number) => {
|
const formatDurationSec = (duration_sec: number) => {
|
||||||
@@ -104,14 +103,20 @@ const SystemStatus: FC = () => {
|
|||||||
if (data) {
|
if (data) {
|
||||||
switch (data.status) {
|
switch (data.status) {
|
||||||
case busConnectionStatus.BUS_STATUS_CONNECTED:
|
case busConnectionStatus.BUS_STATUS_CONNECTED:
|
||||||
return LL.CONNECTED(0) + ' (' + formatDurationSec(data.bus_uptime) + ')';
|
return (
|
||||||
|
'EMS ' +
|
||||||
|
LL.CONNECTED(0) +
|
||||||
|
' (' +
|
||||||
|
formatDurationSec(data.bus_uptime) +
|
||||||
|
')'
|
||||||
|
);
|
||||||
case busConnectionStatus.BUS_STATUS_TX_ERRORS:
|
case busConnectionStatus.BUS_STATUS_TX_ERRORS:
|
||||||
return LL.TX_ISSUES();
|
return 'EMS ' + LL.TX_ISSUES();
|
||||||
case busConnectionStatus.BUS_STATUS_OFFLINE:
|
case busConnectionStatus.BUS_STATUS_OFFLINE:
|
||||||
return LL.DISCONNECTED();
|
return 'EMS ' + LL.DISCONNECTED();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 'Unknown';
|
return 'EMS state unknown';
|
||||||
};
|
};
|
||||||
|
|
||||||
const busStatusHighlight = () => {
|
const busStatusHighlight = () => {
|
||||||
@@ -196,46 +201,6 @@ const SystemStatus: FC = () => {
|
|||||||
const activeHighlight = (value: boolean) =>
|
const activeHighlight = (value: boolean) =>
|
||||||
value ? theme.palette.success.main : theme.palette.info.main;
|
value ? theme.palette.success.main : theme.palette.info.main;
|
||||||
|
|
||||||
const scan = async () => {
|
|
||||||
await scanDevices()
|
|
||||||
.then(() => {
|
|
||||||
toast.info(LL.SCANNING() + '...');
|
|
||||||
})
|
|
||||||
.catch((error: Error) => {
|
|
||||||
toast.error(error.message);
|
|
||||||
});
|
|
||||||
setConfirmScan(false);
|
|
||||||
};
|
|
||||||
|
|
||||||
const renderScanDialog = () => (
|
|
||||||
<Dialog
|
|
||||||
sx={dialogStyle}
|
|
||||||
open={confirmScan}
|
|
||||||
onClose={() => setConfirmScan(false)}
|
|
||||||
>
|
|
||||||
<DialogTitle>{LL.SCAN_DEVICES()}</DialogTitle>
|
|
||||||
<DialogContent dividers>{LL.EMS_SCAN()}</DialogContent>
|
|
||||||
<DialogActions>
|
|
||||||
<Button
|
|
||||||
startIcon={<CancelIcon />}
|
|
||||||
variant="outlined"
|
|
||||||
onClick={() => setConfirmScan(false)}
|
|
||||||
color="secondary"
|
|
||||||
>
|
|
||||||
{LL.CANCEL()}
|
|
||||||
</Button>
|
|
||||||
<Button
|
|
||||||
startIcon={<PermScanWifiIcon />}
|
|
||||||
variant="outlined"
|
|
||||||
onClick={scan}
|
|
||||||
color="primary"
|
|
||||||
>
|
|
||||||
{LL.SCAN()}
|
|
||||||
</Button>
|
|
||||||
</DialogActions>
|
|
||||||
</Dialog>
|
|
||||||
);
|
|
||||||
|
|
||||||
const restart = async () => {
|
const restart = async () => {
|
||||||
setProcessing(true);
|
setProcessing(true);
|
||||||
await restartCommand()
|
await restartCommand()
|
||||||
@@ -313,7 +278,29 @@ const SystemStatus: FC = () => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<List>
|
<List sx={{ borderRadius: 3, border: '2px solid grey' }}>
|
||||||
|
<ListItem>
|
||||||
|
<ListItemAvatar>
|
||||||
|
<Avatar sx={{ bgcolor: '#134ba2', color: 'white' }}>
|
||||||
|
<BuildIcon />
|
||||||
|
</Avatar>
|
||||||
|
</ListItemAvatar>
|
||||||
|
<ListItemText
|
||||||
|
primary={LL.EMS_ESP_VER()}
|
||||||
|
secondary={data.emsesp_version}
|
||||||
|
/>
|
||||||
|
{me.admin && (
|
||||||
|
<Button
|
||||||
|
startIcon={<UpgradeIcon />}
|
||||||
|
variant="outlined"
|
||||||
|
color="primary"
|
||||||
|
onClick={() => navigate('/settings/upload')}
|
||||||
|
>
|
||||||
|
{LL.UPDATE()}
|
||||||
|
</Button>
|
||||||
|
)}
|
||||||
|
</ListItem>
|
||||||
|
|
||||||
<ListItem>
|
<ListItem>
|
||||||
<ListItemAvatar>
|
<ListItemAvatar>
|
||||||
<Avatar sx={{ bgcolor: '#c5572c', color: 'white' }}>
|
<Avatar sx={{ bgcolor: '#c5572c', color: 'white' }}>
|
||||||
@@ -336,66 +323,24 @@ const SystemStatus: FC = () => {
|
|||||||
)}
|
)}
|
||||||
</ListItem>
|
</ListItem>
|
||||||
|
|
||||||
<Divider variant="inset" component="li" />
|
|
||||||
<ListItem>
|
|
||||||
<ListItemAvatar>
|
|
||||||
<Avatar sx={{ bgcolor: '#5d89f7', color: 'white' }}>
|
|
||||||
<DeviceHubIcon />
|
|
||||||
</Avatar>
|
|
||||||
</ListItemAvatar>
|
|
||||||
<ListItemText
|
|
||||||
primary={LL.ACTIVE_DEVICES()}
|
|
||||||
secondary={
|
|
||||||
LL.NUM_DEVICES({ num: data.num_devices }) +
|
|
||||||
', ' +
|
|
||||||
LL.NUM_TEMP_SENSORS({ num: data.num_sensors }) +
|
|
||||||
', ' +
|
|
||||||
LL.NUM_ANALOG_SENSORS({ num: data.num_analogs })
|
|
||||||
}
|
|
||||||
/>
|
|
||||||
{me.admin && (
|
|
||||||
<Button
|
|
||||||
startIcon={<PermScanWifiIcon />}
|
|
||||||
variant="outlined"
|
|
||||||
color="primary"
|
|
||||||
onClick={() => setConfirmScan(true)}
|
|
||||||
>
|
|
||||||
{LL.SCAN_DEVICES()}
|
|
||||||
</Button>
|
|
||||||
)}
|
|
||||||
</ListItem>
|
|
||||||
|
|
||||||
<Divider variant="inset" component="li" />
|
|
||||||
<ListMenuItem
|
|
||||||
disabled={!me.admin}
|
|
||||||
icon={BuildIcon}
|
|
||||||
bgcolor="#134ba2"
|
|
||||||
label={LL.EMS_ESP_VER()}
|
|
||||||
text={data.emsesp_version}
|
|
||||||
to="/settings/upload"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<Divider variant="inset" component="li" />
|
|
||||||
<ListMenuItem
|
<ListMenuItem
|
||||||
disabled={!me.admin}
|
disabled={!me.admin}
|
||||||
icon={DirectionsBusIcon}
|
icon={DirectionsBusIcon}
|
||||||
bgcolor={busStatusHighlight()}
|
bgcolor={busStatusHighlight()}
|
||||||
label={LL.EMS_BUS_STATUS()}
|
label={LL.DATA_TRAFFIC()}
|
||||||
text={busStatus()}
|
text={busStatus()}
|
||||||
to="/system/activity"
|
to="/status/activity"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<Divider variant="inset" component="li" />
|
|
||||||
<ListMenuItem
|
<ListMenuItem
|
||||||
disabled={!me.admin}
|
disabled={!me.admin}
|
||||||
icon={MemoryIcon}
|
icon={MemoryIcon}
|
||||||
bgcolor="#68374d"
|
bgcolor="#68374d"
|
||||||
label={LL.STATUS_OF(LL.HARDWARE())}
|
label={LL.STATUS_OF(LL.HARDWARE())}
|
||||||
text={formatNumber(data.free_heap) + ' KB' + ' ' + LL.FREE_MEMORY()}
|
text={formatNumber(data.free_heap) + ' KB' + ' ' + LL.FREE_MEMORY()}
|
||||||
to="/system/espsystemstatus"
|
to="/status/hardwarestatus"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<Divider variant="inset" component="li" />
|
|
||||||
<ListMenuItem
|
<ListMenuItem
|
||||||
disabled={!me.admin}
|
disabled={!me.admin}
|
||||||
icon={
|
icon={
|
||||||
@@ -406,42 +351,46 @@ const SystemStatus: FC = () => {
|
|||||||
bgcolor={networkStatusHighlight()}
|
bgcolor={networkStatusHighlight()}
|
||||||
label={LL.STATUS_OF(LL.NETWORK(1))}
|
label={LL.STATUS_OF(LL.NETWORK(1))}
|
||||||
text={networkStatus()}
|
text={networkStatus()}
|
||||||
to="/settings/network/status"
|
to="/status/network"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<Divider variant="inset" component="li" />
|
|
||||||
<ListMenuItem
|
<ListMenuItem
|
||||||
disabled={!me.admin}
|
disabled={!me.admin}
|
||||||
icon={DeviceHubIcon}
|
icon={DeviceHubIcon}
|
||||||
bgcolor={activeHighlight(data.mqtt_status)}
|
bgcolor={activeHighlight(data.mqtt_status)}
|
||||||
label={LL.STATUS_OF('MQTT')}
|
label={LL.STATUS_OF('MQTT')}
|
||||||
text={data.mqtt_status ? LL.ACTIVE() : LL.INACTIVE(0)}
|
text={data.mqtt_status ? LL.ACTIVE() : LL.INACTIVE(0)}
|
||||||
to="/settings/mqtt/status"
|
to="/status/mqtt"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<Divider variant="inset" component="li" />
|
|
||||||
<ListMenuItem
|
<ListMenuItem
|
||||||
disabled={!me.admin}
|
disabled={!me.admin}
|
||||||
icon={AccessTimeIcon}
|
icon={AccessTimeIcon}
|
||||||
bgcolor={ntpStatusHighlight()}
|
bgcolor={ntpStatusHighlight()}
|
||||||
label={LL.STATUS_OF('NTP')}
|
label={LL.STATUS_OF('NTP')}
|
||||||
text={ntpStatus()}
|
text={ntpStatus()}
|
||||||
to="/settings/ntp/status"
|
to="/status/ntp"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<Divider variant="inset" component="li" />
|
|
||||||
<ListMenuItem
|
<ListMenuItem
|
||||||
disabled={!me.admin}
|
disabled={!me.admin}
|
||||||
icon={SettingsInputAntennaIcon}
|
icon={SettingsInputAntennaIcon}
|
||||||
bgcolor={activeHighlight(data.ap_status)}
|
bgcolor={activeHighlight(data.ap_status)}
|
||||||
label={LL.ACCESS_POINT(0)}
|
label={LL.STATUS_OF(LL.ACCESS_POINT(0))}
|
||||||
text={data.ap_status ? LL.ACTIVE() : LL.INACTIVE(0)}
|
text={data.ap_status ? LL.ACTIVE() : LL.INACTIVE(0)}
|
||||||
to="/settings/ap/status"
|
to="/status/ap"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<ListMenuItem
|
||||||
|
disabled={!me.admin}
|
||||||
|
icon={LogoDevIcon}
|
||||||
|
bgcolor="#40828f"
|
||||||
|
label={LL.LOG_OF(LL.SYSTEM(0))}
|
||||||
|
text={LL.VIEW_LOG()}
|
||||||
|
to="/status/log"
|
||||||
/>
|
/>
|
||||||
<Divider variant="inset" component="li" />
|
|
||||||
</List>
|
</List>
|
||||||
|
|
||||||
{renderScanDialog()}
|
|
||||||
{renderRestartDialog()}
|
{renderRestartDialog()}
|
||||||
|
|
||||||
<Box mt={2} display="flex" flexWrap="wrap">
|
<Box mt={2} display="flex" flexWrap="wrap">
|
||||||
@@ -75,7 +75,7 @@ const levelLabel = (level: LogLevel) => {
|
|||||||
const SystemLog: FC = () => {
|
const SystemLog: FC = () => {
|
||||||
const { LL } = useI18nContext();
|
const { LL } = useI18nContext();
|
||||||
|
|
||||||
useLayoutTitle(LL.SYSTEM(0));
|
useLayoutTitle(LL.LOG_OF(LL.SYSTEM(0)));
|
||||||
|
|
||||||
const {
|
const {
|
||||||
loadData,
|
loadData,
|
||||||
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 4.6 KiB |
@@ -16,11 +16,9 @@ const LayoutAppBar: FC<LayoutAppBarProps> = ({ title, onToggleDrawer }) => {
|
|||||||
const pathnames = useLocation()
|
const pathnames = useLocation()
|
||||||
.pathname.split('/')
|
.pathname.split('/')
|
||||||
.filter((x) => x);
|
.filter((x) => x);
|
||||||
|
const show_back = pathnames.length > 1;
|
||||||
|
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
let show_back = false;
|
|
||||||
if (pathnames.length > 1) {
|
|
||||||
show_back = pathnames[0] !== 'system' || pathnames[1] === 'espsystemstatus';
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<AppBar
|
<AppBar
|
||||||
|
|||||||
@@ -128,7 +128,11 @@ const LayoutMenu: FC = () => {
|
|||||||
</List>
|
</List>
|
||||||
|
|
||||||
<List style={{ marginTop: `auto` }}>
|
<List style={{ marginTop: `auto` }}>
|
||||||
<LayoutMenuItem icon={AssessmentIcon} label={LL.SYSTEM(0)} to="/system" />
|
<LayoutMenuItem
|
||||||
|
icon={AssessmentIcon}
|
||||||
|
label={LL.STATUS_OF('')}
|
||||||
|
to="/status"
|
||||||
|
/>
|
||||||
<LayoutMenuItem
|
<LayoutMenuItem
|
||||||
icon={SettingsIcon}
|
icon={SettingsIcon}
|
||||||
label={LL.SETTINGS(0)}
|
label={LL.SETTINGS(0)}
|
||||||
|
|||||||
@@ -59,18 +59,12 @@ const LayoutMenuItem: FC<ListMenuItemProps> = ({
|
|||||||
}
|
}
|
||||||
>
|
>
|
||||||
<ListItemButton component={Link} to={to}>
|
<ListItemButton component={Link} to={to}>
|
||||||
<RenderIcon
|
<RenderIcon icon={icon} bgcolor={bgcolor} label={label} text={text} />
|
||||||
icon={icon}
|
|
||||||
bgcolor={bgcolor}
|
|
||||||
label={label}
|
|
||||||
text={text}
|
|
||||||
to=""
|
|
||||||
/>
|
|
||||||
</ListItemButton>
|
</ListItemButton>
|
||||||
</ListItem>
|
</ListItem>
|
||||||
) : (
|
) : (
|
||||||
<ListItem>
|
<ListItem>
|
||||||
<RenderIcon icon={icon} bgcolor={bgcolor} label={label} text={text} to="" />
|
<RenderIcon icon={icon} bgcolor={bgcolor} label={label} text={text} />
|
||||||
</ListItem>
|
</ListItem>
|
||||||
)}
|
)}
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -1,34 +0,0 @@
|
|||||||
import type { FC } from 'react';
|
|
||||||
import { Navigate, Route, Routes } from 'react-router-dom';
|
|
||||||
|
|
||||||
import { Tab } from '@mui/material';
|
|
||||||
|
|
||||||
import { RouterTabs, useLayoutTitle, useRouterTab } from 'components';
|
|
||||||
import { useI18nContext } from 'i18n/i18n-react';
|
|
||||||
|
|
||||||
import APSettings from './APSettings';
|
|
||||||
import APStatus from './APStatus';
|
|
||||||
|
|
||||||
const AccessPoint: FC = () => {
|
|
||||||
const { LL } = useI18nContext();
|
|
||||||
|
|
||||||
useLayoutTitle(LL.ACCESS_POINT(0));
|
|
||||||
|
|
||||||
const { routerTab } = useRouterTab();
|
|
||||||
|
|
||||||
return (
|
|
||||||
<>
|
|
||||||
<RouterTabs value={routerTab}>
|
|
||||||
<Tab value="settings" label={LL.SETTINGS_OF(LL.ACCESS_POINT(1))} />
|
|
||||||
<Tab value="status" label={LL.STATUS_OF(LL.ACCESS_POINT(1))} />
|
|
||||||
</RouterTabs>
|
|
||||||
<Routes>
|
|
||||||
<Route path="status" element={<APStatus />} />
|
|
||||||
<Route path="settings" element={<APSettings />} />
|
|
||||||
<Route path="*" element={<Navigate replace to="settings" />} />
|
|
||||||
</Routes>
|
|
||||||
</>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default AccessPoint;
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
import type { FC } from 'react';
|
|
||||||
import { Navigate, Route, Routes } from 'react-router-dom';
|
|
||||||
|
|
||||||
import { Tab } from '@mui/material';
|
|
||||||
|
|
||||||
import { RouterTabs, useLayoutTitle, useRouterTab } from 'components';
|
|
||||||
import { useI18nContext } from 'i18n/i18n-react';
|
|
||||||
|
|
||||||
import MqttSettings from './MqttSettings';
|
|
||||||
import MqttStatus from './MqttStatus';
|
|
||||||
|
|
||||||
const Mqtt: FC = () => {
|
|
||||||
const { LL } = useI18nContext();
|
|
||||||
|
|
||||||
useLayoutTitle('MQTT');
|
|
||||||
|
|
||||||
const { routerTab } = useRouterTab();
|
|
||||||
|
|
||||||
return (
|
|
||||||
<>
|
|
||||||
<RouterTabs value={routerTab}>
|
|
||||||
<Tab value="settings" label={LL.SETTINGS_OF('MQTT')} />
|
|
||||||
<Tab value="status" label={LL.STATUS_OF('MQTT')} />
|
|
||||||
</RouterTabs>
|
|
||||||
<Routes>
|
|
||||||
<Route path="status" element={<MqttStatus />} />
|
|
||||||
<Route path="settings" element={<MqttSettings />} />
|
|
||||||
<Route path="*" element={<Navigate replace to="settings" />} />
|
|
||||||
</Routes>
|
|
||||||
</>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default Mqtt;
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
import type { FC } from 'react';
|
|
||||||
import { Navigate, Route, Routes } from 'react-router-dom';
|
|
||||||
|
|
||||||
import { Tab } from '@mui/material';
|
|
||||||
|
|
||||||
import { RouterTabs, useLayoutTitle, useRouterTab } from 'components';
|
|
||||||
import { useI18nContext } from 'i18n/i18n-react';
|
|
||||||
|
|
||||||
import NTPSettings from './NTPSettings';
|
|
||||||
import NTPStatus from './NTPStatus';
|
|
||||||
|
|
||||||
const NetworkTime: FC = () => {
|
|
||||||
const { LL } = useI18nContext();
|
|
||||||
useLayoutTitle('NTP');
|
|
||||||
|
|
||||||
const { routerTab } = useRouterTab();
|
|
||||||
|
|
||||||
return (
|
|
||||||
<>
|
|
||||||
<RouterTabs value={routerTab}>
|
|
||||||
<Tab value="settings" label={LL.SETTINGS_OF('NTP')} />
|
|
||||||
<Tab value="status" label={LL.STATUS_OF('NTP')} />
|
|
||||||
</RouterTabs>
|
|
||||||
<Routes>
|
|
||||||
<Route path="status" element={<NTPStatus />} />
|
|
||||||
<Route path="settings" element={<NTPSettings />} />
|
|
||||||
<Route path="*" element={<Navigate replace to="settings" />} />
|
|
||||||
</Routes>
|
|
||||||
</>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default NetworkTime;
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
import { type FC, useContext } from 'react';
|
|
||||||
import { Navigate, Route, Routes } from 'react-router-dom';
|
|
||||||
|
|
||||||
import { Tab } from '@mui/material';
|
|
||||||
|
|
||||||
import { RequireAdmin, RouterTabs, useLayoutTitle, useRouterTab } from 'components';
|
|
||||||
import { AuthenticatedContext } from 'contexts/authentication';
|
|
||||||
import { useI18nContext } from 'i18n/i18n-react';
|
|
||||||
import SystemActivity from 'project/SystemActivity';
|
|
||||||
|
|
||||||
import SystemLog from './SystemLog';
|
|
||||||
import SystemStatus from './SystemStatus';
|
|
||||||
|
|
||||||
const System: FC = () => {
|
|
||||||
const { LL } = useI18nContext();
|
|
||||||
|
|
||||||
useLayoutTitle(LL.SYSTEM(0));
|
|
||||||
|
|
||||||
const { routerTab } = useRouterTab();
|
|
||||||
const { me } = useContext(AuthenticatedContext);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<>
|
|
||||||
<RouterTabs value={routerTab}>
|
|
||||||
<Tab value="status" label={LL.STATUS_OF('')} />
|
|
||||||
<Tab value="activity" label={LL.ACTIVITY()} />
|
|
||||||
<Tab
|
|
||||||
disabled={!me.admin}
|
|
||||||
value="log"
|
|
||||||
label={me.admin ? LL.LOG_OF('') : ''}
|
|
||||||
/>
|
|
||||||
</RouterTabs>
|
|
||||||
<Routes>
|
|
||||||
<Route path="status" element={<SystemStatus />} />
|
|
||||||
<Route path="activity" element={<SystemActivity />} />
|
|
||||||
<Route
|
|
||||||
path="log"
|
|
||||||
element={
|
|
||||||
<RequireAdmin>
|
|
||||||
<SystemLog />
|
|
||||||
</RequireAdmin>
|
|
||||||
}
|
|
||||||
/>
|
|
||||||
<Route path="*" element={<Navigate replace to="status" />} />
|
|
||||||
</Routes>
|
|
||||||
</>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default System;
|
|
||||||
@@ -71,13 +71,11 @@ const de: Translation = {
|
|||||||
TX_ISSUES: 'Tx-Probleme - versuchen Sie einen anderen Tx-Modus',
|
TX_ISSUES: 'Tx-Probleme - versuchen Sie einen anderen Tx-Modus',
|
||||||
DISCONNECTED: 'Getrennt',
|
DISCONNECTED: 'Getrennt',
|
||||||
EMS_SCAN: 'Möchten Sie wirklich eine vollständige Gerätesuche des EMS-Busses starten?',
|
EMS_SCAN: 'Möchten Sie wirklich eine vollständige Gerätesuche des EMS-Busses starten?',
|
||||||
EMS_BUS_STATUS: 'EMS-Busstatus',
|
DATA_TRAFFIC: 'Data Traffic', // TODO Translate
|
||||||
ACTIVE_DEVICES: 'Aktive Geräte und Sensoren',
|
|
||||||
EMS_DEVICE: 'EMS Gerät',
|
EMS_DEVICE: 'EMS Gerät',
|
||||||
SUCCESS: 'ERFOLG',
|
SUCCESS: 'ERFOLG',
|
||||||
FAIL: 'FEHLER',
|
FAIL: 'FEHLER',
|
||||||
QUALITY: 'QUALITÄT',
|
QUALITY: 'QUALITÄT',
|
||||||
SCAN_DEVICES: 'Nach neuen Geräten suchen',
|
|
||||||
SCAN: 'Suche',
|
SCAN: 'Suche',
|
||||||
STATUS_NAMES: [
|
STATUS_NAMES: [
|
||||||
'EMS-Telegramme empfangen (Rx)',
|
'EMS-Telegramme empfangen (Rx)',
|
||||||
@@ -89,9 +87,6 @@ const de: Translation = {
|
|||||||
'API-Aufrufe',
|
'API-Aufrufe',
|
||||||
'Syslog-Mitteilungen'
|
'Syslog-Mitteilungen'
|
||||||
],
|
],
|
||||||
NUM_DEVICES: '{num} Gerät{{e}}',
|
|
||||||
NUM_TEMP_SENSORS: '{num} Temperatursensor{{en}}',
|
|
||||||
NUM_ANALOG_SENSORS: '{num} Analogsensor{{en}}',
|
|
||||||
NUM_DAYS: '{num} Tag{{e}}',
|
NUM_DAYS: '{num} Tag{{e}}',
|
||||||
NUM_SECONDS: '{num} Sekunde{{n}}',
|
NUM_SECONDS: '{num} Sekunde{{n}}',
|
||||||
NUM_HOURS: '{num} Stunde{{n}}',
|
NUM_HOURS: '{num} Stunde{{n}}',
|
||||||
@@ -333,7 +328,8 @@ const de: Translation = {
|
|||||||
MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules', // TODO translate
|
MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules', // TODO translate
|
||||||
MODULES_NONE: 'No external modules detected', // TODO translate
|
MODULES_NONE: 'No external modules detected', // TODO translate
|
||||||
RENAME: 'Rename', // TODO translate
|
RENAME: 'Rename', // TODO translate
|
||||||
ENABLE_MODBUS: 'Modbus aktivieren'
|
ENABLE_MODBUS: 'Modbus aktivieren',
|
||||||
|
VIEW_LOG: 'View log to diagnose issues' // TODO translate
|
||||||
};
|
};
|
||||||
|
|
||||||
export default de;
|
export default de;
|
||||||
|
|||||||
@@ -71,13 +71,11 @@ const en: Translation = {
|
|||||||
TX_ISSUES: 'Tx issues - check Tx Mode',
|
TX_ISSUES: 'Tx issues - check Tx Mode',
|
||||||
DISCONNECTED: 'Disconnected',
|
DISCONNECTED: 'Disconnected',
|
||||||
EMS_SCAN: 'Are you sure you want to initiate a full device scan of the EMS bus?',
|
EMS_SCAN: 'Are you sure you want to initiate a full device scan of the EMS bus?',
|
||||||
EMS_BUS_STATUS: 'EMS Bus Status',
|
DATA_TRAFFIC: 'Data Traffic',
|
||||||
ACTIVE_DEVICES: 'Active Devices & Sensors',
|
|
||||||
EMS_DEVICE: 'EMS Device',
|
EMS_DEVICE: 'EMS Device',
|
||||||
SUCCESS: 'SUCCESS',
|
SUCCESS: 'SUCCESS',
|
||||||
FAIL: 'FAIL',
|
FAIL: 'FAIL',
|
||||||
QUALITY: 'QUALITY',
|
QUALITY: 'QUALITY',
|
||||||
SCAN_DEVICES: 'Scan for new devices',
|
|
||||||
SCAN: 'Scan',
|
SCAN: 'Scan',
|
||||||
STATUS_NAMES: [
|
STATUS_NAMES: [
|
||||||
'EMS Telegrams Received (Rx)',
|
'EMS Telegrams Received (Rx)',
|
||||||
@@ -89,9 +87,6 @@ const en: Translation = {
|
|||||||
'API Calls',
|
'API Calls',
|
||||||
'Syslog Messages'
|
'Syslog Messages'
|
||||||
],
|
],
|
||||||
NUM_DEVICES: '{num} Device{{s}}',
|
|
||||||
NUM_TEMP_SENSORS: '{num} Temperature Sensor{{s}}',
|
|
||||||
NUM_ANALOG_SENSORS: '{num} Analog Sensor{{s}}',
|
|
||||||
NUM_DAYS: '{num} day{{s}}',
|
NUM_DAYS: '{num} day{{s}}',
|
||||||
NUM_SECONDS: '{num} second{{s}}',
|
NUM_SECONDS: '{num} second{{s}}',
|
||||||
NUM_HOURS: '{num} hour{{s}}',
|
NUM_HOURS: '{num} hour{{s}}',
|
||||||
@@ -333,7 +328,8 @@ const en: Translation = {
|
|||||||
MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules',
|
MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules',
|
||||||
MODULES_NONE: 'No external modules detected',
|
MODULES_NONE: 'No external modules detected',
|
||||||
RENAME: 'Rename',
|
RENAME: 'Rename',
|
||||||
ENABLE_MODBUS: 'Enable Modbus'
|
ENABLE_MODBUS: 'Enable Modbus',
|
||||||
|
VIEW_LOG: 'View log to diagnose issues'
|
||||||
};
|
};
|
||||||
|
|
||||||
export default en;
|
export default en;
|
||||||
|
|||||||
@@ -71,13 +71,11 @@ const fr: Translation = {
|
|||||||
TX_ISSUES: 'Problèmes de transmission (Tx) - Essayez un autre mode Tx',
|
TX_ISSUES: 'Problèmes de transmission (Tx) - Essayez un autre mode Tx',
|
||||||
DISCONNECTED: 'Déconnecté',
|
DISCONNECTED: 'Déconnecté',
|
||||||
EMS_SCAN: 'Etes-vous sûr de vouloir lancer un scan complet du bus EMS ?',
|
EMS_SCAN: 'Etes-vous sûr de vouloir lancer un scan complet du bus EMS ?',
|
||||||
EMS_BUS_STATUS: 'Statut du bus EMS',
|
DATA_TRAFFIC: 'Data Traffic', // TODO Translate
|
||||||
ACTIVE_DEVICES: 'Appareils et capteurs actifs',
|
|
||||||
EMS_DEVICE: 'Appareils EMS',
|
EMS_DEVICE: 'Appareils EMS',
|
||||||
SUCCESS: 'SUCCÈS',
|
SUCCESS: 'SUCCÈS',
|
||||||
FAIL: 'ÉCHEC',
|
FAIL: 'ÉCHEC',
|
||||||
QUALITY: 'QUALITÉ',
|
QUALITY: 'QUALITÉ',
|
||||||
SCAN_DEVICES: 'Rechercher de nouveaux appareils',
|
|
||||||
SCAN: 'Scan',
|
SCAN: 'Scan',
|
||||||
STATUS_NAMES: [
|
STATUS_NAMES: [
|
||||||
'Télégrammes EMS reçus (Rx)',
|
'Télégrammes EMS reçus (Rx)',
|
||||||
@@ -89,9 +87,6 @@ const fr: Translation = {
|
|||||||
"Appels à l'API",
|
"Appels à l'API",
|
||||||
'Messages Syslog'
|
'Messages Syslog'
|
||||||
],
|
],
|
||||||
NUM_DEVICES: '{num} Appareil{{s}}',
|
|
||||||
NUM_TEMP_SENSORS: '{num} Capteur{{s}} de température',
|
|
||||||
NUM_ANALOG_SENSORS: '{num} Capteur{{s}} analogique{{s}}',
|
|
||||||
NUM_DAYS: '{num} jour{{s}}',
|
NUM_DAYS: '{num} jour{{s}}',
|
||||||
NUM_SECONDS: '{num} seconde{{s}}',
|
NUM_SECONDS: '{num} seconde{{s}}',
|
||||||
NUM_HOURS: '{num} heure{{s}}',
|
NUM_HOURS: '{num} heure{{s}}',
|
||||||
@@ -333,7 +328,8 @@ const fr: Translation = {
|
|||||||
MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules', // TODO translate
|
MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules', // TODO translate
|
||||||
MODULES_NONE: 'No external modules detected', // TODO translate
|
MODULES_NONE: 'No external modules detected', // TODO translate
|
||||||
RENAME: 'Rename', // TODO translate
|
RENAME: 'Rename', // TODO translate
|
||||||
ENABLE_MODBUS: 'Activer Modbus'
|
ENABLE_MODBUS: 'Activer Modbus',
|
||||||
|
VIEW_LOG: 'View log to diagnose issues' // TODO translate
|
||||||
};
|
};
|
||||||
|
|
||||||
export default fr;
|
export default fr;
|
||||||
|
|||||||
@@ -71,13 +71,11 @@ const it: Translation = {
|
|||||||
TX_ISSUES: 'Problema di Tx - prova una modalità differente',
|
TX_ISSUES: 'Problema di Tx - prova una modalità differente',
|
||||||
DISCONNECTED: 'Disconnesso',
|
DISCONNECTED: 'Disconnesso',
|
||||||
EMS_SCAN: 'Sei sicuro di voler iniziare una scansione completa del bus EMS ?',
|
EMS_SCAN: 'Sei sicuro di voler iniziare una scansione completa del bus EMS ?',
|
||||||
EMS_BUS_STATUS: 'Stato Bus EMS',
|
DATA_TRAFFIC: 'Data Traffic', // TODO Translate
|
||||||
ACTIVE_DEVICES: 'Dispositivi & sensori attivi',
|
|
||||||
EMS_DEVICE: 'Dispositivo EMS ',
|
EMS_DEVICE: 'Dispositivo EMS ',
|
||||||
SUCCESS: 'SUCCESSO',
|
SUCCESS: 'SUCCESSO',
|
||||||
FAIL: 'FALLITO',
|
FAIL: 'FALLITO',
|
||||||
QUALITY: 'QUALITÂ',
|
QUALITY: 'QUALITÂ',
|
||||||
SCAN_DEVICES: 'Scansione per nuovi dispositivi',
|
|
||||||
SCAN: 'Scansione',
|
SCAN: 'Scansione',
|
||||||
STATUS_NAMES: [
|
STATUS_NAMES: [
|
||||||
'Telegrammi EMS Ricevuti (Rx)',
|
'Telegrammi EMS Ricevuti (Rx)',
|
||||||
@@ -89,9 +87,6 @@ const it: Translation = {
|
|||||||
'Chiamate API',
|
'Chiamate API',
|
||||||
'Messaggi Syslog'
|
'Messaggi Syslog'
|
||||||
],
|
],
|
||||||
NUM_DEVICES: '{num} Dispositivi {{s}}',
|
|
||||||
NUM_TEMP_SENSORS: '{num} Sensori Temperatura {{s}}',
|
|
||||||
NUM_ANALOG_SENSORS: '{num} Sensori Analogici {{s}}',
|
|
||||||
NUM_DAYS: '{num} giorni {{s}}',
|
NUM_DAYS: '{num} giorni {{s}}',
|
||||||
NUM_SECONDS: '{num} secondi {{s}}',
|
NUM_SECONDS: '{num} secondi {{s}}',
|
||||||
NUM_HOURS: '{num} ore {{s}}',
|
NUM_HOURS: '{num} ore {{s}}',
|
||||||
@@ -333,7 +328,8 @@ const it: Translation = {
|
|||||||
MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules', // TODO translate
|
MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules', // TODO translate
|
||||||
MODULES_NONE: 'No external modules detected', // TODO translate
|
MODULES_NONE: 'No external modules detected', // TODO translate
|
||||||
RENAME: 'Rename', // TODO translate
|
RENAME: 'Rename', // TODO translate
|
||||||
ENABLE_MODBUS: 'Abilita Modbus'
|
ENABLE_MODBUS: 'Abilita Modbus',
|
||||||
|
VIEW_LOG: 'View log to diagnose issues' // TODO translate
|
||||||
};
|
};
|
||||||
|
|
||||||
export default it;
|
export default it;
|
||||||
|
|||||||
@@ -71,13 +71,11 @@ const nl: Translation = {
|
|||||||
TX_ISSUES: 'Tx bus probleem. Probeer een andere Tx verzendmodus',
|
TX_ISSUES: 'Tx bus probleem. Probeer een andere Tx verzendmodus',
|
||||||
DISCONNECTED: 'Niet verbonden',
|
DISCONNECTED: 'Niet verbonden',
|
||||||
EMS_SCAN: 'Weet je zeker dat je een volledige EMS bus scan uit wilt voeren?',
|
EMS_SCAN: 'Weet je zeker dat je een volledige EMS bus scan uit wilt voeren?',
|
||||||
EMS_BUS_STATUS: 'EMS busstatus',
|
DATA_TRAFFIC: 'Data Traffic', // TODO Translate
|
||||||
ACTIVE_DEVICES: 'Actieve Apparaten & Sensoren',
|
|
||||||
EMS_DEVICE: 'EMS Apparaat',
|
EMS_DEVICE: 'EMS Apparaat',
|
||||||
SUCCESS: 'SUCCESS',
|
SUCCESS: 'SUCCESS',
|
||||||
FAIL: 'MISLUKT',
|
FAIL: 'MISLUKT',
|
||||||
QUALITY: 'QUALITEIT',
|
QUALITY: 'QUALITEIT',
|
||||||
SCAN_DEVICES: 'Scannen naar nieuwe apparaten',
|
|
||||||
SCAN: 'Scan',
|
SCAN: 'Scan',
|
||||||
STATUS_NAMES: [
|
STATUS_NAMES: [
|
||||||
'EMS Telegrammen ontvangen (Rx)',
|
'EMS Telegrammen ontvangen (Rx)',
|
||||||
@@ -89,9 +87,6 @@ const nl: Translation = {
|
|||||||
'API calls',
|
'API calls',
|
||||||
'Syslog berichten'
|
'Syslog berichten'
|
||||||
],
|
],
|
||||||
NUM_DEVICES: '{num} Apparaat{{en}}',
|
|
||||||
NUM_TEMP_SENSORS: '{num} Temperatuursensor{{en}}',
|
|
||||||
NUM_ANALOG_SENSORS: '{num} Analoge sensor{{en}}',
|
|
||||||
NUM_DAYS: '{num} dag{{en}}',
|
NUM_DAYS: '{num} dag{{en}}',
|
||||||
NUM_SECONDS: '{num} second{{en}}',
|
NUM_SECONDS: '{num} second{{en}}',
|
||||||
NUM_HOURS: '{num} {{uur|uren}}',
|
NUM_HOURS: '{num} {{uur|uren}}',
|
||||||
@@ -333,7 +328,8 @@ const nl: Translation = {
|
|||||||
MODULES_DESCRIPTION: 'Klik op de module om EMS-ESP library modules te activeren of te deactiveren',
|
MODULES_DESCRIPTION: 'Klik op de module om EMS-ESP library modules te activeren of te deactiveren',
|
||||||
MODULES_NONE: 'Geen externe modules gedetecteerd',
|
MODULES_NONE: 'Geen externe modules gedetecteerd',
|
||||||
RENAME: 'Hernoemen',
|
RENAME: 'Hernoemen',
|
||||||
ENABLE_MODBUS: 'Activeer Modbus'
|
ENABLE_MODBUS: 'Activeer Modbus',
|
||||||
|
VIEW_LOG: 'View log to diagnose issues' // TODO translate
|
||||||
};
|
};
|
||||||
|
|
||||||
export default nl;
|
export default nl;
|
||||||
|
|||||||
@@ -71,13 +71,11 @@ const no: Translation = {
|
|||||||
TX_ISSUES: 'Tx problemer - prøv en annen Tx Modus',
|
TX_ISSUES: 'Tx problemer - prøv en annen Tx Modus',
|
||||||
DISCONNECTED: 'Frakoblet',
|
DISCONNECTED: 'Frakoblet',
|
||||||
EMS_SCAN: 'Er du sikker på du vil starte full søking av EMS bussen?',
|
EMS_SCAN: 'Er du sikker på du vil starte full søking av EMS bussen?',
|
||||||
EMS_BUS_STATUS: 'EMS Buss Status',
|
DATA_TRAFFIC: 'Data Traffic', // TODO Translate
|
||||||
ACTIVE_DEVICES: 'Aktive Enheter og Sensorer',
|
|
||||||
EMS_DEVICE: 'EMS Enhet',
|
EMS_DEVICE: 'EMS Enhet',
|
||||||
SUCCESS: 'VELLYKKET',
|
SUCCESS: 'VELLYKKET',
|
||||||
FAIL: 'MISLYKKET',
|
FAIL: 'MISLYKKET',
|
||||||
QUALITY: 'KVALITET',
|
QUALITY: 'KVALITET',
|
||||||
SCAN_DEVICES: 'Søk etter nye enheter',
|
|
||||||
SCAN: 'Søk',
|
SCAN: 'Søk',
|
||||||
STATUS_NAMES: [
|
STATUS_NAMES: [
|
||||||
'EMS Telegrammer Mottatt (Rx)',
|
'EMS Telegrammer Mottatt (Rx)',
|
||||||
@@ -89,9 +87,6 @@ const no: Translation = {
|
|||||||
'API Anrop',
|
'API Anrop',
|
||||||
'Syslog Meldinger'
|
'Syslog Meldinger'
|
||||||
],
|
],
|
||||||
NUM_DEVICES: '{num} Enhet{{er}}',
|
|
||||||
NUM_TEMP_SENSORS: '{num} Temperatursensor{{er}}',
|
|
||||||
NUM_ANALOG_SENSORS: '{num} Analogsensor{{er}}',
|
|
||||||
NUM_DAYS: '{num} Dag{{er}}',
|
NUM_DAYS: '{num} Dag{{er}}',
|
||||||
NUM_SECONDS: '{num} Sekund{{er}}',
|
NUM_SECONDS: '{num} Sekund{{er}}',
|
||||||
NUM_HOURS: '{num} Time{{r}}',
|
NUM_HOURS: '{num} Time{{r}}',
|
||||||
@@ -333,7 +328,8 @@ const no: Translation = {
|
|||||||
MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules', // TODO translate
|
MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules', // TODO translate
|
||||||
MODULES_NONE: 'No external modules detected', // TODO translate
|
MODULES_NONE: 'No external modules detected', // TODO translate
|
||||||
RENAME: 'Rename', // TODO translate
|
RENAME: 'Rename', // TODO translate
|
||||||
ENABLE_MODBUS: 'Aktiver Modbus'
|
ENABLE_MODBUS: 'Aktiver Modbus',
|
||||||
|
VIEW_LOG: 'View log to diagnose issues' // TODO translate
|
||||||
};
|
};
|
||||||
|
|
||||||
export default no;
|
export default no;
|
||||||
|
|||||||
@@ -71,13 +71,11 @@ const pl: BaseTranslation = {
|
|||||||
TX_ISSUES: 'problem z zapisem na magistralę EMS, spróbuj wybrać inny "Tryb transmisji (Tx)"',
|
TX_ISSUES: 'problem z zapisem na magistralę EMS, spróbuj wybrać inny "Tryb transmisji (Tx)"',
|
||||||
DISCONNECTED: 'brak połączenia',
|
DISCONNECTED: 'brak połączenia',
|
||||||
EMS_SCAN: 'Czy na pewno wykonać pełne skanowanie magistrali EMS?',
|
EMS_SCAN: 'Czy na pewno wykonać pełne skanowanie magistrali EMS?',
|
||||||
EMS_BUS_STATUS: 'Status magistrali EMS',
|
DATA_TRAFFIC: 'Data Traffic', // TODO Translate
|
||||||
ACTIVE_DEVICES: 'Aktywne urządzenia i czujniki',
|
|
||||||
EMS_DEVICE: 'Urządzenie EMS',
|
EMS_DEVICE: 'Urządzenie EMS',
|
||||||
SUCCESS: 'Udane',
|
SUCCESS: 'Udane',
|
||||||
FAIL: 'Nieudane',
|
FAIL: 'Nieudane',
|
||||||
QUALITY: 'Jakość',
|
QUALITY: 'Jakość',
|
||||||
SCAN_DEVICES: 'Wyszukiwanie nowych urządzeń',
|
|
||||||
SCAN: 'Skanuj',
|
SCAN: 'Skanuj',
|
||||||
STATUS_NAMES: [
|
STATUS_NAMES: [
|
||||||
'EMS, telegramy odebrane (Rx)',
|
'EMS, telegramy odebrane (Rx)',
|
||||||
@@ -89,9 +87,6 @@ const pl: BaseTranslation = {
|
|||||||
'Wywołania API',
|
'Wywołania API',
|
||||||
'Wpisy w SysLog'
|
'Wpisy w SysLog'
|
||||||
],
|
],
|
||||||
NUM_DEVICES: '{num} urządze{{ń|nie|nia|nia|ń}} EMS',
|
|
||||||
NUM_TEMP_SENSORS: '{num} czujni{{ków|k|ki|ki|ków}} temperatury',
|
|
||||||
NUM_ANALOG_SENSORS: '{num} inn{{ych|e|e|e|ych}} urządze{{ń|nie|nia(two)|nia|ń}} podłączon{{ych|e|e|e|ych}} do EMS-ESP',
|
|
||||||
NUM_DAYS: '{num} d{{ni|zień|ni|ni|ni}}',
|
NUM_DAYS: '{num} d{{ni|zień|ni|ni|ni}}',
|
||||||
NUM_SECONDS: '{num} sekun{{d|da|dy|dy|d}}',
|
NUM_SECONDS: '{num} sekun{{d|da|dy|dy|d}}',
|
||||||
NUM_HOURS: '{num} godzi{{n|na|ny|ny|n}}',
|
NUM_HOURS: '{num} godzi{{n|na|ny|ny|n}}',
|
||||||
@@ -333,7 +328,8 @@ const pl: BaseTranslation = {
|
|||||||
MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules', // TODO translate
|
MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules', // TODO translate
|
||||||
MODULES_NONE: 'No external modules detected', // TODO translate
|
MODULES_NONE: 'No external modules detected', // TODO translate
|
||||||
RENAME: 'Rename', // TODO translate
|
RENAME: 'Rename', // TODO translate
|
||||||
ENABLE_MODBUS: 'Aktywuj Modbus'
|
ENABLE_MODBUS: 'Aktywuj Modbus',
|
||||||
|
VIEW_LOG: 'View log to diagnose issues' // TODO translate
|
||||||
};
|
};
|
||||||
|
|
||||||
export default pl;
|
export default pl;
|
||||||
|
|||||||
@@ -71,13 +71,11 @@ const sk: Translation = {
|
|||||||
TX_ISSUES: 'Problémy s Tx – skontrolujte Tx režim',
|
TX_ISSUES: 'Problémy s Tx – skontrolujte Tx režim',
|
||||||
DISCONNECTED: 'Odpojené',
|
DISCONNECTED: 'Odpojené',
|
||||||
EMS_SCAN: 'Naozaj chcete spustiť úplnú kontrolu zariadenia zbernice EMS?',
|
EMS_SCAN: 'Naozaj chcete spustiť úplnú kontrolu zariadenia zbernice EMS?',
|
||||||
EMS_BUS_STATUS: 'Stav zbernice EMS',
|
DATA_TRAFFIC: 'Data Traffic', // TODO Translate
|
||||||
ACTIVE_DEVICES: 'Aktívne zariadenia a snímače',
|
|
||||||
EMS_DEVICE: 'EMS zariadenie',
|
EMS_DEVICE: 'EMS zariadenie',
|
||||||
SUCCESS: 'ÚSPEŠNÉ',
|
SUCCESS: 'ÚSPEŠNÉ',
|
||||||
FAIL: 'ZLÝHANIE',
|
FAIL: 'ZLÝHANIE',
|
||||||
QUALITY: 'KVALITA',
|
QUALITY: 'KVALITA',
|
||||||
SCAN_DEVICES: 'Scan pre nové zariadenia',
|
|
||||||
SCAN: 'Scan',
|
SCAN: 'Scan',
|
||||||
STATUS_NAMES: [
|
STATUS_NAMES: [
|
||||||
'EMS Telegramy prijaté (Rx)',
|
'EMS Telegramy prijaté (Rx)',
|
||||||
@@ -89,9 +87,6 @@ const sk: Translation = {
|
|||||||
'Externé API volania',
|
'Externé API volania',
|
||||||
'Syslog správy'
|
'Syslog správy'
|
||||||
],
|
],
|
||||||
NUM_DEVICES: '{num} Zariaden{{í|ie|ia|ia|í|í}}',
|
|
||||||
NUM_TEMP_SENSORS: '{num} Teplotn{{ých|ý|é|é|ých|ých}} sníma{{čov|č|če|če|čov|čov}}',
|
|
||||||
NUM_ANALOG_SENSORS: '{num} Analogov{{ých|ý|é|é|ých|ých}} sníma{{čov|č|če|če|čov|čov}}',
|
|
||||||
NUM_DAYS: '{num} d{{ní|eň|ní|ní|ní|ní}}',
|
NUM_DAYS: '{num} d{{ní|eň|ní|ní|ní|ní}}',
|
||||||
NUM_SECONDS: '{num} sek{{únd|unda|undy|undy|únd|únd}}',
|
NUM_SECONDS: '{num} sek{{únd|unda|undy|undy|únd|únd}}',
|
||||||
NUM_HOURS: '{num} hod{{ín|ina|iny|iny|ín|ín}}',
|
NUM_HOURS: '{num} hod{{ín|ina|iny|iny|ín|ín}}',
|
||||||
@@ -333,7 +328,8 @@ const sk: Translation = {
|
|||||||
MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules', // TODO translate
|
MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules', // TODO translate
|
||||||
MODULES_NONE: 'No external modules detected', // TODO translate
|
MODULES_NONE: 'No external modules detected', // TODO translate
|
||||||
RENAME: 'Rename', // TODO translate
|
RENAME: 'Rename', // TODO translate
|
||||||
ENABLE_MODBUS: 'Povoliť Modbus'
|
ENABLE_MODBUS: 'Povoliť Modbus',
|
||||||
|
VIEW_LOG: 'View log to diagnose issues' // TODO translate
|
||||||
};
|
};
|
||||||
|
|
||||||
export default sk;
|
export default sk;
|
||||||
|
|||||||
@@ -71,13 +71,11 @@ const sv: Translation = {
|
|||||||
TX_ISSUES: 'Sändfel - Prova ett annat TX-läge',
|
TX_ISSUES: 'Sändfel - Prova ett annat TX-läge',
|
||||||
DISCONNECTED: 'Nedkopplad',
|
DISCONNECTED: 'Nedkopplad',
|
||||||
EMS_SCAN: 'Är du säker att du vill initiera en full genomsökning av EMS-bussen?',
|
EMS_SCAN: 'Är du säker att du vill initiera en full genomsökning av EMS-bussen?',
|
||||||
EMS_BUS_STATUS: 'Status',
|
DATA_TRAFFIC: 'Data Traffic', // TODO Translate
|
||||||
ACTIVE_DEVICES: 'Aktiva Enheter',
|
|
||||||
EMS_DEVICE: 'EMS Enhet',
|
EMS_DEVICE: 'EMS Enhet',
|
||||||
SUCCESS: 'Lyckades',
|
SUCCESS: 'Lyckades',
|
||||||
FAIL: 'Misslyckades',
|
FAIL: 'Misslyckades',
|
||||||
QUALITY: 'Kvalitet',
|
QUALITY: 'Kvalitet',
|
||||||
SCAN_DEVICES: 'Sök efter nya enheter',
|
|
||||||
SCAN: 'Sök',
|
SCAN: 'Sök',
|
||||||
STATUS_NAMES: [
|
STATUS_NAMES: [
|
||||||
'EMS-telegram (Rx)',
|
'EMS-telegram (Rx)',
|
||||||
@@ -89,9 +87,6 @@ const sv: Translation = {
|
|||||||
'API-anrop',
|
'API-anrop',
|
||||||
'Syslog-meddelanden'
|
'Syslog-meddelanden'
|
||||||
],
|
],
|
||||||
NUM_DEVICES: '{num} Enhet{{er}}',
|
|
||||||
NUM_TEMP_SENSORS: '{num} Temperatur-sensor{{er}}',
|
|
||||||
NUM_ANALOG_SENSORS: '{num} Analoga Sensor{{er}}',
|
|
||||||
NUM_DAYS: '{num} dag{{ar}}',
|
NUM_DAYS: '{num} dag{{ar}}',
|
||||||
NUM_SECONDS: '{num} sekund{{er}}',
|
NUM_SECONDS: '{num} sekund{{er}}',
|
||||||
NUM_HOURS: '{num} timmar',
|
NUM_HOURS: '{num} timmar',
|
||||||
@@ -333,7 +328,8 @@ const sv: Translation = {
|
|||||||
MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules', // TODO translate
|
MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules', // TODO translate
|
||||||
MODULES_NONE: 'No external modules detected', // TODO translate
|
MODULES_NONE: 'No external modules detected', // TODO translate
|
||||||
RENAME: 'Rename', // TODO translate
|
RENAME: 'Rename', // TODO translate
|
||||||
ENABLE_MODBUS: 'Aktivera Modbus'
|
ENABLE_MODBUS: 'Aktivera Modbus',
|
||||||
|
VIEW_LOG: 'View log to diagnose issues' // TODO translate
|
||||||
};
|
};
|
||||||
|
|
||||||
export default sv;
|
export default sv;
|
||||||
|
|||||||
@@ -71,13 +71,11 @@ const tr: Translation = {
|
|||||||
TX_ISSUES: 'Tx sorunu - başka bir Tx Modu deneyin',
|
TX_ISSUES: 'Tx sorunu - başka bir Tx Modu deneyin',
|
||||||
DISCONNECTED: 'Bağlantı kesildi',
|
DISCONNECTED: 'Bağlantı kesildi',
|
||||||
EMS_SCAN: 'EMS Hattında tam bir cihaz taraması başlatmak istediğinizden emin misiniz?',
|
EMS_SCAN: 'EMS Hattında tam bir cihaz taraması başlatmak istediğinizden emin misiniz?',
|
||||||
EMS_BUS_STATUS: 'EMS Hattı Durumu',
|
DATA_TRAFFIC: 'Data Traffic', // TODO Translate
|
||||||
ACTIVE_DEVICES: 'Aktif Cihazlar ve Sensörler',
|
|
||||||
EMS_DEVICE: 'EMS Cihazı',
|
EMS_DEVICE: 'EMS Cihazı',
|
||||||
SUCCESS: 'BAŞARILI',
|
SUCCESS: 'BAŞARILI',
|
||||||
FAIL: 'HATA',
|
FAIL: 'HATA',
|
||||||
QUALITY: 'KALİTE',
|
QUALITY: 'KALİTE',
|
||||||
SCAN_DEVICES: 'Yeni cihaz taraması',
|
|
||||||
SCAN: 'Tara',
|
SCAN: 'Tara',
|
||||||
STATUS_NAMES: [
|
STATUS_NAMES: [
|
||||||
'EMS Telegramlar Alındı (Rx)',
|
'EMS Telegramlar Alındı (Rx)',
|
||||||
@@ -89,9 +87,6 @@ const tr: Translation = {
|
|||||||
'API Aramaları',
|
'API Aramaları',
|
||||||
'Sistem Kayıt Mesajları'
|
'Sistem Kayıt Mesajları'
|
||||||
],
|
],
|
||||||
NUM_DEVICES: '{num} Cihaz{{ları}}',
|
|
||||||
NUM_TEMP_SENSORS: '{num} Sıcaklık Sensör{{leri}}',
|
|
||||||
NUM_ANALOG_SENSORS: '{num} Analog Sensör{{ler}}',
|
|
||||||
NUM_DAYS: '{num} gün{{ler}}',
|
NUM_DAYS: '{num} gün{{ler}}',
|
||||||
NUM_SECONDS: '{num} saniye{{ler}}',
|
NUM_SECONDS: '{num} saniye{{ler}}',
|
||||||
NUM_HOURS: '{num} saat{{ler}}',
|
NUM_HOURS: '{num} saat{{ler}}',
|
||||||
@@ -333,7 +328,8 @@ const tr: Translation = {
|
|||||||
MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules', // TODO translate
|
MODULES_DESCRIPTION: 'Click on the Module to activate or de-activate EMS-ESP library modules', // TODO translate
|
||||||
MODULES_NONE: 'No external modules detected', // TODO translate
|
MODULES_NONE: 'No external modules detected', // TODO translate
|
||||||
RENAME: 'Rename', // TODO translate
|
RENAME: 'Rename', // TODO translate
|
||||||
ENABLE_MODBUS: 'Enable Modbus' // TODO translate
|
ENABLE_MODBUS: 'Enable Modbus', // TODO translate
|
||||||
|
VIEW_LOG: 'View log to diagnose issues' // TODO translate
|
||||||
};
|
};
|
||||||
|
|
||||||
export default tr;
|
export default tr;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import type { busConnectionStatus } from 'project/types';
|
import type { busConnectionStatus } from 'app/main/types';
|
||||||
|
|
||||||
import type { NetworkConnectionStatus } from './network';
|
import type { NetworkConnectionStatus } from './network';
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
|
import { isAPEnabled } from 'app/settings/APSettings';
|
||||||
import Schema from 'async-validator';
|
import Schema from 'async-validator';
|
||||||
import { isAPEnabled } from 'framework/ap/APSettings';
|
|
||||||
import type { APSettingsType } from 'types';
|
import type { APSettingsType } from 'types';
|
||||||
|
|
||||||
import { IP_ADDRESS_VALIDATOR } from './shared';
|
import { IP_ADDRESS_VALIDATOR } from './shared';
|
||||||
|
|||||||
7
lib/ArduinoJson/README.txt
Normal file
7
lib/ArduinoJson/README.txt
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
Version 7.1.0
|
||||||
|
|
||||||
|
From https://github.com/bblanchon/ArduinoJson/releases
|
||||||
|
|
||||||
|
MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright © 2014-2024, Benoit BLANCHON
|
||||||
31
lib_standalone/ModuleLibrary.cpp
Normal file
31
lib_standalone/ModuleLibrary.cpp
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
* EMS-ESP - https://github.com/emsesp/EMS-ESP
|
||||||
|
* Copyright 2020-2024 Paul Derbyshire
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <Arduino.h>
|
||||||
|
|
||||||
|
#include <emsesp.h>
|
||||||
|
|
||||||
|
void ModuleLibrary::list(JsonObject output) {};
|
||||||
|
|
||||||
|
void ModuleLibrary::loop() {};
|
||||||
|
|
||||||
|
void ModuleLibrary::start(emsesp::EMSESP * emsesp_main, bool test_mode) {};
|
||||||
|
|
||||||
|
bool ModuleLibrary::enable(const char * key, const char * license, bool enable) {
|
||||||
|
return true;
|
||||||
|
};
|
||||||
@@ -38,12 +38,10 @@ class ModuleLibrary {
|
|||||||
std::unique_ptr<Module> module;
|
std::unique_ptr<Module> module;
|
||||||
};
|
};
|
||||||
|
|
||||||
void start(emsesp::EMSESP * emsesp_main, bool test_mode = false) {};
|
void start(emsesp::EMSESP * emsesp_main, bool test_mode = false);
|
||||||
void loop() {};
|
void loop();
|
||||||
void list(JsonObject output) {};
|
void list(JsonObject output);
|
||||||
bool enable(const char * key, const char * license, bool enable) {
|
bool enable(const char * key, const char * license, bool enable);
|
||||||
return true;
|
|
||||||
};
|
|
||||||
|
|
||||||
static uuid::log::Logger logger_;
|
static uuid::log::Logger logger_;
|
||||||
|
|
||||||
|
|||||||
@@ -411,6 +411,7 @@ const guest_signin = {
|
|||||||
access_token:
|
access_token:
|
||||||
'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6Imd1ZXN0IiwiYWRtaW4iOmZhbHNlfQ.E_lylR_vGIQFZUGNwcl5F6OkHoaELGsC5zqhi0pAiJE'
|
'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6Imd1ZXN0IiwiYWRtaW4iOmZhbHNlfQ.E_lylR_vGIQFZUGNwcl5F6OkHoaELGsC5zqhi0pAiJE'
|
||||||
};
|
};
|
||||||
|
|
||||||
// modify here to simulate admin and guest logins
|
// modify here to simulate admin and guest logins
|
||||||
const signin = admin_signin;
|
const signin = admin_signin;
|
||||||
// const signin = guest_signin;
|
// const signin = guest_signin;
|
||||||
@@ -424,7 +425,6 @@ const EMSESP_SETTINGS_ENDPOINT = REST_ENDPOINT_ROOT + 'settings';
|
|||||||
const EMSESP_CORE_DATA_ENDPOINT = REST_ENDPOINT_ROOT + 'coreData';
|
const EMSESP_CORE_DATA_ENDPOINT = REST_ENDPOINT_ROOT + 'coreData';
|
||||||
const EMSESP_SENSOR_DATA_ENDPOINT = REST_ENDPOINT_ROOT + 'sensorData';
|
const EMSESP_SENSOR_DATA_ENDPOINT = REST_ENDPOINT_ROOT + 'sensorData';
|
||||||
const EMSESP_DEVICES_ENDPOINT = REST_ENDPOINT_ROOT + 'devices';
|
const EMSESP_DEVICES_ENDPOINT = REST_ENDPOINT_ROOT + 'devices';
|
||||||
const EMSESP_SCANDEVICES_ENDPOINT = REST_ENDPOINT_ROOT + 'scanDevices';
|
|
||||||
|
|
||||||
const EMSESP_DEVICEDATA_ENDPOINT1 = REST_ENDPOINT_ROOT + 'deviceData';
|
const EMSESP_DEVICEDATA_ENDPOINT1 = REST_ENDPOINT_ROOT + 'deviceData';
|
||||||
const EMSESP_DEVICEDATA_ENDPOINT2 = REST_ENDPOINT_ROOT + 'deviceData/:id?';
|
const EMSESP_DEVICEDATA_ENDPOINT2 = REST_ENDPOINT_ROOT + 'deviceData/:id?';
|
||||||
@@ -4324,8 +4324,6 @@ router
|
|||||||
return { devices: sorted_devices };
|
return { devices: sorted_devices };
|
||||||
|
|
||||||
})
|
})
|
||||||
.post(EMSESP_SCANDEVICES_ENDPOINT, () => status(200))
|
|
||||||
|
|
||||||
.get(EMSESP_DEVICEDATA_ENDPOINT1, (request) =>
|
.get(EMSESP_DEVICEDATA_ENDPOINT1, (request) =>
|
||||||
request.query.id ? deviceData(Number(request.query.id)) : status(404)
|
request.query.id ? deviceData(Number(request.query.id)) : status(404)
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -38,7 +38,6 @@ custom_password = admin
|
|||||||
; rm -rf .pio/libdeps/native/EMS-ESP-Modules; pio run -e native -t clean; pio run -e native -t exec
|
; rm -rf .pio/libdeps/native/EMS-ESP-Modules; pio run -e native -t clean; pio run -e native -t exec
|
||||||
; lib_deps =
|
; lib_deps =
|
||||||
; file://../modules/EMS-ESP-Modules
|
; file://../modules/EMS-ESP-Modules
|
||||||
; bblanchon/ArduinoJson@^7.0.4
|
|
||||||
|
|
||||||
[env:native]
|
[env:native]
|
||||||
extra_scripts =
|
extra_scripts =
|
||||||
|
|||||||
@@ -81,7 +81,6 @@ check_flags =
|
|||||||
lib_ldf_mode = chain+
|
lib_ldf_mode = chain+
|
||||||
lib_deps =
|
lib_deps =
|
||||||
https://github.com/emsesp/EMS-ESP-Modules.git
|
https://github.com/emsesp/EMS-ESP-Modules.git
|
||||||
bblanchon/ArduinoJson@7.1.0
|
|
||||||
|
|
||||||
; build for GitHub Actions CI
|
; build for GitHub Actions CI
|
||||||
; the Web interface is built seperately, so is skipped in extra_scripts
|
; the Web interface is built seperately, so is skipped in extra_scripts
|
||||||
@@ -229,6 +228,7 @@ build_src_flags =
|
|||||||
-I./lib/uuid-log/src
|
-I./lib/uuid-log/src
|
||||||
-I./lib/semver
|
-I./lib/semver
|
||||||
-I./lib/PButton
|
-I./lib/PButton
|
||||||
|
-I./lib/ArduinoJson
|
||||||
-I./lib/espMqttClient/src
|
-I./lib/espMqttClient/src
|
||||||
-I./lib/espMqttClient/src/Transport
|
-I./lib/espMqttClient/src/Transport
|
||||||
build_src_filter =
|
build_src_filter =
|
||||||
@@ -244,4 +244,4 @@ build_src_filter =
|
|||||||
+<../lib/espMqttClient/src/Transport>
|
+<../lib/espMqttClient/src/Transport>
|
||||||
lib_compat_mode = off
|
lib_compat_mode = off
|
||||||
lib_ldf_mode = off
|
lib_ldf_mode = off
|
||||||
lib_ignore = ArduinoJson
|
lib_ignore = Module EMS-ESP-Modules
|
||||||
|
|||||||
@@ -43,18 +43,6 @@ WebDataService::WebDataService(AsyncWebServer * server, SecurityManager * securi
|
|||||||
server->on(SENSOR_DATA_SERVICE_PATH,
|
server->on(SENSOR_DATA_SERVICE_PATH,
|
||||||
HTTP_GET,
|
HTTP_GET,
|
||||||
securityManager->wrapRequest([this](AsyncWebServerRequest * request) { sensor_data(request); }, AuthenticationPredicates::IS_AUTHENTICATED));
|
securityManager->wrapRequest([this](AsyncWebServerRequest * request) { sensor_data(request); }, AuthenticationPredicates::IS_AUTHENTICATED));
|
||||||
|
|
||||||
// POST's
|
|
||||||
server->on(SCAN_DEVICES_SERVICE_PATH,
|
|
||||||
HTTP_POST,
|
|
||||||
securityManager->wrapRequest([this](AsyncWebServerRequest * request) { scan_devices(request); }, AuthenticationPredicates::IS_ADMIN));
|
|
||||||
}
|
|
||||||
|
|
||||||
// scan devices service
|
|
||||||
void WebDataService::scan_devices(AsyncWebServerRequest * request) {
|
|
||||||
EMSESP::logger().info("Scanning devices...");
|
|
||||||
EMSESP::scan_devices();
|
|
||||||
request->send(200);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// this is used in the dashboard and contains all ems device information
|
// this is used in the dashboard and contains all ems device information
|
||||||
|
|||||||
@@ -28,7 +28,6 @@
|
|||||||
#define WRITE_DEVICE_VALUE_SERVICE_PATH "/rest/writeDeviceValue"
|
#define WRITE_DEVICE_VALUE_SERVICE_PATH "/rest/writeDeviceValue"
|
||||||
#define WRITE_TEMPERATURE_SENSOR_SERVICE_PATH "/rest/writeTemperatureSensor"
|
#define WRITE_TEMPERATURE_SENSOR_SERVICE_PATH "/rest/writeTemperatureSensor"
|
||||||
#define WRITE_ANALOG_SENSOR_SERVICE_PATH "/rest/writeAnalogSensor"
|
#define WRITE_ANALOG_SENSOR_SERVICE_PATH "/rest/writeAnalogSensor"
|
||||||
#define SCAN_DEVICES_SERVICE_PATH "/rest/scanDevices"
|
|
||||||
|
|
||||||
namespace emsesp {
|
namespace emsesp {
|
||||||
|
|
||||||
@@ -50,7 +49,6 @@ class WebDataService {
|
|||||||
void write_device_value(AsyncWebServerRequest * request, JsonVariant json);
|
void write_device_value(AsyncWebServerRequest * request, JsonVariant json);
|
||||||
void write_temperature_sensor(AsyncWebServerRequest * request, JsonVariant json);
|
void write_temperature_sensor(AsyncWebServerRequest * request, JsonVariant json);
|
||||||
void write_analog_sensor(AsyncWebServerRequest * request, JsonVariant json);
|
void write_analog_sensor(AsyncWebServerRequest * request, JsonVariant json);
|
||||||
void scan_devices(AsyncWebServerRequest * request); // command
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace emsesp
|
} // namespace emsesp
|
||||||
|
|||||||
@@ -24,6 +24,7 @@
|
|||||||
|
|
||||||
namespace emsesp {
|
namespace emsesp {
|
||||||
|
|
||||||
|
// /rest/ESPSystemStatus
|
||||||
WebStatusService::WebStatusService(AsyncWebServer * server, SecurityManager * securityManager) {
|
WebStatusService::WebStatusService(AsyncWebServer * server, SecurityManager * securityManager) {
|
||||||
server->on(ESPSYSTEM_STATUS_SERVICE_PATH, HTTP_GET, [this](AsyncWebServerRequest * request) { ESPsystemStatus(request); });
|
server->on(ESPSYSTEM_STATUS_SERVICE_PATH, HTTP_GET, [this](AsyncWebServerRequest * request) { ESPsystemStatus(request); });
|
||||||
server->on(SYSTEM_STATUS_SERVICE_PATH, HTTP_GET, [this](AsyncWebServerRequest * request) { systemStatus(request); });
|
server->on(SYSTEM_STATUS_SERVICE_PATH, HTTP_GET, [this](AsyncWebServerRequest * request) { systemStatus(request); });
|
||||||
|
|||||||
Reference in New Issue
Block a user