iobroker.panasonic-comfort-cloud 2.2.2 → 2.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +11 -2
- package/admin/i18n/de/translations.json +4 -4
- package/admin/i18n/en/translations.json +2 -2
- package/admin/i18n/es/translations.json +4 -4
- package/admin/i18n/fr/translations.json +4 -4
- package/admin/i18n/it/translations.json +4 -4
- package/admin/i18n/nl/translations.json +2 -2
- package/admin/i18n/pl/translations.json +4 -4
- package/admin/i18n/pt/translations.json +2 -2
- package/admin/i18n/ru/translations.json +4 -4
- package/admin/i18n/uk/translations.json +2 -2
- package/admin/i18n/zh-cn/translations.json +3 -3
- package/admin/jsonConfig.json +43 -0
- package/admin/words.js +1 -1
- package/build/main.js +2 -3
- package/build/main.js.map +2 -2
- package/io-package.json +190 -242
- package/package.json +23 -21
- package/admin/index_m.html +0 -130
package/LICENSE
CHANGED
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
| :warning: WARNING |
|
|
4
4
|
|:---------------------------|
|
|
5
|
-
| New app version in adapter settings is 1.
|
|
5
|
+
| New app version in adapter settings is 1.19.1 |
|
|
6
6
|
|
|
7
7
|

