iobroker.schlueter-thermostat 0.3.0 → 0.3.2
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/README.md +15 -2
- package/admin/jsonConfig.json +23 -18
- package/io-package.json +27 -14
- package/lib/apply-handlers.js +8 -0
- package/lib/objects.js +11 -0
- package/main.js +13 -3
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -35,13 +35,17 @@ It is based on the HA Integration from @robbinjanssen. For more informations see
|
|
|
35
35
|
| ----------------- | ----------------------------- |
|
|
36
36
|
| Username | Your Schlüter/OJ cloud login |
|
|
37
37
|
| Password | Cloud password |
|
|
38
|
-
| API Key |
|
|
38
|
+
| API Key | Below works in most cases |
|
|
39
39
|
| Customer ID | Found in thermostat info |
|
|
40
40
|
| Client SW Version | Numeric value from thermostat |
|
|
41
41
|
| Poll Interval | Default: 60 seconds |
|
|
42
42
|
|
|
43
43
|
4. Save & start adapter
|
|
44
44
|
|
|
45
|
+
For API-Key you can try with: `f219aab4-9ac0-4343-8422-b72203e2fac9`.
|
|
46
|
+
You can find this Key in Forum: `https://community.home-assistant.io/t/mwd5-wifi-thermostat-oj-electronics-microtemp/445601`, so it looks like a
|
|
47
|
+
global Key.
|
|
48
|
+
|
|
45
49
|
##
|
|
46
50
|
|
|
47
51
|
## Documentation
|
|
@@ -58,7 +62,7 @@ It is based on the HA Integration from @robbinjanssen. For more informations see
|
|
|
58
62
|
|
|
59
63
|

|
|
60
64
|

|
|
61
|
-

|
|
65
|
+

