From 0ef6aee9a2b5be5a8f7aaca597f26683b5a349a7 Mon Sep 17 00:00:00 2001 From: GermanBluefox Date: Mon, 6 Jan 2025 11:49:40 +0000 Subject: [PATCH 01/20] Jump from welcome dialog corrected: https://github.com/ioBroker/ioBroker.matter/issues/237 --- README.md | 54 +++++----- src-admin/package-lock.json | 4 +- src-admin/src/App.tsx | 35 +++++-- src-admin/src/Tabs/Options.tsx | 2 +- src-admin/src/components/WelcomeDialog.tsx | 116 ++++++++++++++++++--- src-admin/src/i18n/de.json | 5 +- src-admin/src/i18n/en.json | 3 + src-admin/src/i18n/es.json | 3 + src-admin/src/i18n/fr.json | 3 + src-admin/src/i18n/it.json | 3 + src-admin/src/i18n/nl.json | 3 + src-admin/src/i18n/pl.json | 3 + src-admin/src/i18n/pt.json | 3 + src-admin/src/i18n/ru.json | 3 + src-admin/src/i18n/uk.json | 3 + src-admin/src/i18n/zh-cn.json | 3 + src-admin/src/types.d.ts | 1 + 17 files changed, 193 insertions(+), 54 deletions(-) diff --git a/README.md b/README.md index 9771c18..3c11558 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ **This adapter uses Sentry libraries to automatically report exceptions and code errors to the developers.** For more details and for information how to disable the error reporting see [Sentry-Plugin Documentation](https://github.com/ioBroker/plugin-sentry#plugin-sentry)! Sentry reporting is used starting with js-controller 3.0. > [!IMPORTANT] -> This adapter can only be installed from npm. A GitHub install is not possible! +> This adapter can only be installed from npm. A GitHub installation is not possible! > For more important information please read the [Important Information](#important-information-read-first) section! ## Description @@ -21,9 +21,9 @@ TODO ## Important Information (READ FIRST!) * **Not installable via GitHub**: This adapter can only be installed via npm. * **Never delete partial matter instance objects or object trees!** The configuration for this adapter is **not** contained in just one central object like in other ore simple adapters. This means that deleting instance objects or object trees can lead to a broken configuration, and you might need to reconfigure the adapter from scratch. -* **Never reinstall the adapter by deleting the instance** if you want to keep paired devices (e.g. on Controller) or paired Controllers (e.g. on Bridges). If you delete the instance all paired devices will be deleted, and you need to pair them again. -* **Use an ioBroker Backup to back up the configuration** and restore the backup to restore it. If really needed without backup then export the whole object tree of the adapter instance (e.g. matter.0) and import it back if needed. These can be a high number of objects depending on the number of devices and controllers you have paired. -* Some objects are not shown by default because they are irrelevant for normal operation. If you need to see them you can enable the "Expert Mode" in the adapter settings. This mainly is about the "storage" objects. Please **do not** change them unless you really, really know what you are doing! +* **Never reinstall the adapter by deleting the instance** if you want to keep paired devices (e.g., on Controller) or paired Controllers (e.g., on Bridges). If you delete the instance all paired devices will be deleted, and you need to pair them again. +* **Use an ioBroker Backup to back up the configuration** and restore the backup to restore it. If really needed without a backup then export the whole object tree of the adapter instance (e.g., `matter.0`) and import it back if needed. These can be a high number of objects depending on the number of devices and controllers you have paired. +* Some objects are not shown by default because they are irrelevant for normal operation. If you need to see them, you can enable the "Expert Mode" in the adapter settings. This mainly is about the "storage" objects. Please **do not** change them unless you really, really know what you are doing! ## Prerequisites to use this adapter @@ -35,24 +35,24 @@ If you want to use the iobroker Visu App for device pairing you need: ### General prerequisites * One instance of the adapter is bound to one host (aka IP). Multiple instances require a multi-host setup. * Make sure IPv6 is enabled in your network and the host you use this adapter on has an IPv6 address - * If you use LXC containers in Proxmox this is like **not** given because Proxmox hosts are normally not configured for IPv6! A solution you can try is described in the [Wiki](https://github.com/ioBroker/ioBroker.matter/wiki/Troubleshooting) + * If you use LXC containers in Proxmox, this is like **not** given because Proxmox hosts are normally not configured for IPv6! A solution you can try is described in the [Wiki](https://github.com/ioBroker/ioBroker.matter/wiki/Troubleshooting) * Make sure that UDP packages can flow between the devices, your mobile app, the hubs and the host you use this adapter on! - * Mainly make sure to **not** use VLANs, because UDP is usually not routed between VLANs! Or find out how to configure your router to allow this (Fritzbox does not work with this!) - * If you use Docker containers make sure to use **Host Mode** to allow UDP packages to flow between the containers and the host. Bridged network mode does not work with UDP packages! + * Mainly make sure to **not** use VLANs, because UDP is usually not routed between VLANs! Or find out how to configure your router to allow this (Fritz Box! does not work with this!) + * If you use Docker containers, make sure to use **Host Mode** to allow UDP packages to flow between the containers and the host. Bridged network mode does not work with UDP packages! ### Prerequisites to Expose ioBroker devices as Matter Bridges or Devices -Important: In order to expose more than 5 Bridged devices or to expose additional separate Devices or Bridges you need to have a Matter Pro Account with an active Assistant or Remote Control License and entering this into the adapter configuration! Please support our team with the efforts we invest in Matter with this. Controller usage is not limited by this. +Important: In order to expose more than 5 Bridged devices or to expose additional separate Devices or Bridges, you need to have a Matter Pro Account with an active Assistant or Remote Control License and entering this into the adapter configuration! Please support our team with the efforts we invest in Matter with this. Controller usage is not limited by this. * The Bridges and devices that the ioBroker Adapter exposes are not officially certified by the Matter organization. This means they only work in Ecosystems that allow this. * For Google additional steps might be needed - see https://github.com/project-chip/matter.js/blob/main/docs/ECOSYSTEMS.md#google-home-ecosystem * **Aqara Hub M3** and **Yandex** are currently (as of November 2024) not allow "uncertified devices" to be paired! -* Each Ecosystem has different limits about devices per Bridge and such. So if a high number of devices (there are test results up to 64 which should work at least in Apple, Google and - a bit wonky - Amazon) one bridge makes issues. please try splitting it up to multiple bridges. I would also be happy to find out the practical limits so please report your experiences. +* Each Ecosystem has different limits about devices per Bridge and such. So if a high number of devices (there are test results up to 64 which should work at least in Apple, Google and - a bit wonky - Amazon) one bridge makes issues. please try splitting it up to multiple bridges. I would also be happy to find out the practical limits, so please report your experiences. * For Alexa currently only the "Default Bridge" can be used on a host. Multiple Bridges to use with Alexa are only possible on different hosts. ### Prerequisites to use Matter devices in ioBroker (aka "Matter Controller") -* If you plan to use Thread based devices (check the package for information) you need to have a Thread Border Router (TBR) in your network. Check https://github.com/project-chip/matter.js/blob/main/docs/ECOSYSTEMS.md for more information about the ecosystems and their Thread support. More information on Thread and also on how to add an own TBR can be found at https://github.com/project-chip/matter.js/blob/main/docs/USAGE_THREAD.md -* If you run on Linux and plan to use Thread based devices and have issues connecting to them please refer to https://github.com/project-chip/matter.js/blob/main/docs/TROUBLESHOOTING.md#ipv6-linux-system-details for instructions how to tweak the IPv6 configuration on your Linux system. -* Initial commissioning of devices is possible with the "ioBroker Visu App" which uses the BLE of your mobile device and is the most convenient way. You can also use the BLE of your ioBroker host but then the device also needs to be in BLE range of your host. When using the App you need an ioBroker Pro Account with an active Assistant or Remote Control License. +* If you plan to use Thread-based devices (check the package for information), you need to have a Thread Border Router (TBR) in your network. Check https://github.com/project-chip/matter.js/blob/main/docs/ECOSYSTEMS.md for more information about the ecosystems and their Thread support. More information on Thread and also on how to add an own TBR can be found at https://github.com/project-chip/matter.js/blob/main/docs/USAGE_THREAD.md +* If you run on Linux and plan to use Thread-based devices and have issues connecting to them, please refer to https://github.com/project-chip/matter.js/blob/main/docs/TROUBLESHOOTING.md#ipv6-linux-system-details for instructions how to tweak the IPv6 configuration on your Linux system. +* Initial commissioning of devices is possible with the "ioBroker Visu App" which uses the BLE of your mobile device and is the most convenient way. You can also use the BLE of your ioBroker host, but then the device also needs to be in BLE range of your host. When using the App you need an ioBroker Pro Account with an active Assistant or Remote Control License. ## Supported devices @@ -125,21 +125,21 @@ If you need more granularity and access to device specific functionality or sett #### Using the Application Cluster states (needs to be enabled!) Note: This is considered Advanced Usage! -Sometimes it might be handy to also see more internal details of the device or to access more specific functionality of the device. In this case you can enable the "Application Cluster states" for the node or device. This e.g. allows to set the sensitivity for a motion sensor. When enabled for a node (valid then for all devices exposed by the node) or a device you will see a lot of additional states in an objects folder "data". +Sometimes it might be handy to also see more internal details of the device or to access more specific functionality of the device. In this case you can enable the "Application Cluster states" for the node or device. This e.g., allows setting the sensitivity for a motion sensor. When enabled for a node (valid then for all devices exposed by the node) or a device, you will see a lot of additional states in an object's folder "data". The details are structured by the application cluster and separated in attributes (data states) and commands. The exact meaning, units and allowed values and ranges for the data can be taken from the Matter Application Specification document. -When commands are exposed as a "button" then the action can be triggered by just setting a boolean value to the state. But most commands require more data (these are "json" strings) and require that a json string with all command fields are provided. The exact definition of the command fields can be taken from the Matter Application Specification document. +When commands are exposed as a "button" then the action can be triggered by just setting a boolean value to the state. But most commands require more data (these are "json" strings) and require that a JSON string with all command fields are provided. The exact definition of the command fields can be taken from the Matter Application Specification document. #### Using the System Cluster states (needs to be enabled!) Note: This is considered Professional Usage! -In all normal end user cases you should not need to use the System Cluster states. They are only needed for special cases and for debugging or to deeply explore the Matter cluster data. If you enable them you will see a lot of additional states that are not needed for normal operation. Any changes to the writable states can break the functionality of the devices. So please only use them if you know what you are doing! +In all normal end user cases, you should not need to use the System Cluster states. They are only needed for special cases and for debugging or to deeply explore the Matter cluster data. If you enable them, you will see a lot of additional states that are not needed for normal operation. Any changes to the writable states can break the functionality of the devices. So please only use them if you know what you are doing! ### Using the Matter Bridges #### Recommendations -* Not all ecosystems support all device types and sometimes ecosystems react strange when you add a device type they do not support. So please check the ecosystem documentation for the supported device types, if available or try it out. We try to collect the details in the [Supported ioBroker devices](#supported-iobroker-device-types) section. Please report any new information as an issue or PR. -* If you plan to use bridges with many devices so please consider commissioning the bridge initially with just some added devices and then add more overtime. This can help to avoid issues with the ecosystems and also could be a better experience for you. +* Not all ecosystems support all device types, and sometimes ecosystems react strangely when you add a device type they do not support. So please check the ecosystem documentation for the supported device types, if available or try it out. We try to collect the details in the [Supported ioBroker devices](#supported-iobroker-device-types) section. Please report any new information as an issue or PR. +* If you plan to use bridges with many devices, so please consider commissioning the bridge initially with just some added devices and then add more overtime. This can help to avoid issues with the ecosystems and also could be a better experience for you. ### Using the Matter Devices TBD @@ -149,17 +149,17 @@ TBD ### Troubleshooting for Devices and Bridges * With Alexa only the Default bridge can be used on a host. Multiple Bridges to use with Alexa are only possible on different hosts. -* When an Ecosystem shows the device as disconnected, especially after an adapter restart, then this usually means that the controller has not yet reconnected to the device. This can take some time. If it does not reconnect after a few minutes then please check the connection information in the UI. If an ecosystem is not connecting at all please check logs and potentially debug logs and open an issue. +* When an Ecosystem shows the device as disconnected, especially after an adapter restart, then this usually means that the controller has not yet reconnected to the device. This can take some time. If it does not reconnect after a few minutes, then please check the connection information in the UI. If an ecosystem is not connecting at all, please check logs and potentially debug logs and open an issue. ### Troubleshooting for the Controller ## How to report issues * Please check [Prerequisites to use this adapter](#prerequisites-to-use-this-adapter) and [Troubleshooting](#troubleshooting) first -* Check that you are using the latest version available - or if not, if the changelog for the versions since your version contain information about your issue. Then try updating first please. -* Check existing open GitHub issues. If yours is also listed there vote for it by adding a thumbs up on first comment. This helps to prioritize the issues. "Me Too" posts are not needed. +* Check that you are using the latest version available - or if not, if the changelog for the versions since your version contains information about your issue. Then try updating first, please. +* Check existing open GitHub issues. If yours is also listed, there vote for it by adding a thumbs up on the first comment. This helps to prioritize the issues. "Me Too" posts are not needed. * Create a GitHub issue if your issue is not existing -* Turn on Debug logs fpr the matter instance, and additionally "Matter Debug" logs on the main page of the adapter settings. Include the logs (as Text file please, Logfile location usually /opt/iobroker/logs/...) as text file attachment in your issue report. Please do not cut only the error but also add some minutes of log before and after the error to get some more context. Please also include information on what exactly is seen there, what was done and such. The more context you can provide the better. +* Turn on Debug logs fpr the matter instance, and additionally "Matter Debug" logs on the main page of the adapter settings. Include the logs (as a Text file please, Logfile location usually `/opt/iobroker/logs/...`) as text file attachment in your issue report. Please do not cut only the error but also add some minutes of log before and after the error to get some more context. Please also include information on what exactly is seen there, what was done and such. The more context you can provide, the better. ## ToDo @@ -230,9 +230,9 @@ TBD * (@bluefox) Optimized UI ### 0.3.3 (2024-12-28) -* (@Apollon77) Allows to trigger commands via matter also when state already matches the value +* (@Apollon77) Allows triggering commands via matter also when the state already matches the value * (@Apollon77) Sets and updates the fabric label for paired devices (default is "ioBroker matter.X") -* (@Apollon77) Detects state deletion for ioBroker devices and updates device in UI to show device state +* (@Apollon77) Detects state deletion for ioBroker devices and updates a device in UI to show device state * (@Apollon77) Several optimizations on commissioning * (@Apollon77) Do not show commissioning QR codes in ioBroker log * (@Apollon77) Use Fabric label to try to detect if ioBroker is the controller @@ -249,7 +249,7 @@ TBD ### 0.3.0 (2024-12-20) * BREAKING: Please re-enter your ioBroker Pro Cloud Password! -* (@Apollon77) Makes sure the adapter is stopped before being updated +* (@Apollon77) Made sure the adapter is stopped before being updated * (@Apollon77) Optimizes device discovery and allows to stop it again ### 0.2.10 (2024-12-19) @@ -264,7 +264,7 @@ TBD * (@Apollon77) Fixes LightSensor state mapping * (@Apollon77) Prevents errors when only some energy states exist * (@Apollon77) Uses the IP provided by Android when commissioning devices if possible -* (@Apollon77) Restructure discovery to run in background and not block the UI +* (@Apollon77) Restructure discovery to run in the background and not block the UI * (@Apollon77) Exposes States for Enums for Matter nodes * (@Apollon77) Prevent storage to delete wrong data when a node gets removed @@ -300,7 +300,7 @@ TBD ### 0.2.5 (2024-12-06) * (@Apollon77) Sets the "no-compose" flag correctly to normally use composed if needed and adds it to a missing dialog -* (@Apollon77) Allows to use null values if needed +* (@Apollon77) Allows using null values if needed * (@Apollon77) Fixes UNREACH handling for devices * (@Apollon77) Fixes object change handling for controller * (@Apollon77) Allows Bridges to expose its name as a device name @@ -364,4 +364,4 @@ TBD ## License Apache-2.0 -Copyright (c) 2023-2024 Denis Haev +Copyright (c) 2023-2025 Denis Haev diff --git a/src-admin/package-lock.json b/src-admin/package-lock.json index 506a478..3f6cc78 100644 --- a/src-admin/package-lock.json +++ b/src-admin/package-lock.json @@ -1,12 +1,12 @@ { "name": "iobroker.matter", - "version": "0.3.3", + "version": "0.3.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "iobroker.matter", - "version": "0.3.3", + "version": "0.3.4", "dependencies": { "@foxriver76/iob-component-lib": "^0.2.0", "@iobroker/adapter-react-v5": "^7.4.10", diff --git a/src-admin/src/App.tsx b/src-admin/src/App.tsx index bb2515e..02bd54b 100644 --- a/src-admin/src/App.tsx +++ b/src-admin/src/App.tsx @@ -182,7 +182,7 @@ class App extends GenericApp { heartbeat?: number; } | null, ): void => { - // backend is alive, so stop connection interval + // backend is alive, so stop a connection interval if (this.connectToBackEndInterval) { console.log(`Connected after ${this.connectToBackEndCounter} attempts`); this.connectToBackEndCounter = 0; @@ -303,19 +303,34 @@ class App extends GenericApp { return null; } + const adapterSettings: MatterAdapterConfig = this.state.native as MatterAdapterConfig; + return ( { + onClose={async ( + login?: string, + password?: string, + navigateTo?: 'controller' | 'bridges', + ): Promise => { + if (login && password) { + if (adapterSettings.login !== login || adapterSettings.pass !== password) { + this.updateNativeValue('login', login, () => this.updateNativeValue('pass', password)); + } + } if (!this.state.welcomeDialogShowed) { await this.socket.setState(`matter.${this.instance}.info.welcomeDialog`, true, true); } - this.setState({ showWelcomeDialog: false, welcomeDialogShowed: true }); + this.setState({ showWelcomeDialog: false, welcomeDialogShowed: true }, () => { + if (navigateTo) { + this.setState({ selectedTab: navigateTo }); + } + }); }} - login={this.state.native.login} - pass={this.state.native.pass} + login={adapterSettings.login} + pass={adapterSettings.pass} /> ); } @@ -483,7 +498,7 @@ class App extends GenericApp { }); }} onShowWelcomeDialog={() => this.setState({ showWelcomeDialog: true })} - onLoad={(native: Record) => this.onLoadConfig(native)} + onLoad={(native: MatterAdapterConfig) => this.onLoadConfig(native)} socket={this.socket} common={this.common} native={this.state.native as MatterAdapterConfig} @@ -565,12 +580,14 @@ class App extends GenericApp { } async getLicense(): Promise { - if (this.state.native.login && this.state.native.pass) { + const adapterSettings: MatterAdapterConfig = this.state.native as MatterAdapterConfig; + + if (adapterSettings.login && adapterSettings.pass) { if (this.state.alive) { // ask the instance const result = await this.socket.sendTo(`matter.${this.instance}`, 'getLicense', { - login: this.state.native.login, - pass: this.state.native.pass, + login: adapterSettings.login, + pass: adapterSettings.pass, }); if (result.error) { this.showToast(result.error); diff --git a/src-admin/src/Tabs/Options.tsx b/src-admin/src/Tabs/Options.tsx index 3c9c447..4e8ce28 100644 --- a/src-admin/src/Tabs/Options.tsx +++ b/src-admin/src/Tabs/Options.tsx @@ -75,7 +75,7 @@ interface OptionsProps { instance: number; onChange: (attr: string, value: boolean | string) => Promise; showToast: (text: string) => void; - onLoad: (native: Record) => void; + onLoad: (native: MatterAdapterConfig) => void; /** The current matter config */ matter: MatterConfig; onShowWelcomeDialog: () => void; diff --git a/src-admin/src/components/WelcomeDialog.tsx b/src-admin/src/components/WelcomeDialog.tsx index 3ad5050..5b1c5af 100644 --- a/src-admin/src/components/WelcomeDialog.tsx +++ b/src-admin/src/components/WelcomeDialog.tsx @@ -1,9 +1,11 @@ import React from 'react'; -import { type AdminConnection, I18n } from '@iobroker/adapter-react-v5'; + import { Button, Dialog, DialogActions, DialogContent, DialogTitle, IconButton, TextField } from '@mui/material'; -import { Clear, Close, Visibility, VisibilityOff } from '@mui/icons-material'; +import { Check, Clear, Close } from '@mui/icons-material'; import { FaApple, FaAndroid } from 'react-icons/fa'; +import { type AdminConnection, I18n, DialogConfirm } from '@iobroker/adapter-react-v5'; + import InfoBox from './InfoBox'; interface NetworkInterface { @@ -33,6 +35,7 @@ interface WelcomeDialogState { iotLogin?: string; iotPassword?: string; ipV6found: boolean | null; + notSavedConfirm: '' | 'close' | 'bridges' | 'controller'; } class WelcomeDialog extends React.Component { @@ -46,8 +49,8 @@ class WelcomeDialog extends React.Component { + if (result) { + const navigateTo = this.state.notSavedConfirm; + this.setState( + { + notSavedConfirm: '', + }, + () => { + if (!navigateTo || navigateTo === 'close') { + this.props.onClose(); + } else { + this.props.onClose(undefined, undefined, navigateTo); + } + }, + ); + } else { + this.setState({ notSavedConfirm: '' }); + } + }} + /> + ); + } + render(): React.JSX.Element { return ( this.props.onClose()} + onClose={() => { + if ( + !!this.state.login && + (!this.state.password || this.state.password !== this.state.passwordRepeat) + ) { + this.setState({ notSavedConfirm: 'close' }); + } else { + this.props.onClose(); + } + }} > + {this.renderConfirmDialog()} {I18n.t('Welcome to Matter!')} {this.state.ipV6found !== null ? ( @@ -201,6 +248,7 @@ class WelcomeDialog extends React.Component this.setState({ login: '' })} > @@ -226,10 +274,11 @@ class WelcomeDialog extends React.Component this.setState({ passVisible: !this.state.passVisible })} + onClick={() => this.setState({ password: '' })} > - {this.state.passVisible ? : } + ) : null, }, @@ -248,6 +297,7 @@ class WelcomeDialog extends React.Component this.setState({ passwordRepeat: e.target.value })} sx={theme => ({ [theme.breakpoints.up('lg')]: { width: 'calc(30% - 8px)', marginRight: 1 }, @@ -256,12 +306,13 @@ class WelcomeDialog extends React.Component this.setState({ passVisible: !this.state.passVisible })} + onClick={() => this.setState({ passwordRepeat: '' })} > - {this.state.passVisible ? : } + ) : null, }, @@ -290,23 +341,60 @@ class WelcomeDialog extends React.Component diff --git a/src-admin/src/i18n/de.json b/src-admin/src/i18n/de.json index 45b46d4..9d9afba 100644 --- a/src-admin/src/i18n/de.json +++ b/src-admin/src/i18n/de.json @@ -82,6 +82,7 @@ "Instance is not alive": "Instanz ist nicht aktiv", "Interface": "Schnittstelle", "Logging": "Protokollierung", + "Login and password will not be taken as incomplete. Discard changes?": "Login und Passwort werden nicht als unvollständig gewertet. Änderungen verwerfen?", "Maintenance Settings": "Wartungseinstellungen", "Manual pairing code": "Manueller Kopplungscode", "Matter Bridges Infotext": "Matter Bridges können mehrere Geräte enthalten und sind die einfachste Möglichkeit, ioBroker-Geräte in ein Matter-kompatibles Ökosystem zu integrieren. In einer Bridge enthaltene Geräte können auch nach der Inbetriebnahme der Bridge hinzugefügt oder entfernt werden. Einige Geräteeigenschaften können nicht mehr geändert werden, nachdem die Bridge als Controller in Betrieb genommen wurde.\n\nWenn Sie mindestens eine Assistentenlizenz in Ihrem ioBroker.pro-Konto besitzen, können Sie auch mehrere Bridges erstellen und Ihre Geräte so optimal strukturieren.\n\nBitte beachten: Aufgrund von Einschränkungen des Amazon Alexa-Systems können Sie pro ioBroker-Host nur eine Bridge oder ein Gerät mit Alexa koppeln!", @@ -135,6 +136,7 @@ "Show unsupported devices": "Nicht unterstützte Geräte anzeigen", "Show welcome dialog": "Willkommensdialog anzeigen", "Status": "Status", + "Stay here": "Hier bleiben", "Stop": "Stoppen", "Successfully re-announced": "Erfolgreich neu ausgeschrieben!", "Suppress question for 5 minutes": "Frage 5 Minuten lang unterdrücken", @@ -156,6 +158,7 @@ "Welcome to Matter!": "Willkommen bei Matter!", "WiFi SSID": "WLAN-SSID", "WiFi password": "WLAN Passwort", + "Yes": "Ja", "You need ioBroker.pro assistant or remote subscription to have more than 5 devices in bridge": "Sie benötigen den ioBroker.pro-Assistenten oder ein Remote-Abonnement, um mehr als 5 Geräte in Bridge zu haben", "You need to configure WLAN or Thread credentials above to activate BLE": "Sie müssen oben die WLAN- oder Thread-Anmeldeinformationen konfigurieren, um BLE zu aktivieren!", "blind": "Blind", @@ -192,4 +195,4 @@ "weatherForecast": "Wettervorhersage", "window": "Fenster", "windowTilt": "Gekipptes Fenster" -} +} \ No newline at end of file diff --git a/src-admin/src/i18n/en.json b/src-admin/src/i18n/en.json index 83abcf7..64932d7 100644 --- a/src-admin/src/i18n/en.json +++ b/src-admin/src/i18n/en.json @@ -82,6 +82,7 @@ "Instance is not alive": "Instance is not alive", "Interface": "Interface", "Logging": "Logging", + "Login and password will not be taken as incomplete. Discard changes?": "Login and password will not be taken as incomplete. Discard changes?", "Maintenance Settings": "Maintenance Settings", "Manual pairing code": "Manual pairing code", "Matter Bridges Infotext": "Matter Bridges can contain multiple devices inside them and are the most simple way to bring ioBroker devices into a Matter compatible ecosystem. Devices contained in a bridge can also be added or removed after the bridge got commissioned. Some device properties can not be changed after the bridge got commissioned into a controller.\n\nWhen you own at least an Assistant License in your ioBroker.pro Account you can also create multiple bridges an so structure your devices best.\n\nPlease note: Because of limitations of the Amazon Alexa system you can only have one bridge or device paired with Alexa per ioBroker host!", @@ -135,6 +136,7 @@ "Show unsupported devices": "Show unsupported devices", "Show welcome dialog": "Show welcome dialog", "Status": "Status", + "Stay here": "Stay here", "Stop": "Stop", "Successfully re-announced": "Successfully re-announced!", "Suppress question for 5 minutes": "Suppress question for 5 minutes", @@ -156,6 +158,7 @@ "Welcome to Matter!": "Welcome to Matter!", "WiFi SSID": "WiFi SSID", "WiFi password": "WiFi password", + "Yes": "Yes", "You need ioBroker.pro assistant or remote subscription to have more than 5 devices in bridge": "You need ioBroker.pro assistant or remote subscription to have more than 5 devices in bridge", "You need to configure WLAN or Thread credentials above to activate BLE": "You need to configure WLAN or Thread credentials above to activate BLE!", "blind": "Blind", diff --git a/src-admin/src/i18n/es.json b/src-admin/src/i18n/es.json index b975812..3c48f1c 100644 --- a/src-admin/src/i18n/es.json +++ b/src-admin/src/i18n/es.json @@ -82,6 +82,7 @@ "Instance is not alive": "La instancia no está viva", "Interface": "Interfaz", "Logging": "Inicio sesión", + "Login and password will not be taken as incomplete. Discard changes?": "El nombre de usuario y la contraseña no se considerarán incompletos. ¿Desechar los cambios?", "Maintenance Settings": "Configuración de mantenimiento", "Manual pairing code": "Código de emparejamiento manual", "Matter Bridges Infotext": "Los Matter Bridges pueden contener varios dispositivos en su interior y son la forma más sencilla de incorporar dispositivos ioBroker a un ecosistema compatible con Matter. Los dispositivos contenidos en un puente también se pueden agregar o quitar después de que el puente se haya puesto en servicio. Algunas propiedades del dispositivo no se pueden cambiar después de que el puente se haya puesto en servicio en un controlador.\n\nCuando posee al menos una licencia de Asistente en su cuenta ioBroker.pro, también puede crear múltiples puentes para estructurar mejor sus dispositivos.\n\nTenga en cuenta: debido a las limitaciones del sistema Amazon Alexa, ¡solo puede tener un puente o dispositivo emparejado con Alexa por host ioBroker!", @@ -135,6 +136,7 @@ "Show unsupported devices": "Mostrar dispositivos no compatibles", "Show welcome dialog": "Mostrar diálogo de bienvenida", "Status": "Estado", + "Stay here": "Quédate aquí", "Stop": "Detener", "Successfully re-announced": "¡Reanunciado con éxito!", "Suppress question for 5 minutes": "Suprimir pregunta durante 5 minutos", @@ -156,6 +158,7 @@ "Welcome to Matter!": "¡Bienvenido a Matter!", "WiFi SSID": "Wi-Fi SSID", "WiFi password": "Contraseña de wifi", + "Yes": "Sí", "You need ioBroker.pro assistant or remote subscription to have more than 5 devices in bridge": "Necesita el asistente ioBroker.pro o una suscripción remota para tener más de 5 dispositivos en puente", "You need to configure WLAN or Thread credentials above to activate BLE": "¡Necesita configurar las credenciales de WLAN o Thread arriba para activar BLE!", "blind": "Ciego", diff --git a/src-admin/src/i18n/fr.json b/src-admin/src/i18n/fr.json index 8aebc42..77cb04c 100644 --- a/src-admin/src/i18n/fr.json +++ b/src-admin/src/i18n/fr.json @@ -82,6 +82,7 @@ "Instance is not alive": "L'instance n'est pas vivante", "Interface": "Interface", "Logging": "Enregistrement", + "Login and password will not be taken as incomplete. Discard changes?": "Le login et le mot de passe ne seront pas considérés comme incomplets. Annuler les modifications ?", "Maintenance Settings": "Paramètres d'entretien", "Manual pairing code": "Code d'appairage manuel", "Matter Bridges Infotext": "Les Matter Bridges peuvent contenir plusieurs appareils et constituent le moyen le plus simple d'intégrer des appareils ioBroker dans un écosystème compatible Matter. Les appareils contenus dans un pont peuvent également être ajoutés ou supprimés une fois le pont mis en service. Certaines propriétés de l'appareil ne peuvent pas être modifiées une fois le pont mis en service dans un contrôleur.\n\nLorsque vous possédez au moins une licence Assistant dans votre compte ioBroker.pro, vous pouvez également créer plusieurs ponts afin de structurer au mieux vos appareils.\n\nRemarque : en raison des limitations du système Amazon Alexa, vous ne pouvez avoir qu'un seul pont ou appareil associé à Alexa par hôte ioBroker !", @@ -135,6 +136,7 @@ "Show unsupported devices": "Afficher les appareils non pris en charge", "Show welcome dialog": "Afficher la boîte de dialogue de bienvenue", "Status": "Statut", + "Stay here": "Reste ici", "Stop": "Arrêt", "Successfully re-announced": "Ré-annoncé avec succès !", "Suppress question for 5 minutes": "Supprimer la question pendant 5 minutes", @@ -156,6 +158,7 @@ "Welcome to Matter!": "Bienvenue chez Matter !", "WiFi SSID": "SSID Wi-Fi", "WiFi password": "Mot de passe WiFi", + "Yes": "Oui", "You need ioBroker.pro assistant or remote subscription to have more than 5 devices in bridge": "Vous avez besoin de l'assistant ioBroker.pro ou d'un abonnement à distance pour avoir plus de 5 appareils en pont", "You need to configure WLAN or Thread credentials above to activate BLE": "Vous devez configurer les informations d'identification WLAN ou Thread ci-dessus pour activer BLE !", "blind": "Aveugle", diff --git a/src-admin/src/i18n/it.json b/src-admin/src/i18n/it.json index 26011c2..dc0c006 100644 --- a/src-admin/src/i18n/it.json +++ b/src-admin/src/i18n/it.json @@ -82,6 +82,7 @@ "Instance is not alive": "L'istanza non è attiva", "Interface": "Interfaccia", "Logging": "Registrazione", + "Login and password will not be taken as incomplete. Discard changes?": "Login e password non saranno considerati incompleti. Ignorare le modifiche?", "Maintenance Settings": "Impostazioni di manutenzione", "Manual pairing code": "Codice di abbinamento manuale", "Matter Bridges Infotext": "I Matter Bridge possono contenere più dispositivi al loro interno e rappresentano il modo più semplice per portare i dispositivi ioBroker in un ecosistema compatibile con Matter. I dispositivi contenuti in un bridge possono anche essere aggiunti o rimossi dopo la messa in servizio del bridge. Alcune proprietà del dispositivo non possono essere modificate dopo la messa in servizio del bridge in un controller.\n\nQuando possiedi almeno una licenza Assistant nel tuo account ioBroker.pro puoi anche creare più bridge per strutturare al meglio i tuoi dispositivi.\n\nNota: a causa delle limitazioni del sistema Amazon Alexa puoi avere un solo bridge o dispositivo accoppiato con Alexa per host ioBroker!", @@ -135,6 +136,7 @@ "Show unsupported devices": "Mostra i dispositivi non supportati", "Show welcome dialog": "Mostra finestra di dialogo di benvenuto", "Status": "Stato", + "Stay here": "Resta qui", "Stop": "Fermare", "Successfully re-announced": "Riannunciato con successo!", "Suppress question for 5 minutes": "Sopprimi la domanda per 5 minuti", @@ -156,6 +158,7 @@ "Welcome to Matter!": "Benvenuti su Matter!", "WiFi SSID": "SSID Wi-Fi", "WiFi password": "Password Wi-Fi", + "Yes": "SÌ", "You need ioBroker.pro assistant or remote subscription to have more than 5 devices in bridge": "Hai bisogno dell'assistente ioBroker.pro o di un abbonamento remoto per avere più di 5 dispositivi in bridge", "You need to configure WLAN or Thread credentials above to activate BLE": "È necessario configurare le credenziali WLAN o Thread sopra per attivare BLE!", "blind": "Cieco", diff --git a/src-admin/src/i18n/nl.json b/src-admin/src/i18n/nl.json index 374cde7..a1da295 100644 --- a/src-admin/src/i18n/nl.json +++ b/src-admin/src/i18n/nl.json @@ -82,6 +82,7 @@ "Instance is not alive": "Instantie is niet levend", "Interface": "Koppel", "Logging": "Loggen", + "Login and password will not be taken as incomplete. Discard changes?": "Login en wachtwoord worden niet als onvolledig beschouwd. Wijzigingen negeren?", "Maintenance Settings": "Onderhoudsinstellingen", "Manual pairing code": "Handmatige koppelingscode", "Matter Bridges Infotext": "Matter Bridges kunnen meerdere apparaten bevatten en zijn de meest eenvoudige manier om ioBroker-apparaten in een Matter-compatibel ecosysteem te brengen. Apparaten in een brug kunnen ook worden toegevoegd of verwijderd nadat de brug in gebruik is genomen. Sommige apparaateigenschappen kunnen niet worden gewijzigd nadat de brug in een controller is in bedrijf gesteld.\n\nWanneer u minimaal een Assistent-licentie in uw ioBroker.pro-account bezit, kunt u ook meerdere bridges maken om uw apparaten zo het beste te structureren.\n\nLet op: vanwege de beperkingen van het Amazon Alexa-systeem kun je per ioBroker-host slechts één bridge of apparaat met Alexa koppelen!", @@ -135,6 +136,7 @@ "Show unsupported devices": "Toon niet-ondersteunde apparaten", "Show welcome dialog": "Welkomstdialoog weergeven", "Status": "Toestand", + "Stay here": "Blijf hier", "Stop": "Stop", "Successfully re-announced": "Met succes opnieuw aangekondigd!", "Suppress question for 5 minutes": "Onderdruk de vraag gedurende 5 minuten", @@ -156,6 +158,7 @@ "Welcome to Matter!": "Welkom bij Matter!", "WiFi SSID": "WiFi-SSID", "WiFi password": "Wifi wachtwoord", + "Yes": "Ja", "You need ioBroker.pro assistant or remote subscription to have more than 5 devices in bridge": "U hebt een ioBroker.pro-assistent of een extern abonnement nodig om meer dan 5 apparaten in bridge te hebben", "You need to configure WLAN or Thread credentials above to activate BLE": "U moet hierboven WLAN- of Thread-inloggegevens configureren om BLE te activeren!", "blind": "Blind", diff --git a/src-admin/src/i18n/pl.json b/src-admin/src/i18n/pl.json index 64fcc5c..dd18fd3 100644 --- a/src-admin/src/i18n/pl.json +++ b/src-admin/src/i18n/pl.json @@ -82,6 +82,7 @@ "Instance is not alive": "Instancja nie jest żywa", "Interface": "Interfejs", "Logging": "Logowanie", + "Login and password will not be taken as incomplete. Discard changes?": "Login i hasło nie będą traktowane jako niekompletne. Odrzucić zmiany?", "Maintenance Settings": "Ustawienia konserwacji", "Manual pairing code": "Ręczny kod parowania", "Matter Bridges Infotext": "Matter Bridges może zawierać wiele urządzeń i jest najprostszym sposobem na wprowadzenie urządzeń ioBroker do ekosystemu kompatybilnego z Matter. Urządzenia znajdujące się w moście można również dodawać lub usuwać po oddaniu mostu do użytku. Niektórych właściwości urządzenia nie da się zmienić po uruchomieniu mostu w sterowniku.\n\nJeśli posiadasz co najmniej Licencję Asystenta na swoim koncie ioBroker.pro, możesz także tworzyć wiele mostów, aby najlepiej zorganizować swoje urządzenia.\n\nUwaga: ze względu na ograniczenia systemu Amazon Alexa, na jednego hosta ioBroker można sparować tylko jeden most lub urządzenie z Alexą!", @@ -135,6 +136,7 @@ "Show unsupported devices": "Pokaż nieobsługiwane urządzenia", "Show welcome dialog": "Pokaż okno dialogowe powitalne", "Status": "Status", + "Stay here": "Zostań tutaj", "Stop": "Zatrzymywać się", "Successfully re-announced": "Pomyślnie ogłoszono ponownie!", "Suppress question for 5 minutes": "Ukryj pytanie na 5 minuty", @@ -156,6 +158,7 @@ "Welcome to Matter!": "Witamy w Matter!", "WiFi SSID": "SSID Wi-Fi", "WiFi password": "Hasło do wifi", + "Yes": "Tak", "You need ioBroker.pro assistant or remote subscription to have more than 5 devices in bridge": "Aby mieć więcej niż 5 urządzeń w moście, potrzebujesz asystenta ioBroker.pro lub zdalnej subskrypcji", "You need to configure WLAN or Thread credentials above to activate BLE": "Aby aktywować BLE, musisz skonfigurować dane uwierzytelniające WLAN lub wątek powyżej!", "blind": "Ślepy", diff --git a/src-admin/src/i18n/pt.json b/src-admin/src/i18n/pt.json index 28b8024..0509281 100644 --- a/src-admin/src/i18n/pt.json +++ b/src-admin/src/i18n/pt.json @@ -82,6 +82,7 @@ "Instance is not alive": "A instância não está viva", "Interface": "Interface", "Logging": "Exploração madeireira", + "Login and password will not be taken as incomplete. Discard changes?": "Login e senha não serão considerados incompletos. Descartar alterações?", "Maintenance Settings": "Configurações de manutenção", "Manual pairing code": "Código de emparelhamento manual", "Matter Bridges Infotext": "Matter Bridges podem conter vários dispositivos dentro deles e são a maneira mais simples de trazer dispositivos ioBroker para um ecossistema compatível com Matter. Os dispositivos contidos em uma ponte também podem ser adicionados ou removidos após o comissionamento da ponte. Algumas propriedades do dispositivo não podem ser alteradas depois que a ponte foi comissionada em um controlador.\n\nQuando você possui pelo menos uma licença de assistente em sua conta ioBroker.pro, você também pode criar várias pontes e estruturar melhor seus dispositivos.\n\nObservação: devido às limitações do sistema Amazon Alexa, você só pode ter uma ponte ou dispositivo emparelhado com Alexa por host ioBroker!", @@ -135,6 +136,7 @@ "Show unsupported devices": "Mostrar dispositivos não suportados", "Show welcome dialog": "Mostrar caixa de diálogo de boas-vindas", "Status": "Status", + "Stay here": "Fique aqui", "Stop": "Parar", "Successfully re-announced": "Reanunciado com sucesso!", "Suppress question for 5 minutes": "Suprimir pergunta por 5 minutos", @@ -156,6 +158,7 @@ "Welcome to Matter!": "Bem-vindo à Matter!", "WiFi SSID": "SSID Wi-Fi", "WiFi password": "Senha do wifi", + "Yes": "Sim", "You need ioBroker.pro assistant or remote subscription to have more than 5 devices in bridge": "Você precisa do assistente ioBroker.pro ou assinatura remota para ter mais de 5 dispositivos em bridge", "You need to configure WLAN or Thread credentials above to activate BLE": "Você precisa configurar as credenciais WLAN ou Thread acima para ativar o BLE!", "blind": "Cego", diff --git a/src-admin/src/i18n/ru.json b/src-admin/src/i18n/ru.json index 3d36fce..71f3400 100644 --- a/src-admin/src/i18n/ru.json +++ b/src-admin/src/i18n/ru.json @@ -82,6 +82,7 @@ "Instance is not alive": "Экземпляр не живой", "Interface": "Интерфейс", "Logging": "Ведение журнала", + "Login and password will not be taken as incomplete. Discard changes?": "Логин и пароль не будут считаться неполными. Отменить изменения?", "Maintenance Settings": "Настройки обслуживания", "Manual pairing code": "Код сопряжения вручную", "Matter Bridges Infotext": "Matter Bridges может содержать внутри себя несколько устройств и является наиболее простым способом объединения устройств ioBroker в экосистему, совместимую с Matter. Устройства, содержащиеся в мосте, также можно добавлять или удалять после ввода моста в эксплуатацию. Некоторые свойства устройства невозможно изменить после ввода моста в состав контроллера.\n\nЕсли у вас есть хотя бы лицензия Assistant в вашей учетной записи ioBroker.pro, вы также можете создать несколько мостов, чтобы лучше структурировать свои устройства.\n\nОбратите внимание: из-за ограничений системы Amazon Alexa вы можете иметь только один мост или устройство, сопряженное с Alexa, на один хост ioBroker!", @@ -135,6 +136,7 @@ "Show unsupported devices": "Показать неподдерживаемые устройства", "Show welcome dialog": "Показать приветственный диалог", "Status": "Положение дел", + "Stay here": "Оставайся здесь", "Stop": "Останавливаться", "Successfully re-announced": "Успешно повторно объявлено!", "Suppress question for 5 minutes": "Не задавать вопрос 5 минут", @@ -156,6 +158,7 @@ "Welcome to Matter!": "Добро пожаловать в Matter!", "WiFi SSID": "SSID Wi-Fi", "WiFi password": "Пароль Wi-Fi", + "Yes": "Да", "You need ioBroker.pro assistant or remote subscription to have more than 5 devices in bridge": "Вам нужен помощник ioBroker.pro или удаленная подписка, чтобы иметь более 5 устройств в мосту.", "You need to configure WLAN or Thread credentials above to activate BLE": "Вам необходимо настроить учетные данные WLAN или Thread, указанные выше, чтобы активировать BLE!", "blind": "Слепой", diff --git a/src-admin/src/i18n/uk.json b/src-admin/src/i18n/uk.json index 26cea1e..2cfc473 100644 --- a/src-admin/src/i18n/uk.json +++ b/src-admin/src/i18n/uk.json @@ -82,6 +82,7 @@ "Instance is not alive": "Примірник не живий", "Interface": "Інтерфейс", "Logging": "Лісозаготівля", + "Login and password will not be taken as incomplete. Discard changes?": "Логін і пароль не будуть вважатися неповними. Скасувати зміни?", "Maintenance Settings": "Параметри обслуговування", "Manual pairing code": "Код підключення вручну", "Matter Bridges Infotext": "Matter Bridges можуть містити в собі кілька пристроїв і є найпростішим способом підключення пристроїв ioBroker до сумісної з Matter екосистеми. Пристрої, які містяться в мосту, також можна додавати або видаляти після введення мосту в експлуатацію. Деякі властивості пристрою не можуть бути змінені після введення мосту в експлуатацію контролера.\n\nЯкщо у вас є принаймні ліцензія Assistant у вашому обліковому записі ioBroker.pro, ви також можете створити кілька мостів, щоб найкраще структурувати свої пристрої.\n\nБудь ласка, зверніть увагу: через обмеження системи Amazon Alexa ви можете мати лише один міст або пристрій, підключений до Alexa на хост ioBroker!", @@ -135,6 +136,7 @@ "Show unsupported devices": "Показати непідтримувані пристрої", "Show welcome dialog": "Показати діалогове вікно привітання", "Status": "Статус", + "Stay here": "Залишайся тут", "Stop": "СТІЙ", "Successfully re-announced": "Успішно повторно анонсовано!", "Suppress question for 5 minutes": "Приховати питання на 5 хвилини", @@ -156,6 +158,7 @@ "Welcome to Matter!": "Ласкаво просимо до Matter!", "WiFi SSID": "SSID WiFi", "WiFi password": "Пароль WiFi", + "Yes": "так", "You need ioBroker.pro assistant or remote subscription to have more than 5 devices in bridge": "Вам потрібен помічник ioBroker.pro або віддалена підписка, щоб мати більше 5 пристроїв у мосту", "You need to configure WLAN or Thread credentials above to activate BLE": "Щоб активувати BLE, вам потрібно налаштувати облікові дані WLAN або Thread вище!", "blind": "Сліпий", diff --git a/src-admin/src/i18n/zh-cn.json b/src-admin/src/i18n/zh-cn.json index 78c0bc7..cb9fc02 100644 --- a/src-admin/src/i18n/zh-cn.json +++ b/src-admin/src/i18n/zh-cn.json @@ -82,6 +82,7 @@ "Instance is not alive": "实例不存在", "Interface": "界面", "Logging": "日志记录", + "Login and password will not be taken as incomplete. Discard changes?": "登录名和密码不会被视为不完整。放弃更改?", "Maintenance Settings": "维护设置", "Manual pairing code": "手动配对码", "Matter Bridges Infotext": "Matter Bridges 可以包含多个设备,是将 ioBroker 设备纳入 Matter 兼容生态系统的最简单方法。桥接器投入使用后,也可以添加或删除桥接器中包含的设备。桥接器投入控制器使用后,某些设备属性无法更改。\n\n当您在 ioBroker.pro 帐户中拥有至少一个助手许可证时,您还可以创建多个桥接器,以便最好地构建您的设备。\n\n请注意:由于 Amazon Alexa 系统的限制,每个 ioBroker 主机只能将一个桥接器或设备与 Alexa 配对!", @@ -135,6 +136,7 @@ "Show unsupported devices": "显示不支持的设备", "Show welcome dialog": "显示欢迎对话框", "Status": "地位", + "Stay here": "留在这里", "Stop": "停止", "Successfully re-announced": "成功重播!", "Suppress question for 5 minutes": "抑制提问 5 分钟", @@ -156,6 +158,7 @@ "Welcome to Matter!": "欢迎来到 Matter!", "WiFi SSID": "无线网络名称", "WiFi password": "WiFi密码", + "Yes": "是的", "You need ioBroker.pro assistant or remote subscription to have more than 5 devices in bridge": "您需要 ioBroker.pro 助手或远程订阅才能在桥接中拥有超过 5 个设备", "You need to configure WLAN or Thread credentials above to activate BLE": "您需要配置上面的 WLAN 或 Thread 凭证来激活 BLE!", "blind": "瞎的", diff --git a/src-admin/src/types.d.ts b/src-admin/src/types.d.ts index b34258c..a0b0dcd 100644 --- a/src-admin/src/types.d.ts +++ b/src-admin/src/types.d.ts @@ -7,6 +7,7 @@ export interface MatterAdapterConfig extends ioBroker.AdapterConfig { pass: string; /** UUID of the default (alexa-compatible - port 5540)bridge */ defaultBridge: string; + controllerFabricLabel: string; } export interface BridgeDeviceDescription { From 65b314f80eff9f0797e6ca55d908118cf533a0ea Mon Sep 17 00:00:00 2001 From: GermanBluefox Date: Mon, 6 Jan 2025 16:51:59 +0000 Subject: [PATCH 02/20] Replaced QR-Code scan: https://github.com/ioBroker/ioBroker.matter/issues/241 and https://github.com/ioBroker/ioBroker.matter/issues/222 --- src-admin/package-lock.json | 65 ++++++ src-admin/package.json | 3 +- src-admin/src/Tabs/Controller.tsx | 262 ++++------------------ src-admin/src/components/QrCodeDialog.tsx | 215 ++++++++++++++++++ src-admin/src/i18n/de.json | 6 +- src-admin/src/i18n/en.json | 6 +- src-admin/src/i18n/es.json | 6 +- src-admin/src/i18n/fr.json | 6 +- src-admin/src/i18n/it.json | 6 +- src-admin/src/i18n/nl.json | 6 +- src-admin/src/i18n/pl.json | 6 +- src-admin/src/i18n/pt.json | 6 +- src-admin/src/i18n/ru.json | 6 +- src-admin/src/i18n/uk.json | 6 +- src-admin/src/i18n/zh-cn.json | 6 +- 15 files changed, 380 insertions(+), 231 deletions(-) create mode 100644 src-admin/src/components/QrCodeDialog.tsx diff --git a/src-admin/package-lock.json b/src-admin/package-lock.json index 3f6cc78..79a432f 100644 --- a/src-admin/package-lock.json +++ b/src-admin/package-lock.json @@ -15,6 +15,7 @@ "@types/react-dom": "^18.3.5", "@types/uuid": "^10.0.0", "@vitejs/plugin-react": "^4.3.4", + "@yudiel/react-qr-scanner": "^2.1.0", "qr-scanner": "^1.4.2", "react": "^18.3.1", "react-dom": "^18.3.1", @@ -1970,6 +1971,18 @@ "@babel/types": "^7.20.7" } }, + "node_modules/@types/dom-webcodecs": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/@types/dom-webcodecs/-/dom-webcodecs-0.1.11.tgz", + "integrity": "sha512-yPEZ3z7EohrmOxbk/QTAa0yonMFkNkjnVXqbGb7D4rMr+F1dGQ8ZUFxXkyLLJuiICPejZ0AZE9Rrk9wUCczx4A==", + "license": "MIT" + }, + "node_modules/@types/emscripten": { + "version": "1.39.13", + "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-1.39.13.tgz", + "integrity": "sha512-cFq+fO/isvhvmuP/+Sl4K4jtU6E23DoivtbO4r50e3odaxAiVdbfSYRDdJ4gCdxx+3aRjhphS5ZMwIH4hFy/Cw==", + "license": "MIT" + }, "node_modules/@types/estree": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", @@ -2066,6 +2079,20 @@ "vite": "^4.2.0 || ^5.0.0 || ^6.0.0" } }, + "node_modules/@yudiel/react-qr-scanner": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@yudiel/react-qr-scanner/-/react-qr-scanner-2.1.0.tgz", + "integrity": "sha512-O3832Qk8YU+vnLO+tsJalfQcXRZ1pOB9l6WrI3OdwpxkQEzukpT48M6Hc2vUUe1rFE6qapQnV3RGRFNM0S7CHw==", + "license": "MIT", + "dependencies": { + "barcode-detector": "^2.3.1", + "webrtc-adapter": "9.0.1" + }, + "peerDependencies": { + "react": "^17 || ^18 || ^19", + "react-dom": "^17 || ^18 || ^19" + } + }, "node_modules/ace-builds": { "version": "1.37.1", "resolved": "https://registry.npmjs.org/ace-builds/-/ace-builds-1.37.1.tgz", @@ -2145,6 +2172,16 @@ "npm": ">=6" } }, + "node_modules/barcode-detector": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/barcode-detector/-/barcode-detector-2.3.1.tgz", + "integrity": "sha512-D9KEtrquS1tmBZduxBZl8qublIKnRrFqD8TAHDYcLCyrHQBo+vitIxmjMJ61LvXjXyAMalOlO7q0Oh/9Rl2PbQ==", + "license": "MIT", + "dependencies": { + "@types/dom-webcodecs": "0.1.11", + "zxing-wasm": "1.3.4" + } + }, "node_modules/bindings": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", @@ -3873,6 +3910,12 @@ "loose-envify": "^1.1.0" } }, + "node_modules/sdp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/sdp/-/sdp-3.2.0.tgz", + "integrity": "sha512-d7wDPgDV3DDiqulJjKiV2865wKsJ34YI+NDREbm+FySq6WuKOikwyNQcm+doLAZ1O6ltdO0SeKle2xMpN3Brgw==", + "license": "MIT" + }, "node_modules/semver": { "version": "7.6.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", @@ -4263,6 +4306,19 @@ } } }, + "node_modules/webrtc-adapter": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/webrtc-adapter/-/webrtc-adapter-9.0.1.tgz", + "integrity": "sha512-1AQO+d4ElfVSXyzNVTOewgGT/tAomwwztX/6e3totvyyzXPvXIIuUUjAmyZGbKBKbZOXauuJooZm3g6IuFuiNQ==", + "license": "BSD-3-Clause", + "dependencies": { + "sdp": "^3.2.0" + }, + "engines": { + "node": ">=6.0.0", + "npm": ">=3.10.0" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -4413,6 +4469,15 @@ "engines": { "node": ">= 6" } + }, + "node_modules/zxing-wasm": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/zxing-wasm/-/zxing-wasm-1.3.4.tgz", + "integrity": "sha512-9l0QymyATF19FmI92QHe7Dayb+BUN7P7zFAt5iDgTnUf0dFWokz6GVA/W9EepjW5q8s3e89fIE/7uxpX27yqEQ==", + "license": "MIT", + "dependencies": { + "@types/emscripten": "^1.39.13" + } } } } diff --git a/src-admin/package.json b/src-admin/package.json index 99e8c7d..3c391f2 100644 --- a/src-admin/package.json +++ b/src-admin/package.json @@ -13,6 +13,7 @@ "@types/react-dom": "^18.3.5", "@types/uuid": "^10.0.0", "@vitejs/plugin-react": "^4.3.4", + "@yudiel/react-qr-scanner": "^2.1.0", "qr-scanner": "^1.4.2", "react": "^18.3.1", "react-dom": "^18.3.1", @@ -21,7 +22,7 @@ "uuid": "^11.0.3" }, "scripts": { - "start": "vite", + "start": "vite --host", "build": "vite build", "lint": "eslint -c eslint.config.mjs", "check-ts": "tsc --noEmit --checkJS false", diff --git a/src-admin/src/Tabs/Controller.tsx b/src-admin/src/Tabs/Controller.tsx index e69e9c3..957a354 100644 --- a/src-admin/src/Tabs/Controller.tsx +++ b/src-admin/src/Tabs/Controller.tsx @@ -1,5 +1,4 @@ import React, { Component } from 'react'; -import QrScanner from 'qr-scanner'; import { IconButton } from '@foxriver76/iob-component-lib'; @@ -14,8 +13,6 @@ import { DialogContent, DialogTitle, LinearProgress, - MenuItem, - Select, Switch, Table, TableBody, @@ -32,6 +29,7 @@ import DeviceManager from '@iobroker/dm-gui-components'; import type { CommissionableDevice, GUIMessage, MatterConfig } from '../types'; import { clone, getVendorName } from '../Utils'; import InfoBox from '../components/InfoBox'; +import QrCodeDialog from '../components/QrCodeDialog'; const styles: Record = { panel: { @@ -118,30 +116,18 @@ interface ComponentState { discovered: CommissionableDevice[]; discoveryRunning: boolean; discoveryDone: boolean; - qrCode: string | null; - manualCode: string; - cameras: QrScanner.Camera[]; - camera: string; - hideVideo: boolean; nodes: Record; states: Record; /** If qr code dialog should be shown (optional a device can be provided) */ - showQrCodeDialog: { device?: CommissionableDevice; open: boolean }; + showQrCodeDialog: CommissionableDevice | null | true; /* increase this number to reload the devices */ triggerControllerLoad: number; - /** qr scan error */ - qrError: string; } class Controller extends Component { - /** Reference object to call methods on QR Scanner */ - private readonly refQrScanner: React.RefObject = React.createRef(); - /** Reference object to call methods on DM */ private readonly refDeviceManager: React.RefObject = React.createRef(); - private qrScanner: QrScanner | null | true = null; - constructor(props: ComponentProps) { super(props); @@ -149,18 +135,12 @@ class Controller extends Component { discovered: [], discoveryRunning: false, discoveryDone: false, - qrCode: null, - manualCode: '', - cameras: [], - camera: '', - hideVideo: false, nodes: {}, states: {}, - showQrCodeDialog: { open: false }, + showQrCodeDialog: null, backendProcessingActive: false, bleDialogOpen: false, triggerControllerLoad: 0, - qrError: '', }; } @@ -269,50 +249,10 @@ class Controller extends Component { async componentWillUnmount(): Promise { this.props.registerMessageHandler(null); - this.destroyQrCode(); await this.props.socket.unsubscribeObject(`matter.${this.props.instance}.controller.*`, this.onObjectChange); this.props.socket.unsubscribeState(`matter.${this.props.instance}.controller.*`, this.onStateChange); } - async initQrCode(): Promise { - if (!this.qrScanner && this.refQrScanner.current) { - this.qrScanner = true; - - this.qrScanner = new QrScanner( - this.refQrScanner.current, - (result: QrScanner.ScanResult): void => { - if (result?.data && result.data !== this.state.qrCode) { - this.setState({ qrCode: result.data, qrError: '' }); - } - }, - { - returnDetailedScanResult: true, - highlightCodeOutline: true, - highlightScanRegion: true, - maxScansPerSecond: 5, - alsoTryWithoutScanRegion: true, - onDecodeError: error => { - if (!this.state.qrCode && this.state.qrError !== error.toString()) { - this.setState({ qrError: I18n.t(error.toString()) }); - } - }, - }, - ); - - const cameras: QrScanner.Camera[] = await QrScanner.listCameras(true); - - const camera = window.localStorage.getItem('camera') || (cameras.length ? cameras[0].id : ''); - - await this.qrScanner.setCamera(camera); - - this.setState({ cameras, camera, hideVideo: !cameras.length }); - } - - if (this.qrScanner && this.qrScanner !== true) { - await this.qrScanner.start(); - } - } - onMessage = (message: GUIMessage | null): void => { if (message?.command === 'reconnect' || message?.command === 'updateController') { // refresh the list of devices @@ -335,13 +275,6 @@ class Controller extends Component { } }; - destroyQrCode(): void { - if (this.qrScanner && this.qrScanner !== true) { - this.qrScanner.destroy(); - } - this.qrScanner = null; - } - /** * Render the loading spinner if backend processing is active */ @@ -588,140 +521,50 @@ class Controller extends Component { } renderQrCodeDialog(): React.JSX.Element | null { - if (!this.state.showQrCodeDialog.open) { + if (!this.state.showQrCodeDialog) { return null; } return ( - this.setState({ showQrCodeDialog: { open: false } }, () => this.destroyQrCode())} - maxWidth="lg" - fullWidth - > - {I18n.t('Add device by pairing code or QR Code')} - -
{I18n.t('Add via QR Code')}
- - {I18n.t('Requirements: add via QR Code')} -
- {I18n.t( - ' Please DO NOT use the QR code / pairing code that is printed on the Matter device.', - )} -
-
- this.setState({ manualCode: e.target.value })} - /> -
-
-
- -
- {this.state.camera.length ? ( - - ) : null} -
- - - - -
+ this.setState({ discovered }, () => { + this.refDeviceManager.current?.loadData(); + }); + } + } else { + this.setState({ showQrCodeDialog: null }); + } + }} + themeType={this.props.themeType} + /> ); } @@ -765,18 +608,8 @@ class Controller extends Component { onClick={async () => { await this.stopDiscovery(); this.setState({ - showQrCodeDialog: { device, open: true }, - manualCode: '', - qrCode: '', - qrError: '', + showQrCodeDialog: device, }); - setTimeout(async () => { - try { - await this.initQrCode(); - } catch (e) { - console.warn(`Cannot provide QR Code scanning: ${e}`); - } - }, 500); }} /> @@ -935,16 +768,7 @@ class Controller extends Component { sx={{ marginX: 1 }} variant="contained" color="primary" - onClick={() => { - this.setState({ showQrCodeDialog: { open: true }, qrError: '', qrCode: '' }); - setTimeout(async () => { - try { - await this.initQrCode(); - } catch (e) { - console.warn(`Cannot provide QR Code scanning: ${e}`); - } - }, 200); - }} + onClick={() => this.setState({ showQrCodeDialog: true })} startIcon={} > {I18n.t('Add device by pairing code or QR Code')} diff --git a/src-admin/src/components/QrCodeDialog.tsx b/src-admin/src/components/QrCodeDialog.tsx new file mode 100644 index 0000000..7b4087e --- /dev/null +++ b/src-admin/src/components/QrCodeDialog.tsx @@ -0,0 +1,215 @@ +import React, { Component } from 'react'; + +import { Scanner } from '@yudiel/react-qr-scanner'; + +import { Button, Dialog, DialogActions, DialogContent, DialogTitle, TextField } from '@mui/material'; +import { Add, Close, QrCode } from '@mui/icons-material'; + +import { I18n, type ThemeType } from '@iobroker/adapter-react-v5'; + +import InfoBox from './InfoBox'; + +interface QrCodeDialogProps { + onClose: (manualCode?: string, qrCode?: string) => void; + themeType: ThemeType; +} + +interface QrCodeDialogState { + manualCode: string; + qrCode: string; + qrError: string; + hideQrCode: boolean; + iframe: WindowProxy | null; +} + +export default class QrCodeDialog extends Component { + private initInterval: ReturnType | null = null; + + constructor(props: QrCodeDialogProps) { + super(props); + this.state = { + manualCode: '', + qrCode: '', + qrError: '', + hideQrCode: false, + iframe: null, + }; + } + + onMessage = (event: { origin: string; data: any }): void => { + if (typeof event.data === 'string') { + if (event.origin === 'https://qr-code.iobroker.in') { + if (event.data === 'inited') { + if (this.initInterval) { + clearInterval(this.initInterval); + this.initInterval = null; + } + } else if (event.data === 'closeMe') { + this.state.iframe?.close(); + this.setState({ iframe: null }); + } else { + this.setState({ qrCode: event.data }); + this.state.iframe?.postMessage( + `close:${I18n.t('ioBroker received "%s". You can now close this window by clicking on this text.', event.data)}`, + '*', + ); + } + } + } + }; + + componentDidMount(): void { + window.addEventListener('message', this.onMessage); + } + + componentWillUnmount(): void { + window.removeEventListener('message', this.onMessage); + if (this.initInterval) { + clearInterval(this.initInterval); + this.initInterval = null; + } + } + + render(): React.JSX.Element { + return ( + this.props.onClose(this.state.manualCode)} + maxWidth="lg" + fullWidth + > + {I18n.t('Add device by pairing code or QR Code')} + +
{I18n.t('Add via QR Code')}
+ + {I18n.t('Requirements: add via QR Code')} +
+ {I18n.t( + 'Please DO NOT use the QR code / pairing code that is printed on the Matter device.', + )} +
+
+ this.setState({ manualCode: e.target.value })} + /> + {!this.state.hideQrCode ? ( +
+
+ this.setState({ qrCode: result[0].rawValue, qrError: '' })} + onError={(error: unknown): void => { + if ((error as Error)?.message.includes('secure context')) { + this.setState({ + qrError: I18n.t( + 'Camera access is only permitted in secure context. Use HTTPS or localhost rather than HTTP.', + ), + hideQrCode: true, + }); + } else { + this.setState({ qrError: (error as Error).toString() }); + } + }} + /> +
+
+ ) : null} + {this.state.hideQrCode && !this.state.qrCode ? null : ( +
+ +
+ )} + {this.state.hideQrCode && !this.state.qrCode ? ( +
+
{I18n.t('QR Code scan is not possible')}:
+
{this.state.qrError}
+
+ ) : null} + {this.state.hideQrCode && !this.state.iframe ? ( + + ) : null} +
+ + + + +
+ ); + } +} diff --git a/src-admin/src/i18n/de.json b/src-admin/src/i18n/de.json index 9d9afba..05f401a 100644 --- a/src-admin/src/i18n/de.json +++ b/src-admin/src/i18n/de.json @@ -1,5 +1,4 @@ { - " Please DO NOT use the QR code / pairing code that is printed on the Matter device.": "Bitte verwenden Sie NICHT den QR-Code/Pairing-Code, der auf dem Matter-Gerät aufgedruckt ist.", "%s of %s devices selected": "%s von %s Geräten ausgewählt", "Activate BLE to pair devices nearby. You can also use the \"ioBroker Visu\" App to pair other devices.": "Aktivieren Sie BLE, um Geräte in der Nähe Ihres ioBroker-Hosts zu koppeln, die noch nicht mit einem anderen Ökosystem gekoppelt sind. Sie können auch die App „ioBroker Visu“ verwenden, um andere Geräte zu koppeln.", "Add": "Hinzufügen", @@ -32,6 +31,7 @@ "Bridge is not commissioned. Show QR Code got commissioning": "Brücke ist nicht in Betrieb genommen. QR-Code anzeigen wurde in Betrieb genommen", "Bridges": "Bridges", "Brightness by ON": "Helligkeit durch EIN", + "Camera access is only permitted in secure context. Use HTTPS or localhost rather than HTTP.": "Der Kamerazugriff ist nur in einem sicheren Kontext zulässig. Verwenden Sie HTTPS oder localhost anstelle von HTTP.", "Cancel": "Abbrechen", "Close": "Schließen", "Cloud Account": "Cloud-Konto", @@ -109,11 +109,13 @@ "Pairing Info Text": "Erkennen von Geräten in Ihrem IP-Netzwerk. \nBitte stellen Sie sicher, dass der ioBroker-Host im Netzwerk und im Netzwerk der zu erkennenden Geräte frei UDP-Nachrichten senden und empfangen kann. \nSetzen Sie die Geräte bei Bedarf auf die Werkseinstellungen zurück oder schalten Sie sie aus und wieder ein.", "Pairing Info Text BLE": "Erkennen von Geräten in Ihrem IP-Netzwerk und über BLE. \nBitte stellen Sie sicher, dass der ioBroker-Host im Netzwerk und im Netzwerk der zu erkennenden Geräte frei UDP-Nachrichten senden und empfangen kann. \nSetzen Sie die Geräte bei Bedarf auf die Werkseinstellungen zurück oder schalten Sie sie aus und wieder ein.", "Password repeat": "Passwort wiederholen", + "Please DO NOT use the QR code / pairing code that is printed on the Matter device.": "Bitte verwenden Sie NICHT den QR-Code/Pairing-Code, der auf dem Matter-Gerät aufgedruckt ist", "Please confirm": "Bitte bestätigen", "Please scan this QR-Code with the App of the ecosystem you want to pair it to or use the below printed setup code.": "Bitte scannen Sie diesen QR-Code mit der App des Ökosystems, mit dem Sie es koppeln möchten, oder verwenden Sie den unten aufgedruckten Setup-Code.", "Product ID": "Produkt ID", "Provide your Thread or WiFi information or both!": "Geben Sie Ihre Thread- oder WiFi-Informationen oder beides an!", "QR Code": "QR-Code", + "QR Code scan is not possible": "QR-Code-Scan ist nicht möglich", "QR Code to connect": "QR-Code zum Verbinden", "Re-Announce": "Pairing neu starten", "Reconnect to backend": "Erneute Verbindung zum Backend herstellen", @@ -127,6 +129,7 @@ "Reset to factory defaults": "Zurücksetzen auf Werkseinstellungen", "Room plus device type names": "Raum- und Gerätetypnamen", "Save": "Speichern", + "Scan with the ioBroker cloud": "Scannen mit der ioBroker-Cloud", "Select default bridge": "Standard-Bridge auswählen", "Select/Unselect all devices in room": "Alle Geräte im Raum auswählen/abwählen", "Show QR Code for commissioning": "QR-Code zur Inbetriebnahme anzeigen", @@ -169,6 +172,7 @@ "floodAlarm": "Hochwasseralarm", "image": "Bild", "invalid_password_warning": "Das Passwort scheint ungültig zu sein", + "ioBroker received \"%s\". You can now close this window by clicking on this text.": "ioBroker hat \"%s\" empfangen. Sie können dieses Fenster nun schließen, indem Sie auf diesen Text klicken.", "ioBroker.pro Login": "ioBroker.pro-Anmeldung", "ioBroker.pro Password": "ioBroker.pro-Passwort", "light": "Licht", diff --git a/src-admin/src/i18n/en.json b/src-admin/src/i18n/en.json index 64932d7..19f6761 100644 --- a/src-admin/src/i18n/en.json +++ b/src-admin/src/i18n/en.json @@ -1,5 +1,4 @@ { - " Please DO NOT use the QR code / pairing code that is printed on the Matter device.": " Please DO NOT use the QR code / pairing code that is printed on the Matter device.", "%s of %s devices selected": "%s of %s devices selected", "Activate BLE to pair devices nearby. You can also use the \"ioBroker Visu\" App to pair other devices.": "Activate BLE to pair devices nearby of your ioBroker host, that are not already paired with an other ecosystem. You can also use the \"ioBroker Visu\" App to pair other devices.", "Add": "Add", @@ -32,6 +31,7 @@ "Bridge is not commissioned. Show QR Code got commissioning": "Bridge is not commissioned. Show QR Code got commissioning", "Bridges": "Bridges", "Brightness by ON": "Brightness by ON", + "Camera access is only permitted in secure context. Use HTTPS or localhost rather than HTTP.": "Camera access is only permitted in secure context. Use HTTPS or localhost rather than HTTP.", "Cancel": "Cancel", "Close": "Close", "Cloud Account": "Cloud Account", @@ -109,11 +109,13 @@ "Pairing Info Text": "Discovering devices in your IP network. \nPlease make sure that he ioBroker host can freely send and receive UDP messages in the network and in the network of the devices to discover. \nIf needed reset the devices to factory settings or power cycle them.", "Pairing Info Text BLE": "Discovering devices in your IP network and via BLE. \nPlease make sure that he ioBroker host can freely send and receive UDP messages in the network and in the network of the devices to discover. \nIf needed reset the devices to factory settings or power cycle them.", "Password repeat": "Password repeat", + "Please DO NOT use the QR code / pairing code that is printed on the Matter device.": "Please DO NOT use the QR code / pairing code that is printed on the Matter device.", "Please confirm": "Please confirm", "Please scan this QR-Code with the App of the ecosystem you want to pair it to or use the below printed setup code.": "Please scan this QR-Code with the App of the ecosystem you want to pair it to or use the below printed setup code.", "Product ID": "Product ID", "Provide your Thread or WiFi information or both!": "Provide your Thread or WiFi information or both!", "QR Code": "QR Code", + "QR Code scan is not possible": "QR Code scan is not possible", "QR Code to connect": "QR Code to connect", "Re-Announce": "Re-announce", "Reconnect to backend": "Reconnect to backend", @@ -127,6 +129,7 @@ "Reset to factory defaults": "Reset to factory defaults", "Room plus device type names": "Room plus device type names", "Save": "Save", + "Scan with the ioBroker cloud": "Scan with the ioBroker cloud", "Select default bridge": "Select default bridge", "Select/Unselect all devices in room": "Select/Unselect all devices in room", "Show QR Code for commissioning": "Show QR Code for commissioning", @@ -169,6 +172,7 @@ "floodAlarm": "Flood alarm", "image": "Image", "invalid_password_warning": "Password looks like invalid", + "ioBroker received \"%s\". You can now close this window by clicking on this text.": "ioBroker received \"%s\". You can now close this window by clicking on this text.", "ioBroker.pro Login": "ioBroker.pro Login", "ioBroker.pro Password": "ioBroker.pro Password", "light": "Light", diff --git a/src-admin/src/i18n/es.json b/src-admin/src/i18n/es.json index 3c48f1c..4465daa 100644 --- a/src-admin/src/i18n/es.json +++ b/src-admin/src/i18n/es.json @@ -1,5 +1,4 @@ { - " Please DO NOT use the QR code / pairing code that is printed on the Matter device.": "NO utilice el código QR/código de emparejamiento que está impreso en el dispositivo Matter.", "%s of %s devices selected": "%s de %s dispositivos seleccionados", "Activate BLE to pair devices nearby. You can also use the \"ioBroker Visu\" App to pair other devices.": "Active BLE para emparejar dispositivos cercanos a su host ioBroker, que aún no estén emparejados con otro ecosistema. También puedes utilizar la aplicación \"ioBroker Visu\" para emparejar otros dispositivos.", "Add": "Agregar", @@ -32,6 +31,7 @@ "Bridge is not commissioned. Show QR Code got commissioning": "El puente no está en servicio. Mostrar código QR puesto en marcha", "Bridges": "Puentes", "Brightness by ON": "Brillo por ON", + "Camera access is only permitted in secure context. Use HTTPS or localhost rather than HTTP.": "El acceso a la cámara solo está permitido en un contexto seguro. Utilice HTTPS o localhost en lugar de HTTP.", "Cancel": "Cancelar", "Close": "Cerca", "Cloud Account": "Cuenta en la nube", @@ -109,11 +109,13 @@ "Pairing Info Text": "Descubriendo dispositivos en su red IP. \nAsegúrese de que el host de ioBroker pueda enviar y recibir mensajes UDP libremente en la red y en la red de los dispositivos a descubrir. \nSi es necesario, restablezca los dispositivos a la configuración de fábrica o reinícielos.", "Pairing Info Text BLE": "Descubriendo dispositivos en su red IP y vía BLE. \nAsegúrese de que el host de ioBroker pueda enviar y recibir mensajes UDP libremente en la red y en la red de los dispositivos a descubrir. \nSi es necesario, restablezca los dispositivos a la configuración de fábrica o reinícielos.", "Password repeat": "Repetición de contraseña", + "Please DO NOT use the QR code / pairing code that is printed on the Matter device.": "NO utilice el código QR/código de emparejamiento que está impreso en el dispositivo Matter.", "Please confirm": "Por favor confirmar", "Please scan this QR-Code with the App of the ecosystem you want to pair it to or use the below printed setup code.": "Escanee este código QR con la aplicación del ecosistema con el que desea vincularlo o utilice el código de configuración impreso a continuación.", "Product ID": "ID del Producto", "Provide your Thread or WiFi information or both!": "¡Proporcione su información de Thread o WiFi o ambas!", "QR Code": "Código QR", + "QR Code scan is not possible": "No es posible escanear códigos QR", "QR Code to connect": "Código QR para conectarse", "Re-Announce": "Re-announce", "Reconnect to backend": "Reconectarse al backend", @@ -127,6 +129,7 @@ "Reset to factory defaults": "Restablecer los valores predeterminados de fábrica", "Room plus device type names": "Nombres de tipo de habitación y dispositivo", "Save": "Ahorrar", + "Scan with the ioBroker cloud": "Escanee con la nube ioBroker", "Select default bridge": "Seleccionar puente predeterminado", "Select/Unselect all devices in room": "Seleccionar/deseleccionar todos los dispositivos en la habitación", "Show QR Code for commissioning": "Mostrar código QR para puesta en servicio", @@ -169,6 +172,7 @@ "floodAlarm": "Alarma de inundación", "image": "Imagen", "invalid_password_warning": "La contraseña parece no válida", + "ioBroker received \"%s\". You can now close this window by clicking on this text.": "ioBroker recibió \"%s\". Ahora puede cerrar esta ventana haciendo clic en este texto.", "ioBroker.pro Login": "ioBroker.pro Iniciar sesión", "ioBroker.pro Password": "ioBroker.pro Contraseña", "light": "Luz", diff --git a/src-admin/src/i18n/fr.json b/src-admin/src/i18n/fr.json index 77cb04c..46ac239 100644 --- a/src-admin/src/i18n/fr.json +++ b/src-admin/src/i18n/fr.json @@ -1,5 +1,4 @@ { - " Please DO NOT use the QR code / pairing code that is printed on the Matter device.": "Veuillez NE PAS utiliser le code QR / code d'appairage imprimé sur l'appareil Matter.", "%s of %s devices selected": "%s sur %s appareils sélectionnés", "Activate BLE to pair devices nearby. You can also use the \"ioBroker Visu\" App to pair other devices.": "Activez BLE pour coupler des appareils à proximité de votre hôte ioBroker, qui ne sont pas déjà couplés à un autre écosystème. Vous pouvez également utiliser l'application « ioBroker Visu » pour coupler d'autres appareils.", "Add": "Ajouter", @@ -32,6 +31,7 @@ "Bridge is not commissioned. Show QR Code got commissioning": "Le pont n'est pas mis en service. Afficher le code QR mis en service", "Bridges": "Des ponts", "Brightness by ON": "Luminosité par ON", + "Camera access is only permitted in secure context. Use HTTPS or localhost rather than HTTP.": "L'accès à la caméra n'est autorisé que dans un contexte sécurisé. Utilisez HTTPS ou localhost plutôt que HTTP.", "Cancel": "Annuler", "Close": "Fermer", "Cloud Account": "Compte Cloud", @@ -109,11 +109,13 @@ "Pairing Info Text": "Découverte des appareils de votre réseau IP. \nVeuillez vous assurer que l'hôte ioBroker peut envoyer et recevoir librement des messages UDP sur le réseau et sur le réseau des appareils à découvrir. \nSi nécessaire, réinitialisez les appareils aux paramètres d'usine ou redémarrez-les.", "Pairing Info Text BLE": "Découverte des appareils dans votre réseau IP et via BLE. \nVeuillez vous assurer que l'hôte ioBroker peut envoyer et recevoir librement des messages UDP sur le réseau et sur le réseau des appareils à découvrir. \nSi nécessaire, réinitialisez les appareils aux paramètres d'usine ou redémarrez-les.", "Password repeat": "Répéter le mot de passe", + "Please DO NOT use the QR code / pairing code that is printed on the Matter device.": "Veuillez NE PAS utiliser le code QR / code d'appairage imprimé sur l'appareil Matter.", "Please confirm": "Veuillez confirmer", "Please scan this QR-Code with the App of the ecosystem you want to pair it to or use the below printed setup code.": "Veuillez scanner ce QR-Code avec l'application de l'écosystème auquel vous souhaitez le coupler ou utiliser le code de configuration imprimé ci-dessous.", "Product ID": "Identifiant du produit", "Provide your Thread or WiFi information or both!": "Fournissez vos informations Thread ou WiFi, ou les deux !", "QR Code": "Code QR", + "QR Code scan is not possible": "La numérisation du code QR n'est pas possible", "QR Code to connect": "QR Code pour se connecter", "Re-Announce": "Re-announce", "Reconnect to backend": "Se reconnecter au backend", @@ -127,6 +129,7 @@ "Reset to factory defaults": "Réinitialiser aux paramètres d'usine", "Room plus device type names": "Noms des pièces et des types d'appareils", "Save": "Sauvegarder", + "Scan with the ioBroker cloud": "Scannez avec le cloud ioBroker", "Select default bridge": "Sélectionnez le pont par défaut", "Select/Unselect all devices in room": "Sélectionner/Désélectionner tous les appareils de la pièce", "Show QR Code for commissioning": "Afficher le code QR pour la mise en service", @@ -169,6 +172,7 @@ "floodAlarm": "Alarme d'inondation", "image": "Image", "invalid_password_warning": "Le mot de passe semble invalide", + "ioBroker received \"%s\". You can now close this window by clicking on this text.": "ioBroker a reçu \"%s\". Vous pouvez maintenant fermer cette fenêtre en cliquant sur ce texte.", "ioBroker.pro Login": "Connexion à ioBroker.pro", "ioBroker.pro Password": "Mot de passe ioBroker.pro", "light": "Lumière", diff --git a/src-admin/src/i18n/it.json b/src-admin/src/i18n/it.json index dc0c006..fa35ee7 100644 --- a/src-admin/src/i18n/it.json +++ b/src-admin/src/i18n/it.json @@ -1,5 +1,4 @@ { - " Please DO NOT use the QR code / pairing code that is printed on the Matter device.": "Si prega di NON utilizzare il codice QR/codice di associazione stampato sul dispositivo Matter.", "%s of %s devices selected": "%s di %s dispositivi selezionati", "Activate BLE to pair devices nearby. You can also use the \"ioBroker Visu\" App to pair other devices.": "Attiva BLE per associare i dispositivi nelle vicinanze del tuo host ioBroker, che non sono già accoppiati con un altro ecosistema. Puoi anche utilizzare l'app \"ioBroker Visu\" per associare altri dispositivi.", "Add": "Aggiungere", @@ -32,6 +31,7 @@ "Bridge is not commissioned. Show QR Code got commissioning": "Il ponte non è commissionato. Mostra il codice QR ha ricevuto la messa in servizio", "Bridges": "Ponti", "Brightness by ON": "Luminosità attivata", + "Camera access is only permitted in secure context. Use HTTPS or localhost rather than HTTP.": "L'accesso alla telecamera è consentito solo in un contesto sicuro. Utilizzare HTTPS o localhost anziché HTTP.", "Cancel": "Annulla", "Close": "Vicino", "Cloud Account": "Conto cloud", @@ -109,11 +109,13 @@ "Pairing Info Text": "Rilevamento dei dispositivi nella tua rete IP. \nAssicurati che l'host ioBroker possa inviare e ricevere liberamente messaggi UDP nella rete e nella rete dei dispositivi da rilevare. \nSe necessario, ripristina i dispositivi alle impostazioni di fabbrica o spegnili e spegnili.", "Pairing Info Text BLE": "Rilevamento dei dispositivi nella tua rete IP e tramite BLE. \nAssicurati che l'host ioBroker possa inviare e ricevere liberamente messaggi UDP nella rete e nella rete dei dispositivi da rilevare. \nSe necessario, ripristina i dispositivi alle impostazioni di fabbrica o spegnili e spegnili.", "Password repeat": "Ripetizione password", + "Please DO NOT use the QR code / pairing code that is printed on the Matter device.": "Si prega di NON utilizzare il codice QR/codice di associazione stampato sul dispositivo Matter.", "Please confirm": "Per favore conferma", "Please scan this QR-Code with the App of the ecosystem you want to pair it to or use the below printed setup code.": "Scansiona questo codice QR con l'app dell'ecosistema a cui desideri associarlo o utilizza il codice di configurazione stampato di seguito.", "Product ID": "Codice prodotto", "Provide your Thread or WiFi information or both!": "Fornisci le tue informazioni sulla discussione o sul WiFi o entrambi!", "QR Code": "Codice QR", + "QR Code scan is not possible": "La scansione del codice QR non è possibile", "QR Code to connect": "Codice QR per connettersi", "Re-Announce": "Re-announce", "Reconnect to backend": "Riconnettiti al backend", @@ -127,6 +129,7 @@ "Reset to factory defaults": "Ripristina le impostazioni di fabbrica", "Room plus device type names": "Nomi delle stanze e dei tipi di dispositivi", "Save": "Salva", + "Scan with the ioBroker cloud": "Scansione con il cloud ioBroker", "Select default bridge": "Seleziona il bridge predefinito", "Select/Unselect all devices in room": "Seleziona/Deseleziona tutti i dispositivi nella stanza", "Show QR Code for commissioning": "Mostra il codice QR per la messa in servizio", @@ -169,6 +172,7 @@ "floodAlarm": "Allarme allagamento", "image": "Immagine", "invalid_password_warning": "La password sembra non valida", + "ioBroker received \"%s\". You can now close this window by clicking on this text.": "ioBroker ha ricevuto \"%s\". Ora puoi chiudere questa finestra cliccando su questo testo.", "ioBroker.pro Login": "Accedi a ioBroker.pro", "ioBroker.pro Password": "Password ioBroker.pro", "light": "Leggero", diff --git a/src-admin/src/i18n/nl.json b/src-admin/src/i18n/nl.json index a1da295..20c5a5c 100644 --- a/src-admin/src/i18n/nl.json +++ b/src-admin/src/i18n/nl.json @@ -1,5 +1,4 @@ { - " Please DO NOT use the QR code / pairing code that is printed on the Matter device.": "Gebruik NIET de QR-code/koppelingscode die op het Matter-apparaat staat.", "%s of %s devices selected": "%s van %s apparaten geselecteerd", "Activate BLE to pair devices nearby. You can also use the \"ioBroker Visu\" App to pair other devices.": "Activeer BLE om apparaten in de buurt van uw ioBroker-host te koppelen die nog niet aan een ander ecosysteem zijn gekoppeld. U kunt ook de app \"ioBroker Visu\" gebruiken om andere apparaten te koppelen.", "Add": "Toevoegen", @@ -32,6 +31,7 @@ "Bridge is not commissioned. Show QR Code got commissioning": "Brug is niet in gebruik genomen. QR-code weergeven kreeg inbedrijfstelling", "Bridges": "Bruggen", "Brightness by ON": "Helderheid door AAN", + "Camera access is only permitted in secure context. Use HTTPS or localhost rather than HTTP.": "Toegang tot de camera is alleen toegestaan in een veilige context. Gebruik HTTPS of localhost in plaats van HTTP.", "Cancel": "Annuleren", "Close": "Dichtbij", "Cloud Account": "Cloud-account", @@ -109,11 +109,13 @@ "Pairing Info Text": "Apparaten in uw IP-netwerk ontdekken. \nZorg ervoor dat de ioBroker-host vrijelijk UDP-berichten kan verzenden en ontvangen in het netwerk en in het netwerk van de te ontdekken apparaten. \nReset indien nodig de apparaten naar de fabrieksinstellingen of schakel ze uit en weer in.", "Pairing Info Text BLE": "Apparaten ontdekken in uw IP-netwerk en via BLE. \nZorg ervoor dat de ioBroker-host vrijelijk UDP-berichten kan verzenden en ontvangen in het netwerk en in het netwerk van de te ontdekken apparaten. \nReset indien nodig de apparaten naar de fabrieksinstellingen of schakel ze uit en weer in.", "Password repeat": "Wachtwoord herhalen", + "Please DO NOT use the QR code / pairing code that is printed on the Matter device.": "Gebruik NIET de QR-code/koppelingscode die op het Matter-apparaat staat.", "Please confirm": "Bevestig alstublieft", "Please scan this QR-Code with the App of the ecosystem you want to pair it to or use the below printed setup code.": "Scan deze QR-code met de app van het ecosysteem waaraan u deze wilt koppelen of gebruik de hieronder afgedrukte installatiecode.", "Product ID": "Product-ID", "Provide your Thread or WiFi information or both!": "Geef uw Thread- of WiFi-informatie op, of beide!", "QR Code": "QR-code", + "QR Code scan is not possible": "QR-code scannen is niet mogelijk", "QR Code to connect": "QR-code om verbinding te maken", "Re-Announce": "Re-announce", "Reconnect to backend": "Opnieuw verbinden met backend", @@ -127,6 +129,7 @@ "Reset to factory defaults": "Resetten naar fabrieksinstellingen", "Room plus device type names": "Kamer plus apparaattypenamen", "Save": "Redden", + "Scan with the ioBroker cloud": "Scannen met de ioBroker-cloud", "Select default bridge": "Selecteer standaardbrug", "Select/Unselect all devices in room": "Selecteer/deselecteer alle apparaten in de kamer", "Show QR Code for commissioning": "QR-code weergeven voor inbedrijfstelling", @@ -169,6 +172,7 @@ "floodAlarm": "Overstromingsalarm", "image": "Afbeelding", "invalid_password_warning": "Wachtwoord lijkt ongeldig", + "ioBroker received \"%s\". You can now close this window by clicking on this text.": "ioBroker ontving \"%s\". U kunt dit venster nu sluiten door op deze tekst te klikken.", "ioBroker.pro Login": "ioBroker.pro Inloggen", "ioBroker.pro Password": "ioBroker.pro-wachtwoord", "light": "Licht", diff --git a/src-admin/src/i18n/pl.json b/src-admin/src/i18n/pl.json index dd18fd3..8df3ba8 100644 --- a/src-admin/src/i18n/pl.json +++ b/src-admin/src/i18n/pl.json @@ -1,5 +1,4 @@ { - " Please DO NOT use the QR code / pairing code that is printed on the Matter device.": "Prosimy NIE używać kodu QR/kodu parowania wydrukowanego na urządzeniu Matter.", "%s of %s devices selected": "Wybrano %s z %s urządzeń", "Activate BLE to pair devices nearby. You can also use the \"ioBroker Visu\" App to pair other devices.": "Aktywuj BLE, aby sparować urządzenia w pobliżu hosta ioBroker, które nie są jeszcze sparowane z innym ekosystemem. Możesz także użyć aplikacji „ioBroker Visu”, aby sparować inne urządzenia.", "Add": "Dodać", @@ -32,6 +31,7 @@ "Bridge is not commissioned. Show QR Code got commissioning": "Most nie jest oddany do użytku. Pokaż kod QR, który został uruchomiony", "Bridges": "Mosty", "Brightness by ON": "Jasność po włączeniu", + "Camera access is only permitted in secure context. Use HTTPS or localhost rather than HTTP.": "Dostęp do kamery jest dozwolony tylko w bezpiecznym kontekście. Użyj HTTPS lub localhost zamiast HTTP.", "Cancel": "Anulować", "Close": "Zamknąć", "Cloud Account": "Konto w chmurze", @@ -109,11 +109,13 @@ "Pairing Info Text": "Wykrywanie urządzeń w Twojej sieci IP. \nUpewnij się, że host ioBroker może swobodnie wysyłać i odbierać wiadomości UDP w sieci oraz w sieci wykrywanych urządzeń. \nW razie potrzeby zresetuj urządzenia do ustawień fabrycznych lub wyłącz je i włącz.", "Pairing Info Text BLE": "Wykrywanie urządzeń w Twojej sieci IP i poprzez BLE. \nUpewnij się, że host ioBroker może swobodnie wysyłać i odbierać wiadomości UDP w sieci oraz w sieci wykrywanych urządzeń. \nW razie potrzeby zresetuj urządzenia do ustawień fabrycznych lub wyłącz je i włącz.", "Password repeat": "Powtórz hasło", + "Please DO NOT use the QR code / pairing code that is printed on the Matter device.": "Prosimy NIE używać kodu QR/kodu parowania wydrukowanego na urządzeniu Matter.", "Please confirm": "Proszę potwierdzić", "Please scan this QR-Code with the App of the ecosystem you want to pair it to or use the below printed setup code.": "Zeskanuj ten kod QR za pomocą aplikacji ekosystemu, z którym chcesz go sparować, lub użyj poniższego wydrukowanego kodu konfiguracyjnego.", "Product ID": "ID produktu", "Provide your Thread or WiFi information or both!": "Podaj informacje o swoim wątku lub Wi-Fi lub jedno i drugie!", "QR Code": "Kod QR", + "QR Code scan is not possible": "Skanowanie kodu QR nie jest możliwe", "QR Code to connect": "Kod QR do połączenia", "Re-Announce": "Re-announce", "Reconnect to backend": "Ponowne połączenie z zapleczem", @@ -127,6 +129,7 @@ "Reset to factory defaults": "Przywróć ustawienia fabryczne", "Room plus device type names": "Nazwy pomieszczeń i typów urządzeń", "Save": "Ratować", + "Scan with the ioBroker cloud": "Skanuj za pomocą chmury ioBroker", "Select default bridge": "Wybierz domyślny most", "Select/Unselect all devices in room": "Zaznacz/odznacz wszystkie urządzenia w pokoju", "Show QR Code for commissioning": "Pokaż kod QR do uruchomienia", @@ -169,6 +172,7 @@ "floodAlarm": "Alarm powodziowy", "image": "Obraz", "invalid_password_warning": "Hasło wygląda na nieprawidłowe", + "ioBroker received \"%s\". You can now close this window by clicking on this text.": "ioBroker otrzymał \"%s\". Teraz możesz zamknąć to okno, klikając na ten tekst.", "ioBroker.pro Login": "Zaloguj się ioBroker.pro", "ioBroker.pro Password": "Hasło ioBroker.pro", "light": "Światło", diff --git a/src-admin/src/i18n/pt.json b/src-admin/src/i18n/pt.json index 0509281..e45fd55 100644 --- a/src-admin/src/i18n/pt.json +++ b/src-admin/src/i18n/pt.json @@ -1,5 +1,4 @@ { - " Please DO NOT use the QR code / pairing code that is printed on the Matter device.": "NÃO use o código QR/código de pareamento impresso no dispositivo Matter.", "%s of %s devices selected": "%s de %s dispositivos selecionados", "Activate BLE to pair devices nearby. You can also use the \"ioBroker Visu\" App to pair other devices.": "Ative o BLE para emparelhar dispositivos próximos ao seu host ioBroker, que ainda não estejam emparelhados com outro ecossistema. Você também pode usar o aplicativo \"ioBroker Visu\" para emparelhar outros dispositivos.", "Add": "Adicionar", @@ -32,6 +31,7 @@ "Bridge is not commissioned. Show QR Code got commissioning": "A ponte não está comissionada. Mostrar QR Code foi comissionado", "Bridges": "Pontes", "Brightness by ON": "Brilho por ON", + "Camera access is only permitted in secure context. Use HTTPS or localhost rather than HTTP.": "O acesso à câmera só é permitido em contexto seguro. Use HTTPS ou localhost em vez de HTTP.", "Cancel": "Cancelar", "Close": "Fechar", "Cloud Account": "Conta na nuvem", @@ -109,11 +109,13 @@ "Pairing Info Text": "Descobrindo dispositivos em sua rede IP. \nCertifique-se de que o host ioBroker possa enviar e receber livremente mensagens UDP na rede e na rede dos dispositivos a serem descobertos. \nSe necessário, redefina os dispositivos para as configurações de fábrica ou desligue-os.", "Pairing Info Text BLE": "Descobrindo dispositivos na sua rede IP e via BLE. \nCertifique-se de que o host ioBroker possa enviar e receber livremente mensagens UDP na rede e na rede dos dispositivos a serem descobertos. \nSe necessário, redefina os dispositivos para as configurações de fábrica ou desligue-os.", "Password repeat": "Repetição de senha", + "Please DO NOT use the QR code / pairing code that is printed on the Matter device.": "NÃO use o código QR/código de pareamento impresso no dispositivo Matter.", "Please confirm": "Por favor confirme", "Please scan this QR-Code with the App of the ecosystem you want to pair it to or use the below printed setup code.": "Digitalize este código QR com o aplicativo do ecossistema ao qual deseja emparelhá-lo ou use o código de configuração impresso abaixo.", "Product ID": "ID do produto", "Provide your Thread or WiFi information or both!": "Forneça suas informações de Thread ou WiFi ou ambos!", "QR Code": "Código QR", + "QR Code scan is not possible": "Não é possível escanear o código QR", "QR Code to connect": "QR Code para conectar", "Re-Announce": "Re-announce", "Reconnect to backend": "Reconectar ao backend", @@ -127,6 +129,7 @@ "Reset to factory defaults": "Redefinir para os padrões de fábrica", "Room plus device type names": "Nomes de salas e tipos de dispositivos", "Save": "Salvar", + "Scan with the ioBroker cloud": "Digitalize com a nuvem ioBroker", "Select default bridge": "Selecione a ponte padrão", "Select/Unselect all devices in room": "Selecionar/desmarcar todos os dispositivos na sala", "Show QR Code for commissioning": "Mostrar código QR para comissionamento", @@ -169,6 +172,7 @@ "floodAlarm": "Alarme de inundação", "image": "Imagem", "invalid_password_warning": "A senha parece inválida", + "ioBroker received \"%s\". You can now close this window by clicking on this text.": "ioBroker recebeu \"%s\". Agora você pode fechar esta janela clicando neste texto.", "ioBroker.pro Login": "Login do ioBroker.pro", "ioBroker.pro Password": "Senha do ioBroker.pro", "light": "Luz", diff --git a/src-admin/src/i18n/ru.json b/src-admin/src/i18n/ru.json index 71f3400..7bb9eb3 100644 --- a/src-admin/src/i18n/ru.json +++ b/src-admin/src/i18n/ru.json @@ -1,5 +1,4 @@ { - " Please DO NOT use the QR code / pairing code that is printed on the Matter device.": "НЕ ИСПОЛЬЗУЙТЕ QR-код/код сопряжения, напечатанный на устройстве Matter.", "%s of %s devices selected": "Выбрано %s из %s устройств", "Activate BLE to pair devices nearby. You can also use the \"ioBroker Visu\" App to pair other devices.": "Активируйте BLE для сопряжения устройств поблизости от вашего хоста ioBroker, которые еще не подключены к другой экосистеме. Вы также можете использовать приложение «ioBroker Visu» для сопряжения других устройств.", "Add": "Добавлять", @@ -32,6 +31,7 @@ "Bridge is not commissioned. Show QR Code got commissioning": "Мост не сдан в эксплуатацию. Показать QR-код введен в эксплуатацию", "Bridges": "Мосты", "Brightness by ON": "Яркость при включении", + "Camera access is only permitted in secure context. Use HTTPS or localhost rather than HTTP.": "Доступ к камере разрешен только в безопасном контексте. Используйте HTTPS или localhost вместо HTTP.", "Cancel": "Отмена", "Close": "Закрыть", "Cloud Account": "Облачный аккаунт", @@ -109,11 +109,13 @@ "Pairing Info Text": "Обнаружение устройств в вашей IP-сети. \nУбедитесь, что хост ioBroker может свободно отправлять и получать UDP-сообщения в сети и в сети обнаруживаемых устройств. \nПри необходимости сбросьте устройства к заводским настройкам или выключите и включите их.", "Pairing Info Text BLE": "Обнаружение устройств в вашей IP-сети и через BLE. \nУбедитесь, что хост ioBroker может свободно отправлять и получать UDP-сообщения в сети и в сети обнаруживаемых устройств. \nПри необходимости сбросьте устройства к заводским настройкам или выключите и включите их.", "Password repeat": "Повторите пароль", + "Please DO NOT use the QR code / pairing code that is printed on the Matter device.": "НЕ ИСПОЛЬЗУЙТЕ QR-код/код сопряжения, напечатанный на устройстве Matter.", "Please confirm": "Пожалуйста подтвердите", "Please scan this QR-Code with the App of the ecosystem you want to pair it to or use the below printed setup code.": "Отсканируйте этот QR-код с помощью приложения той экосистемы, к которой вы хотите его подключить, или используйте распечатанный ниже код настройки.", "Product ID": "Код товара", "Provide your Thread or WiFi information or both!": "Предоставьте информацию о своей теме или Wi-Fi, или и то, и другое!", "QR Code": "QR-код", + "QR Code scan is not possible": "Сканирование QR-кода невозможно.", "QR Code to connect": "QR-код для подключения", "Re-Announce": "Re-announce", "Reconnect to backend": "Повторное подключение к бэкэнду", @@ -127,6 +129,7 @@ "Reset to factory defaults": "Сброс к заводским настройкам", "Room plus device type names": "Названия типов комнат и устройств", "Save": "Сохранять", + "Scan with the ioBroker cloud": "Сканирование с помощью облака ioBroker", "Select default bridge": "Выбрать мост по умолчанию", "Select/Unselect all devices in room": "Выбрать/отменить выбор всех устройств в комнате", "Show QR Code for commissioning": "Показать QR-код для ввода в эксплуатацию", @@ -169,6 +172,7 @@ "floodAlarm": "Сигнализация наводнения", "image": "Изображение", "invalid_password_warning": "Пароль выглядит недействительным", + "ioBroker received \"%s\". You can now close this window by clicking on this text.": "ioBroker получил \"%s\". Теперь вы можете закрыть это окно, нажав на этот текст.", "ioBroker.pro Login": "ioBroker.pro Вход", "ioBroker.pro Password": "ioBroker.pro Пароль", "light": "Свет", diff --git a/src-admin/src/i18n/uk.json b/src-admin/src/i18n/uk.json index 2cfc473..8eba021 100644 --- a/src-admin/src/i18n/uk.json +++ b/src-admin/src/i18n/uk.json @@ -1,5 +1,4 @@ { - " Please DO NOT use the QR code / pairing code that is printed on the Matter device.": " Будь ласка, НЕ використовуйте QR-код/код сполучення, надрукований на пристрої Matter.", "%s of %s devices selected": "%s із %s вибрано пристроїв", "Activate BLE to pair devices nearby. You can also use the \"ioBroker Visu\" App to pair other devices.": "Активуйте BLE, щоб підключити пристрої поблизу вашого хосту ioBroker, які ще не підключено до іншої екосистеми. Ви також можете використовувати додаток \"ioBroker Visu\" для підключення інших пристроїв.", "Add": "додати", @@ -32,6 +31,7 @@ "Bridge is not commissioned. Show QR Code got commissioning": "Міст не зданий в експлуатацію. Показати QR-код введено в експлуатацію", "Bridges": "Мости", "Brightness by ON": "Яскравість на ON", + "Camera access is only permitted in secure context. Use HTTPS or localhost rather than HTTP.": "Доступ до камери дозволено лише в безпечному контексті. Використовуйте HTTPS або localhost, а не HTTP.", "Cancel": "Скасувати", "Close": "Закрити", "Cloud Account": "Хмарний обліковий запис", @@ -109,11 +109,13 @@ "Pairing Info Text": "Виявлення пристроїв у вашій IP-мережі. \nБудь ласка, переконайтеся, що хост ioBroker може вільно надсилати й отримувати UDP-повідомлення в мережі та в мережі пристроїв для виявлення. \nЗа потреби скиньте пристрої до заводських налаштувань або вимкніть їх.", "Pairing Info Text BLE": "Виявлення пристроїв у вашій IP-мережі та через BLE. \nБудь ласка, переконайтеся, що хост ioBroker може вільно надсилати й отримувати UDP-повідомлення в мережі та в мережі пристроїв для виявлення. \nЗа потреби скиньте пристрої до заводських налаштувань або вимкніть їх.", "Password repeat": "Повторення пароля", + "Please DO NOT use the QR code / pairing code that is printed on the Matter device.": " Будь ласка, НЕ використовуйте QR-код/код сполучення, надрукований на пристрої Matter.", "Please confirm": "Будь-ласка підтвердіть", "Please scan this QR-Code with the App of the ecosystem you want to pair it to or use the below printed setup code.": "Будь ласка, відскануйте цей QR-код за допомогою програми екосистеми, до якої ви хочете підключити його, або скористайтеся надрукованим нижче кодом налаштування.", "Product ID": "ID продукту", "Provide your Thread or WiFi information or both!": "Надайте інформацію про свій ланцюжок або Wi-Fi або те й інше!", "QR Code": "QR-код", + "QR Code scan is not possible": "Сканування QR-коду неможливе", "QR Code to connect": "QR-код для підключення", "Re-Announce": "Re-announce", "Reconnect to backend": "Повторно підключіться до сервера", @@ -127,6 +129,7 @@ "Reset to factory defaults": "Скидання до заводських налаштувань", "Room plus device type names": "Назви типів кімнат і пристроїв", "Save": "зберегти", + "Scan with the ioBroker cloud": "Сканування за допомогою хмари ioBroker", "Select default bridge": "Виберіть міст за замовчуванням", "Select/Unselect all devices in room": "Виберіть/Скасуйте вибір усіх пристроїв у кімнаті", "Show QR Code for commissioning": "Показати QR-код для введення в експлуатацію", @@ -169,6 +172,7 @@ "floodAlarm": "Сигналізація про повінь", "image": "Зображення", "invalid_password_warning": "Пароль виглядає недійсним", + "ioBroker received \"%s\". You can now close this window by clicking on this text.": "ioBroker отримав \"%s\". Тепер ви можете закрити це вікно, натиснувши на цей текст.", "ioBroker.pro Login": "ioBroker.pro Логін", "ioBroker.pro Password": "Пароль ioBroker.pro", "light": "світло", diff --git a/src-admin/src/i18n/zh-cn.json b/src-admin/src/i18n/zh-cn.json index cb9fc02..5efe3a0 100644 --- a/src-admin/src/i18n/zh-cn.json +++ b/src-admin/src/i18n/zh-cn.json @@ -1,5 +1,4 @@ { - " Please DO NOT use the QR code / pairing code that is printed on the Matter device.": "请不要使用印刷在 Matter 设备上的二维码/配对码。", "%s of %s devices selected": "已选择 %s 个设备(共 %s 个)", "Activate BLE to pair devices nearby. You can also use the \"ioBroker Visu\" App to pair other devices.": "激活 BLE 以配对 ioBroker 主机附近尚未与其他生态系统配对的设备。您还可以使用“ioBroker Visu”应用程序配对其他设备。", "Add": "添加", @@ -32,6 +31,7 @@ "Bridge is not commissioned. Show QR Code got commissioning": "桥梁尚未投入使用。显示二维码 已调试", "Bridges": "桥梁", "Brightness by ON": "亮度开启", + "Camera access is only permitted in secure context. Use HTTPS or localhost rather than HTTP.": "仅允许在安全环境下访问摄像头。请使用 HTTPS 或 localhost,而非 HTTP。", "Cancel": "取消", "Close": "关闭", "Cloud Account": "云帐户", @@ -109,11 +109,13 @@ "Pairing Info Text": "在您的 IP 网络中发现设备。\n请确保 ioBroker 主机可以在网络和要发现的设备的网络中自由发送和接收 UDP 消息。\n如果需要,请将设备重置为出厂设置或关闭电源循环。", "Pairing Info Text BLE": "在您的 IP 网络中和通过 BLE 发现设备。\n请确保 ioBroker 主机可以在网络和要发现的设备的网络中自由发送和接收 UDP 消息。\n如果需要,请将设备重置为出厂设置或关闭电源循环。", "Password repeat": "密码重复", + "Please DO NOT use the QR code / pairing code that is printed on the Matter device.": "请不要使用印刷在 Matter 设备上的二维码/配对码。", "Please confirm": "请确认", "Please scan this QR-Code with the App of the ecosystem you want to pair it to or use the below printed setup code.": "请使用您想要配对的生态系统的应用程序扫描此二维码,或使用下面打印的设置代码。", "Product ID": "产品编号", "Provide your Thread or WiFi information or both!": "提供您的 Thread 或 WiFi 信息或两者!", "QR Code": "二维码", + "QR Code scan is not possible": "无法扫描二维码", "QR Code to connect": "二维码连接", "Re-Announce": "Re-announce", "Reconnect to backend": "重新连接到后端", @@ -127,6 +129,7 @@ "Reset to factory defaults": "重置为出厂默认设置", "Room plus device type names": "房间加设备类型名称", "Save": "节省", + "Scan with the ioBroker cloud": "使用 ioBroker 云进行扫描", "Select default bridge": "选择默认桥", "Select/Unselect all devices in room": "选择/取消选择房间中的所有设备", "Show QR Code for commissioning": "显示二维码进行调试", @@ -169,6 +172,7 @@ "floodAlarm": "洪水警报", "image": "图像", "invalid_password_warning": "密码看起来无效", + "ioBroker received \"%s\". You can now close this window by clicking on this text.": "ioBroker 收到“%s”。您现在可以通过单击此文本来关闭此窗口。", "ioBroker.pro Login": "ioBroker.pro 登录", "ioBroker.pro Password": "ioBroker.pro 密码", "light": "光", From 93c435b5d531d3ef65310ca1388132b56fa4ba4d Mon Sep 17 00:00:00 2001 From: GermanBluefox Date: Mon, 6 Jan 2025 19:20:10 +0000 Subject: [PATCH 03/20] Replaced apple link: https://github.com/ioBroker/ioBroker.matter/issues/249 --- src-admin/src/components/WelcomeDialog.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-admin/src/components/WelcomeDialog.tsx b/src-admin/src/components/WelcomeDialog.tsx index 5b1c5af..0cdae36 100644 --- a/src-admin/src/components/WelcomeDialog.tsx +++ b/src-admin/src/components/WelcomeDialog.tsx @@ -224,7 +224,7 @@ class WelcomeDialog extends React.Component window.open( - `https://apps.apple.com/${I18n.getLanguage()}/app/iobroker/id1449564305`, + `https://apps.apple.com/${I18n.getLanguage()}/app/iobroker-visu/id1673095774`, '_blank', ) } From 723c928df866575c2e4fb92b14d3ef66913ee4a2 Mon Sep 17 00:00:00 2001 From: GermanBluefox Date: Mon, 6 Jan 2025 19:57:30 +0000 Subject: [PATCH 04/20] Do not show password: https://github.com/ioBroker/ioBroker.matter/issues/255 --- src-admin/src/App.tsx | 46 +++++++++++++++++ src-admin/src/Tabs/Options.tsx | 92 ++++++++++++++++++++++++++++------ src-admin/src/i18n/de.json | 1 + src-admin/src/i18n/en.json | 1 + src-admin/src/i18n/es.json | 1 + src-admin/src/i18n/fr.json | 1 + src-admin/src/i18n/it.json | 1 + src-admin/src/i18n/nl.json | 1 + src-admin/src/i18n/pl.json | 1 + src-admin/src/i18n/pt.json | 1 + src-admin/src/i18n/ru.json | 1 + src-admin/src/i18n/uk.json | 1 + src-admin/src/i18n/zh-cn.json | 1 + 13 files changed, 135 insertions(+), 14 deletions(-) diff --git a/src-admin/src/App.tsx b/src-admin/src/App.tsx index 02bd54b..0c673ce 100644 --- a/src-admin/src/App.tsx +++ b/src-admin/src/App.tsx @@ -25,6 +25,8 @@ import { type GenericAppProps, type GenericAppState, type IobTheme, + SaveCloseButtons, + DialogConfirm, } from '@iobroker/adapter-react-v5'; import { clone, getText } from './Utils'; @@ -505,6 +507,9 @@ class App extends GenericApp { instance={this.instance} matter={this.state.matter} showToast={(text: string) => this.showToast(text)} + onError={(errorText: string): void => { + this.setConfigurationError(errorText); + }} /> ); } @@ -669,6 +674,47 @@ class App extends GenericApp { ); } + renderSaveCloseButtons(): React.JSX.Element | null { + if (!this.state.confirmClose && !this.state.bottomButtons) { + return null; + } + + return ( + <> + {this.state.bottomButtons ? ( + => this.onSave(isClose)} + onClose={() => { + if (this.state.changed) { + this.setState({ confirmClose: true }); + } else { + GenericApp.onClose(); + } + }} + error={!!this.state.isConfigurationError} + /> + ) : null} + {this.state.confirmClose ? ( + + this.setState({ confirmClose: false }, () => isYes && GenericApp.onClose()) + } + /> + ) : null} + + ); + } + render(): React.JSX.Element { if (!this.state.ready) { return ( diff --git a/src-admin/src/Tabs/Options.tsx b/src-admin/src/Tabs/Options.tsx index 4e8ce28..d214c1f 100644 --- a/src-admin/src/Tabs/Options.tsx +++ b/src-admin/src/Tabs/Options.tsx @@ -20,7 +20,7 @@ import { Typography, } from '@mui/material'; -import { Check, Close, LayersClear, AutoAwesome, Clear, VisibilityOff, Visibility } from '@mui/icons-material'; +import { Check, Close, LayersClear, AutoAwesome, Clear } from '@mui/icons-material'; import { type AdminConnection, I18n, Logo } from '@iobroker/adapter-react-v5'; @@ -43,7 +43,7 @@ const styles: Record = { marginTop: 2, marginBottom: 1, width: '100%', - maxWidth: 500, + maxWidth: 250, }, inputLong: { marginTop: 2, @@ -79,6 +79,7 @@ interface OptionsProps { /** The current matter config */ matter: MatterConfig; onShowWelcomeDialog: () => void; + onError: (errorText: string) => void; } interface OptionsState { @@ -86,9 +87,9 @@ interface OptionsState { dialogLevel: number; iotLogin: string; iotPassword: string; + passwordRepeat: string; iotInstance: string; interfaces?: { value: string; address?: string; address6?: string }[]; - passVisible?: boolean; } function cutIpV6(address: string, length?: number): string { @@ -111,6 +112,7 @@ class Options extends Component { dialogLevel: 0, iotLogin: '', iotPassword: '', + passwordRepeat: this.props.native.pass, iotInstance: '', }; } @@ -261,7 +263,10 @@ class Options extends Component { render(): React.JSX.Element { const item = this.state.interfaces?.find(it => it.value === (this.props.native.interface || '_')); - const passwordError = Options.checkPassword(this.props.native.pass); + const passwordError = + this.props.native.pass !== this.state.passwordRepeat + ? I18n.t('Password repeat is not equal to password') + : Options.checkPassword(this.props.native.pass); const bridge = this.props.matter.bridges.find(bridge => bridge.uuid === this.props.native.defaultBridge) || { uuid: '_', @@ -425,7 +430,7 @@ class Options extends Component { )} -
+
{ ) : null, }, }} - style={{ ...styles.input, marginRight: 16 }} + style={styles.input} /> { endAdornment: this.props.native.pass ? ( this.setState({ passVisible: !this.state.passVisible })} + onClick={() => { + void this.props.onChange('pass', ''); + if (this.state.passwordRepeat !== '') { + this.props.onError(I18n.t('Password repeat is not equal to password')); + } else { + this.props.onError(''); + } + }} > - {this.state.passVisible ? : } + ) : null, }, }} value={this.props.native.pass} - type={this.state.passVisible ? 'text' : 'password'} + type="password" helperText={passwordError || ''} - onChange={e => this.props.onChange('pass', e.target.value)} + onChange={e => { + void this.props.onChange('pass', e.target.value); + if (this.state.passwordRepeat !== e.target.value) { + this.props.onError(I18n.t('Password repeat is not equal to password')); + } else { + this.props.onError(''); + } + }} margin="normal" /> + { + this.setState({ passwordRepeat: '' }); + if (this.props.native.pass !== '') { + this.props.onError(I18n.t('Password repeat is not equal to password')); + } else { + this.props.onError(''); + } + }} + > + + + ) : null, + }, + }} + value={this.state.passwordRepeat} + type="password" + helperText={passwordError || ''} + onChange={e => { + if (this.props.native.pass !== e.target.value) { + this.props.onError(I18n.t('Password repeat is not equal to password')); + } else { + this.props.onError(''); + } + this.setState({ passwordRepeat: e.target.value }); + }} + margin="normal" + /> +
+
{this.state.iotInstance && (this.state.iotPassword !== this.props.native.pass || + this.state.iotPassword !== this.state.passwordRepeat || this.state.iotLogin !== this.props.native.login) ? (
+
+ {I18n.t('Controller Settings')} + this.props.onChange('controllerFabricLabel', e.target.value)} + margin="normal" + slotProps={{ + input: { + endAdornment: this.props.native.controllerFabricLabel ? ( + this.props.onChange('controllerFabricLabel', '')} + > + + + ) : null, + }, + }} + style={styles.input} + /> +
+
{I18n.t('Maintenance Settings')} + {!this.state.discoveryDone ? ( + + ) : null} diff --git a/src-admin/src/i18n/de.json b/src-admin/src/i18n/de.json index 774dc1c..b8f4943 100644 --- a/src-admin/src/i18n/de.json +++ b/src-admin/src/i18n/de.json @@ -68,6 +68,7 @@ "Do not compose devices (Alexa does not support composed devices yet)": "Keine zusammengesetzten Geräte (wenn das zu koppelnde Ökosystem zusammengesetzte Geräte nicht unterstützt)", "Do you want to delete bridge": "Möchten Sie Bridge löschen?", "Do you want to delete device": "Möchten Sie das Gerät löschen?", + "Docker information": "Da ioBroker in Docker ausgeführt wird muss das Host-Netzwerk genutzt werden, da sonst IPv6 und UDP Routing nicht funktioniert.", "Edit bridge": "Bridge bearbeiten", "Edit device": "Gerät bearbeiten", "Enable": "Aktivieren", @@ -95,6 +96,7 @@ "Matter Controller Infotext": "Verwenden Sie die „Controller“-Funktionen, um Matter-kompatible Geräte in ioBroker zu integrieren. \nSie können Geräte entdecken, in Betrieb nehmen und anschließend verwalten. Die Daten der Geräte sind als Status auf der Registerkarte „Objekte“ von ioBroker verfügbar. \nDie Controller-Funktion ist standardmäßig deaktiviert und kann mit dem folgenden Schalter aktiviert werden.", "Matter requires enabled IPv6 protocol on selected interface. No IPv6 was found on your system!": "Matter erfordert aktiviertes IPv6-Protokoll auf der ausgewählten Schnittstelle. Auf Ihrem System wurde kein IPv6 gefunden!", "Matter requires enabled IPv6 protocol on selected interface. Some IPv6 was found on your system.": "Matter erfordert aktiviertes IPv6-Protokoll auf der ausgewählten Schnittstelle. Auf Ihrem System wurde IPv6 gefunden.", + "More details in the Troubleshooting Guide": "Weitere Einzelheiten finden Sie im Leitfaden zur Fehlerbehebung", "Name": "Name", "Network configuration": "Netzwerkkonfiguration", "New bridge": "Neue Brücke", @@ -125,6 +127,7 @@ "QR Code scan is not possible": "QR-Code-Scan ist nicht möglich", "QR Code to connect for %s": "QR-Code zum Verbinden für „%s“", "Re-Announce": "Pairing neu starten", + "Read for problems": "Wenn Sie Probleme beim Auffinden von Geräten oder beim Herstellen einer Verbindung zu Ökosystemen haben, müssen Sie möglicherweise zusätzliche IPv6-Einstellungen auf dem ioBroker-Host vornehmen.", "Reconnect to backend": "Erneute Verbindung zum Backend herstellen", "Required": "Erforderlich", "Requirements: add via QR Code": "Voraussetzung: Das Matter-Gerät muss bereits mit einem anderen Matter-System (z. B. Google, Apple, Alexa, …) verbunden sein. Hier musst du den QR-Code-Pairing-Code eingeben oder den QR-Code scannen, der vom Matter-Ökosystem (z. B. Google Home) für dieses Matter-Gerät in der App bereitgestellt wird.", @@ -158,6 +161,7 @@ "Thread network name": "Thread-Network-Name", "Thread operational dataset": "Thread operational dataset", "To commission/connect matter devices with ioBroker controller use better ioBroker.visu app:": "Um Matter-Geräte mit ioBroker-Controller in Betrieb zu nehmen/zu verbinden, verwenden Sie besser die ioBroker.visu-App:", + "To make all this work, the following requirements should be considered": "Damit das alles funktioniert, sollten die folgenden Anforderungen beachtet werden", "To use a Matter bridge or device options with more than 5 devices please enter valid ioBroker.pro Cloud credentials with at least an active Assistant license.": "Um eine Matter-Bridge oder Geräteoptionen mit mehr als 5 Geräten zu verwenden, geben Sie bitte gültige ioBroker.pro-Cloud-Anmeldeinformationen mit mindestens einer aktiven Assistant-Lizenz ein.", "Unselect all rooms": "Alle Räume abwählen", "Use last value for ON": "Bei ON den letzten Wert verwenden", @@ -165,6 +169,7 @@ "Vendor ID": "Hersteller-ID", "WLAN credentials": "WLAN-Zugangsdaten", "Warning about 15 devices": "Um Probleme beim Koppeln dieser Bridge zu vermeiden, sollten Sie sie jetzt koppeln und später weitere Geräte hinzufügen.", + "Welcome explanation": "Der Matter-Adapter ermöglicht die Integration von ioBroker mit allen Matter-Geräten auf dem Markt und ermöglicht die direkte Nutzung von ioBroker-Geräten in vielen Matter-kompatiblen Ökosystemen, wie beispielsweise Apple, Google, Amazon oder SmartThings. Die Kommunikation erfolgt lokal und sicher.", "Welcome to Matter!": "Willkommen bei Matter!", "WiFi SSID": "WLAN-SSID", "WiFi password": "WLAN Passwort", diff --git a/src-admin/src/i18n/en.json b/src-admin/src/i18n/en.json index 23fa343..4d58c61 100644 --- a/src-admin/src/i18n/en.json +++ b/src-admin/src/i18n/en.json @@ -68,6 +68,7 @@ "Do not compose devices (Alexa does not support composed devices yet)": "Do not compose devices (if the ecosystem to pair do not support composed devices)", "Do you want to delete bridge": "Do you want to delete bridge", "Do you want to delete device": "Do you want to delete device", + "Docker information": "Since ioBroker runs in Docker, the host network must be used, otherwise IPv6 and UDP routing will not work.", "Edit bridge": "Edit bridge", "Edit device": "Edit device", "Enable": "Enable", @@ -95,6 +96,7 @@ "Matter Controller Infotext": "Use the \"Controller\" features to integrate Matter compatible devices into ioBroker. \nYou can discover and commission device and manage them afterwards. The data of the devices will be available as states in the ioBroker Objects tab. \nThe controller feature is disabled by default and can be enabled with the below switch.", "Matter requires enabled IPv6 protocol on selected interface. No IPv6 was found on your system!": "Matter requires enabled IPv6 protocol on selected interface. No IPv6 was found on your system!", "Matter requires enabled IPv6 protocol on selected interface. Some IPv6 was found on your system.": "Matter requires enabled IPv6 protocol on selected interface. Some IPv6 was found on your system.", + "More details in the Troubleshooting Guide": "More details in the Troubleshooting Guide", "Name": "Name", "Network configuration": "Network configuration", "New bridge": "New bridge", @@ -125,6 +127,7 @@ "QR Code scan is not possible": "QR Code scan is not possible", "QR Code to connect for %s": "QR Code to connect for \"%s\"", "Re-Announce": "Re-announce", + "Read for problems": "If you have problems finding devices or connecting to ecosystems, you may need to make additional IPv6 settings on the ioBroker host.", "Reconnect to backend": "Reconnect to backend", "Required": "Required", "Requirements: add via QR Code": "Prerequisite: The Matter device must already be commisioned to another Matter system (e.g. Google, Apple, Alexa, ...). Here you must enter the QR code pairing code or scan the QR code that is provided for this Matter device in the app by the Matter ecosystem (e.g. Google Home).", @@ -158,6 +161,7 @@ "Thread network name": "Thread network name", "Thread operational dataset": "Thread operational dataset", "To commission/connect matter devices with ioBroker controller use better ioBroker.visu app:": "To commission/connect matter devices with ioBroker controller use better ioBroker.visu app:", + "To make all this work, the following requirements should be considered": "To make all this work, the following requirements should be considered", "To use a Matter bridge or device options with more than 5 devices please enter valid ioBroker.pro Cloud credentials with at least an active Assistant license.": "To use a Matter bridge or device options with more than 5 devices please enter valid ioBroker.pro Cloud credentials with at least an active Assistant license.", "Unselect all rooms": "Unselect all rooms", "Use last value for ON": "Use the last value by ON", @@ -165,6 +169,7 @@ "Vendor ID": "Vendor ID", "WLAN credentials": "WLAN credentials", "Warning about 15 devices": "To avoid problems when pairing this bridge please consider to pair it now and add more devices afterwards", + "Welcome explanation": "The Matter adapter allows the integration of ioBroker with all Matter devices on the market and allows ioBroker devices to be used directly in many Matter-compatible ecosystems, such as Apple, Google, Amazon or SmartThings. Communication takes place locally and securely.", "Welcome to Matter!": "Welcome to Matter!", "WiFi SSID": "WiFi SSID", "WiFi password": "WiFi password", diff --git a/src-admin/src/i18n/es.json b/src-admin/src/i18n/es.json index 993faf1..6d2c32f 100644 --- a/src-admin/src/i18n/es.json +++ b/src-admin/src/i18n/es.json @@ -68,6 +68,7 @@ "Do not compose devices (Alexa does not support composed devices yet)": "No componer dispositivos (si el ecosistema a emparejar no admite dispositivos compuestos)", "Do you want to delete bridge": "¿Quieres eliminar el puente?", "Do you want to delete device": "¿Quieres eliminar el dispositivo?", + "Docker information": "Dado que ioBroker se ejecuta en Docker, se debe utilizar la red del host; de lo contrario, el enrutamiento IPv6 y UDP no funcionará.", "Edit bridge": "Editar puente", "Edit device": "Editar dispositivo", "Enable": "Permitir", @@ -95,6 +96,7 @@ "Matter Controller Infotext": "Utilice las funciones del \"Controlador\" para integrar dispositivos compatibles con Matter en ioBroker. \nPuede descubrir y poner en marcha dispositivos y gestionarlos posteriormente. Los datos de los dispositivos estarán disponibles como estados en la pestaña Objetos de ioBroker. \nLa función del controlador está deshabilitada de forma predeterminada y se puede habilitar con el siguiente interruptor.", "Matter requires enabled IPv6 protocol on selected interface. No IPv6 was found on your system!": "Matter requiere el protocolo IPv6 habilitado en la interfaz seleccionada. ¡No se encontró IPv6 en su sistema!", "Matter requires enabled IPv6 protocol on selected interface. Some IPv6 was found on your system.": "Matter requiere que el protocolo IPv6 esté habilitado en la interfaz seleccionada. Se encontró algún protocolo IPv6 en su sistema.", + "More details in the Troubleshooting Guide": "Más detalles en la Guía de solución de problemas", "Name": "Nombre", "Network configuration": "Configuración de la red", "New bridge": "Nuevo puente", @@ -125,6 +127,7 @@ "QR Code scan is not possible": "No es posible escanear códigos QR", "QR Code to connect for %s": "Código QR para conectarse a \"%s\"", "Re-Announce": "Re-announce", + "Read for problems": "Si tiene problemas para encontrar dispositivos o conectarse a ecosistemas, es posible que necesite realizar configuraciones IPv6 adicionales en el host ioBroker.", "Reconnect to backend": "Reconectarse al backend", "Required": "Requerido", "Requirements: add via QR Code": "Requisito: El dispositivo Matter ya debe estar conectado a otro sistema Matter (p. ej. Google, Apple, Alexa, etc.). Para ello, debe introducir el código QR de emparejamiento o escanear el código QR que el ecosistema Matter proporciona para este dispositivo Matter en la aplicación (p. ej. Google Home).", @@ -158,6 +161,7 @@ "Thread network name": "Thread network name", "Thread operational dataset": "Thread operational dataset", "To commission/connect matter devices with ioBroker controller use better ioBroker.visu app:": "Para poner en funcionamiento o conectar dispositivos con el controlador ioBroker, utilice la mejor aplicación ioBroker.visu:", + "To make all this work, the following requirements should be considered": "Para que todo esto funcione se deben tener en cuenta los siguientes requisitos", "To use a Matter bridge or device options with more than 5 devices please enter valid ioBroker.pro Cloud credentials with at least an active Assistant license.": "Para utilizar un puente Matter u opciones de dispositivo con más de 5 dispositivos, ingrese credenciales válidas de ioBroker.pro Cloud con al menos una licencia de Asistente activa.", "Unselect all rooms": "Deseleccionar todas las habitaciones", "Use last value for ON": "Utilice el último valor de ON", @@ -165,6 +169,7 @@ "Vendor ID": "ID del proveedor", "WLAN credentials": "Credenciales WLAN", "Warning about 15 devices": "Para evitar problemas al emparejar este puente, considere emparejarlo ahora y agregar más dispositivos después.", + "Welcome explanation": "El adaptador Matter permite la integración de ioBroker con todos los dispositivos Matter del mercado y permite que los dispositivos ioBroker se utilicen directamente en muchos ecosistemas compatibles con Matter, como Apple, Google, Amazon o SmartThings. La comunicación se realiza de forma local y segura.", "Welcome to Matter!": "¡Bienvenido a Matter!", "WiFi SSID": "Wi-Fi SSID", "WiFi password": "Contraseña de wifi", diff --git a/src-admin/src/i18n/fr.json b/src-admin/src/i18n/fr.json index fb09058..eea861e 100644 --- a/src-admin/src/i18n/fr.json +++ b/src-admin/src/i18n/fr.json @@ -68,6 +68,7 @@ "Do not compose devices (Alexa does not support composed devices yet)": "Ne composez pas d'appareils (si l'écosystème à coupler ne prend pas en charge les appareils composés)", "Do you want to delete bridge": "Voulez-vous supprimer le pont", "Do you want to delete device": "Voulez-vous supprimer l'appareil", + "Docker information": "Étant donné que ioBroker s'exécute dans Docker, le réseau hôte doit être utilisé, sinon le routage IPv6 et UDP ne fonctionnera pas.", "Edit bridge": "Modifier le pont", "Edit device": "Modifier l'appareil", "Enable": "Activer", @@ -95,6 +96,7 @@ "Matter Controller Infotext": "Utilisez les fonctionnalités « Contrôleur » pour intégrer des appareils compatibles Matter dans ioBroker. \nVous pouvez découvrir et mettre en service des appareils et les gérer ensuite. Les données des appareils seront disponibles sous forme d'états dans l'onglet Objets ioBroker. \nLa fonction du contrôleur est désactivée par défaut et peut être activée avec le commutateur ci-dessous.", "Matter requires enabled IPv6 protocol on selected interface. No IPv6 was found on your system!": "Matter nécessite l'activation du protocole IPv6 sur l'interface sélectionnée. Aucun IPv6 n'a été trouvé sur votre système !", "Matter requires enabled IPv6 protocol on selected interface. Some IPv6 was found on your system.": "Matter nécessite que le protocole IPv6 soit activé sur l'interface sélectionnée. Un IPv6 a été détecté sur votre système.", + "More details in the Troubleshooting Guide": "Plus de détails dans le Guide de dépannage", "Name": "Nom", "Network configuration": "Configuration du réseau", "New bridge": "Nouveau pont", @@ -125,6 +127,7 @@ "QR Code scan is not possible": "La numérisation du code QR n'est pas possible", "QR Code to connect for %s": "Code QR pour se connecter pour « %s »", "Re-Announce": "Re-announce", + "Read for problems": "Si vous rencontrez des problèmes pour trouver des appareils ou vous connecter à des écosystèmes, vous devrez peut-être définir des paramètres IPv6 supplémentaires sur l'hôte ioBroker.", "Reconnect to backend": "Se reconnecter au backend", "Required": "Requis", "Requirements: add via QR Code": "Condition préalable : l'appareil Matter doit déjà être mis en service sur un autre système Matter (par ex. Google, Apple, Alexa, ...). Vous devez ici saisir le code QR d'appairage ou scanner le code QR fourni pour cet appareil Matter dans l'application par l'écosystème Matter (par ex. Google Home).", @@ -158,6 +161,7 @@ "Thread network name": "Thread network name", "Thread operational dataset": "Thread operational dataset", "To commission/connect matter devices with ioBroker controller use better ioBroker.visu app:": "Pour mettre en service/connecter des appareils Matter avec le contrôleur ioBroker, utilisez la meilleure application ioBroker.visu :", + "To make all this work, the following requirements should be considered": "Pour que tout cela fonctionne, les exigences suivantes doivent être prises en compte", "To use a Matter bridge or device options with more than 5 devices please enter valid ioBroker.pro Cloud credentials with at least an active Assistant license.": "Pour utiliser un pont Matter ou des options d'appareil avec plus de 5 appareils, veuillez saisir des informations d'identification ioBroker.pro Cloud valides avec au moins une licence Assistant active.", "Unselect all rooms": "Désélectionner toutes les pièces", "Use last value for ON": "Utiliser la dernière valeur par ON", @@ -165,6 +169,7 @@ "Vendor ID": "Fournisseur ID", "WLAN credentials": "Identifiants WLAN", "Warning about 15 devices": "Pour éviter les problèmes lors de l'appairage de ce pont, pensez à l'appairer maintenant et à ajouter d'autres appareils par la suite.", + "Welcome explanation": "L'adaptateur Matter permet l'intégration d'ioBroker avec tous les appareils Matter du marché et permet d'utiliser les appareils ioBroker directement dans de nombreux écosystèmes compatibles Matter, tels qu'Apple, Google, Amazon ou SmartThings. La communication s'effectue localement et en toute sécurité.", "Welcome to Matter!": "Bienvenue chez Matter !", "WiFi SSID": "SSID Wi-Fi", "WiFi password": "Mot de passe WiFi", diff --git a/src-admin/src/i18n/it.json b/src-admin/src/i18n/it.json index 8c06432..c763663 100644 --- a/src-admin/src/i18n/it.json +++ b/src-admin/src/i18n/it.json @@ -68,6 +68,7 @@ "Do not compose devices (Alexa does not support composed devices yet)": "Non comporre dispositivi (se l'ecosistema da associare non supporta i dispositivi composti)", "Do you want to delete bridge": "Vuoi eliminare il bridge", "Do you want to delete device": "Vuoi eliminare il dispositivo", + "Docker information": "Poiché ioBroker viene eseguito in Docker, è necessario utilizzare la rete host, altrimenti il routing IPv6 e UDP non funzionerà.", "Edit bridge": "Modifica ponte", "Edit device": "Modifica dispositivo", "Enable": "Abilitare", @@ -95,6 +96,7 @@ "Matter Controller Infotext": "Utilizza le funzionalità \"Controller\" per integrare i dispositivi compatibili con Matter in ioBroker. \nPuoi scoprire e mettere in servizio il dispositivo e gestirlo successivamente. I dati dei dispositivi saranno disponibili come stati nella scheda Oggetti ioBroker. \nLa funzionalità del controller è disabilitata per impostazione predefinita e può essere abilitata con l'interruttore seguente.", "Matter requires enabled IPv6 protocol on selected interface. No IPv6 was found on your system!": "Matter richiede il protocollo IPv6 abilitato sull'interfaccia selezionata. Nessun IPv6 trovato sul tuo sistema!", "Matter requires enabled IPv6 protocol on selected interface. Some IPv6 was found on your system.": "Matter richiede il protocollo IPv6 abilitato sull'interfaccia selezionata. È stato trovato un IPv6 sul tuo sistema.", + "More details in the Troubleshooting Guide": "Maggiori dettagli nella Guida alla risoluzione dei problemi", "Name": "Nome", "Network configuration": "Configurazione di rete", "New bridge": "Nuovo ponte", @@ -125,6 +127,7 @@ "QR Code scan is not possible": "La scansione del codice QR non è possibile", "QR Code to connect for %s": "Codice QR per connettersi per \"%s\"", "Re-Announce": "Re-announce", + "Read for problems": "Se riscontri problemi nel trovare dispositivi o nel connetterti agli ecosistemi, potrebbe essere necessario configurare impostazioni IPv6 aggiuntive sull'host ioBroker.", "Reconnect to backend": "Riconnettiti al backend", "Required": "Necessario", "Requirements: add via QR Code": "Prerequisito: il dispositivo Matter deve essere già stato commissionato a un altro sistema Matter (ad esempio Google, Apple, Alexa, ...). Qui devi inserire il codice di associazione del codice QR o scansionare il codice QR fornito per questo dispositivo Matter nell'app dall'ecosistema Matter (ad esempio Google Home).", @@ -158,6 +161,7 @@ "Thread network name": "Thread network name", "Thread operational dataset": "Thread operational dataset", "To commission/connect matter devices with ioBroker controller use better ioBroker.visu app:": "Per mettere in funzione/collegare i dispositivi Matter con il controller ioBroker, utilizzare la migliore app ioBroker.visu:", + "To make all this work, the following requirements should be considered": "Per far funzionare tutto questo, è necessario considerare i seguenti requisiti", "To use a Matter bridge or device options with more than 5 devices please enter valid ioBroker.pro Cloud credentials with at least an active Assistant license.": "Per utilizzare un bridge Matter o opzioni dispositivo con più di 5 dispositivi, inserisci credenziali ioBroker.pro Cloud valide con almeno una licenza Assistant attiva.", "Unselect all rooms": "Deseleziona tutte le stanze", "Use last value for ON": "Utilizzare l'ultimo valore per ON", @@ -165,6 +169,7 @@ "Vendor ID": "ID del venditore", "WLAN credentials": "Credenziali Wi-Fi", "Warning about 15 devices": "Per evitare problemi durante l'associazione di questo bridge, si prega di considerare di associarlo ora e di aggiungere altri dispositivi in seguito.", + "Welcome explanation": "L'adattatore Matter consente l'integrazione di ioBroker con tutti i dispositivi Matter sul mercato e consente ai dispositivi ioBroker di essere utilizzati direttamente in molti ecosistemi compatibili con Matter, come Apple, Google, Amazon o SmartThings. La comunicazione avviene localmente e in modo sicuro.", "Welcome to Matter!": "Benvenuti su Matter!", "WiFi SSID": "SSID Wi-Fi", "WiFi password": "Password Wi-Fi", diff --git a/src-admin/src/i18n/nl.json b/src-admin/src/i18n/nl.json index a34f7ea..1f0d7e5 100644 --- a/src-admin/src/i18n/nl.json +++ b/src-admin/src/i18n/nl.json @@ -68,6 +68,7 @@ "Do not compose devices (Alexa does not support composed devices yet)": "Stel geen apparaten samen (als het te koppelen ecosysteem geen samengestelde apparaten ondersteunt)", "Do you want to delete bridge": "Wilt u bridge verwijderen", "Do you want to delete device": "Wilt u het apparaat verwijderen", + "Docker information": "Omdat ioBroker in Docker draait, moet het hostnetwerk worden gebruikt, anders werken IPv6- en UDP-routing niet.", "Edit bridge": "Brug bewerken", "Edit device": "Apparaat bewerken", "Enable": "Inschakelen", @@ -95,6 +96,7 @@ "Matter Controller Infotext": "Gebruik de \"Controller\"-functies om Matter-compatibele apparaten in ioBroker te integreren. \nU kunt apparaten ontdekken, in bedrijf stellen en achteraf beheren. De gegevens van de apparaten zullen beschikbaar zijn als statussen op het tabblad ioBroker Objects. \nDe controllerfunctie is standaard uitgeschakeld en kan worden ingeschakeld met de onderstaande schakelaar.", "Matter requires enabled IPv6 protocol on selected interface. No IPv6 was found on your system!": "Matter vereist ingeschakeld IPv6-protocol op geselecteerde interface. Er is geen IPv6 gevonden op uw systeem!", "Matter requires enabled IPv6 protocol on selected interface. Some IPv6 was found on your system.": "Matter vereist ingeschakeld IPv6-protocol op geselecteerde interface. Er is wat IPv6 gevonden op uw systeem.", + "More details in the Troubleshooting Guide": "Meer details in de Probleemoplossingsgids", "Name": "Naam", "Network configuration": "Netwerk configuratie", "New bridge": "Nieuwe brug", @@ -125,6 +127,7 @@ "QR Code scan is not possible": "QR-code scannen is niet mogelijk", "QR Code to connect for %s": "QR-code om verbinding te maken voor \"%s\"", "Re-Announce": "Re-announce", + "Read for problems": "Als u problemen ondervindt bij het vinden van apparaten of het verbinden met ecosystemen, moet u mogelijk aanvullende IPv6-instellingen op de ioBroker-host maken.", "Reconnect to backend": "Opnieuw verbinden met backend", "Required": "Vereist", "Requirements: add via QR Code": "Voorwaarde: Het Matter-apparaat moet al in gebruik zijn genomen bij een ander Matter-systeem (bijv. Google, Apple, Alexa, ...). Hier moet u de QR-codekoppelingscode invoeren of de QR-code scannen die voor dit Matter-apparaat in de app is verstrekt door het Matter-ecosysteem (bijv. Google Home).", @@ -158,6 +161,7 @@ "Thread network name": "Thread network name", "Thread operational dataset": "Thread operational dataset", "To commission/connect matter devices with ioBroker controller use better ioBroker.visu app:": "Voor het in bedrijf stellen/verbinden van materieapparaten met de ioBroker-controller kunt u het beste de ioBroker.visu-app gebruiken:", + "To make all this work, the following requirements should be considered": "Om dit allemaal te laten werken, moeten de volgende vereisten in overweging worden genomen", "To use a Matter bridge or device options with more than 5 devices please enter valid ioBroker.pro Cloud credentials with at least an active Assistant license.": "Om een Matter-bridge of apparaatopties met meer dan 5 apparaten te gebruiken, voert u geldige ioBroker.pro Cloud-inloggegevens in met minimaal een actieve Assistent-licentie.", "Unselect all rooms": "Deselecteer alle kamers", "Use last value for ON": "Gebruik de laatste waarde bij AAN", @@ -165,6 +169,7 @@ "Vendor ID": "Verkopers ID", "WLAN credentials": "WLAN-referenties", "Warning about 15 devices": "Om problemen te voorkomen bij het koppelen van deze brug, kunt u overwegen om deze nu te koppelen en later meer apparaten toe te voegen.", + "Welcome explanation": "De Matter-adapter maakt de integratie van ioBroker met alle Matter-apparaten op de markt mogelijk en zorgt ervoor dat ioBroker-apparaten direct kunnen worden gebruikt in veel Matter-compatibele ecosystemen, zoals Apple, Google, Amazon of SmartThings. Communicatie vindt lokaal en veilig plaats.", "Welcome to Matter!": "Welkom bij Matter!", "WiFi SSID": "WiFi-SSID", "WiFi password": "Wifi wachtwoord", diff --git a/src-admin/src/i18n/pl.json b/src-admin/src/i18n/pl.json index 35906b1..e066236 100644 --- a/src-admin/src/i18n/pl.json +++ b/src-admin/src/i18n/pl.json @@ -68,6 +68,7 @@ "Do not compose devices (Alexa does not support composed devices yet)": "Nie twórz urządzeń (jeśli ekosystem do sparowania nie obsługuje skomponowanych urządzeń)", "Do you want to delete bridge": "Czy chcesz usunąć most", "Do you want to delete device": "Czy chcesz usunąć urządzenie", + "Docker information": "Ponieważ ioBroker działa w Dockerze, należy użyć sieci hosta, w przeciwnym razie routing IPv6 i UDP nie będzie działał.", "Edit bridge": "Edytuj most", "Edit device": "Edytuj urządzenie", "Enable": "Włączać", @@ -95,6 +96,7 @@ "Matter Controller Infotext": "Skorzystaj z funkcji „Kontrolera”, aby zintegrować urządzenia kompatybilne z Matter z ioBroker. \nMożesz odkryć i uruchomić urządzenie, a następnie zarządzać nimi. Dane urządzeń będą dostępne jako stany w zakładce Obiekty ioBroker. \nFunkcja kontrolera jest domyślnie wyłączona i można ją włączyć za pomocą poniższego przełącznika.", "Matter requires enabled IPv6 protocol on selected interface. No IPv6 was found on your system!": "Matter wymaga włączonego protokołu IPv6 na wybranym interfejsie. Nie znaleziono protokołu IPv6 w Twoim systemie!", "Matter requires enabled IPv6 protocol on selected interface. Some IPv6 was found on your system.": "Matter wymaga włączonego protokołu IPv6 na wybranym interfejsie. Niektóre IPv6 zostały znalezione w twoim systemie.", + "More details in the Troubleshooting Guide": "Więcej szczegółów w Przewodniku rozwiązywania problemów", "Name": "Nazwa", "Network configuration": "Konfiguracja sieci", "New bridge": "Nowy most", @@ -125,6 +127,7 @@ "QR Code scan is not possible": "Skanowanie kodu QR nie jest możliwe", "QR Code to connect for %s": "Kod QR do połączenia dla \"%s\"", "Re-Announce": "Re-announce", + "Read for problems": "Jeśli masz problemy ze znalezieniem urządzeń lub nawiązaniem połączenia z ekosystemami, może być konieczne wprowadzenie dodatkowych ustawień protokołu IPv6 na hoście ioBroker.", "Reconnect to backend": "Ponowne połączenie z zapleczem", "Required": "Wymagany", "Requirements: add via QR Code": "Warunek wstępny: Urządzenie Matter musi być już zlecone innemu systemowi Matter (np. Google, Apple, Alexa, ...). Tutaj musisz wprowadzić kod parowania kodu QR lub zeskanować kod QR, który jest dostarczany dla tego urządzenia Matter w aplikacji przez ekosystem Matter (np. Google Home).", @@ -158,6 +161,7 @@ "Thread network name": "Thread network name", "Thread operational dataset": "Thread operational dataset", "To commission/connect matter devices with ioBroker controller use better ioBroker.visu app:": "Aby uruchomić/połączyć urządzenia Matter ze sterownikiem ioBroker, należy użyć lepszej aplikacji ioBroker.visu:", + "To make all this work, the following requirements should be considered": "Aby to wszystko zadziałało, należy wziąć pod uwagę następujące wymagania", "To use a Matter bridge or device options with more than 5 devices please enter valid ioBroker.pro Cloud credentials with at least an active Assistant license.": "Aby korzystać z mostu Matter lub opcji urządzenia z więcej niż 5 urządzeniami, wprowadź prawidłowe dane uwierzytelniające ioBroker.pro Cloud z co najmniej aktywną licencją Asystenta.", "Unselect all rooms": "Odznacz wszystkie pokoje", "Use last value for ON": "Użyj ostatniej wartości poprzez ON", @@ -165,6 +169,7 @@ "Vendor ID": "Identyfikator sprzedawcy", "WLAN credentials": "Dane uwierzytelniające WLAN", "Warning about 15 devices": "Aby uniknąć problemów podczas parowania tego mostu, rozważ sparowanie go teraz i dodanie kolejnych urządzeń później.", + "Welcome explanation": "Adapter Matter umożliwia integrację ioBroker ze wszystkimi urządzeniami Matter na rynku i pozwala na bezpośrednie używanie urządzeń ioBroker w wielu ekosystemach zgodnych z Matter, takich jak Apple, Google, Amazon lub SmartThings. Komunikacja odbywa się lokalnie i bezpiecznie.", "Welcome to Matter!": "Witamy w Matter!", "WiFi SSID": "SSID Wi-Fi", "WiFi password": "Hasło do wifi", diff --git a/src-admin/src/i18n/pt.json b/src-admin/src/i18n/pt.json index 3487cd5..068810e 100644 --- a/src-admin/src/i18n/pt.json +++ b/src-admin/src/i18n/pt.json @@ -68,6 +68,7 @@ "Do not compose devices (Alexa does not support composed devices yet)": "Não componha dispositivos (se o ecossistema a ser emparelhado não suportar dispositivos compostos)", "Do you want to delete bridge": "Você deseja excluir a ponte", "Do you want to delete device": "Você deseja excluir o dispositivo", + "Docker information": "Como o ioBroker é executado no Docker, a rede do host deve ser usada, caso contrário, o roteamento IPv6 e UDP não funcionarão.", "Edit bridge": "Editar ponte", "Edit device": "Editar dispositivo", "Enable": "Habilitar", @@ -95,6 +96,7 @@ "Matter Controller Infotext": "Use os recursos do \"Controlador\" para integrar dispositivos compatíveis com Matter no ioBroker. \nVocê pode descobrir e comissionar dispositivos e gerenciá-los posteriormente. Os dados dos dispositivos estarão disponíveis como estados na aba Objetos ioBroker. \nO recurso do controlador está desabilitado por padrão e pode ser habilitado com a chave abaixo.", "Matter requires enabled IPv6 protocol on selected interface. No IPv6 was found on your system!": "O assunto requer protocolo IPv6 habilitado na interface selecionada. Nenhum IPv6 foi encontrado no seu sistema!", "Matter requires enabled IPv6 protocol on selected interface. Some IPv6 was found on your system.": "O assunto requer protocolo IPv6 habilitado na interface selecionada. Algum IPv6 foi encontrado no seu sistema.", + "More details in the Troubleshooting Guide": "Mais detalhes no Guia de solução de problemas", "Name": "Nome", "Network configuration": "Configuração de rede", "New bridge": "Nova ponte", @@ -125,6 +127,7 @@ "QR Code scan is not possible": "Não é possível escanear o código QR", "QR Code to connect for %s": "Código QR para conectar \"%s\"", "Re-Announce": "Re-announce", + "Read for problems": "Se você tiver problemas para encontrar dispositivos ou se conectar a ecossistemas, talvez seja necessário fazer configurações adicionais de IPv6 no host ioBroker.", "Reconnect to backend": "Reconectar ao backend", "Required": "Obrigatório", "Requirements: add via QR Code": "Pré-requisito: O dispositivo Matter já deve estar comissionado para outro sistema Matter (por exemplo, Google, Apple, Alexa, ...). Aqui você deve inserir o código de pareamento do código QR ou escanear o código QR fornecido para este dispositivo Matter no aplicativo pelo ecossistema Matter (por exemplo, Google Home).", @@ -158,6 +161,7 @@ "Thread network name": "Thread network name", "Thread operational dataset": "Thread operational dataset", "To commission/connect matter devices with ioBroker controller use better ioBroker.visu app:": "Para comissionar/conectar dispositivos de matéria com o controlador ioBroker, use o aplicativo ioBroker.visu:", + "To make all this work, the following requirements should be considered": "Para que tudo isso funcione, os seguintes requisitos devem ser considerados", "To use a Matter bridge or device options with more than 5 devices please enter valid ioBroker.pro Cloud credentials with at least an active Assistant license.": "Para usar uma ponte Matter ou opções de dispositivo com mais de 5 dispositivos, insira credenciais válidas do ioBroker.pro Cloud com pelo menos uma licença ativa do Assistant.", "Unselect all rooms": "Desmarque todos os quartos", "Use last value for ON": "Use o último valor por ON", @@ -165,6 +169,7 @@ "Vendor ID": "ID do fornecedor", "WLAN credentials": "Credenciais WLAN", "Warning about 15 devices": "Para evitar problemas ao parear esta ponte, considere pareá-la agora e adicionar mais dispositivos depois", + "Welcome explanation": "O adaptador Matter permite a integração do ioBroker com todos os dispositivos Matter no mercado e permite que os dispositivos ioBroker sejam usados diretamente em muitos ecossistemas compatíveis com Matter, como Apple, Google, Amazon ou SmartThings. A comunicação ocorre localmente e com segurança.", "Welcome to Matter!": "Bem-vindo à Matter!", "WiFi SSID": "SSID Wi-Fi", "WiFi password": "Senha do wifi", diff --git a/src-admin/src/i18n/ru.json b/src-admin/src/i18n/ru.json index 08534a1..5db73a5 100644 --- a/src-admin/src/i18n/ru.json +++ b/src-admin/src/i18n/ru.json @@ -68,6 +68,7 @@ "Do not compose devices (Alexa does not support composed devices yet)": "Не создавать составные устройства (если экосистема для сопряжения не поддерживает составленные устройства)", "Do you want to delete bridge": "Вы хотите удалить мост?", "Do you want to delete device": "Вы хотите удалить устройство", + "Docker information": "Поскольку ioBroker работает в Docker, необходимо использовать хост-сеть, в противном случае маршрутизация IPv6 и UDP работать не будет.", "Edit bridge": "Редактировать мост", "Edit device": "Изменить устройство", "Enable": "Давать возможность", @@ -95,6 +96,7 @@ "Matter Controller Infotext": "Используйте функции «Контроллер» для интеграции совместимых с Matter устройств в ioBroker. \nВы можете обнаружить и ввести в эксплуатацию устройство, а затем управлять им. Данные устройств будут доступны в виде состояний на вкладке «Объекты ioBroker». \nФункция контроллера по умолчанию отключена, но ее можно включить с помощью переключателя ниже.", "Matter requires enabled IPv6 protocol on selected interface. No IPv6 was found on your system!": "Matter требует включенного протокола IPv6 на выбранном интерфейсе. IPv6 не найден в вашей системе!", "Matter requires enabled IPv6 protocol on selected interface. Some IPv6 was found on your system.": "Matter требует включенного протокола IPv6 на выбранном интерфейсе. В вашей системе обнаружен какой-то IPv6.", + "More details in the Troubleshooting Guide": "Более подробную информацию см. в Руководстве по устранению неполадок.", "Name": "Имя", "Network configuration": "Конфигурация сети", "New bridge": "Новый мост", @@ -125,6 +127,7 @@ "QR Code scan is not possible": "Сканирование QR-кода невозможно.", "QR Code to connect for %s": "QR-код для подключения к \"%s\"", "Re-Announce": "Re-announce", + "Read for problems": "Если у вас возникли проблемы с поиском устройств или подключением к экосистемам, вам может потребоваться выполнить дополнительные настройки IPv6 на хосте ioBroker.", "Reconnect to backend": "Повторное подключение к бэкэнду", "Required": "Необходимый", "Requirements: add via QR Code": "Предварительное условие: Устройство Matter должно быть уже подключено к другой системе Matter (например, Google, Apple, Alexa, ...). Здесь вы должны ввести код сопряжения QR-кода или отсканировать QR-код, предоставленный для этого устройства Matter в приложении экосистемой Matter (например, Google Home).", @@ -158,6 +161,7 @@ "Thread network name": "Имя сети Thread", "Thread operational dataset": "Thread operational dataset", "To commission/connect matter devices with ioBroker controller use better ioBroker.visu app:": "Для ввода в эксплуатацию/подключения устройств Matter к контроллеру ioBroker используйте лучшее приложение ioBroker.visu:", + "To make all this work, the following requirements should be considered": "Чтобы все это работало, необходимо учитывать следующие требования:", "To use a Matter bridge or device options with more than 5 devices please enter valid ioBroker.pro Cloud credentials with at least an active Assistant license.": "Чтобы использовать мост Matter или варианты устройств с более чем 5 устройствами, введите действительные учетные данные ioBroker.pro Cloud с как минимум активной лицензией Assistant.", "Unselect all rooms": "Отменить выбор всех номеров", "Use last value for ON": "Использовать последнее значение при включении", @@ -165,6 +169,7 @@ "Vendor ID": "Идентификатор поставщика", "WLAN credentials": "Учетные данные WLAN", "Warning about 15 devices": "Чтобы избежать проблем при сопряжении этого моста, пожалуйста, рассмотрите возможность сопряжения сейчас и добавления дополнительных устройств позже.", + "Welcome explanation": "Адаптер Matter позволяет интегрировать ioBroker со всеми устройствами Matter на рынке и позволяет использовать устройства ioBroker напрямую во многих экосистемах, совместимых с Matter, таких как Apple, Google, Amazon или SmartThings. Связь осуществляется локально и безопасно.", "Welcome to Matter!": "Добро пожаловать в Matter!", "WiFi SSID": "SSID Wi-Fi", "WiFi password": "Пароль Wi-Fi", diff --git a/src-admin/src/i18n/uk.json b/src-admin/src/i18n/uk.json index abb86c1..d55aa8f 100644 --- a/src-admin/src/i18n/uk.json +++ b/src-admin/src/i18n/uk.json @@ -68,6 +68,7 @@ "Do not compose devices (Alexa does not support composed devices yet)": "Не створювати пристрої (якщо екосистема для створення пари не підтримує створені пристрої)", "Do you want to delete bridge": "Ви хочете видалити міст", "Do you want to delete device": "Ви хочете видалити пристрій", + "Docker information": "Оскільки ioBroker працює в Docker, необхідно використовувати мережу хоста, інакше маршрутизація IPv6 і UDP не працюватиме.", "Edit bridge": "Редагувати міст", "Edit device": "Редагувати пристрій", "Enable": "Увімкнути", @@ -95,6 +96,7 @@ "Matter Controller Infotext": "Використовуйте функції «Контролер», щоб інтегрувати сумісні пристрої з Matter в ioBroker. \nВи можете виявити та ввести в експлуатацію пристрій, а потім керувати ним. Дані пристроїв будуть доступні як стани на вкладці Об’єкти ioBroker. \nФункцію контролера вимкнено за замовчуванням, і її можна ввімкнути за допомогою перемикача нижче.", "Matter requires enabled IPv6 protocol on selected interface. No IPv6 was found on your system!": "Справа вимагає ввімкнення протоколу IPv6 на вибраному інтерфейсі. У вашій системі не знайдено IPv6!", "Matter requires enabled IPv6 protocol on selected interface. Some IPv6 was found on your system.": "Справа вимагає ввімкнення протоколу IPv6 на вибраному інтерфейсі. У вашій системі знайдено деяку кількість IPv6.", + "More details in the Troubleshooting Guide": "Детальніше в Посібнику з усунення несправностей", "Name": "Ім'я", "Network configuration": "Конфігурація мережі", "New bridge": "Новий міст", @@ -125,6 +127,7 @@ "QR Code scan is not possible": "Сканування QR-коду неможливе", "QR Code to connect for %s": "QR-код для підключення до \"%s\"", "Re-Announce": "Re-announce", + "Read for problems": "Якщо у вас виникли проблеми з пошуком пристроїв або підключенням до екосистем, вам може знадобитися зробити додаткові налаштування IPv6 на хості ioBroker.", "Reconnect to backend": "Повторно підключіться до сервера", "Required": "Обов'язковий", "Requirements: add via QR Code": "Необхідна умова: пристрій Matter уже має бути підключено до іншої системи Matter (наприклад, Google, Apple, Alexa, ...). Тут ви повинні ввести код підключення QR-коду або відсканувати QR-код, наданий для цього пристрою Matter у програмі екосистемою Matter (наприклад, Google Home).", @@ -158,6 +161,7 @@ "Thread network name": "Thread network name", "Thread operational dataset": "Thread operational dataset", "To commission/connect matter devices with ioBroker controller use better ioBroker.visu app:": "Для запуску/підключення важливих пристроїв за допомогою контролера ioBroker використовуйте кращий додаток ioBroker.visu:", + "To make all this work, the following requirements should be considered": "Щоб все це працювало, слід враховувати наступні вимоги", "To use a Matter bridge or device options with more than 5 devices please enter valid ioBroker.pro Cloud credentials with at least an active Assistant license.": "Щоб використовувати міст Matter або параметри пристрою з більш ніж 5 пристроями, введіть дійсні облікові дані ioBroker.pro Cloud із принаймні активною ліцензією Асистента.", "Unselect all rooms": "Скасувати вибір усіх кімнат", "Use last value for ON": "Використовуйте останнє значення за ON", @@ -165,6 +169,7 @@ "Vendor ID": "ID постачальника", "WLAN credentials": "облікові дані WLAN", "Warning about 15 devices": "Щоб уникнути проблем під час підключення цього мосту, спробуйте підключити його зараз, а потім додайте інші пристрої", + "Welcome explanation": "Адаптер Matter дозволяє інтегрувати ioBroker з усіма пристроями Matter на ринку та дозволяє використовувати пристрої ioBroker безпосередньо в багатьох сумісних з Matter екосистемах, таких як Apple, Google, Amazon або SmartThings. Комунікація відбувається локально та безпечно.", "Welcome to Matter!": "Ласкаво просимо до Matter!", "WiFi SSID": "SSID WiFi", "WiFi password": "Пароль WiFi", diff --git a/src-admin/src/i18n/zh-cn.json b/src-admin/src/i18n/zh-cn.json index 43000d3..69c4a62 100644 --- a/src-admin/src/i18n/zh-cn.json +++ b/src-admin/src/i18n/zh-cn.json @@ -68,6 +68,7 @@ "Do not compose devices (Alexa does not support composed devices yet)": "不组合设备(如果要配对的生态系统不支持组合设备)", "Do you want to delete bridge": "您要删除桥吗", "Do you want to delete device": "您要删除设备吗", + "Docker information": "由于 ioBroker 在 Docker 中运行,因此必须使用主机网络,否则 IPv6 和 UDP 路由将无法工作。", "Edit bridge": "编辑桥", "Edit device": "编辑设备", "Enable": "使能够", @@ -95,6 +96,7 @@ "Matter Controller Infotext": "使用“控制器”功能将 Matter 兼容设备集成到 ioBroker 中。\n您可以发现和调试设备,然后对其进行管理。设备的数据将作为状态显示在 ioBroker 对象选项卡中。\n控制器功能默认处于禁用状态,可以使用以下开关启用。", "Matter requires enabled IPv6 protocol on selected interface. No IPv6 was found on your system!": "问题需要在所选接口上启用 IPv6 协议。您的系统上未找到 IPv6!", "Matter requires enabled IPv6 protocol on selected interface. Some IPv6 was found on your system.": "问题需要在所选接口上启用 IPv6 协议。您的系统上发现了一些 IPv6。", + "More details in the Troubleshooting Guide": "故障排除指南中有更多详细信息", "Name": "姓名", "Network configuration": "网络配置", "New bridge": "新桥", @@ -125,6 +127,7 @@ "QR Code scan is not possible": "无法扫描二维码", "QR Code to connect for %s": "用于连接“%s”的二维码", "Re-Announce": "Re-announce", + "Read for problems": "如果您在查找设备或连接生态系统时遇到问题,则可能需要在 ioBroker 主机上进行额外的 IPv6 设置。", "Reconnect to backend": "重新连接到后端", "Required": "必需的", "Requirements: add via QR Code": "前提条件:Matter 设备必须已委托给另一个 Matter 系统(例如 Google、Apple、Alexa 等)。在这里,您必须输入二维码配对码或扫描 Matter 生态系统(例如 Google Home)在应用程序中为此 Matter 设备提供的二维码。", @@ -158,6 +161,7 @@ "Thread network name": "Thread network name", "Thread operational dataset": "Thread operational dataset", "To commission/connect matter devices with ioBroker controller use better ioBroker.visu app:": "要使用 ioBroker 控制器调试/连接物质设备,请使用更好的 ioBroker.visu 应用程序:", + "To make all this work, the following requirements should be considered": "为了使这一切发挥作用,应考虑以下要求", "To use a Matter bridge or device options with more than 5 devices please enter valid ioBroker.pro Cloud credentials with at least an active Assistant license.": "要使用 Matter 桥或具有 5 个以上设备的设备选项,请输入有效的 ioBroker.pro 云凭证以及至少有效的助手许可证。", "Unselect all rooms": "取消选择所有房间", "Use last value for ON": "通过 ON 使用最后一个值", @@ -165,6 +169,7 @@ "Vendor ID": "供应商ID", "WLAN credentials": "WLAN 凭证", "Warning about 15 devices": "为了避免在配对此桥时出现问题,请考虑立即配对,然后再添加更多设备", + "Welcome explanation": "Matter 适配器允许将 ioBroker 与市场上的所有 Matter 设备集成,并允许 ioBroker 设备直接用于许多与 Matter 兼容的生态系统,例如 Apple、Google、Amazon 或 SmartThings。通信在本地安全地进行。", "Welcome to Matter!": "欢迎来到 Matter!", "WiFi SSID": "无线网络名称", "WiFi password": "WiFi密码", From 50d5ef8a6438ea69e441e03939c19ad698c63eac Mon Sep 17 00:00:00 2001 From: GermanBluefox Date: Mon, 6 Jan 2025 23:20:47 +0000 Subject: [PATCH 17/20] Trying to show the device being processed: https://github.com/ioBroker/ioBroker.matter/issues/274 --- src-admin/src/App.tsx | 10 ++++++- src-admin/src/Tabs/Bridges.tsx | 4 ++- src-admin/src/Tabs/BridgesAndDevices.tsx | 38 ++++++++++++++++++++++++ src-admin/src/Tabs/Devices.tsx | 4 ++- src-admin/src/types.d.ts | 4 +++ src/main.ts | 14 ++++++++- src/matter/BaseServerNode.ts | 2 +- 7 files changed, 71 insertions(+), 5 deletions(-) diff --git a/src-admin/src/App.tsx b/src-admin/src/App.tsx index bd06cd6..1f25433 100644 --- a/src-admin/src/App.tsx +++ b/src-admin/src/App.tsx @@ -44,6 +44,7 @@ import type { MatterAdapterConfig, MatterConfig, NodeStateResponse, + Processing, } from './types'; import enLang from './i18n/en.json'; @@ -94,6 +95,8 @@ interface AppState extends GenericAppState { matter: MatterConfig; commissioning: CommissioningInfo | null; nodeStates: { [uuid: string]: NodeStateResponse }; + /** Information about nodes being processed */ + inProcessing: Processing; /** Undefined if no detection ran yet */ detectedDevices?: DetectedRoom[]; ready: boolean; @@ -171,6 +174,7 @@ class App extends GenericApp { progress: null, showWelcomeDialog: false, welcomeDialogShowed: false, + inProcessing: null, }); this.alert = window.alert; @@ -343,7 +347,9 @@ class App extends GenericApp { return; } - if (update.command === 'progress') { + if (update.command === 'processing') { + this.setState({ inProcessing: update.processing || null }); + } else if (update.command === 'progress') { if (update.progress) { if (update.progress.close) { if (this.state.progress) { @@ -528,6 +534,7 @@ class App extends GenericApp { this.setState({ nodeStates: _nodeStates }); }} nodeStates={this.state.nodeStates} + inProcessing={this.state.inProcessing} themeName={this.state.themeName} themeType={this.state.themeType} theme={this.state.theme} @@ -561,6 +568,7 @@ class App extends GenericApp { this.setState({ nodeStates: _nodeStates }); }} nodeStates={this.state.nodeStates} + inProcessing={this.state.inProcessing} commissioning={this.state.commissioning?.devices || {}} socket={this.socket} themeName={this.state.themeName} diff --git a/src-admin/src/Tabs/Bridges.tsx b/src-admin/src/Tabs/Bridges.tsx index f3661e6..aa0bc3c 100644 --- a/src-admin/src/Tabs/Bridges.tsx +++ b/src-admin/src/Tabs/Bridges.tsx @@ -31,6 +31,7 @@ import { FormControlLabel, IconButton, InputLabel, + LinearProgress, MenuItem, Select, Switch, @@ -1366,9 +1367,10 @@ export class Bridges extends BridgesAndDevices { return ( + {this.renderProcessOverlay(bridge.uuid)} void; updateNodeStates: (states: { [uuid: string]: NodeStateResponse }) => void; + inProcessing: Processing; } export interface BridgesAndDevicesState { @@ -513,6 +516,41 @@ class BridgesAndDevices it.id.endsWith(uuidWithPoint)); + if (item) { + return item.inProgress ? 'processing' : 'inQueue'; + } + return false; + } + + // eslint-disable-next-line react/no-unused-class-component-methods + renderProcessOverlay(uuid: string): React.JSX.Element | null { + const processing = this.getInProcessing(uuid); + if (!processing) { + return null; + } + return ( +
+ {processing === 'processing' ? : null} +
+ ); + } + getCancelButton(button?: ActionButton | 'apply' | 'cancel' | 'close'): React.JSX.Element { let isClose = false; if (typeof button === 'string') { diff --git a/src-admin/src/Tabs/Devices.tsx b/src-admin/src/Tabs/Devices.tsx index 0df73cc..46bb66d 100644 --- a/src-admin/src/Tabs/Devices.tsx +++ b/src-admin/src/Tabs/Devices.tsx @@ -15,6 +15,7 @@ import { FormControl, FormControlLabel, InputLabel, + LinearProgress, MenuItem, Select, Switch, @@ -685,8 +686,9 @@ class Devices extends BridgesAndDevices { return ( + {this.renderProcessOverlay(device.uuid)}
e.inProgress)) { + // inform GUI that the processing is finished + this.sendToGui({ + command: 'processing', + processing: null, + }).catch((error): void => this.log.error(`Cannot send to GUI: ${error}`)); return; } @@ -680,6 +686,12 @@ export class MatterAdapter extends utils.Adapter { const entry = this.#objectProcessQueue[0]; entry.inProgress = true; + // inform GUI about processing + this.sendToGui({ + command: 'processing', + processing: this.#objectProcessQueue.map(item => ({ id: item.id, inProgress: item.inProgress })), + }).catch((error): void => this.log.error(`Cannot send to GUI: ${error}`)); + this.#currentObjectProcessPromise = entry.func(); this.#currentObjectProcessPromise .catch(error => this.log.error(`Error while processing object change ${entry.id}: ${error}`)) diff --git a/src/matter/BaseServerNode.ts b/src/matter/BaseServerNode.ts index e8ca6c1..f85d09e 100644 --- a/src/matter/BaseServerNode.ts +++ b/src/matter/BaseServerNode.ts @@ -136,7 +136,7 @@ export abstract class BaseServerNode implements GeneralNode { }); } - /** Handles device specific Messages from the UI. */ + /** Handles the device specific Messages from the UI. */ async handleCommand(obj: ioBroker.Message): Promise { const { command, message } = obj; switch (command) { From 4428abac2c7689900a98e8b093966a7655759d9a Mon Sep 17 00:00:00 2001 From: GermanBluefox Date: Tue, 7 Jan 2025 13:15:23 +0000 Subject: [PATCH 18/20] Fixing processing update --- src-admin/src/Tabs/Bridges.tsx | 1 - src-admin/src/Tabs/Devices.tsx | 1 - src/main.ts | 2 +- 3 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src-admin/src/Tabs/Bridges.tsx b/src-admin/src/Tabs/Bridges.tsx index aa0bc3c..ea9a98d 100644 --- a/src-admin/src/Tabs/Bridges.tsx +++ b/src-admin/src/Tabs/Bridges.tsx @@ -31,7 +31,6 @@ import { FormControlLabel, IconButton, InputLabel, - LinearProgress, MenuItem, Select, Switch, diff --git a/src-admin/src/Tabs/Devices.tsx b/src-admin/src/Tabs/Devices.tsx index 46bb66d..b856df1 100644 --- a/src-admin/src/Tabs/Devices.tsx +++ b/src-admin/src/Tabs/Devices.tsx @@ -15,7 +15,6 @@ import { FormControl, FormControlLabel, InputLabel, - LinearProgress, MenuItem, Select, Switch, diff --git a/src/main.ts b/src/main.ts index a8c5cfa..ec0b378 100644 --- a/src/main.ts +++ b/src/main.ts @@ -661,7 +661,7 @@ export class MatterAdapter extends utils.Adapter { // inform GUI that the processing is finished this.sendToGui({ command: 'processing', - processing: null, + processing: this.#objectProcessQueue.map(item => ({ id: item.id, inProgress: item.inProgress })), }).catch((error): void => this.log.error(`Cannot send to GUI: ${error}`)); return; } From b49563b91bdef185bbd5a0ab8db6ce36885be36a Mon Sep 17 00:00:00 2001 From: Bluefox Date: Tue, 7 Jan 2025 13:43:43 +0000 Subject: [PATCH 19/20] Update README.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 77f5d66..a81e7c1 100644 --- a/README.md +++ b/README.md @@ -159,7 +159,7 @@ TBD * Check that you are using the latest version available - or if not, if the changelog for the versions since your version contains information about your issue. Then try updating first, please. * Check existing open GitHub issues. If yours is also listed, there vote for it by adding a thumbs up on the first comment. This helps to prioritize the issues. "Me Too" posts are not needed. * Create a GitHub issue if your issue is not existing -* Turn on Debug logs fpr the matter instance, and additionally "Matter Debug" logs on the main page of the adapter settings. Include the logs (as a Text file please, Logfile location usually `/opt/iobroker/logs/...`) as text file attachment in your issue report. Please do not cut only the error but also add some minutes of log before and after the error to get some more context. Please also include information on what exactly is seen there, what was done and such. The more context you can provide, the better. +* Turn on Debug logs for the matter instance, and additionally "Matter Debug" logs on the main page of the adapter settings. Include the logs (as a Text file please, Logfile location usually `/opt/iobroker/logs/...`) as text file attachment in your issue report. Please do not cut only the error but also add some minutes of log before and after the error to get some more context. Please also include information on what exactly is seen there, what was done and such. The more context you can provide, the better. ## ToDo From 24085d835d598e66b2d23034542d0c2754f2e3ad Mon Sep 17 00:00:00 2001 From: Bluefox Date: Tue, 7 Jan 2025 13:44:34 +0000 Subject: [PATCH 20/20] Update src-admin/src/App.tsx Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src-admin/src/App.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-admin/src/App.tsx b/src-admin/src/App.tsx index 1f25433..4c147ac 100644 --- a/src-admin/src/App.tsx +++ b/src-admin/src/App.tsx @@ -698,7 +698,7 @@ class App extends GenericApp { this.state.width === 'xs' || this.state.width === 'sm' || this.state.width === 'md' } changed={this.state.changed} - onSave={(isClose: boolean): Promise => this.onSave(isClose)} + onSave={async (isClose: boolean): Promise => await this.onSave(isClose)} onClose={() => { if (this.state.changed) { this.setState({ confirmClose: true });