|
|
8
8
|
|
|
@@ -24,6 +24,15 @@ With the method used, only one client can be logged on with the account at a tim
|
|
|
24
24
|
It is recommended that a second account, for which the devices have been shared, is used.
|
|
25
25
|
|
|
26
26
|
## Changelog
|
|
27
|
+
### 2.2.4 (2023-10-18)
|
|
28
|
+
|
|
29
|
+
* Fixed load AppVersion from Github.
|
|
30
|
+
|
|
31
|
+
### 2.2.3 (2023-10-14)
|
|
32
|
+
|
|
33
|
+
* Added support for admin 5 UI (jsonConfig).
|
|
34
|
+
* Updated packages.
|
|
35
|
+
* Fixed translation.
|
|
27
36
|
|
|
28
37
|
### 2.2.2 (2023-09-16)
|
|
29
38
|
|
|
@@ -117,7 +126,7 @@ It is recommended that a second account, for which the devices have been shared,
|
|
|
117
126
|
|
|
118
127
|
MIT License
|
|
119
128
|
|
|
120
|
-
Copyright (c)
|
|
129
|
+
Copyright (c) 2023 marc <marc@lammers.dev>
|
|
121
130
|
|
|
122
131
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
123
132
|
of this software and associated documentation files (the "Software"), to deal
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
|
-
"
|
|
3
|
-
"appVersionFromGithub": "App-Version für API aus dem GitHub-Repository
|
|
2
|
+
"appVersion": "Neue Version der App für API",
|
|
3
|
+
"appVersionFromGithub": "App-Version für API, geladen aus dem GitHub-Repository",
|
|
4
4
|
"useAppVersionFromGithub": "Verwenden Sie die von GitHub geladene App-Version",
|
|
5
|
-
"panasonic-comfort-cloud adapter settings": "Adaptereinstellungen für
|
|
5
|
+
"panasonic-comfort-cloud adapter settings": "Adaptereinstellungen für Panasonic-Comfort-Cloud",
|
|
6
6
|
"password": "Passwort",
|
|
7
|
-
"refreshInterval": "Aktualisierungsintervall (
|
|
7
|
+
"refreshInterval": "Aktualisierungsintervall (Minuten)",
|
|
8
8
|
"username": "Nutzername"
|
|
9
9
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
|
-
"
|
|
2
|
+
"appVersion": "New version of the app for API",
|
|
3
3
|
"appVersionFromGithub": "App version for API loaded from GitHub repository",
|
|
4
4
|
"useAppVersionFromGithub": "Use the app version loaded from GitHub",
|
|
5
5
|
"panasonic-comfort-cloud adapter settings": "Adapter settings for panasonic-comfort-cloud",
|
|
6
6
|
"password": "Password",
|
|
7
|
-
"refreshInterval": "Refresh interval (
|
|
7
|
+
"refreshInterval": "Refresh interval (minutes)",
|
|
8
8
|
"username": "Username"
|
|
9
9
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
|
-
"
|
|
3
|
-
"appVersionFromGithub": "Versión de la aplicación para
|
|
4
|
-
"useAppVersionFromGithub": "
|
|
2
|
+
"appVersion": "Nueva versión de la aplicación para API",
|
|
3
|
+
"appVersionFromGithub": "Versión de la aplicación para API cargada desde el repositorio de GitHub",
|
|
4
|
+
"useAppVersionFromGithub": "Utilice la versión de la aplicación cargada desde GitHub",
|
|
5
5
|
"panasonic-comfort-cloud adapter settings": "Configuración del adaptador para panasonic-comfort-cloud",
|
|
6
6
|
"password": "Contraseña",
|
|
7
|
-
"refreshInterval": "Intervalo de actualización (
|
|
7
|
+
"refreshInterval": "Intervalo de actualización (minutos)",
|
|
8
8
|
"username": "Nombre de usuario"
|
|
9
9
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
|
-
"
|
|
2
|
+
"appVersion": "Nouvelle version de l'application pour API",
|
|
3
3
|
"appVersionFromGithub": "Version de l'application pour l'API chargée à partir du référentiel GitHub",
|
|
4
|
-
"useAppVersionFromGithub": "
|
|
5
|
-
"panasonic-comfort-cloud adapter settings": "Paramètres de l'adaptateur pour
|
|
4
|
+
"useAppVersionFromGithub": "Utilisez la version de l'application chargée depuis GitHub",
|
|
5
|
+
"panasonic-comfort-cloud adapter settings": "Paramètres de l'adaptateur pour Panasonic-Comfort-Cloud",
|
|
6
6
|
"password": "Mot de passe",
|
|
7
|
-
"refreshInterval": "Intervalle
|
|
7
|
+
"refreshInterval": "Intervalle d'actualisation (minutes)",
|
|
8
8
|
"username": "Nom d'utilisateur"
|
|
9
9
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
|
-
"
|
|
3
|
-
"appVersionFromGithub": "Versione dell'app per
|
|
4
|
-
"useAppVersionFromGithub": "
|
|
2
|
+
"appVersion": "Nuova versione dell'app per API",
|
|
3
|
+
"appVersionFromGithub": "Versione dell'app per API caricata dal repository GitHub",
|
|
4
|
+
"useAppVersionFromGithub": "Utilizza la versione dell'app caricata da GitHub",
|
|
5
5
|
"panasonic-comfort-cloud adapter settings": "Impostazioni dell'adattatore per panasonic-comfort-cloud",
|
|
6
6
|
"password": "Parola d'ordine",
|
|
7
|
-
"refreshInterval": "Intervallo di aggiornamento (
|
|
7
|
+
"refreshInterval": "Intervallo di aggiornamento (minuti)",
|
|
8
8
|
"username": "Nome utente"
|
|
9
9
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
|
-
"
|
|
2
|
+
"appVersion": "Nieuwe versie van de app voor API",
|
|
3
3
|
"appVersionFromGithub": "App-versie voor API geladen vanuit GitHub-repository",
|
|
4
4
|
"useAppVersionFromGithub": "Gebruik de app-versie die is geladen vanuit GitHub",
|
|
5
5
|
"panasonic-comfort-cloud adapter settings": "Adapterinstellingen voor panasonic-comfort-cloud",
|
|
6
6
|
"password": "Wachtwoord",
|
|
7
|
-
"refreshInterval": "
|
|
7
|
+
"refreshInterval": "Vernieuwingsinterval (minuten)",
|
|
8
8
|
"username": "Gebruikersnaam"
|
|
9
9
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
|
-
"
|
|
3
|
-
"appVersionFromGithub": "Wersja aplikacji dla API
|
|
4
|
-
"useAppVersionFromGithub": "Użyj wersji aplikacji
|
|
2
|
+
"appVersion": "Nowa wersja aplikacji dla API",
|
|
3
|
+
"appVersionFromGithub": "Wersja aplikacji dla API załadowana z repozytorium GitHub",
|
|
4
|
+
"useAppVersionFromGithub": "Użyj wersji aplikacji pobranej z GitHub",
|
|
5
5
|
"panasonic-comfort-cloud adapter settings": "Ustawienia adaptera dla panasonic-comfort-cloud",
|
|
6
6
|
"password": "Hasło",
|
|
7
|
-
"refreshInterval": "Interwał odświeżania (
|
|
7
|
+
"refreshInterval": "Interwał odświeżania (minuty)",
|
|
8
8
|
"username": "Nazwa użytkownika"
|
|
9
9
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
|
-
"
|
|
2
|
+
"appVersion": "Nova versão do aplicativo para API",
|
|
3
3
|
"appVersionFromGithub": "Versão do aplicativo para API carregada do repositório GitHub",
|
|
4
4
|
"useAppVersionFromGithub": "Use a versão do aplicativo carregada do GitHub",
|
|
5
5
|
"panasonic-comfort-cloud adapter settings": "Configurações do adaptador para panasonic-comfort-cloud",
|
|
6
6
|
"password": "Senha",
|
|
7
|
-
"refreshInterval": "Intervalo de atualização (
|
|
7
|
+
"refreshInterval": "Intervalo de atualização (minutos)",
|
|
8
8
|
"username": "Nome de usuário"
|
|
9
9
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
|
-
"
|
|
3
|
-
"appVersionFromGithub": "Версия приложения для API
|
|
4
|
-
"useAppVersionFromGithub": "Используйте версию приложения, загруженную с GitHub",
|
|
2
|
+
"appVersion": "Новая версия приложения для API",
|
|
3
|
+
"appVersionFromGithub": "Версия приложения для API загружена из репозитория GitHub.",
|
|
4
|
+
"useAppVersionFromGithub": "Используйте версию приложения, загруженную с GitHub.",
|
|
5
5
|
"panasonic-comfort-cloud adapter settings": "Настройки адаптера для panasonic-comfort-cloud",
|
|
6
6
|
"password": "Пароль",
|
|
7
|
-
"refreshInterval": "Интервал обновления (
|
|
7
|
+
"refreshInterval": "Интервал обновления (минуты)",
|
|
8
8
|
"username": "Имя пользователя"
|
|
9
9
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
|
-
"
|
|
2
|
+
"appVersion": "Нова версія програми для API",
|
|
3
3
|
"appVersionFromGithub": "Версія програми для API, завантажена зі сховища GitHub",
|
|
4
4
|
"useAppVersionFromGithub": "Використовуйте версію програми, завантажену з GitHub",
|
|
5
5
|
"panasonic-comfort-cloud adapter settings": "Налаштування адаптера для panasonic-comfort-cloud",
|
|
6
6
|
"password": "Пароль",
|
|
7
|
-
"refreshInterval": "Інтервал оновлення (
|
|
7
|
+
"refreshInterval": "Інтервал оновлення (хв.)",
|
|
8
8
|
"username": "Ім'я користувача"
|
|
9
9
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
|
-
"
|
|
2
|
+
"appVersion": "API 应用程序的新版本",
|
|
3
3
|
"appVersionFromGithub": "从 GitHub 存储库加载的 API 的应用程序版本",
|
|
4
4
|
"useAppVersionFromGithub": "使用从 GitHub 加载的应用程序版本",
|
|
5
|
-
"panasonic-comfort-cloud adapter settings": "panasonic-comfort-cloud
|
|
5
|
+
"panasonic-comfort-cloud adapter settings": "panasonic-comfort-cloud 的适配器设置",
|
|
6
6
|
"password": "密码",
|
|
7
|
-
"refreshInterval": "
|
|
7
|
+
"refreshInterval": "刷新间隔(分钟)",
|
|
8
8
|
"username": "用户名"
|
|
9
9
|
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"type": "panel",
|
|
3
|
+
"i18n": true,
|
|
4
|
+
"items": {
|
|
5
|
+
"username": {
|
|
6
|
+
"type": "text",
|
|
7
|
+
"label": "username",
|
|
8
|
+
"sm": 12,
|
|
9
|
+
"md": 4
|
|
10
|
+
},
|
|
11
|
+
"password": {
|
|
12
|
+
"type": "password",
|
|
13
|
+
"label": "password",
|
|
14
|
+
"sm": 12,
|
|
15
|
+
"md": 4
|
|
16
|
+
},
|
|
17
|
+
"pollinterval": {
|
|
18
|
+
"type": "number",
|
|
19
|
+
"label": "refreshInterval",
|
|
20
|
+
"sm": 12,
|
|
21
|
+
"md": 4
|
|
22
|
+
},
|
|
23
|
+
"appVersion": {
|
|
24
|
+
"type": "text",
|
|
25
|
+
"label": "appVersion",
|
|
26
|
+
"sm": 12,
|
|
27
|
+
"md": 4
|
|
28
|
+
},
|
|
29
|
+
"appVersionFromGithub": {
|
|
30
|
+
"type": "text",
|
|
31
|
+
"label": "appVersionFromGithub",
|
|
32
|
+
"readOnly": true,
|
|
33
|
+
"sm": 12,
|
|
34
|
+
"md": 4
|
|
35
|
+
},
|
|
36
|
+
"useAppVersionFromGithub": {
|
|
37
|
+
"type": "checkbox",
|
|
38
|
+
"label": "useAppVersionFromGithub",
|
|
39
|
+
"sm": 12,
|
|
40
|
+
"md": 4
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
package/admin/words.js
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
'use strict';
|
|
9
9
|
|
|
10
10
|
systemDictionary = {
|
|
11
|
-
"
|
|
11
|
+
"appVersion": { "en": "New version of the app for API", "de": "Neue Version der App für API", "ru": "Новая версия приложения для API", "pt": "Nova versão do app para API", "nl": "Nieuwe versie van de app voor API", "fr": "Nouvelle version de l'application pour l'API", "it": "Nuova versione dell'app per API", "es": "Nueva versión de la app para API", "pl": "Nowa wersja aplikacji dla API", "uk": "Нова версія програми для API", "zh-cn": "API 应用程序的新版本"},
|
|
12
12
|
"appVersionFromGithub": { "en": "App version for API loaded from GitHub repository", "de": "App-Version für API aus dem GitHub-Repository geladen", "ru": "Версия приложения для API, загруженного из репозитория GitHub", "pt": "Versão do aplicativo para API carregada do repositório GitHub", "nl": "App-versie voor API geladen vanuit GitHub-repository", "fr": "Version de l'application pour l'API chargée à partir du référentiel GitHub", "it": "Versione dell'app per l'API caricata dal repository GitHub", "es": "Versión de la aplicación para la API cargada desde el repositorio de GitHub", "pl": "Wersja aplikacji dla API ładowana z repozytorium GitHub", "uk": "Версія програми для API, завантажена зі сховища GitHub", "zh-cn": "从 GitHub 存储库加载的 API 的应用程序版本"},
|
|
13
13
|
"useAppVersionFromGithub": { "en": "Use the app version loaded from GitHub", "de": "Verwenden Sie die von GitHub geladene App-Version", "ru": "Используйте версию приложения, загруженную с GitHub", "pt": "Use a versão do aplicativo carregada do GitHub", "nl": "Gebruik de app-versie die is geladen vanuit GitHub", "fr": "Utiliser la version de l'application chargée depuis GitHub", "it": "Usa la versione dell'app caricata da GitHub", "es": "Use la versión de la aplicación cargada desde GitHub", "pl": "Użyj wersji aplikacji załadowanej z GitHub", "uk": "Використовуйте версію програми, завантажену з GitHub", "zh-cn": "使用从 GitHub 加载的应用程序版本"},
|
|
14
14
|
"panasonic-comfort-cloud adapter settings": { "en": "Adapter settings for panasonic-comfort-cloud", "de": "Adaptereinstellungen für panasonic-comfort-cloud", "ru": "Настройки адаптера для panasonic-comfort-cloud", "pt": "Configurações do adaptador para panasonic-comfort-cloud", "nl": "Adapterinstellingen voor panasonic-comfort-cloud", "fr": "Paramètres de l'adaptateur pour panasonic-comfort-cloud", "it": "Impostazioni dell'adattatore per panasonic-comfort-cloud", "es": "Configuración del adaptador para panasonic-comfort-cloud", "pl": "Ustawienia adaptera dla panasonic-comfort-cloud", "uk": "Налаштування адаптера для panasonic-comfort-cloud", "zh-cn": "panasonic-comfort-cloud 适配器设置"},
|
package/build/main.js
CHANGED
|
@@ -53,9 +53,8 @@ class PanasonicComfortCloud extends utils.Adapter {
|
|
|
53
53
|
if (((_g = this.config) == null ? void 0 : _g.appVersionFromGithub) != "" && ((_h = this.config) == null ? void 0 : _h.useAppVersionFromGithub)) {
|
|
54
54
|
this.log.debug(`Use AppVersion from Github ${(_i = this.config) == null ? void 0 : _i.appVersionFromGithub}.`);
|
|
55
55
|
this.comfortCloudClient = new import_panasonic_comfort_cloud_client.ComfortCloudClient((_j = this.config) == null ? void 0 : _j.appVersionFromGithub);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
this.log.debug(`Use configured AppVersion from Github ${(_l = this.config) == null ? void 0 : _l.appVersionFromGithub}.`);
|
|
56
|
+
} else if (((_k = this.config) == null ? void 0 : _k.appVersion) != "") {
|
|
57
|
+
this.log.debug(`Use configured AppVersion ${(_l = this.config) == null ? void 0 : _l.appVersion}.`);
|
|
59
58
|
this.comfortCloudClient = new import_panasonic_comfort_cloud_client.ComfortCloudClient((_m = this.config) == null ? void 0 : _m.appVersion);
|
|
60
59
|
} else {
|
|
61
60
|
this.log.debug(`Use default AppVersion.`);
|
package/build/main.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/main.ts"],
|
|
4
|
-
"sourcesContent": ["/*\n * Created with @iobroker/create-adapter v1.16.0\n */\n\n// The adapter-core module gives you access to the core ioBroker functions\n// you need to create an adapter\nimport * as utils from '@iobroker/adapter-core'\n\nimport {\n Device,\n Group,\n ComfortCloudClient,\n Parameters,\n Power,\n AirSwingLR,\n AirSwingUD,\n FanAutoMode,\n EcoMode,\n OperationMode,\n FanSpeed,\n TokenExpiredError,\n ServiceError,\n NanoeMode\n} from 'panasonic-comfort-cloud-client'\n\nimport * as _ from 'lodash'\nimport axios from 'axios'\n\nconst REFRESH_INTERVAL_IN_MINUTES_DEFAULT = 5\n\nclass PanasonicComfortCloud extends utils.Adapter {\n\n private comfortCloudClient: ComfortCloudClient = new ComfortCloudClient()\n\n private refreshTimeout: NodeJS.Timeout | undefined\n private refreshIntervalInMinutes = REFRESH_INTERVAL_IN_MINUTES_DEFAULT\n\n private readonlyStateNames: string[] = [] \n\n public constructor(options: Partial<utils.AdapterOptions> = {}) {\n super({\n ...options,\n name: 'panasonic-comfort-cloud',\n })\n\n this.on('ready', this.onReady.bind(this))\n this.on('objectChange', this.onObjectChange.bind(this))\n this.on('stateChange', this.onStateChange.bind(this))\n // this.on('message', this.onMessage.bind(this));\n this.on('unload', this.onUnload.bind(this))\n }\n\n /**\n * Is called when databases are connected and adapter received configuration.\n */\n private async onReady(): Promise<void> {\n this.refreshIntervalInMinutes = this.config?.refreshInterval ?? REFRESH_INTERVAL_IN_MINUTES_DEFAULT\n this.subscribeStates('*')\n\n this.setState('info.connection', false, true);\n\n const loadedAppVersion = await this.getCurrentAppVersion()\n this.log.info(`Loaded app version from GitHub: ${loadedAppVersion}`)\n if(loadedAppVersion && this.trimAll(this.config?.appVersionFromGithub) != this.trimAll(loadedAppVersion)) {\n this.updateConfig({ appVersionFromGithub: this.trimAll(loadedAppVersion), password: this.encrypt(this.config?.password) }) \n return\n }\n\n if(!this.config?.username || !this.config?.password) {\n this.log.error('Can not start without username or password. Please open config.')\n } else {\n if(this.config?.appVersionFromGithub != '' && this.config?.useAppVersionFromGithub)\n {\n this.log.debug(`Use AppVersion from Github ${this.config?.appVersionFromGithub}.`)\n this.comfortCloudClient = new ComfortCloudClient(this.config?.appVersionFromGithub)\n }\n if(this.config?.appVersion != '')\n {\n this.log.debug(`Use configured AppVersion from Github ${this.config?.appVersionFromGithub}.`)\n this.comfortCloudClient = new ComfortCloudClient(this.config?.appVersion)\n }\n else\n {\n this.log.debug(`Use default AppVersion.`)\n this.comfortCloudClient = new ComfortCloudClient()\n }\n\n try {\n this.log.debug(`Try to login with username ${this.config.username}.`)\n await this.comfortCloudClient.login(\n this.config.username,\n this.config.password\n )\n this.log.info('Login successful.')\n this.setState('info.connection', true, true)\n this.log.debug('Create devices.')\n const groups = await this.comfortCloudClient.getGroups()\n await this.createDevices(groups)\n\n this.setupRefreshTimeout()\n } catch (error) {\n await this.handleClientError(error)\n }\n }\n }\n\n private async refreshDeviceStates(device: Device): Promise<void> {\n this.log.debug(`Refresh device ${device.name} (${device.guid}).`)\n this.log.debug(`${device.name}: guid => ${device.guid}.`)\n \n this.log.debug(`${device.name}: operate => ${device.operate}.`)\n await this.setStateChangedAsync(\n `${device.name}.operate`,\n device.operate,\n true\n )\n this.log.debug(`${device.name}: temperatureSet => ${device.temperatureSet}.`)\n await this.setStateChangedAsync(\n `${device.name}.temperatureSet`,\n device.temperatureSet,\n true\n )\n this.log.debug(`${device.name}: insideTemperature => ${device.insideTemperature}.`)\n await this.setStateChangedAsync(\n `${device.name}.insideTemperature`,\n device.insideTemperature,\n true\n )\n this.log.debug(`${device.name}: outTemperature => ${device.outTemperature}.`)\n await this.setStateChangedAsync(\n `${device.name}.outTemperature`,\n device.outTemperature,\n true\n )\n this.log.debug(`${device.name}: airSwingLR => ${device.airSwingLR}.`)\n await this.setStateChangedAsync(\n `${device.name}.airSwingLR`,\n device.airSwingLR,\n true\n )\n this.log.debug(`${device.name}: airSwingUD => ${device.airSwingUD}.`)\n await this.setStateChangedAsync(\n `${device.name}.airSwingUD`,\n device.airSwingUD,\n true\n )\n this.log.debug(`${device.name}: fanAutoMode => ${device.fanAutoMode}.`)\n await this.setStateChangedAsync(\n `${device.name}.fanAutoMode`,\n device.fanAutoMode,\n true\n )\n this.log.debug(`${device.name}: ecoMode => ${device.ecoMode}.`)\n await this.setStateChangedAsync(\n `${device.name}.ecoMode`,\n device.ecoMode,\n true\n )\n this.log.debug(`${device.name}: operationMode => ${device.operationMode}.`)\n await this.setStateChangedAsync(\n `${device.name}.operationMode`,\n device.operationMode,\n true\n )\n this.log.debug(`${device.name}: fanSpeed => ${device.fanSpeed}.`)\n await this.setStateChangedAsync(\n `${device.name}.fanSpeed`,\n device.fanSpeed,\n true\n )\n this.log.debug(`${device.name}: actualNanoe => ${device.actualNanoe}.`)\n await this.setStateChangedAsync(\n `${device.name}.actualNanoe`,\n device.actualNanoe,\n true\n )\n this.log.debug(`Refresh device ${device.name} finished.`)\n }\n\n private async refreshDevice(guid: string, deviceName: string): Promise<void> {\n try {\n const device = await this.comfortCloudClient.getDevice(guid, deviceName)\n if (!device) {\n return\n }\n if (!device.name) {\n device.name = deviceName\n }\n await this.refreshDeviceStates(device)\n } catch (error) {\n await this.handleClientError(error)\n }\n }\n\n private async refreshDevices(): Promise<void> {\n try {\n this.log.debug('Refresh all devices.')\n const groups = await this.comfortCloudClient.getGroups()\n this.setState('info.connection', true, true);\n const devices = _.flatMap(groups, g => g.devices)\n const deviceInfos = _.map(devices, d => { return{guid: d.guid, name: d.name}})\n await Promise.all(deviceInfos.map(async (deviceInfo) => {\n const device = await this.comfortCloudClient.getDevice(deviceInfo.guid, deviceInfo.name)\n if(device != null) {\n device.name = deviceInfo.name\n device.guid = deviceInfo.guid\n await this.refreshDeviceStates(device)\n }\n }));\n } catch (error) {\n await this.handleClientError(error)\n }\n }\n\n private async createDevices(groups: Array<Group>): Promise<void> {\n const devices = await this.getDevicesAsync()\n const names = _.map(devices, (value) => {\n return value.common.name\n })\n const devicesFromService = _.flatMap(groups, g => g.devices)\n const deviceInfos = _.map(devicesFromService, d => { return {guid: d.guid, name: d.name}})\n await Promise.all(deviceInfos.map(async (deviceInfo) => {\n this.log.debug(`Device info from group ${deviceInfo.guid}, ${deviceInfo.name}.`)\n let device: Device | null = null\n try {\n device = await this.comfortCloudClient.getDevice(deviceInfo.guid, deviceInfo.name)\n } catch(error) {\n await this.handleClientError(error)\n }\n \n if(device != null) {\n if (_.includes(names, deviceInfo.name)) {\n return\n }\n this.createDevice(deviceInfo.name)\n this.createState(\n deviceInfo.name,\n '',\n 'guid',\n { role: 'info.address', write: false, def: deviceInfo.guid, type: 'string' },\n undefined\n )\n this.readonlyStateNames.push('guid')\n\n this.createState(\n deviceInfo.name,\n '',\n 'operate',\n {\n role: 'switch.power',\n states: { 0: Power[0], 1: Power[1] },\n write: true,\n def: device.operate,\n type: 'number',\n },\n undefined\n )\n this.createState(\n deviceInfo.name,\n '',\n 'temperatureSet',\n {\n role: 'level.temperature',\n write: true,\n def: device.temperatureSet,\n type: 'number',\n },\n undefined\n )\n this.createState(\n deviceInfo.name,\n '',\n 'insideTemperature',\n {\n role: 'level.temperature',\n write: false,\n def: device.insideTemperature,\n type: 'number',\n },\n undefined\n )\n this.readonlyStateNames.push('insideTemperature')\n\n this.createState(\n deviceInfo.name,\n '',\n 'outTemperature',\n {\n role: 'level.temperature',\n write: false,\n def: device.outTemperature,\n type: 'number',\n },\n undefined\n )\n this.readonlyStateNames.push('outTemperature')\n\n this.createState(\n deviceInfo.name,\n '',\n 'airSwingLR',\n {\n role: 'state',\n states: {\n 0: AirSwingLR[0],\n 1: AirSwingLR[1],\n 2: AirSwingLR[2],\n 3: AirSwingLR[3],\n 4: AirSwingLR[4],\n },\n write: true,\n def: device.airSwingLR,\n type: 'number',\n },\n undefined\n )\n this.createState(\n deviceInfo.name,\n '',\n 'airSwingUD',\n {\n role: 'state',\n states: {\n 0: AirSwingUD[0],\n 1: AirSwingUD[1],\n 2: AirSwingUD[2],\n 3: AirSwingUD[3],\n 4: AirSwingUD[4],\n },\n write: true,\n def: device.airSwingUD,\n type: 'number',\n },\n undefined\n )\n this.createState(\n deviceInfo.name,\n '',\n 'fanAutoMode',\n {\n role: 'state',\n states: {\n 0: FanAutoMode[0],\n 1: FanAutoMode[1],\n 2: FanAutoMode[2],\n 3: FanAutoMode[3],\n },\n write: true,\n def: device.fanAutoMode,\n type: 'number',\n },\n undefined\n )\n this.createState(\n deviceInfo.name,\n '',\n 'ecoMode',\n {\n role: 'state',\n states: { 0: EcoMode[0], 1: EcoMode[1], 2: EcoMode[2] },\n write: true,\n def: device.ecoMode,\n type: 'number',\n },\n undefined\n )\n this.createState(\n deviceInfo.name,\n '',\n 'operationMode',\n {\n role: 'state',\n states: {\n 0: OperationMode[0],\n 1: OperationMode[1],\n 2: OperationMode[2],\n 3: OperationMode[3],\n 4: OperationMode[4],\n },\n write: true,\n def: device.operationMode,\n type: 'number',\n },\n undefined\n )\n this.createState(\n deviceInfo.name,\n '',\n 'fanSpeed',\n {\n role: 'state',\n states: {\n 0: FanSpeed[0],\n 1: FanSpeed[1],\n 2: FanSpeed[2],\n 3: FanSpeed[3],\n 4: FanSpeed[4],\n 5: FanSpeed[5],\n },\n write: true,\n def: device.fanSpeed,\n type: 'number',\n },\n undefined\n )\n this.createState(\n deviceInfo.name,\n '',\n 'actualNanoe',\n {\n role: 'state',\n states: {\n 0: NanoeMode[0],\n 1: NanoeMode[1],\n 2: NanoeMode[2],\n 3: NanoeMode[3],\n 4: NanoeMode[4],\n },\n write: true,\n def: device.actualNanoe,\n type: 'number',\n },\n undefined\n )\n\n this.log.info(`Device ${deviceInfo.name} created.`)\n }\n }));\n this.log.debug('Device creation completed.')\n }\n\n private async updateDevice(\n deviceName: string,\n stateName: string,\n state: ioBroker.State\n ): Promise<void> {\n if(this.readonlyStateNames.includes(stateName)) {\n return\n }\n if (!state.ack) {\n const stateObj = await this.getObjectAsync(`${deviceName}.${stateName}`)\n const stateCommon = stateObj?.common as ioBroker.StateCommon\n if(stateCommon?.write == false) {\n return\n }\n\n const guidState = await this.getStateAsync(`${deviceName}.guid`)\n \n this.log.debug(\n `Update device guid=${guidState?.val} state=${stateName}`\n )\n const parameters: Parameters = {}\n parameters[stateName] = state.val\n if (!guidState?.val) {\n return\n }\n try {\n this.log.debug(`Set device parameter ${JSON.stringify(parameters)} for device ${guidState?.val}`)\n await this.comfortCloudClient.setParameters(\n guidState?.val as string,\n parameters\n )\n this.log.debug(`Refresh device ${deviceName}`)\n await this.refreshDevice(guidState?.val as string, deviceName)\n } catch (error) {\n await this.handleClientError(error)\n }\n }\n }\n\n /**\n * Is called when adapter shuts down - callback has to be called under any circumstances!\n */\n private onUnload(callback: () => void): void {\n try {\n if(this.refreshTimeout)\n clearTimeout(this.refreshTimeout)\n\n this.log.info('cleaned everything up...')\n callback()\n } catch (e) {\n callback()\n }\n }\n\n /**\n * Is called if a subscribed object changes\n */\n private onObjectChange(\n id: string,\n obj: ioBroker.Object | null | undefined\n ): void {\n if (obj) {\n // The object was changed\n this.log.info(`object ${id} changed: ${JSON.stringify(obj)}`)\n } else {\n // The object was deleted\n this.log.info(`object ${id} deleted`)\n }\n }\n\n /**\n * Is called if a subscribed state changes\n */\n private async onStateChange(\n id: string,\n state: ioBroker.State | null | undefined\n ): Promise<void> {\n if (state) {\n const elements = id.split('.')\n const deviceName = elements[elements.length - 2]\n const stateName = elements[elements.length - 1]\n try {\n await this.updateDevice(deviceName, stateName, state) \n } catch (error) {\n await this.handleClientError(error)\n }\n \n // The state was changed\n this.log.info(\n `state ${id} changed: ${state.val} (ack = ${state.ack})`\n )\n } else {\n // The state was deleted\n this.log.info(`state ${id} deleted`)\n }\n }\n\n private async getCurrentAppVersion() : Promise<string> {\n const response = await axios.get('https://raw.githubusercontent.com/marc2016/ioBroker.panasonic-comfort-cloud/master/.currentAppVersion')\n if(response.status !== 200)\n return ''\n const text = await response.data\n return text\n }\n\n private async handleClientError(error: unknown): Promise<void> {\n this.log.debug('Try to handle error.')\n \n if (error instanceof TokenExpiredError) {\n this.log.info(\n `Token of comfort cloud client expired. Trying to login again. Code=${error.code}. Stack: ${error.stack}`\n )\n this.setState('info.connection', false, true);\n await this.comfortCloudClient.login(\n this.config.username,\n this.config.password\n )\n this.setState('info.connection', true, true);\n this.log.info('Login successful.')\n } else if (error instanceof ServiceError) {\n this.setState('info.connection', false, true);\n this.log.error(\n `Service error: ${error.message}. Code=${error.code}. Stack: ${error.stack}`\n )\n } else if (error instanceof Error){\n this.log.error(`Unknown error: ${error}. Stack: ${error.stack}`)\n }\n }\n\n private setupRefreshTimeout(): void {\n this.log.debug('setupRefreshTimeout')\n const refreshIntervalInMilliseconds = this.refreshIntervalInMinutes * 60 * 1000\n this.log.debug(`refreshIntervalInMilliseconds=${refreshIntervalInMilliseconds}`)\n this.refreshTimeout = setTimeout(this.refreshTimeoutFunc.bind(this), refreshIntervalInMilliseconds);\n }\n\n private async refreshTimeoutFunc(): Promise<void> {\n this.log.debug(`refreshTimeoutFunc started.`)\n try {\n await this.refreshDevices()\n this.setupRefreshTimeout()\n } catch (error) {\n await this.handleClientError(error)\n }\n \n }\n\n private trimAll(text: string): string {\n const newText = text.trim().replace(/(\\r\\n|\\n|\\r)/gm, '');\n return newText\n }\n}\n\nif (module.parent) {\n // Export the constructor in compact mode\n module.exports = (options: Partial<utils.AdapterOptions> | undefined) =>\n new PanasonicComfortCloud(options)\n} else {\n // otherwise start the instance directly\n (() => new PanasonicComfortCloud())()\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["/*\n * Created with @iobroker/create-adapter v1.16.0\n */\n\n// The adapter-core module gives you access to the core ioBroker functions\n// you need to create an adapter\nimport * as utils from '@iobroker/adapter-core'\n\nimport {\n Device,\n Group,\n ComfortCloudClient,\n Parameters,\n Power,\n AirSwingLR,\n AirSwingUD,\n FanAutoMode,\n EcoMode,\n OperationMode,\n FanSpeed,\n TokenExpiredError,\n ServiceError,\n NanoeMode\n} from 'panasonic-comfort-cloud-client'\n\nimport * as _ from 'lodash'\nimport axios from 'axios'\n\nconst REFRESH_INTERVAL_IN_MINUTES_DEFAULT = 5\n\nclass PanasonicComfortCloud extends utils.Adapter {\n\n private comfortCloudClient: ComfortCloudClient = new ComfortCloudClient()\n\n private refreshTimeout: NodeJS.Timeout | undefined\n private refreshIntervalInMinutes = REFRESH_INTERVAL_IN_MINUTES_DEFAULT\n\n private readonlyStateNames: string[] = [] \n\n public constructor(options: Partial<utils.AdapterOptions> = {}) {\n super({\n ...options,\n name: 'panasonic-comfort-cloud',\n })\n\n this.on('ready', this.onReady.bind(this))\n this.on('objectChange', this.onObjectChange.bind(this))\n this.on('stateChange', this.onStateChange.bind(this))\n // this.on('message', this.onMessage.bind(this));\n this.on('unload', this.onUnload.bind(this))\n }\n\n /**\n * Is called when databases are connected and adapter received configuration.\n */\n private async onReady(): Promise<void> {\n this.refreshIntervalInMinutes = this.config?.refreshInterval ?? REFRESH_INTERVAL_IN_MINUTES_DEFAULT\n this.subscribeStates('*')\n\n this.setState('info.connection', false, true);\n\n const loadedAppVersion = await this.getCurrentAppVersion()\n this.log.info(`Loaded app version from GitHub: ${loadedAppVersion}`)\n if(loadedAppVersion && this.trimAll(this.config?.appVersionFromGithub) != this.trimAll(loadedAppVersion)) {\n this.updateConfig({ appVersionFromGithub: this.trimAll(loadedAppVersion), password: this.encrypt(this.config?.password) }) \n return\n }\n\n if(!this.config?.username || !this.config?.password) {\n this.log.error('Can not start without username or password. Please open config.')\n } else {\n if(this.config?.appVersionFromGithub != '' && this.config?.useAppVersionFromGithub)\n {\n this.log.debug(`Use AppVersion from Github ${this.config?.appVersionFromGithub}.`)\n this.comfortCloudClient = new ComfortCloudClient(this.config?.appVersionFromGithub)\n }\n else if(this.config?.appVersion != '')\n {\n this.log.debug(`Use configured AppVersion ${this.config?.appVersion}.`)\n this.comfortCloudClient = new ComfortCloudClient(this.config?.appVersion)\n }\n else\n {\n this.log.debug(`Use default AppVersion.`)\n this.comfortCloudClient = new ComfortCloudClient()\n }\n\n try {\n this.log.debug(`Try to login with username ${this.config.username}.`)\n await this.comfortCloudClient.login(\n this.config.username,\n this.config.password\n )\n this.log.info('Login successful.')\n this.setState('info.connection', true, true)\n this.log.debug('Create devices.')\n const groups = await this.comfortCloudClient.getGroups()\n await this.createDevices(groups)\n\n this.setupRefreshTimeout()\n } catch (error) {\n await this.handleClientError(error)\n }\n }\n }\n\n private async refreshDeviceStates(device: Device): Promise<void> {\n this.log.debug(`Refresh device ${device.name} (${device.guid}).`)\n this.log.debug(`${device.name}: guid => ${device.guid}.`)\n \n this.log.debug(`${device.name}: operate => ${device.operate}.`)\n await this.setStateChangedAsync(\n `${device.name}.operate`,\n device.operate,\n true\n )\n this.log.debug(`${device.name}: temperatureSet => ${device.temperatureSet}.`)\n await this.setStateChangedAsync(\n `${device.name}.temperatureSet`,\n device.temperatureSet,\n true\n )\n this.log.debug(`${device.name}: insideTemperature => ${device.insideTemperature}.`)\n await this.setStateChangedAsync(\n `${device.name}.insideTemperature`,\n device.insideTemperature,\n true\n )\n this.log.debug(`${device.name}: outTemperature => ${device.outTemperature}.`)\n await this.setStateChangedAsync(\n `${device.name}.outTemperature`,\n device.outTemperature,\n true\n )\n this.log.debug(`${device.name}: airSwingLR => ${device.airSwingLR}.`)\n await this.setStateChangedAsync(\n `${device.name}.airSwingLR`,\n device.airSwingLR,\n true\n )\n this.log.debug(`${device.name}: airSwingUD => ${device.airSwingUD}.`)\n await this.setStateChangedAsync(\n `${device.name}.airSwingUD`,\n device.airSwingUD,\n true\n )\n this.log.debug(`${device.name}: fanAutoMode => ${device.fanAutoMode}.`)\n await this.setStateChangedAsync(\n `${device.name}.fanAutoMode`,\n device.fanAutoMode,\n true\n )\n this.log.debug(`${device.name}: ecoMode => ${device.ecoMode}.`)\n await this.setStateChangedAsync(\n `${device.name}.ecoMode`,\n device.ecoMode,\n true\n )\n this.log.debug(`${device.name}: operationMode => ${device.operationMode}.`)\n await this.setStateChangedAsync(\n `${device.name}.operationMode`,\n device.operationMode,\n true\n )\n this.log.debug(`${device.name}: fanSpeed => ${device.fanSpeed}.`)\n await this.setStateChangedAsync(\n `${device.name}.fanSpeed`,\n device.fanSpeed,\n true\n )\n this.log.debug(`${device.name}: actualNanoe => ${device.actualNanoe}.`)\n await this.setStateChangedAsync(\n `${device.name}.actualNanoe`,\n device.actualNanoe,\n true\n )\n this.log.debug(`Refresh device ${device.name} finished.`)\n }\n\n private async refreshDevice(guid: string, deviceName: string): Promise<void> {\n try {\n const device = await this.comfortCloudClient.getDevice(guid, deviceName)\n if (!device) {\n return\n }\n if (!device.name) {\n device.name = deviceName\n }\n await this.refreshDeviceStates(device)\n } catch (error) {\n await this.handleClientError(error)\n }\n }\n\n private async refreshDevices(): Promise<void> {\n try {\n this.log.debug('Refresh all devices.')\n const groups = await this.comfortCloudClient.getGroups()\n this.setState('info.connection', true, true);\n const devices = _.flatMap(groups, g => g.devices)\n const deviceInfos = _.map(devices, d => { return{guid: d.guid, name: d.name}})\n await Promise.all(deviceInfos.map(async (deviceInfo) => {\n const device = await this.comfortCloudClient.getDevice(deviceInfo.guid, deviceInfo.name)\n if(device != null) {\n device.name = deviceInfo.name\n device.guid = deviceInfo.guid\n await this.refreshDeviceStates(device)\n }\n }));\n } catch (error) {\n await this.handleClientError(error)\n }\n }\n\n private async createDevices(groups: Array<Group>): Promise<void> {\n const devices = await this.getDevicesAsync()\n const names = _.map(devices, (value) => {\n return value.common.name\n })\n const devicesFromService = _.flatMap(groups, g => g.devices)\n const deviceInfos = _.map(devicesFromService, d => { return {guid: d.guid, name: d.name}})\n await Promise.all(deviceInfos.map(async (deviceInfo) => {\n this.log.debug(`Device info from group ${deviceInfo.guid}, ${deviceInfo.name}.`)\n let device: Device | null = null\n try {\n device = await this.comfortCloudClient.getDevice(deviceInfo.guid, deviceInfo.name)\n } catch(error) {\n await this.handleClientError(error)\n }\n \n if(device != null) {\n if (_.includes(names, deviceInfo.name)) {\n return\n }\n this.createDevice(deviceInfo.name)\n this.createState(\n deviceInfo.name,\n '',\n 'guid',\n { role: 'info.address', write: false, def: deviceInfo.guid, type: 'string' },\n undefined\n )\n this.readonlyStateNames.push('guid')\n\n this.createState(\n deviceInfo.name,\n '',\n 'operate',\n {\n role: 'switch.power',\n states: { 0: Power[0], 1: Power[1] },\n write: true,\n def: device.operate,\n type: 'number',\n },\n undefined\n )\n this.createState(\n deviceInfo.name,\n '',\n 'temperatureSet',\n {\n role: 'level.temperature',\n write: true,\n def: device.temperatureSet,\n type: 'number',\n },\n undefined\n )\n this.createState(\n deviceInfo.name,\n '',\n 'insideTemperature',\n {\n role: 'level.temperature',\n write: false,\n def: device.insideTemperature,\n type: 'number',\n },\n undefined\n )\n this.readonlyStateNames.push('insideTemperature')\n\n this.createState(\n deviceInfo.name,\n '',\n 'outTemperature',\n {\n role: 'level.temperature',\n write: false,\n def: device.outTemperature,\n type: 'number',\n },\n undefined\n )\n this.readonlyStateNames.push('outTemperature')\n\n this.createState(\n deviceInfo.name,\n '',\n 'airSwingLR',\n {\n role: 'state',\n states: {\n 0: AirSwingLR[0],\n 1: AirSwingLR[1],\n 2: AirSwingLR[2],\n 3: AirSwingLR[3],\n 4: AirSwingLR[4],\n },\n write: true,\n def: device.airSwingLR,\n type: 'number',\n },\n undefined\n )\n this.createState(\n deviceInfo.name,\n '',\n 'airSwingUD',\n {\n role: 'state',\n states: {\n 0: AirSwingUD[0],\n 1: AirSwingUD[1],\n 2: AirSwingUD[2],\n 3: AirSwingUD[3],\n 4: AirSwingUD[4],\n },\n write: true,\n def: device.airSwingUD,\n type: 'number',\n },\n undefined\n )\n this.createState(\n deviceInfo.name,\n '',\n 'fanAutoMode',\n {\n role: 'state',\n states: {\n 0: FanAutoMode[0],\n 1: FanAutoMode[1],\n 2: FanAutoMode[2],\n 3: FanAutoMode[3],\n },\n write: true,\n def: device.fanAutoMode,\n type: 'number',\n },\n undefined\n )\n this.createState(\n deviceInfo.name,\n '',\n 'ecoMode',\n {\n role: 'state',\n states: { 0: EcoMode[0], 1: EcoMode[1], 2: EcoMode[2] },\n write: true,\n def: device.ecoMode,\n type: 'number',\n },\n undefined\n )\n this.createState(\n deviceInfo.name,\n '',\n 'operationMode',\n {\n role: 'state',\n states: {\n 0: OperationMode[0],\n 1: OperationMode[1],\n 2: OperationMode[2],\n 3: OperationMode[3],\n 4: OperationMode[4],\n },\n write: true,\n def: device.operationMode,\n type: 'number',\n },\n undefined\n )\n this.createState(\n deviceInfo.name,\n '',\n 'fanSpeed',\n {\n role: 'state',\n states: {\n 0: FanSpeed[0],\n 1: FanSpeed[1],\n 2: FanSpeed[2],\n 3: FanSpeed[3],\n 4: FanSpeed[4],\n 5: FanSpeed[5],\n },\n write: true,\n def: device.fanSpeed,\n type: 'number',\n },\n undefined\n )\n this.createState(\n deviceInfo.name,\n '',\n 'actualNanoe',\n {\n role: 'state',\n states: {\n 0: NanoeMode[0],\n 1: NanoeMode[1],\n 2: NanoeMode[2],\n 3: NanoeMode[3],\n 4: NanoeMode[4],\n },\n write: true,\n def: device.actualNanoe,\n type: 'number',\n },\n undefined\n )\n\n this.log.info(`Device ${deviceInfo.name} created.`)\n }\n }));\n this.log.debug('Device creation completed.')\n }\n\n private async updateDevice(\n deviceName: string,\n stateName: string,\n state: ioBroker.State\n ): Promise<void> {\n if(this.readonlyStateNames.includes(stateName)) {\n return\n }\n if (!state.ack) {\n const stateObj = await this.getObjectAsync(`${deviceName}.${stateName}`)\n const stateCommon = stateObj?.common as ioBroker.StateCommon\n if(stateCommon?.write == false) {\n return\n }\n\n const guidState = await this.getStateAsync(`${deviceName}.guid`)\n \n this.log.debug(\n `Update device guid=${guidState?.val} state=${stateName}`\n )\n const parameters: Parameters = {}\n parameters[stateName] = state.val\n if (!guidState?.val) {\n return\n }\n try {\n this.log.debug(`Set device parameter ${JSON.stringify(parameters)} for device ${guidState?.val}`)\n await this.comfortCloudClient.setParameters(\n guidState?.val as string,\n parameters\n )\n this.log.debug(`Refresh device ${deviceName}`)\n await this.refreshDevice(guidState?.val as string, deviceName)\n } catch (error) {\n await this.handleClientError(error)\n }\n }\n }\n\n /**\n * Is called when adapter shuts down - callback has to be called under any circumstances!\n */\n private onUnload(callback: () => void): void {\n try {\n if(this.refreshTimeout)\n clearTimeout(this.refreshTimeout)\n\n this.log.info('cleaned everything up...')\n callback()\n } catch (e) {\n callback()\n }\n }\n\n /**\n * Is called if a subscribed object changes\n */\n private onObjectChange(\n id: string,\n obj: ioBroker.Object | null | undefined\n ): void {\n if (obj) {\n // The object was changed\n this.log.info(`object ${id} changed: ${JSON.stringify(obj)}`)\n } else {\n // The object was deleted\n this.log.info(`object ${id} deleted`)\n }\n }\n\n /**\n * Is called if a subscribed state changes\n */\n private async onStateChange(\n id: string,\n state: ioBroker.State | null | undefined\n ): Promise<void> {\n if (state) {\n const elements = id.split('.')\n const deviceName = elements[elements.length - 2]\n const stateName = elements[elements.length - 1]\n try {\n await this.updateDevice(deviceName, stateName, state) \n } catch (error) {\n await this.handleClientError(error)\n }\n \n // The state was changed\n this.log.info(\n `state ${id} changed: ${state.val} (ack = ${state.ack})`\n )\n } else {\n // The state was deleted\n this.log.info(`state ${id} deleted`)\n }\n }\n\n private async getCurrentAppVersion() : Promise<string> {\n const response = await axios.get('https://raw.githubusercontent.com/marc2016/ioBroker.panasonic-comfort-cloud/master/.currentAppVersion')\n if(response.status !== 200)\n return ''\n const text = await response.data\n return text\n }\n\n private async handleClientError(error: unknown): Promise<void> {\n this.log.debug('Try to handle error.')\n \n if (error instanceof TokenExpiredError) {\n this.log.info(\n `Token of comfort cloud client expired. Trying to login again. Code=${error.code}. Stack: ${error.stack}`\n )\n this.setState('info.connection', false, true);\n await this.comfortCloudClient.login(\n this.config.username,\n this.config.password\n )\n this.setState('info.connection', true, true);\n this.log.info('Login successful.')\n } else if (error instanceof ServiceError) {\n this.setState('info.connection', false, true);\n this.log.error(\n `Service error: ${error.message}. Code=${error.code}. Stack: ${error.stack}`\n )\n } else if (error instanceof Error){\n this.log.error(`Unknown error: ${error}. Stack: ${error.stack}`)\n }\n }\n\n private setupRefreshTimeout(): void {\n this.log.debug('setupRefreshTimeout')\n const refreshIntervalInMilliseconds = this.refreshIntervalInMinutes * 60 * 1000\n this.log.debug(`refreshIntervalInMilliseconds=${refreshIntervalInMilliseconds}`)\n this.refreshTimeout = setTimeout(this.refreshTimeoutFunc.bind(this), refreshIntervalInMilliseconds);\n }\n\n private async refreshTimeoutFunc(): Promise<void> {\n this.log.debug(`refreshTimeoutFunc started.`)\n try {\n await this.refreshDevices()\n this.setupRefreshTimeout()\n } catch (error) {\n await this.handleClientError(error)\n }\n \n }\n\n private trimAll(text: string): string {\n const newText = text.trim().replace(/(\\r\\n|\\n|\\r)/gm, '');\n return newText\n }\n}\n\nif (module.parent) {\n // Export the constructor in compact mode\n module.exports = (options: Partial<utils.AdapterOptions> | undefined) =>\n new PanasonicComfortCloud(options)\n} else {\n // otherwise start the instance directly\n (() => new PanasonicComfortCloud())()\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAMA,YAAuB;AAEvB,4CAeO;AAEP,QAAmB;AACnB,mBAAkB;AAElB,MAAM,sCAAsC;AAE5C,MAAM,8BAA8B,MAAM,QAAQ;AAAA,EASvC,YAAY,UAAyC,CAAC,GAAG;AAC5D,UAAM;AAAA,MACF,GAAG;AAAA,MACH,MAAM;AAAA,IACV,CAAC;AAXL,SAAQ,qBAAyC,IAAI,yDAAmB;AAGxE,SAAQ,2BAA2B;AAEnC,SAAQ,qBAA+B,CAAC;AAQpC,SAAK,GAAG,SAAS,KAAK,QAAQ,KAAK,IAAI,CAAC;AACxC,SAAK,GAAG,gBAAgB,KAAK,eAAe,KAAK,IAAI,CAAC;AACtD,SAAK,GAAG,eAAe,KAAK,cAAc,KAAK,IAAI,CAAC;AAEpD,SAAK,GAAG,UAAU,KAAK,SAAS,KAAK,IAAI,CAAC;AAAA,EAC9C;AAAA,EAKA,MAAc,UAAyB;AAvD3C;AAwDQ,SAAK,4BAA2B,gBAAK,WAAL,mBAAa,oBAAb,YAAgC;AAChE,SAAK,gBAAgB,GAAG;AAExB,SAAK,SAAS,mBAAmB,OAAO,IAAI;AAE5C,UAAM,mBAAmB,MAAM,KAAK,qBAAqB;AACzD,SAAK,IAAI,KAAK,mCAAmC,kBAAkB;AACnE,QAAG,oBAAoB,KAAK,SAAQ,UAAK,WAAL,mBAAa,oBAAoB,KAAK,KAAK,QAAQ,gBAAgB,GAAG;AACtG,WAAK,aAAa,EAAE,sBAAsB,KAAK,QAAQ,gBAAgB,GAAG,UAAU,KAAK,SAAQ,UAAK,WAAL,mBAAa,QAAQ,EAAE,CAAC;AACzH;AAAA,IACJ;AAEA,QAAG,GAAC,UAAK,WAAL,mBAAa,aAAY,GAAC,UAAK,WAAL,mBAAa,WAAU;AACjD,WAAK,IAAI,MAAM,iEAAiE;AAAA,IACpF,OAAO;AACH,YAAG,UAAK,WAAL,mBAAa,yBAAwB,QAAM,UAAK,WAAL,mBAAa,0BAC3D;AACI,aAAK,IAAI,MAAM,+BAA8B,UAAK,WAAL,mBAAa,uBAAuB;AACjF,aAAK,qBAAqB,IAAI,0DAAmB,UAAK,WAAL,mBAAa,oBAAoB;AAAA,MACtF,aACQ,UAAK,WAAL,mBAAa,eAAc,IACnC;AACI,aAAK,IAAI,MAAM,8BAA6B,UAAK,WAAL,mBAAa,aAAa;AACtE,aAAK,qBAAqB,IAAI,0DAAmB,UAAK,WAAL,mBAAa,UAAU;AAAA,MAC5E,OAEA;AACI,aAAK,IAAI,MAAM,yBAAyB;AACxC,aAAK,qBAAqB,IAAI,yDAAmB;AAAA,MACrD;AAEA,UAAI;AACA,aAAK,IAAI,MAAM,8BAA8B,KAAK,OAAO,WAAW;AACpE,cAAM,KAAK,mBAAmB;AAAA,UAC1B,KAAK,OAAO;AAAA,UACZ,KAAK,OAAO;AAAA,QAChB;AACA,aAAK,IAAI,KAAK,mBAAmB;AACjC,aAAK,SAAS,mBAAmB,MAAM,IAAI;AAC3C,aAAK,IAAI,MAAM,iBAAiB;AAChC,cAAM,SAAS,MAAM,KAAK,mBAAmB,UAAU;AACvD,cAAM,KAAK,cAAc,MAAM;AAE/B,aAAK,oBAAoB;AAAA,MAC7B,SAAS,OAAP;AACE,cAAM,KAAK,kBAAkB,KAAK;AAAA,MACtC;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,MAAc,oBAAoB,QAA+B;AAC7D,SAAK,IAAI,MAAM,kBAAkB,OAAO,SAAS,OAAO,QAAQ;AAChE,SAAK,IAAI,MAAM,GAAG,OAAO,iBAAiB,OAAO,OAAO;AAExD,SAAK,IAAI,MAAM,GAAG,OAAO,oBAAoB,OAAO,UAAU;AAC9D,UAAM,KAAK;AAAA,MACP,GAAG,OAAO;AAAA,MACV,OAAO;AAAA,MACP;AAAA,IACJ;AACA,SAAK,IAAI,MAAM,GAAG,OAAO,2BAA2B,OAAO,iBAAiB;AAC5E,UAAM,KAAK;AAAA,MACP,GAAG,OAAO;AAAA,MACV,OAAO;AAAA,MACP;AAAA,IACJ;AACA,SAAK,IAAI,MAAM,GAAG,OAAO,8BAA8B,OAAO,oBAAoB;AAClF,UAAM,KAAK;AAAA,MACP,GAAG,OAAO;AAAA,MACV,OAAO;AAAA,MACP;AAAA,IACJ;AACA,SAAK,IAAI,MAAM,GAAG,OAAO,2BAA2B,OAAO,iBAAiB;AAC5E,UAAM,KAAK;AAAA,MACP,GAAG,OAAO;AAAA,MACV,OAAO;AAAA,MACP;AAAA,IACJ;AACA,SAAK,IAAI,MAAM,GAAG,OAAO,uBAAuB,OAAO,aAAa;AACpE,UAAM,KAAK;AAAA,MACP,GAAG,OAAO;AAAA,MACV,OAAO;AAAA,MACP;AAAA,IACJ;AACA,SAAK,IAAI,MAAM,GAAG,OAAO,uBAAuB,OAAO,aAAa;AACpE,UAAM,KAAK;AAAA,MACP,GAAG,OAAO;AAAA,MACV,OAAO;AAAA,MACP;AAAA,IACJ;AACA,SAAK,IAAI,MAAM,GAAG,OAAO,wBAAwB,OAAO,cAAc;AACtE,UAAM,KAAK;AAAA,MACP,GAAG,OAAO;AAAA,MACV,OAAO;AAAA,MACP;AAAA,IACJ;AACA,SAAK,IAAI,MAAM,GAAG,OAAO,oBAAoB,OAAO,UAAU;AAC9D,UAAM,KAAK;AAAA,MACP,GAAG,OAAO;AAAA,MACV,OAAO;AAAA,MACP;AAAA,IACJ;AACA,SAAK,IAAI,MAAM,GAAG,OAAO,0BAA0B,OAAO,gBAAgB;AAC1E,UAAM,KAAK;AAAA,MACP,GAAG,OAAO;AAAA,MACV,OAAO;AAAA,MACP;AAAA,IACJ;AACA,SAAK,IAAI,MAAM,GAAG,OAAO,qBAAqB,OAAO,WAAW;AAChE,UAAM,KAAK;AAAA,MACP,GAAG,OAAO;AAAA,MACV,OAAO;AAAA,MACP;AAAA,IACJ;AACA,SAAK,IAAI,MAAM,GAAG,OAAO,wBAAwB,OAAO,cAAc;AACtE,UAAM,KAAK;AAAA,MACP,GAAG,OAAO;AAAA,MACV,OAAO;AAAA,MACP;AAAA,IACJ;AACA,SAAK,IAAI,MAAM,kBAAkB,OAAO,gBAAgB;AAAA,EAC5D;AAAA,EAEA,MAAc,cAAc,MAAc,YAAmC;AACzE,QAAI;AACA,YAAM,SAAS,MAAM,KAAK,mBAAmB,UAAU,MAAM,UAAU;AACvE,UAAI,CAAC,QAAQ;AACT;AAAA,MACJ;AACA,UAAI,CAAC,OAAO,MAAM;AACd,eAAO,OAAO;AAAA,MAClB;AACA,YAAM,KAAK,oBAAoB,MAAM;AAAA,IACzC,SAAS,OAAP;AACE,YAAM,KAAK,kBAAkB,KAAK;AAAA,IACtC;AAAA,EACJ;AAAA,EAEA,MAAc,iBAAgC;AAC1C,QAAI;AACA,WAAK,IAAI,MAAM,sBAAsB;AACrC,YAAM,SAAS,MAAM,KAAK,mBAAmB,UAAU;AACvD,WAAK,SAAS,mBAAmB,MAAM,IAAI;AAC3C,YAAM,UAAU,EAAE,QAAQ,QAAQ,OAAK,EAAE,OAAO;AAChD,YAAM,cAAc,EAAE,IAAI,SAAS,OAAK;AAAE,eAAM,EAAC,MAAM,EAAE,MAAM,MAAM,EAAE,KAAI;AAAA,MAAC,CAAC;AAC7E,YAAM,QAAQ,IAAI,YAAY,IAAI,OAAO,eAAe;AACpD,cAAM,SAAS,MAAM,KAAK,mBAAmB,UAAU,WAAW,MAAM,WAAW,IAAI;AACvF,YAAG,UAAU,MAAM;AACf,iBAAO,OAAO,WAAW;AACzB,iBAAO,OAAO,WAAW;AACzB,gBAAM,KAAK,oBAAoB,MAAM;AAAA,QACzC;AAAA,MACJ,CAAC,CAAC;AAAA,IACN,SAAS,OAAP;AACE,YAAM,KAAK,kBAAkB,KAAK;AAAA,IACtC;AAAA,EACJ;AAAA,EAEA,MAAc,cAAc,QAAqC;AAC7D,UAAM,UAAU,MAAM,KAAK,gBAAgB;AAC3C,UAAM,QAAQ,EAAE,IAAI,SAAS,CAAC,UAAU;AACpC,aAAO,MAAM,OAAO;AAAA,IACxB,CAAC;AACD,UAAM,qBAAqB,EAAE,QAAQ,QAAQ,OAAK,EAAE,OAAO;AAC3D,UAAM,cAAc,EAAE,IAAI,oBAAoB,OAAK;AAAE,aAAO,EAAC,MAAM,EAAE,MAAM,MAAM,EAAE,KAAI;AAAA,IAAC,CAAC;AACzF,UAAM,QAAQ,IAAI,YAAY,IAAI,OAAO,eAAe;AACpD,WAAK,IAAI,MAAM,0BAA0B,WAAW,SAAS,WAAW,OAAO;AAC/E,UAAI,SAAwB;AAC5B,UAAI;AACA,iBAAS,MAAM,KAAK,mBAAmB,UAAU,WAAW,MAAM,WAAW,IAAI;AAAA,MACrF,SAAQ,OAAN;AACE,cAAM,KAAK,kBAAkB,KAAK;AAAA,MACtC;AAEA,UAAG,UAAU,MAAM;AACf,YAAI,EAAE,SAAS,OAAO,WAAW,IAAI,GAAG;AACpC;AAAA,QACJ;AACA,aAAK,aAAa,WAAW,IAAI;AACjC,aAAK;AAAA,UACD,WAAW;AAAA,UACX;AAAA,UACA;AAAA,UACA,EAAE,MAAM,gBAAgB,OAAO,OAAO,KAAK,WAAW,MAAM,MAAM,SAAS;AAAA,UAC3E;AAAA,QACJ;AACA,aAAK,mBAAmB,KAAK,MAAM;AAEnC,aAAK;AAAA,UACD,WAAW;AAAA,UACX;AAAA,UACA;AAAA,UACA;AAAA,YACI,MAAM;AAAA,YACN,QAAQ,EAAE,GAAG,4CAAM,IAAI,GAAG,4CAAM,GAAG;AAAA,YACnC,OAAO;AAAA,YACP,KAAK,OAAO;AAAA,YACZ,MAAM;AAAA,UACV;AAAA,UACA;AAAA,QACJ;AACA,aAAK;AAAA,UACD,WAAW;AAAA,UACX;AAAA,UACA;AAAA,UACA;AAAA,YACI,MAAM;AAAA,YACN,OAAO;AAAA,YACP,KAAK,OAAO;AAAA,YACZ,MAAM;AAAA,UACV;AAAA,UACA;AAAA,QACJ;AACA,aAAK;AAAA,UACD,WAAW;AAAA,UACX;AAAA,UACA;AAAA,UACA;AAAA,YACI,MAAM;AAAA,YACN,OAAO;AAAA,YACP,KAAK,OAAO;AAAA,YACZ,MAAM;AAAA,UACV;AAAA,UACA;AAAA,QACJ;AACA,aAAK,mBAAmB,KAAK,mBAAmB;AAEhD,aAAK;AAAA,UACD,WAAW;AAAA,UACX;AAAA,UACA;AAAA,UACA;AAAA,YACI,MAAM;AAAA,YACN,OAAO;AAAA,YACP,KAAK,OAAO;AAAA,YACZ,MAAM;AAAA,UACV;AAAA,UACA;AAAA,QACJ;AACA,aAAK,mBAAmB,KAAK,gBAAgB;AAE7C,aAAK;AAAA,UACD,WAAW;AAAA,UACX;AAAA,UACA;AAAA,UACA;AAAA,YACI,MAAM;AAAA,YACN,QAAQ;AAAA,cACJ,GAAG,iDAAW;AAAA,cACd,GAAG,iDAAW;AAAA,cACd,GAAG,iDAAW;AAAA,cACd,GAAG,iDAAW;AAAA,cACd,GAAG,iDAAW;AAAA,YAClB;AAAA,YACA,OAAO;AAAA,YACP,KAAK,OAAO;AAAA,YACZ,MAAM;AAAA,UACV;AAAA,UACA;AAAA,QACJ;AACA,aAAK;AAAA,UACD,WAAW;AAAA,UACX;AAAA,UACA;AAAA,UACA;AAAA,YACI,MAAM;AAAA,YACN,QAAQ;AAAA,cACJ,GAAG,iDAAW;AAAA,cACd,GAAG,iDAAW;AAAA,cACd,GAAG,iDAAW;AAAA,cACd,GAAG,iDAAW;AAAA,cACd,GAAG,iDAAW;AAAA,YAClB;AAAA,YACA,OAAO;AAAA,YACP,KAAK,OAAO;AAAA,YACZ,MAAM;AAAA,UACV;AAAA,UACA;AAAA,QACJ;AACA,aAAK;AAAA,UACD,WAAW;AAAA,UACX;AAAA,UACA;AAAA,UACA;AAAA,YACI,MAAM;AAAA,YACN,QAAQ;AAAA,cACJ,GAAG,kDAAY;AAAA,cACf,GAAG,kDAAY;AAAA,cACf,GAAG,kDAAY;AAAA,cACf,GAAG,kDAAY;AAAA,YACnB;AAAA,YACA,OAAO;AAAA,YACP,KAAK,OAAO;AAAA,YACZ,MAAM;AAAA,UACV;AAAA,UACA;AAAA,QACJ;AACA,aAAK;AAAA,UACD,WAAW;AAAA,UACX;AAAA,UACA;AAAA,UACA;AAAA,YACI,MAAM;AAAA,YACN,QAAQ,EAAE,GAAG,8CAAQ,IAAI,GAAG,8CAAQ,IAAI,GAAG,8CAAQ,GAAG;AAAA,YACtD,OAAO;AAAA,YACP,KAAK,OAAO;AAAA,YACZ,MAAM;AAAA,UACV;AAAA,UACA;AAAA,QACJ;AACA,aAAK;AAAA,UACD,WAAW;AAAA,UACX;AAAA,UACA;AAAA,UACA;AAAA,YACI,MAAM;AAAA,YACN,QAAQ;AAAA,cACJ,GAAG,oDAAc;AAAA,cACjB,GAAG,oDAAc;AAAA,cACjB,GAAG,oDAAc;AAAA,cACjB,GAAG,oDAAc;AAAA,cACjB,GAAG,oDAAc;AAAA,YACrB;AAAA,YACA,OAAO;AAAA,YACP,KAAK,OAAO;AAAA,YACZ,MAAM;AAAA,UACV;AAAA,UACA;AAAA,QACJ;AACA,aAAK;AAAA,UACD,WAAW;AAAA,UACX;AAAA,UACA;AAAA,UACA;AAAA,YACI,MAAM;AAAA,YACN,QAAQ;AAAA,cACJ,GAAG,+CAAS;AAAA,cACZ,GAAG,+CAAS;AAAA,cACZ,GAAG,+CAAS;AAAA,cACZ,GAAG,+CAAS;AAAA,cACZ,GAAG,+CAAS;AAAA,cACZ,GAAG,+CAAS;AAAA,YAChB;AAAA,YACA,OAAO;AAAA,YACP,KAAK,OAAO;AAAA,YACZ,MAAM;AAAA,UACV;AAAA,UACA;AAAA,QACJ;AACA,aAAK;AAAA,UACD,WAAW;AAAA,UACX;AAAA,UACA;AAAA,UACA;AAAA,YACI,MAAM;AAAA,YACN,QAAQ;AAAA,cACJ,GAAG,gDAAU;AAAA,cACb,GAAG,gDAAU;AAAA,cACb,GAAG,gDAAU;AAAA,cACb,GAAG,gDAAU;AAAA,cACb,GAAG,gDAAU;AAAA,YACjB;AAAA,YACA,OAAO;AAAA,YACP,KAAK,OAAO;AAAA,YACZ,MAAM;AAAA,UACV;AAAA,UACA;AAAA,QACJ;AAEA,aAAK,IAAI,KAAK,UAAU,WAAW,eAAe;AAAA,MACtD;AAAA,IACJ,CAAC,CAAC;AACF,SAAK,IAAI,MAAM,4BAA4B;AAAA,EAC/C;AAAA,EAEA,MAAc,aACV,YACA,WACA,OACa;AACb,QAAG,KAAK,mBAAmB,SAAS,SAAS,GAAG;AAC5C;AAAA,IACJ;AACA,QAAI,CAAC,MAAM,KAAK;AACZ,YAAM,WAAW,MAAM,KAAK,eAAe,GAAG,cAAc,WAAW;AACvE,YAAM,cAAc,qCAAU;AAC9B,WAAG,2CAAa,UAAS,OAAO;AAC5B;AAAA,MACJ;AAEA,YAAM,YAAY,MAAM,KAAK,cAAc,GAAG,iBAAiB;AAE/D,WAAK,IAAI;AAAA,QACL,sBAAsB,uCAAW,aAAa;AAAA,MAClD;AACA,YAAM,aAAyB,CAAC;AAChC,iBAAW,aAAa,MAAM;AAC9B,UAAI,EAAC,uCAAW,MAAK;AACjB;AAAA,MACJ;AACA,UAAI;AACA,aAAK,IAAI,MAAM,wBAAwB,KAAK,UAAU,UAAU,gBAAgB,uCAAW,KAAK;AAChG,cAAM,KAAK,mBAAmB;AAAA,UAC1B,uCAAW;AAAA,UACX;AAAA,QACJ;AACA,aAAK,IAAI,MAAM,kBAAkB,YAAY;AAC7C,cAAM,KAAK,cAAc,uCAAW,KAAe,UAAU;AAAA,MACjE,SAAS,OAAP;AACE,cAAM,KAAK,kBAAkB,KAAK;AAAA,MACtC;AAAA,IACJ;AAAA,EACJ;AAAA,EAKQ,SAAS,UAA4B;AACzC,QAAI;AACA,UAAG,KAAK;AACJ,qBAAa,KAAK,cAAc;AAEpC,WAAK,IAAI,KAAK,0BAA0B;AACxC,eAAS;AAAA,IACb,SAAS,GAAP;AACE,eAAS;AAAA,IACb;AAAA,EACJ;AAAA,EAKQ,eACJ,IACA,KACI;AACJ,QAAI,KAAK;AAEL,WAAK,IAAI,KAAK,UAAU,eAAe,KAAK,UAAU,GAAG,GAAG;AAAA,IAChE,OAAO;AAEH,WAAK,IAAI,KAAK,UAAU,YAAY;AAAA,IACxC;AAAA,EACJ;AAAA,EAKA,MAAc,cACV,IACA,OACa;AACb,QAAI,OAAO;AACP,YAAM,WAAW,GAAG,MAAM,GAAG;AAC7B,YAAM,aAAa,SAAS,SAAS,SAAS;AAC9C,YAAM,YAAY,SAAS,SAAS,SAAS;AAC7C,UAAI;AACA,cAAM,KAAK,aAAa,YAAY,WAAW,KAAK;AAAA,MACxD,SAAS,OAAP;AACE,cAAM,KAAK,kBAAkB,KAAK;AAAA,MACtC;AAGA,WAAK,IAAI;AAAA,QACL,SAAS,eAAe,MAAM,cAAc,MAAM;AAAA,MACtD;AAAA,IACJ,OAAO;AAEH,WAAK,IAAI,KAAK,SAAS,YAAY;AAAA,IACvC;AAAA,EACJ;AAAA,EAEA,MAAc,uBAAyC;AACnD,UAAM,WAAW,MAAM,aAAAA,QAAM,IAAI,uGAAuG;AACxI,QAAG,SAAS,WAAW;AACnB,aAAO;AACX,UAAM,OAAO,MAAM,SAAS;AAC5B,WAAO;AAAA,EACX;AAAA,EAEA,MAAc,kBAAkB,OAA+B;AAC3D,SAAK,IAAI,MAAM,sBAAsB;AAErC,QAAI,iBAAiB,yDAAmB;AACpC,WAAK,IAAI;AAAA,QACL,sEAAsE,MAAM,gBAAgB,MAAM;AAAA,MACtG;AACA,WAAK,SAAS,mBAAmB,OAAO,IAAI;AAC5C,YAAM,KAAK,mBAAmB;AAAA,QAC1B,KAAK,OAAO;AAAA,QACZ,KAAK,OAAO;AAAA,MAChB;AACA,WAAK,SAAS,mBAAmB,MAAM,IAAI;AAC3C,WAAK,IAAI,KAAK,mBAAmB;AAAA,IACrC,WAAW,iBAAiB,oDAAc;AACtC,WAAK,SAAS,mBAAmB,OAAO,IAAI;AAC5C,WAAK,IAAI;AAAA,QACL,kBAAkB,MAAM,iBAAiB,MAAM,gBAAgB,MAAM;AAAA,MACzE;AAAA,IACJ,WAAW,iBAAiB,OAAM;AAC9B,WAAK,IAAI,MAAM,kBAAkB,iBAAiB,MAAM,OAAO;AAAA,IACnE;AAAA,EACJ;AAAA,EAEQ,sBAA4B;AAChC,SAAK,IAAI,MAAM,qBAAqB;AACpC,UAAM,gCAAgC,KAAK,2BAA2B,KAAK;AAC3E,SAAK,IAAI,MAAM,iCAAiC,+BAA+B;AAC/E,SAAK,iBAAiB,WAAW,KAAK,mBAAmB,KAAK,IAAI,GAAG,6BAA6B;AAAA,EACtG;AAAA,EAEA,MAAc,qBAAoC;AAC9C,SAAK,IAAI,MAAM,6BAA6B;AAC5C,QAAI;AACA,YAAM,KAAK,eAAe;AAC1B,WAAK,oBAAoB;AAAA,IAC7B,SAAS,OAAP;AACE,YAAM,KAAK,kBAAkB,KAAK;AAAA,IACtC;AAAA,EAEJ;AAAA,EAEQ,QAAQ,MAAsB;AAClC,UAAM,UAAU,KAAK,KAAK,EAAE,QAAQ,kBAAkB,EAAE;AACxD,WAAO;AAAA,EACX;AACJ;AAEA,IAAI,OAAO,QAAQ;AAEf,SAAO,UAAU,CAAC,YACd,IAAI,sBAAsB,OAAO;AACzC,OAAO;AAEH,GAAC,MAAM,IAAI,sBAAsB,GAAG;AACxC;",
|
|
6
6
|
"names": ["axios"]
|
|
7
7
|
}
|
package/io-package.json
CHANGED
|
@@ -1,249 +1,197 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
"2.0.3": {
|
|
98
|
-
"en": "panasonic-comfort-cloud-client updated to new version. (appVersion changed again)",
|
|
99
|
-
"de": "panasonic-comfort-cloud-client auf die neue Version aktualisiert. (appVersion wurde wieder geändert)",
|
|
100
|
-
"ru": "Panasonic-comfort-cloud-client обновлен до новой версии. (версия приложения снова изменилась)",
|
|
101
|
-
"pt": "panasonic-comfort-cloud-client atualizado para a nova versão. (appVersion alterado novamente)",
|
|
102
|
-
"nl": "panasonic-comfort-cloud-client bijgewerkt naar nieuwe versie. (appVersie opnieuw gewijzigd)",
|
|
103
|
-
"fr": "panasonic-comfort-cloud-client mis à jour vers la nouvelle version. (appVersion changé à nouveau)",
|
|
104
|
-
"it": "panasonic-comfort-cloud-client aggiornato alla nuova versione. (appVersion cambiata di nuovo)",
|
|
105
|
-
"es": "panasonic-comfort-cloud-client actualizado a la nueva versión. (appVersion cambió de nuevo)",
|
|
106
|
-
"pl": "panasonic-comfort-cloud-client zaktualizowany do nowej wersji. (ponowna zmiana wersji aplikacji)",
|
|
107
|
-
"zh-cn": "panasonic-comfort-cloud-client 更新到新版本。 (appVersion又变了)",
|
|
108
|
-
"uk": "panasonic-comfort-cloud-client оновлено до нової версії. (AppVersion знову змінено)"
|
|
109
|
-
},
|
|
110
|
-
"2.0.2": {
|
|
111
|
-
"en": "panasonic-comfort-cloud-client updated to new version.",
|
|
112
|
-
"de": "panasonic-comfort-cloud-client auf die neue Version aktualisiert.",
|
|
113
|
-
"ru": "Panasonic-comfort-cloud-client обновлен до новой версии.",
|
|
114
|
-
"pt": "panasonic-comfort-cloud-client atualizado para a nova versão.",
|
|
115
|
-
"nl": "panasonic-comfort-cloud-client bijgewerkt naar nieuwe versie.",
|
|
116
|
-
"fr": "panasonic-comfort-cloud-client mis à jour vers la nouvelle version.",
|
|
117
|
-
"it": "panasonic-comfort-cloud-client aggiornato alla nuova versione.",
|
|
118
|
-
"es": "panasonic-comfort-cloud-client actualizado a la nueva versión.",
|
|
119
|
-
"pl": "panasonic-comfort-cloud-client zaktualizowany do nowej wersji.",
|
|
120
|
-
"zh-cn": "panasonic-comfort-cloud-client 更新到新版本。",
|
|
121
|
-
"uk": "panasonic-comfort-cloud-client оновлено до нової версії."
|
|
122
|
-
},
|
|
123
|
-
"2.0.1": {
|
|
124
|
-
"en": "Changed the type of some states from string to number.",
|
|
125
|
-
"de": "Den Typ von einigen States von string zu number geändert.",
|
|
126
|
-
"ru": "Изменен тип некоторых состояний со строки на число.",
|
|
127
|
-
"pt": "Alterado o tipo de alguns estados de string para número.",
|
|
128
|
-
"nl": "Het type van sommige toestanden gewijzigd van tekenreeks in nummer.",
|
|
129
|
-
"fr": "Changement du type de certains états de chaîne en nombre.",
|
|
130
|
-
"it": "Modificato il tipo di alcuni stati da stringa a numero.",
|
|
131
|
-
"es": "Cambió el tipo de algunos estados de cadena a número.",
|
|
132
|
-
"pl": "Zmieniono typ niektórych stanów z ciągu na numer.",
|
|
133
|
-
"zh-cn": "将某些状态的类型从字符串更改为数字。",
|
|
134
|
-
"uk": "Змінено тип деяких станів з рядка на число."
|
|
135
|
-
},
|
|
136
|
-
"2.0.0": {
|
|
137
|
-
"en": "Added js-controller 3 dependency.\nAdded username and password to protectedNative and password to encryptedNative.\nAdded connection info.\nChanged schdule to timeout for refresh.\nFixes for async await pattern.",
|
|
138
|
-
"de": "js-controller 3 als Abhängigkeit eingefügt.\nusername und password zu protectedNative und password zu encryptedNative hinzugefügt.\nconnection info als Status eingefügt.\nSchudle durch timeout für die Geräteaktualisierung erstezt.\nAsync und await überall korrekt berücksichtig.",
|
|
139
|
-
"ru": "Добавлена зависимость js-controller 3.\nДобавлены имя пользователя и пароль для protectedNative и пароль для protectedNative.\nДобавлена информация о подключении.\nИзменено расписание на тайм-аут для обновления.\nИсправления для асинхронного шаблона ожидания.",
|
|
140
|
-
"pt": "Adicionada dependência do js-controller 3.\nAdicionado nome de usuário e senha para protectedNative e senha paracryptedNative.\nAdicionadas informações de conexão.\nAlterado o schdule para o tempo limite para atualização.\nCorreções para o padrão de espera assíncrono.",
|
|
141
|
-
"nl": "Js-controller 3 afhankelijkheid toegevoegd.\nGebruikersnaam en wachtwoord toegevoegd aan protectedNative en wachtwoord aan versleuteldNative.\nVerbindingsinformatie toegevoegd.\nSchema gewijzigd in time-out voor vernieuwen.\nOplossingen voor async wachten op patroon.",
|
|
142
|
-
"fr": "Ajout de la dépendance js-controller 3.\nNom d'utilisateur et mot de passe ajoutés à protectedNative et mot de passe à protectedNative.\nAjout d'informations de connexion.\nModification de la planification du délai d'attente pour l'actualisation.\nCorrectifs pour le modèle d'attente asynchrone.",
|
|
143
|
-
"it": "Aggiunta la dipendenza js-controller 3.\nAggiunti nome utente e password a protectedNative e password acryptNative.\nAggiunte informazioni di connessione.\nProgrammazione modificata in timeout per l'aggiornamento.\nCorrezioni per il modello di attesa asincrono.",
|
|
144
|
-
"es": "Se agregó la dependencia js-controller 3.\nSe agregaron nombre de usuario y contraseña a protectedNative y contraseña a encryptedNative.\nSe agregó información de conexión.\nSe cambió la programación a tiempo de espera para actualizar.\nCorrecciones para el patrón de espera asíncrono.",
|
|
145
|
-
"pl": "Dodano zależność js-controller 3.\nDodano nazwę użytkownika i hasło do protectedNative i hasło do protectedNative.\nDodano informacje o połączeniu.\nZmieniono harmonogram na limit czasu na odświeżenie.\nPoprawki dla wzorca asynchronicznego oczekiwania.",
|
|
146
|
-
"zh-cn": "添加了 js-controller 3 依赖项。\n在 protectedNative 中添加了用户名和密码,在 encryptedNative 中添加了密码。\n添加了连接信息。\n将 schdule 更改为超时以进行刷新。\n修复了异步等待模式。",
|
|
147
|
-
"uk": "Додано залежність js-controller 3.\nДодано ім’я користувача та пароль до protectedNative та пароль до encryptedNative.\nДодана інформація про підключення.\nРозклад змінено на час очікування для оновлення.\nВиправлення асинхронного шаблону очікування."
|
|
148
|
-
}
|
|
149
|
-
},
|
|
150
|
-
"titleLang": {
|
|
151
|
-
"en": "Panasonic Comfort Cloud",
|
|
152
|
-
"de": "Panasonic Comfort Cloud",
|
|
153
|
-
"ru": "Panasonic Comfort Cloud",
|
|
154
|
-
"pt": "Panasonic Comfort Cloud",
|
|
155
|
-
"nl": "Panasonic Comfort Cloud",
|
|
156
|
-
"fr": "Panasonic Comfort Cloud",
|
|
157
|
-
"it": "Panasonic Comfort Cloud",
|
|
158
|
-
"es": "Panasonic Comfort Cloud",
|
|
159
|
-
"pl": "Panasonic Comfort Cloud",
|
|
160
|
-
"zh-cn": "松下舒适云",
|
|
161
|
-
"uk": "Panasonic Comfort Cloud"
|
|
162
|
-
},
|
|
163
|
-
"desc": {
|
|
164
|
-
"en": "Adapter for Panasonic Comfort Cloud",
|
|
165
|
-
"de": "Adapter für Panasonic Comfort Cloud",
|
|
166
|
-
"ru": "Адаптер для Panasonic Comfort Cloud",
|
|
167
|
-
"pt": "Adaptador para Panasonic Comfort Cloud",
|
|
168
|
-
"nl": "Adapter voor Panasonic Comfort Cloud",
|
|
169
|
-
"fr": "Adaptateur pour Panasonic Comfort Cloud",
|
|
170
|
-
"it": "Adattatore per Panasonic Comfort Cloud",
|
|
171
|
-
"es": "Adaptador para Panasonic Comfort Cloud",
|
|
172
|
-
"pl": "Adapter do chmury Panasonic Comfort Cloud",
|
|
173
|
-
"zh-cn": "松下舒适云适配器",
|
|
174
|
-
"uk": "Адаптер для Panasonic Comfort Cloud"
|
|
175
|
-
},
|
|
176
|
-
"authors": [
|
|
177
|
-
"marc <marc@lammers.dev>"
|
|
178
|
-
],
|
|
179
|
-
"keywords": [
|
|
180
|
-
"air condition"
|
|
181
|
-
],
|
|
182
|
-
"license": "MIT",
|
|
183
|
-
"platform": "Javascript/Node.js",
|
|
184
|
-
"connectionType": "cloud",
|
|
185
|
-
"dataSource": "poll",
|
|
186
|
-
"main": "build/main.js",
|
|
187
|
-
"icon": "panasonic-comfort-cloud.png",
|
|
188
|
-
"enabled": true,
|
|
189
|
-
"extIcon": "https://raw.githubusercontent.com/marc2016/ioBroker.panasonic-comfort-cloud/master/admin/panasonic-comfort-cloud.png",
|
|
190
|
-
"readme": "https://github.com/marc2016/ioBroker.panasonic-comfort-cloud/blob/master/README.md",
|
|
191
|
-
"loglevel": "info",
|
|
192
|
-
"mode": "daemon",
|
|
193
|
-
"type": "climate-control",
|
|
194
|
-
"compact": true,
|
|
195
|
-
"materialize": true,
|
|
196
|
-
"adminUI": {
|
|
197
|
-
"config": "materialize"
|
|
198
|
-
},
|
|
199
|
-
"dependencies": [
|
|
200
|
-
{
|
|
201
|
-
"js-controller": ">=3.3.22"
|
|
202
|
-
}
|
|
203
|
-
],
|
|
204
|
-
"globalDependencies": [
|
|
205
|
-
{
|
|
206
|
-
"admin": ">=5.0.0"
|
|
207
|
-
}
|
|
208
|
-
]
|
|
2
|
+
"common": {
|
|
3
|
+
"name": "panasonic-comfort-cloud",
|
|
4
|
+
"version": "2.2.4",
|
|
5
|
+
"news": {
|
|
6
|
+
"2.2.4": {
|
|
7
|
+
"en": "Fixed load AppVersion from Github.",
|
|
8
|
+
"de": "Behobene AppVersion von Github.",
|
|
9
|
+
"ru": "Фиксированная нагрузка AppVersion от Github.",
|
|
10
|
+
"pt": "AppVersion de carga fixa do Github.",
|
|
11
|
+
"nl": "Gerepareerde lading van Github.",
|
|
12
|
+
"fr": "Charge fixe AppVersion de Github.",
|
|
13
|
+
"it": "AppVersione di carico fisso da Github.",
|
|
14
|
+
"es": "Carga fija AppVersion de Github.",
|
|
15
|
+
"pl": "Wykorzystywany ładunek z Github.",
|
|
16
|
+
"uk": "Виправлено навантаження AppVersion від Github.",
|
|
17
|
+
"zh-cn": "来自吉特布的固定载荷。."
|
|
18
|
+
},
|
|
19
|
+
"2.2.3": {
|
|
20
|
+
"en": "Added support for admin 5 UI (jsonConfig).\nUpdated packages.\nFixed translation.",
|
|
21
|
+
"de": "Unterstützung für admin 5 UI (jsonConfig.).\nAktualisierte Pakete.\nBehobene Übersetzung.",
|
|
22
|
+
"ru": "Добавлена поддержка admin 5 UI (jsonConfig.).\nОбновленные пакеты.\nФиксированный перевод.",
|
|
23
|
+
"pt": "Adicionado suporte para admin 5 UI (jsonConfig.).\nPacotes atualizados.\nTradução fixa.",
|
|
24
|
+
"nl": "Aangepast voor administratie 5 UI (jsonConfig).\nVerouderde pakketten.\nVertaald.",
|
|
25
|
+
"fr": "Ajout du support pour admin 5 UI (jsonConfig.).\nDes paquets mis à jour.\nTraduction fixe.",
|
|
26
|
+
"it": "Aggiunto supporto per admin 5 UI (jsonConfig.).\nPacchetti aggiornati.\nTraduzione fissa.",
|
|
27
|
+
"es": "Apoyo añadido para admin 5 UI (jsonConfig.).\nPaquetes actualizados.\nTraducción fija.",
|
|
28
|
+
"pl": "Administrowane wsparcie dla admin 5 UI (jsonConfig).\nZmodernizowane pakiety.\nTłumaczenie.",
|
|
29
|
+
"uk": "Додано підтримку admin 5 UI (jsonConfig.).\nОновлені пакети.\nФіксований переклад.",
|
|
30
|
+
"zh-cn": "增援5 UI(json Config).\n最新一揽子计划。.\n固定翻译。."
|
|
31
|
+
},
|
|
32
|
+
"2.2.2": {
|
|
33
|
+
"en": "Fixed wrong versoin number.",
|
|
34
|
+
"de": "Falsche Versionsnummer behoben.",
|
|
35
|
+
"ru": "Исправлен неправильный номер версии.",
|
|
36
|
+
"pt": "Corrigido número de versoin errado.",
|
|
37
|
+
"nl": "Verkeerd versoin-nummer opgelost.",
|
|
38
|
+
"fr": "Correction d'un mauvais numéro de version.",
|
|
39
|
+
"it": "Risolto il numero di versoin errato.",
|
|
40
|
+
"es": "Se corrigió el número de verso incorrecto.",
|
|
41
|
+
"pl": "Naprawiono błędny numer wersji.",
|
|
42
|
+
"uk": "Виправлено неправильний номер versoin.",
|
|
43
|
+
"zh-cn": "修复了错误的版本号。"
|
|
44
|
+
},
|
|
45
|
+
"2.2.1": {
|
|
46
|
+
"en": "panasonic-comfort-cloud-client updated to new version. New headers added.",
|
|
47
|
+
"de": "Panasonic-Comfort-Cloud-Client auf neue Version aktualisiert. Neue Header hinzugefügt.",
|
|
48
|
+
"ru": "Panasonic-comfort-cloud-client обновлен до новой версии. Добавлены новые заголовки.",
|
|
49
|
+
"pt": "panasonic-comfort-cloud-client atualizado para a nova versão. Novos cabeçalhos adicionados.",
|
|
50
|
+
"nl": "panasonic-comfort-cloud-client bijgewerkt naar nieuwe versie. Nieuwe kopteksten toegevoegd.",
|
|
51
|
+
"fr": "panasonic-comfort-cloud-client mis à jour vers la nouvelle version. Nouveaux en-têtes ajoutés.",
|
|
52
|
+
"it": "panasonic-comfort-cloud-client aggiornato alla nuova versione. Aggiunte nuove intestazioni.",
|
|
53
|
+
"es": "panasonic-comfort-cloud-client actualizado a la nueva versión. Se agregaron nuevos encabezados.",
|
|
54
|
+
"pl": "panasonic-comfort-cloud-client zaktualizowany do nowej wersji. Dodano nowe nagłówki.",
|
|
55
|
+
"uk": "panasonic-comfort-cloud-client оновлено до нової версії. Додано нові заголовки.",
|
|
56
|
+
"zh-cn": "panasonic-comfort-cloud-client 更新至新版本。添加了新标题。"
|
|
57
|
+
},
|
|
58
|
+
"2.2.0": {
|
|
59
|
+
"en": "Added feature to automatically load the app version from GitHub.",
|
|
60
|
+
"de": "Funktion hinzugefügt, um die App-Version automatisch von GitHub zu laden.",
|
|
61
|
+
"ru": "Добавлена функция автоматической загрузки версии приложения с GitHub.",
|
|
62
|
+
"pt": "Adicionado recurso para carregar automaticamente a versão do aplicativo do GitHub.",
|
|
63
|
+
"nl": "Functie toegevoegd om de app-versie automatisch te laden vanuit GitHub.",
|
|
64
|
+
"fr": "Ajout d'une fonctionnalité pour charger automatiquement la version de l'application à partir de GitHub.",
|
|
65
|
+
"it": "Aggiunta funzionalità per caricare automaticamente la versione dell'app da GitHub.",
|
|
66
|
+
"es": "Función agregada para cargar automáticamente la versión de la aplicación desde GitHub.",
|
|
67
|
+
"pl": "Dodano funkcję automatycznego ładowania wersji aplikacji z GitHub.",
|
|
68
|
+
"uk": "Додано функцію автоматичного завантаження версії програми з GitHub.",
|
|
69
|
+
"zh-cn": "添加了自动从 GitHub 加载应用程序版本的功能。"
|
|
70
|
+
},
|
|
71
|
+
"2.1.0": {
|
|
72
|
+
"en": "Added app version to settings.",
|
|
73
|
+
"de": "App-Version zu den Einstellungen hinzugefügt.",
|
|
74
|
+
"ru": "В настройки добавлена версия приложения.",
|
|
75
|
+
"pt": "Versão do aplicativo adicionada às configurações.",
|
|
76
|
+
"nl": "App-versie toegevoegd aan instellingen.",
|
|
77
|
+
"fr": "Ajout de la version de l'application aux paramètres.",
|
|
78
|
+
"it": "Aggiunta la versione dell'app alle impostazioni.",
|
|
79
|
+
"es": "Se agregó la versión de la aplicación a la configuración.",
|
|
80
|
+
"pl": "Dodano wersję aplikacji do ustawień.",
|
|
81
|
+
"uk": "Версію програми додано в налаштування.",
|
|
82
|
+
"zh-cn": "在设置中添加了应用程序版本。"
|
|
83
|
+
},
|
|
84
|
+
"2.0.6": {
|
|
85
|
+
"en": "panasonic-comfort-cloud-client updated to new version. (appVersion changed again)",
|
|
86
|
+
"de": "panasonic-comfort-cloud-client auf neue version aktualisiert. (appVersion erneut geändert)",
|
|
87
|
+
"ru": "Panasonic-comfort-cloud-client обновлен до новой версии. (версия приложения снова изменилась)",
|
|
88
|
+
"pt": "panasonic-comfort-cloud-client atualizado para a nova versão. (appVersion alterado novamente)",
|
|
89
|
+
"nl": "panasonic-comfort-cloud-client bijgewerkt naar nieuwe versie. (appVersie opnieuw gewijzigd)",
|
|
90
|
+
"fr": "panasonic-comfort-cloud-client mis à jour vers la nouvelle version. (appVersion changé à nouveau)",
|
|
91
|
+
"it": "panasonic-comfort-cloud-client aggiornato alla nuova versione. (appVersion cambiata di nuovo)",
|
|
92
|
+
"es": "panasonic-comfort-cloud-client actualizado a la nueva versión. (appVersion cambió de nuevo)",
|
|
93
|
+
"pl": "panasonic-comfort-cloud-client zaktualizowany do nowej wersji. (ponowna zmiana wersji aplikacji)",
|
|
94
|
+
"zh-cn": "panasonic-comfort-cloud-client 更新到新版本。 (appVersion又变了)",
|
|
95
|
+
"uk": "panasonic-comfort-cloud-client оновлено до нової версії. (AppVersion знову змінено)"
|
|
96
|
+
}
|
|
209
97
|
},
|
|
210
|
-
"
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
98
|
+
"titleLang": {
|
|
99
|
+
"en": "Panasonic Comfort Cloud",
|
|
100
|
+
"de": "Panasonic Comfort Cloud",
|
|
101
|
+
"ru": "Panasonic Comfort Cloud",
|
|
102
|
+
"pt": "Panasonic Comfort Cloud",
|
|
103
|
+
"nl": "Panasonic Comfort Cloud",
|
|
104
|
+
"fr": "Panasonic Comfort Cloud",
|
|
105
|
+
"it": "Panasonic Comfort Cloud",
|
|
106
|
+
"es": "Panasonic Comfort Cloud",
|
|
107
|
+
"pl": "Panasonic Comfort Cloud",
|
|
108
|
+
"zh-cn": "松下舒适云",
|
|
109
|
+
"uk": "Panasonic Comfort Cloud"
|
|
217
110
|
},
|
|
218
|
-
"
|
|
219
|
-
|
|
220
|
-
|
|
111
|
+
"desc": {
|
|
112
|
+
"en": "Adapter for Panasonic Comfort Cloud",
|
|
113
|
+
"de": "Adapter für Panasonic Comfort Cloud",
|
|
114
|
+
"ru": "Адаптер для Panasonic Comfort Cloud",
|
|
115
|
+
"pt": "Adaptador para Panasonic Comfort Cloud",
|
|
116
|
+
"nl": "Adapter voor Panasonic Comfort Cloud",
|
|
117
|
+
"fr": "Adaptateur pour Panasonic Comfort Cloud",
|
|
118
|
+
"it": "Adattatore per Panasonic Comfort Cloud",
|
|
119
|
+
"es": "Adaptador para Panasonic Comfort Cloud",
|
|
120
|
+
"pl": "Adapter do chmury Panasonic Comfort Cloud",
|
|
121
|
+
"zh-cn": "松下舒适云适配器",
|
|
122
|
+
"uk": "Адаптер для Panasonic Comfort Cloud"
|
|
123
|
+
},
|
|
124
|
+
"authors": [
|
|
125
|
+
"marc <marc@lammers.dev>"
|
|
126
|
+
],
|
|
127
|
+
"keywords": [
|
|
128
|
+
"air condition"
|
|
221
129
|
],
|
|
222
|
-
"
|
|
223
|
-
|
|
130
|
+
"license": "MIT",
|
|
131
|
+
"platform": "Javascript/Node.js",
|
|
132
|
+
"connectionType": "cloud",
|
|
133
|
+
"dataSource": "poll",
|
|
134
|
+
"main": "build/main.js",
|
|
135
|
+
"icon": "panasonic-comfort-cloud.png",
|
|
136
|
+
"enabled": true,
|
|
137
|
+
"extIcon": "https://raw.githubusercontent.com/marc2016/ioBroker.panasonic-comfort-cloud/master/admin/panasonic-comfort-cloud.png",
|
|
138
|
+
"readme": "https://github.com/marc2016/ioBroker.panasonic-comfort-cloud/blob/master/README.md",
|
|
139
|
+
"loglevel": "info",
|
|
140
|
+
"mode": "daemon",
|
|
141
|
+
"type": "climate-control",
|
|
142
|
+
"compact": true,
|
|
143
|
+
"materialize": true,
|
|
144
|
+
"adminUI": {
|
|
145
|
+
"config": "json"
|
|
146
|
+
},
|
|
147
|
+
"dependencies": [
|
|
148
|
+
{
|
|
149
|
+
"js-controller": ">=3.3.22"
|
|
150
|
+
}
|
|
224
151
|
],
|
|
225
|
-
"
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
"type": "channel",
|
|
230
|
-
"common": {
|
|
231
|
-
"name": "Information"
|
|
232
|
-
},
|
|
233
|
-
"native": {}
|
|
234
|
-
},
|
|
235
|
-
{
|
|
236
|
-
"_id": "info.connection",
|
|
237
|
-
"type": "state",
|
|
238
|
-
"common": {
|
|
239
|
-
"role": "indicator.connected",
|
|
240
|
-
"name": "Device or service connected",
|
|
241
|
-
"type": "boolean",
|
|
242
|
-
"read": true,
|
|
243
|
-
"write": false,
|
|
244
|
-
"def": false
|
|
245
|
-
},
|
|
246
|
-
"native": {}
|
|
247
|
-
}
|
|
152
|
+
"globalDependencies": [
|
|
153
|
+
{
|
|
154
|
+
"admin": ">=5.0.0"
|
|
155
|
+
}
|
|
248
156
|
]
|
|
157
|
+
},
|
|
158
|
+
"native": {
|
|
159
|
+
"username": "",
|
|
160
|
+
"password": "",
|
|
161
|
+
"refreshInterval": 5,
|
|
162
|
+
"appVersion": "",
|
|
163
|
+
"appVersionFromGithub": "",
|
|
164
|
+
"useAppVersionFromGithub": false
|
|
165
|
+
},
|
|
166
|
+
"protectedNative": [
|
|
167
|
+
"username",
|
|
168
|
+
"password"
|
|
169
|
+
],
|
|
170
|
+
"encryptedNative": [
|
|
171
|
+
"password"
|
|
172
|
+
],
|
|
173
|
+
"objects": [],
|
|
174
|
+
"instanceObjects": [
|
|
175
|
+
{
|
|
176
|
+
"_id": "info",
|
|
177
|
+
"type": "channel",
|
|
178
|
+
"common": {
|
|
179
|
+
"name": "Information"
|
|
180
|
+
},
|
|
181
|
+
"native": {}
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
"_id": "info.connection",
|
|
185
|
+
"type": "state",
|
|
186
|
+
"common": {
|
|
187
|
+
"role": "indicator.connected",
|
|
188
|
+
"name": "Device or service connected",
|
|
189
|
+
"type": "boolean",
|
|
190
|
+
"read": true,
|
|
191
|
+
"write": false,
|
|
192
|
+
"def": false
|
|
193
|
+
},
|
|
194
|
+
"native": {}
|
|
195
|
+
}
|
|
196
|
+
]
|
|
249
197
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "iobroker.panasonic-comfort-cloud",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.4",
|
|
4
4
|
"description": "Adapter for Panasonic Comfort Cloud",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "marc",
|
|
@@ -16,40 +16,42 @@
|
|
|
16
16
|
"url": "https://github.com/marc2016/ioBroker.panasonic-comfort-cloud"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@iobroker/adapter-core": "^
|
|
20
|
-
"@types/lodash": "^4.14.
|
|
19
|
+
"@iobroker/adapter-core": "^3.0.3",
|
|
20
|
+
"@types/lodash": "^4.14.199",
|
|
21
21
|
"lodash": "^4.17.21",
|
|
22
|
-
"panasonic-comfort-cloud-client": "1.2.
|
|
22
|
+
"panasonic-comfort-cloud-client": "1.2.6",
|
|
23
23
|
"ts-enum-util": "^4.0.2"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
26
|
"@alcalzone/release-script": "^3.6.0",
|
|
27
|
+
"@alcalzone/release-script-plugin-iobroker": "^3.6.0",
|
|
28
|
+
"@alcalzone/release-script-plugin-license": "^3.5.9",
|
|
27
29
|
"@iobroker/adapter-dev": "^1.2.0",
|
|
28
30
|
"@iobroker/testing": "^4.1.0",
|
|
29
|
-
"@tsconfig/node14": "^1.0
|
|
30
|
-
"@types/chai": "^4.3.
|
|
31
|
-
"@types/chai-as-promised": "^7.1.
|
|
32
|
-
"@types/gulp": "^4.0.
|
|
33
|
-
"@types/mocha": "^10.0.
|
|
34
|
-
"@types/node": "^
|
|
35
|
-
"@types/proxyquire": "^1.3.
|
|
36
|
-
"@types/sinon": "^10.0.
|
|
37
|
-
"@types/sinon-chai": "^3.2.
|
|
38
|
-
"@typescript-eslint/eslint-plugin": "^
|
|
39
|
-
"@typescript-eslint/parser": "^
|
|
40
|
-
"axios": "^1.
|
|
41
|
-
"chai": "^4.3.
|
|
31
|
+
"@tsconfig/node14": "^14.1.0",
|
|
32
|
+
"@types/chai": "^4.3.6",
|
|
33
|
+
"@types/chai-as-promised": "^7.1.6",
|
|
34
|
+
"@types/gulp": "^4.0.14",
|
|
35
|
+
"@types/mocha": "^10.0.2",
|
|
36
|
+
"@types/node": "^20.8.3",
|
|
37
|
+
"@types/proxyquire": "^1.3.29",
|
|
38
|
+
"@types/sinon": "^10.0.19",
|
|
39
|
+
"@types/sinon-chai": "^3.2.10",
|
|
40
|
+
"@typescript-eslint/eslint-plugin": "^6.7.4",
|
|
41
|
+
"@typescript-eslint/parser": "^6.7.4",
|
|
42
|
+
"axios": "^1.5.1",
|
|
43
|
+
"chai": "^4.3.10",
|
|
42
44
|
"chai-as-promised": "^7.1.1",
|
|
43
|
-
"eslint": "^8.
|
|
45
|
+
"eslint": "^8.51.0",
|
|
44
46
|
"gulp": "^4.0.2",
|
|
45
47
|
"mocha": "^10.2.0",
|
|
46
48
|
"proxyquire": "^2.1.3",
|
|
47
|
-
"rimraf": "^
|
|
48
|
-
"sinon": "^
|
|
49
|
+
"rimraf": "^5.0.5",
|
|
50
|
+
"sinon": "^16.1.0",
|
|
49
51
|
"sinon-chai": "^3.7.0",
|
|
50
52
|
"source-map-support": "^0.5.21",
|
|
51
53
|
"ts-node": "^10.9.1",
|
|
52
|
-
"typescript": "^5.
|
|
54
|
+
"typescript": "^5.2.2"
|
|
53
55
|
},
|
|
54
56
|
"main": "build/main.js",
|
|
55
57
|
"files": [
|
package/admin/index_m.html
DELETED
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
<html>
|
|
2
|
-
<head>
|
|
3
|
-
<!-- Load ioBroker scripts and styles-->
|
|
4
|
-
<link rel="stylesheet" type="text/css" href="../../css/adapter.css" />
|
|
5
|
-
<link rel="stylesheet" type="text/css" href="../../lib/css/materialize.css" />
|
|
6
|
-
|
|
7
|
-
<script type="text/javascript" src="../../lib/js/jquery-3.2.1.min.js"></script>
|
|
8
|
-
<script type="text/javascript" src="../../socket.io/socket.io.js"></script>
|
|
9
|
-
|
|
10
|
-
<script type="text/javascript" src="../../js/translate.js"></script>
|
|
11
|
-
<script type="text/javascript" src="../../lib/js/materialize.js"></script>
|
|
12
|
-
<script type="text/javascript" src="../../js/adapter-settings.js"></script>
|
|
13
|
-
|
|
14
|
-
<!-- Load our own files -->
|
|
15
|
-
<link rel="stylesheet" type="text/css" href="style.css" />
|
|
16
|
-
<script type="text/javascript" src="words.js"></script>
|
|
17
|
-
|
|
18
|
-
<script type="text/javascript">
|
|
19
|
-
// This will be called by the admin adapter when the settings page loads
|
|
20
|
-
function load(settings, onChange) {
|
|
21
|
-
// example: select elements with id=key and class=value and insert value
|
|
22
|
-
if (!settings) return;
|
|
23
|
-
$('.value').each(function () {
|
|
24
|
-
var $key = $(this);
|
|
25
|
-
var id = $key.attr('id');
|
|
26
|
-
if ($key.attr('type') === 'checkbox') {
|
|
27
|
-
// do not call onChange direct, because onChange could expect some arguments
|
|
28
|
-
$key.prop('checked', settings[id]).on('change', () => onChange());
|
|
29
|
-
} else {
|
|
30
|
-
// do not call onChange direct, because onChange could expect some arguments
|
|
31
|
-
$key.val(settings[id])
|
|
32
|
-
.on('change', () => onChange())
|
|
33
|
-
.on('keyup', () => onChange());
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
onChange(false);
|
|
37
|
-
// reinitialize all the Materialize labels on the page if you are dynamically adding inputs:
|
|
38
|
-
if (M) M.updateTextFields();
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
// This will be called by the admin adapter when the user presses the save button
|
|
42
|
-
function save(callback) {
|
|
43
|
-
// example: select elements with class=value and build settings object
|
|
44
|
-
var obj = {};
|
|
45
|
-
$('.value').each(function () {
|
|
46
|
-
var $this = $(this);
|
|
47
|
-
if ($this.attr('type') === 'checkbox') {
|
|
48
|
-
obj[$this.attr('id')] = $this.prop('checked');
|
|
49
|
-
} else if ($this.attr('type') === 'number') {
|
|
50
|
-
obj[$this.attr('id')] = parseFloat($this.val());
|
|
51
|
-
} else {
|
|
52
|
-
obj[$this.attr('id')] = $this.val();
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
callback(obj);
|
|
56
|
-
}
|
|
57
|
-
</script>
|
|
58
|
-
</head>
|
|
59
|
-
|
|
60
|
-
<body>
|
|
61
|
-
<div class="m adapter-container">
|
|
62
|
-
<div class="row">
|
|
63
|
-
<div class="col s12 m4 l2">
|
|
64
|
-
<img src="panasonic-comfort-cloud.png" class="logo" />
|
|
65
|
-
</div>
|
|
66
|
-
</div>
|
|
67
|
-
|
|
68
|
-
<!-- Put your content here -->
|
|
69
|
-
|
|
70
|
-
<!-- For example columns with settings: -->
|
|
71
|
-
<div class="row">
|
|
72
|
-
<div class="col s6 input-field">
|
|
73
|
-
<input type="email" class="value" id="username" />
|
|
74
|
-
<label for="username" class="translate">username</label>
|
|
75
|
-
</div>
|
|
76
|
-
</div>
|
|
77
|
-
<div class="row">
|
|
78
|
-
<div class="col s6 input-field">
|
|
79
|
-
<input type="password" class="value" id="password" />
|
|
80
|
-
<label for="password" class="translate">password</label>
|
|
81
|
-
</div>
|
|
82
|
-
</div>
|
|
83
|
-
<div class="row">
|
|
84
|
-
<div class="col s6 input-field">
|
|
85
|
-
<input
|
|
86
|
-
placeholder="5"
|
|
87
|
-
name="refreshInterval"
|
|
88
|
-
type="number"
|
|
89
|
-
id="refreshInterval"
|
|
90
|
-
class="value validate"
|
|
91
|
-
/>
|
|
92
|
-
<label for="refreshInterval" class="translate">refreshInterval</label>
|
|
93
|
-
</div>
|
|
94
|
-
</div>
|
|
95
|
-
<div class="row">
|
|
96
|
-
<div class="col s4 input-field">
|
|
97
|
-
<input
|
|
98
|
-
placeholder=""
|
|
99
|
-
name="appVersion"
|
|
100
|
-
type="text"
|
|
101
|
-
id="appVersion"
|
|
102
|
-
class="value validate"
|
|
103
|
-
/>
|
|
104
|
-
<label for="appVersion" class="translate">appversion</label>
|
|
105
|
-
</div>
|
|
106
|
-
<div class="col s4 input-field">
|
|
107
|
-
<input
|
|
108
|
-
placeholder=""
|
|
109
|
-
name="appVersionFromGithub"
|
|
110
|
-
type="text"
|
|
111
|
-
id="appVersionFromGithub"
|
|
112
|
-
class="value validate"
|
|
113
|
-
disabled
|
|
114
|
-
/>
|
|
115
|
-
<label for="appVersionFromGithub" class="translate">appVersionFromGithub</label>
|
|
116
|
-
</div>
|
|
117
|
-
<div class="col s4 input-field">
|
|
118
|
-
<input
|
|
119
|
-
placeholder=""
|
|
120
|
-
name="useAppVersionFromGithub"
|
|
121
|
-
type="checkbox"
|
|
122
|
-
id="useAppVersionFromGithub"
|
|
123
|
-
class="value"
|
|
124
|
-
/>
|
|
125
|
-
<label for="useAppVersionFromGithub" class="translate">useAppVersionFromGithub</label>
|
|
126
|
-
</div>
|
|
127
|
-
</div>
|
|
128
|
-
</div>
|
|
129
|
-
</body>
|
|
130
|
-
</html>
|