|
|
62
66
|
|
|
63
67
|
### Compact Program Structure
|
|
64
68
|
|
|
@@ -103,6 +107,15 @@ flowchart TB
|
|
|
103
107
|
Placeholder for the next version (at the beginning of the line):
|
|
104
108
|
### **WORK IN PROGRESS**
|
|
105
109
|
-->
|
|
110
|
+
### 0.3.2 (2026-01-31)
|
|
111
|
+
|
|
112
|
+
- (patricknitsch) Update from git to https
|
|
113
|
+
|
|
114
|
+
### 0.3.1 (2026-01-31)
|
|
115
|
+
|
|
116
|
+
- (patricknitsch) Add Mode Frost Protection
|
|
117
|
+
- (patricknitsch) Show Enum instead of Regulation Number
|
|
118
|
+
|
|
106
119
|
### 0.3.0 (2026-01-31)
|
|
107
120
|
|
|
108
121
|
- (patricknitsch) Update Readme
|
package/admin/jsonConfig.json
CHANGED
|
@@ -30,30 +30,30 @@
|
|
|
30
30
|
"type": "text",
|
|
31
31
|
"label": "Username",
|
|
32
32
|
"xs": 12,
|
|
33
|
+
"sm": 12,
|
|
33
34
|
"md": 6,
|
|
34
35
|
"lg": 4,
|
|
35
36
|
"xl": 4,
|
|
36
|
-
"sm": 4,
|
|
37
37
|
"newLine": true
|
|
38
38
|
},
|
|
39
39
|
"password": {
|
|
40
40
|
"type": "password",
|
|
41
41
|
"label": "Password",
|
|
42
42
|
"xs": 12,
|
|
43
|
-
"
|
|
43
|
+
"sm": 12,
|
|
44
|
+
"md": 6,
|
|
44
45
|
"lg": 4,
|
|
45
|
-
"xl": 4
|
|
46
|
-
"sm": 4
|
|
46
|
+
"xl": 4
|
|
47
47
|
},
|
|
48
48
|
"apiKey": {
|
|
49
49
|
"type": "text",
|
|
50
50
|
"label": "API Key",
|
|
51
51
|
"default": "f219aab4-9ac0-4343-8422-b72203e2fac9",
|
|
52
52
|
"xs": 12,
|
|
53
|
+
"sm": 12,
|
|
53
54
|
"md": 6,
|
|
54
55
|
"lg": 4,
|
|
55
56
|
"xl": 4,
|
|
56
|
-
"sm": 8,
|
|
57
57
|
"newLine": true
|
|
58
58
|
},
|
|
59
59
|
"customerId": {
|
|
@@ -61,20 +61,20 @@
|
|
|
61
61
|
"label": "Customer ID",
|
|
62
62
|
"default": 1,
|
|
63
63
|
"xs": 12,
|
|
64
|
-
"
|
|
64
|
+
"sm": 12,
|
|
65
|
+
"md": 6,
|
|
65
66
|
"lg": 4,
|
|
66
|
-
"xl": 4
|
|
67
|
-
"sm": 4
|
|
67
|
+
"xl": 4
|
|
68
68
|
},
|
|
69
69
|
"pollIntervalSec": {
|
|
70
70
|
"type": "number",
|
|
71
71
|
"label": "Poll interval (seconds)",
|
|
72
72
|
"default": 60,
|
|
73
73
|
"xs": 12,
|
|
74
|
-
"
|
|
74
|
+
"sm": 12,
|
|
75
|
+
"md": 6,
|
|
75
76
|
"lg": 4,
|
|
76
77
|
"xl": 4,
|
|
77
|
-
"sm": 4,
|
|
78
78
|
"newLine": true
|
|
79
79
|
},
|
|
80
80
|
"energyHistory": {
|
|
@@ -82,10 +82,10 @@
|
|
|
82
82
|
"label": "Energy History (0=current)",
|
|
83
83
|
"default": 0,
|
|
84
84
|
"xs": 12,
|
|
85
|
-
"
|
|
85
|
+
"sm": 12,
|
|
86
|
+
"md": 6,
|
|
86
87
|
"lg": 4,
|
|
87
88
|
"xl": 4,
|
|
88
|
-
"sm": 4,
|
|
89
89
|
"newLine": true
|
|
90
90
|
},
|
|
91
91
|
"energyViewType": {
|
|
@@ -93,26 +93,31 @@
|
|
|
93
93
|
"label": "Energy ViewType (2=week,3=month,4=year)",
|
|
94
94
|
"default": 2,
|
|
95
95
|
"xs": 12,
|
|
96
|
-
"
|
|
96
|
+
"sm": 12,
|
|
97
|
+
"md": 6,
|
|
97
98
|
"lg": 4,
|
|
98
|
-
"xl": 4
|
|
99
|
-
"sm": 4
|
|
99
|
+
"xl": 4
|
|
100
100
|
},
|
|
101
101
|
"legacyCleanup": {
|
|
102
102
|
"type": "checkbox",
|
|
103
103
|
"label": "Legacy Cleanup (1=enabled,0=disabled)",
|
|
104
104
|
"default": 1,
|
|
105
105
|
"xs": 12,
|
|
106
|
-
"
|
|
106
|
+
"sm": 12,
|
|
107
|
+
"md": 6,
|
|
107
108
|
"lg": 4,
|
|
108
109
|
"xl": 4,
|
|
109
|
-
"sm": 4,
|
|
110
110
|
"newLine": true
|
|
111
111
|
},
|
|
112
112
|
"_help": {
|
|
113
113
|
"type": "staticText",
|
|
114
114
|
"newLine": true,
|
|
115
|
-
"text": "OWD5 cloud only. Devices are created per GroupId. Writeback uses Group/UpdateGroup. Energy uses EnergyUsage/GetEnergyUsage with ThermostatID (Thermostats[].Id)."
|
|
115
|
+
"text": "OWD5 cloud only. Devices are created per GroupId. Writeback uses Group/UpdateGroup. Energy uses EnergyUsage/GetEnergyUsage with ThermostatID (Thermostats[].Id).",
|
|
116
|
+
"xs": 12,
|
|
117
|
+
"sm": 12,
|
|
118
|
+
"md": 12,
|
|
119
|
+
"lg": 12,
|
|
120
|
+
"xl": 12
|
|
116
121
|
}
|
|
117
122
|
}
|
|
118
123
|
}
|
package/io-package.json
CHANGED
|
@@ -1,8 +1,34 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "schlueter-thermostat",
|
|
4
|
-
"version": "0.3.
|
|
4
|
+
"version": "0.3.2",
|
|
5
5
|
"news": {
|
|
6
|
+
"0.3.2": {
|
|
7
|
+
"en": "Update from git to https",
|
|
8
|
+
"de": "Update von git zu https",
|
|
9
|
+
"ru": "Обновление от git до https",
|
|
10
|
+
"pt": "Atualizar do git para https",
|
|
11
|
+
"nl": "Bijwerken van git naar https",
|
|
12
|
+
"fr": "Mettre à jour de git à https",
|
|
13
|
+
"it": "Aggiornamento da git a https",
|
|
14
|
+
"es": "Actualización de git a https",
|
|
15
|
+
"pl": "Aktualizacja z git do https",
|
|
16
|
+
"uk": "Оновлення з git на HTTPS",
|
|
17
|
+
"zh-cn": "从 git 更新到 https"
|
|
18
|
+
},
|
|
19
|
+
"0.3.1": {
|
|
20
|
+
"en": "Add Mode Frost Protection\nShow Enum instead of Regulation Number",
|
|
21
|
+
"de": "Modus Frostschutz hinzufügen\nAnum anstelle der Regelungsnummer anzeigen",
|
|
22
|
+
"ru": "Добавить режим защиты от мороза\nПоказать номер вместо номера",
|
|
23
|
+
"pt": "Adicionar Modo de Proteção de Gelo\nMostrar o Enum em vez do Número de Regulação",
|
|
24
|
+
"nl": "Frostbescherming toevoegen\nEnum tonen in plaats van Reglementnummer",
|
|
25
|
+
"fr": "Ajouter une protection contre le gel en mode\nAfficher le nom au lieu du numéro de règlement",
|
|
26
|
+
"it": "Aggiungere la modalità di protezione del gelo\nMostra Enum invece del numero di regolamento",
|
|
27
|
+
"es": "Añadir Mode Frost Protection\nMostrar Enum en lugar del número de regulación",
|
|
28
|
+
"pl": "Dodaj tryb ochrony mróz\nPokaż Enum zamiast numeru regulaminu",
|
|
29
|
+
"uk": "Додайте режим захисту від загартування\nПоказати Enum замість номеру регулювання",
|
|
30
|
+
"zh-cn": "添加模式霜保护\n显示 Enum 而不是规章编号"
|
|
31
|
+
},
|
|
6
32
|
"0.3.0": {
|
|
7
33
|
"en": "Update Readme\nVerify Polling if Thermostat give no Response\nComplete Refactoring to handle functions better\nencrypt all sensitive credentials -> Relogin necessary\nCode Fixing for latest repo",
|
|
8
34
|
"de": "Update Reader\nVerifizieren Sie Polling, wenn Thermostat keine Antwort geben\nKomplette Refactoring, um Funktionen besser zu handhaben\nalle sensiblen Anmeldeinformationen verschlüsseln -> Relogin notwendig\nCode Fixing für die neueste Repo",
|
|
@@ -67,19 +93,6 @@
|
|
|
67
93
|
"pl": "Napraw JsonConfig",
|
|
68
94
|
"uk": "Фіксація JsonConfig",
|
|
69
95
|
"zh-cn": "修复 Json 连接"
|
|
70
|
-
},
|
|
71
|
-
"0.2.0": {
|
|
72
|
-
"en": "add automatic Refresh of Token after Error 403\nfix max Value of Regulation Mode to 9 for error preventing\nimprove Handling of Mode Settings",
|
|
73
|
-
"de": "hinzufügen automatisch Aktualisieren von Token nach Fehler 403\nmax. Wert des Regelmodus auf 9 zur Fehlerverhütung\nverbesserung der Handhabung von Moduseinstellungen",
|
|
74
|
-
"ru": "добавить автоматический Обновление токена после ошибки 403\nфиксировать максимальное значение режима регулирования до 9 для предотвращения ошибок\nулучшение обработки настроек режима",
|
|
75
|
-
"pt": "adicionar automático Atualizar o item após o erro 403\nfixar o valor máximo do modo de regulação até 9 para evitar erros\nmelhorar o manuseio das configurações do modo",
|
|
76
|
-
"nl": "automatisch toevoegen Verversen van Token na fout 403\nfix max Value of Regulation Mode to 9 for error preventing\nverbeteren van de behandeling van modusinstellingen",
|
|
77
|
-
"fr": "ajouter automatique Rafraîchir le jeton après l'erreur 403\nfixer la valeur maximale du mode de régulation à 9 pour éviter les erreurs\naméliorer la manipulation des paramètres de mode",
|
|
78
|
-
"it": "aggiungere automatico Rifiuto di Token dopo Errore 403\nfissare il valore massimo della modalità di regolamento a 9 per evitare errori\nmigliorare Gestione delle impostazioni di modalità",
|
|
79
|
-
"es": "añadir automático Actualización de Token después del Error 403\nfijar el valor máximo del modo de regulación a 9 para la prevención de errores\nmejorar Manejo de configuración de modo",
|
|
80
|
-
"pl": "dodawać automatycznie Odśwież Token po błędzie 403\nnaprawić maksymalną wartość trybu regulacji do 9 dla zapobiegania błędom\npoprawić obsługę ustawień trybu",
|
|
81
|
-
"uk": "додати автоматичний Refresh Token після помилки 403\nвиправити максимальне значення режиму регулювання до 9 для запобігання помилок\nполіпшення ручки параметрів режиму",
|
|
82
|
-
"zh-cn": "添加自动 错误 403 后刷新托肯\n用于防止错误的规范模式 9 值\n改进模式设置的处理"
|
|
83
96
|
}
|
|
84
97
|
},
|
|
85
98
|
"titleLang": {
|
package/lib/apply-handlers.js
CHANGED
|
@@ -110,6 +110,14 @@ function createApplyRouter(adapter) {
|
|
|
110
110
|
});
|
|
111
111
|
},
|
|
112
112
|
|
|
113
|
+
// ============= FROST PROTECTION =================
|
|
114
|
+
frostProtection: async ({ serial, baseName }) => {
|
|
115
|
+
await adapter.client.updateThermostat(serial, {
|
|
116
|
+
ThermostatName: baseName,
|
|
117
|
+
RegulationMode: 6,
|
|
118
|
+
});
|
|
119
|
+
},
|
|
120
|
+
|
|
113
121
|
// =================== VACATION ===================
|
|
114
122
|
vacation: async ({ devPrefix, serial, baseName }) => {
|
|
115
123
|
const enabled = await readBool(`${devPrefix}.apply.vacation.enabled`, false);
|
package/lib/objects.js
CHANGED
|
@@ -117,6 +117,17 @@ async function ensureThermostatObjects(adapter, devId, native, thermostatName) {
|
|
|
117
117
|
role: 'value',
|
|
118
118
|
read: true,
|
|
119
119
|
write: false,
|
|
120
|
+
states: {
|
|
121
|
+
1: 'Schedule',
|
|
122
|
+
2: 'Comfort',
|
|
123
|
+
3: 'Manual',
|
|
124
|
+
4: 'Vacation',
|
|
125
|
+
5: 'Unknown',
|
|
126
|
+
6: 'Frost Protection',
|
|
127
|
+
7: 'Unknown',
|
|
128
|
+
8: 'Boost',
|
|
129
|
+
9: 'Eco',
|
|
130
|
+
},
|
|
120
131
|
});
|
|
121
132
|
|
|
122
133
|
// endTime channel + states
|
package/main.js
CHANGED
|
@@ -610,9 +610,19 @@ class SchlueterThermostat extends utils.Adapter {
|
|
|
610
610
|
// Wait for in-flight poll (best effort)
|
|
611
611
|
const p = this.pollPromise;
|
|
612
612
|
if (p) {
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
613
|
+
let timeoutId;
|
|
614
|
+
|
|
615
|
+
const timeoutPromise = new Promise(resolve => {
|
|
616
|
+
// Use native setTimeout to avoid:
|
|
617
|
+
// "setTimeout called, but adapter is shutting down"
|
|
618
|
+
timeoutId = setTimeout(resolve, 5000);
|
|
619
|
+
});
|
|
620
|
+
|
|
621
|
+
await Promise.race([p, timeoutPromise]);
|
|
622
|
+
|
|
623
|
+
if (timeoutId) {
|
|
624
|
+
clearTimeout(timeoutId);
|
|
625
|
+
}
|
|
616
626
|
}
|
|
617
627
|
|
|
618
628
|
callback();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "iobroker.schlueter-thermostat",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.2",
|
|
4
4
|
"description": "Floor heating controlled with Ditra Heat Thermostat",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "patricknitsch",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
],
|
|
18
18
|
"repository": {
|
|
19
19
|
"type": "git",
|
|
20
|
-
"url": "
|
|
20
|
+
"url": "https://github.com/patricknitsch/ioBroker.schlueter-thermostat"
|
|
21
21
|
},
|
|
22
22
|
"engines": {
|
|
23
23
|
"node": ">= 20"
|