diff --git a/package-lock.json b/package-lock.json index 8389db119..669648afd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,7 +21,7 @@ "@testing-library/user-event": "^14.5.2", "@typescript-eslint/eslint-plugin": "^5.48.2", "@typescript-eslint/parser": "^5.48.2", - "@victronenergy/mfd-modules": "^7.0.2", + "@victronenergy/mfd-modules": "^7.1.1", "axios": "^0.28.1", "babel-eslint": "^10.1.0", "babel-jest": "^26.6.0", @@ -73,6 +73,7 @@ "react-dom": "^18.3.1", "react-error-boundary": "^4.0.13", "react-i18nify": "^6.1.3", + "react-qrcode-logo": "^3.0.0", "react-refresh": "^0.14.2", "react-svg-loader": "^3.0.3", "resolve": "^1.22.8", @@ -5365,9 +5366,9 @@ } }, "node_modules/@victronenergy/mfd-modules": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@victronenergy/mfd-modules/-/mfd-modules-7.0.2.tgz", - "integrity": "sha512-WOFVDSG7AXchLdFylJR8xN5iJgdmz7hTVsHfJnq7ZygIBzg47dyU38uuReM7DF2CBiqAyxkym9lCqxkASxi4Og==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@victronenergy/mfd-modules/-/mfd-modules-7.1.1.tgz", + "integrity": "sha512-gwFg4rWgqnj5QehKvumNvXmByKcHrahvDjYrNSaArAB8LO2ukXhiktMnkeFOdZA7yuNtxpvbU6VyhqPHK5Dw0Q==", "license": "ISC", "dependencies": { "axios": "^0.28.1", @@ -16076,7 +16077,6 @@ }, "node_modules/lodash.isequal": { "version": "4.5.0", - "dev": true, "license": "MIT" }, "node_modules/lodash.isfunction": { @@ -19400,6 +19400,11 @@ "teleport": ">=0.2.0" } }, + "node_modules/qrcode-generator": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/qrcode-generator/-/qrcode-generator-1.4.4.tgz", + "integrity": "sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw==" + }, "node_modules/qs": { "version": "6.10.4", "dev": true, @@ -19706,6 +19711,19 @@ "version": "17.0.2", "license": "MIT" }, + "node_modules/react-qrcode-logo": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/react-qrcode-logo/-/react-qrcode-logo-3.0.0.tgz", + "integrity": "sha512-2+vZ3GNBdUpYxIKyt6SFZsDGXa0xniyUQ0wPI4O0hJTzRjttPIx1pPnH9IWQmp/4nDMoN47IBhi3Breu1KudYw==", + "dependencies": { + "lodash.isequal": "^4.5.0", + "qrcode-generator": "^1.4.4" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, "node_modules/react-refresh": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", @@ -20472,9 +20490,9 @@ } }, "node_modules/rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "version": "2.79.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz", + "integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==", "bin": { "rollup": "dist/bin/rollup" }, diff --git a/package.json b/package.json index 86c3dd6d0..b1791f3ed 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "@testing-library/user-event": "^14.5.2", "@typescript-eslint/eslint-plugin": "^5.48.2", "@typescript-eslint/parser": "^5.48.2", - "@victronenergy/mfd-modules": "^7.0.2", + "@victronenergy/mfd-modules": "^7.1.1", "axios": "^0.28.1", "babel-eslint": "^10.1.0", "babel-jest": "^26.6.0", @@ -70,6 +70,7 @@ "react-error-boundary": "^4.0.13", "react-i18nify": "^6.1.3", "react-refresh": "^0.14.2", + "react-qrcode-logo": "^3.0.0", "react-svg-loader": "^3.0.3", "resolve": "^1.22.8", "resolve-url-loader": "^5.0.0", diff --git a/public/Marine/manifest.json b/public/Marine/manifest.json index a0794f4d1..951e79736 100644 --- a/public/Marine/manifest.json +++ b/public/Marine/manifest.json @@ -2,7 +2,7 @@ "name": "Victron MFD", "short_name": "Victron MFD", "description": "Victron Marine MFD", - "start_url": ".", + "start_url": "/app", "icons": [ { "src": "favicon.ico", @@ -23,4 +23,4 @@ "theme_color": "#1f2535", "background_color": "#1f2535", "display": "standalone" -} \ No newline at end of file +} diff --git a/public/Marine2/manifest.json b/public/Marine2/manifest.json index a0794f4d1..951e79736 100644 --- a/public/Marine2/manifest.json +++ b/public/Marine2/manifest.json @@ -2,7 +2,7 @@ "name": "Victron MFD", "short_name": "Victron MFD", "description": "Victron Marine MFD", - "start_url": ".", + "start_url": "/app", "icons": [ { "src": "favicon.ico", @@ -23,4 +23,4 @@ "theme_color": "#1f2535", "background_color": "#1f2535", "display": "standalone" -} \ No newline at end of file +} diff --git a/src/app/Marine2/components/ui/RemoteConsole/RemoteConsole.tsx b/src/app/Marine2/components/ui/RemoteConsole/RemoteConsole.tsx index 67b0a937f..b164841e3 100644 --- a/src/app/Marine2/components/ui/RemoteConsole/RemoteConsole.tsx +++ b/src/app/Marine2/components/ui/RemoteConsole/RemoteConsole.tsx @@ -3,6 +3,8 @@ import { observer } from "mobx-react-lite" import classnames from "classnames" import { translate, Translate } from "react-i18nify" import useSize from "@react-hook/size" +import { useApp } from "@victronenergy/mfd-modules" +import { QRCode } from "react-qrcode-logo" const RemoteConsole = ({ host, width, height }: Props) => { const iframeRef = useRef(null) @@ -12,11 +14,28 @@ const RemoteConsole = ({ host, width, height }: Props) => { const loading = !iframeLoaded const protocol = (typeof window !== "undefined" && window.location.protocol) || "http:" const url = protocol + "//" + host + const app = useApp() useEffect(() => { iframeRef.current?.focus() }, [iframeLoaded]) + console.log(`Venus Running GUI version: ${app.guiVersion}`) + + const consoleUrl = `${window.location.protocol}//venus.local/` + + if (app.guiVersion !== 1) { + return ( +
+ + + +
+ ) + } + return ( <> { diff --git a/src/app/locales/languages/de.json b/src/app/locales/languages/de.json index 87e64e14a..7209f6809 100644 --- a/src/app/locales/languages/de.json +++ b/src/app/locales/languages/de.json @@ -87,7 +87,7 @@ "off": "Aus", "on": "Ein", "passthru": "Durchleitung", - "pending": "Noch ausstehend", + "pending": "Ausstehend", "powerSupplyMode": "Stromversorgungsmodus", "remainingTime": "Restzeit", "running": "In Betrieb", @@ -143,6 +143,7 @@ "queryParams": "Abfrageparameter: %{queryParams}", "remoteConsole": { "connectionFailed": "Verbindung zum GX-Gerät nicht möglich", + "qrCodeMessage": "Um auf die GX-Fernbedienungskonsole zuzugreifen, vergewissern Sie sich, dass sich Ihr Telefon im selben WiFi-Netzwerk befindet wie das GX-Gerät, und scannen Sie dann diesen QR-Code.", "screenTooSmall": "Auf einem größeren Bildschirm öffnen, um die Remote-Konsole anzuzeigen" }, "userAgent": "User agent: %{userAgent}", diff --git a/src/app/locales/languages/en.json b/src/app/locales/languages/en.json index d92662d8c..0f8da595b 100644 --- a/src/app/locales/languages/en.json +++ b/src/app/locales/languages/en.json @@ -143,6 +143,7 @@ "queryParams": "Query params: %{queryParams}", "remoteConsole": { "connectionFailed": "Unable to connect to the GX device", + "qrCodeMessage": "To access the GX Remote Console, make sure your phone is on the same WiFi network as the GX device and then scan this QR code.", "screenTooSmall": "Open in a larger screen to view remote console" }, "userAgent": "User agent: %{userAgent}", diff --git a/src/app/locales/languages/fr.json b/src/app/locales/languages/fr.json index 99b63ecd4..aaea69f2b 100644 --- a/src/app/locales/languages/fr.json +++ b/src/app/locales/languages/fr.json @@ -143,6 +143,7 @@ "queryParams": "Query params: %{queryParams}", "remoteConsole": { "connectionFailed": "Pas possible de se connecter à l'appareil GX", + "qrCodeMessage": "Pour accéder à la console à distance GX, assurez-vous que votre téléphone est sur le même réseau Wi-Fi que l'appareil GX, puis scannez ce code QR.", "screenTooSmall": "Ouvrir dans un écran plus large pour visualiser la console à distance" }, "userAgent": "User agent: %{userAgent}", @@ -256,7 +257,7 @@ "vrmPortID": "ID Portail VRM" }, "widgets": { - "acLoads": "Charges AC", + "acLoads": "Charges CA", "batteries": "Batteries", "battery": "Batterie", "batteryWithName": "Batterie: : %{name}", diff --git a/src/app/locales/languages/nl.json b/src/app/locales/languages/nl.json index 0edad30d6..c45aa15b4 100644 --- a/src/app/locales/languages/nl.json +++ b/src/app/locales/languages/nl.json @@ -143,6 +143,7 @@ "queryParams": "Zoek : %{queryParams}", "remoteConsole": { "connectionFailed": "Verbinding met GX apparaat mislukt", + "qrCodeMessage": "Om toegang te krijgen tot de GX Remote Console, moet ervoor gezorgd worden dat de telefoon zich op hetzelfde WiFi-netwerk bevindt als het GX-apparaat en vervolgens moet deze QR-code gescanned worden.", "screenTooSmall": "Open in een groter scherm om het Remote Console te zien" }, "userAgent": "Gebruiker : %{userAgent}", diff --git a/src/app/locales/languages/pl.json b/src/app/locales/languages/pl.json index 72b34ab3c..2b3fca36a 100644 --- a/src/app/locales/languages/pl.json +++ b/src/app/locales/languages/pl.json @@ -87,7 +87,7 @@ "off": "Wył.", "on": "Wł.", "passthru": "Przepuszczanie", - "pending": "W oczekiwaniu...", + "pending": "W toku", "powerSupplyMode": "Tryb zasilania", "remainingTime": "Pozostały czas", "running": "Działa", @@ -143,6 +143,7 @@ "queryParams": "Parametry zapytania: %{queryParams}", "remoteConsole": { "connectionFailed": "Nie można połączyć się z urządzeniem GX", + "qrCodeMessage": "Aby uzyskać dostęp do konsoli GX Remote, upewnij się, że Twój telefon jest w tej samej sieci Wi-Fi, co urządzenie GX, a następnie zeskanuj ten kod QR.", "screenTooSmall": "Otwórz na większym ekranie, aby wyświetlić konsolę zdalną" }, "userAgent": "Agent użytkownika: %{userAgent}", diff --git a/src/app/locales/languages/ru.json b/src/app/locales/languages/ru.json index 9af9d5989..10f4e05ec 100644 --- a/src/app/locales/languages/ru.json +++ b/src/app/locales/languages/ru.json @@ -143,6 +143,7 @@ "queryParams": "queryParams", "remoteConsole": { "connectionFailed": "connectionFailed", + "qrCodeMessage": "qrCodeMessage", "screenTooSmall": "screenTooSmall" }, "userAgent": "userAgent", diff --git a/src/app/locales/languages/tr.json b/src/app/locales/languages/tr.json index dc6a25108..ab437bab5 100644 --- a/src/app/locales/languages/tr.json +++ b/src/app/locales/languages/tr.json @@ -143,6 +143,7 @@ "queryParams": "Query params: %{queryParams}", "remoteConsole": { "connectionFailed": "GX cihazına bağlanılamıyor", + "qrCodeMessage": "GX Remote Console'a erişmek için telefonunuzun GX cihazıyla aynı WiFi ağında olduğundan emin olun ve ardından bu QR kodunu tarayın.", "screenTooSmall": "Uzak konsolu görüntülemek için daha büyük bir ekranda açın" }, "userAgent": "User agent: %{userAgent}", diff --git a/src/app/locales/languages/uk.json b/src/app/locales/languages/uk.json index c95a53ed8..f5ea83d7c 100644 --- a/src/app/locales/languages/uk.json +++ b/src/app/locales/languages/uk.json @@ -143,6 +143,7 @@ "queryParams": "параметри запиту", "remoteConsole": { "connectionFailed": "підключення не відбулося", + "qrCodeMessage": "Щоб отримати доступ до GX Консолі, переконайтеся, що ваш телефон у тій самій мережі Wi-Fi, що й пристрій GX, а потім відскануйте цей QR-код.", "screenTooSmall": "занадто малий екран" }, "userAgent": "користувацький агент", diff --git a/src/app/locales/languages/zh-CN.json b/src/app/locales/languages/zh-CN.json index d4e748734..1f63ee938 100644 --- a/src/app/locales/languages/zh-CN.json +++ b/src/app/locales/languages/zh-CN.json @@ -143,6 +143,7 @@ "queryParams": "查询参数: %{queryParams}", "remoteConsole": { "connectionFailed": "无法连接到 GX 设备", + "qrCodeMessage": "要访问 GX 远程控制台,请确保您的手机与 GX 设备位于同一 WiFi 网络上,然后扫描此二维码。", "screenTooSmall": "在大屏幕中打开以查看远程控制台" }, "userAgent": "用户代理: %{userAgent}",