iobroker.acinfinity 0.9.5 → 0.9.7

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.
Files changed (3) hide show
  1. package/README.md +174 -162
  2. package/io-package.json +27 -27
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -5,271 +5,283 @@
5
5
  [![NPM version](https://img.shields.io/npm/v/iobroker.acinfinity.svg)](https://www.npmjs.com/package/iobroker.acinfinity)
6
6
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7
7
 
8
- ioBroker-Adapter zur Überwachung und Steuerung von **AC Infinity UIS WiFi-Controllern**.
8
+ ioBroker adapter for monitoring and controlling **AC Infinity UIS WiFi controllers**.
9
+
10
+ AC Infinity manufactures smart climate control devices for grow tents and greenhouses — fans, temperature/humidity sensors, smart outlets and more.
11
+ For device information see the [AC Infinity website](https://acinfinity.com) and the [Controller 69 Pro product page](https://acinfinity.com/climate-controllers/).
12
+
13
+ > Deutsche Dokumentation: [docs/de/README.md](docs/de/README.md)
9
14
 
10
15
  ---
11
16
 
12
- ## ⚠️ Wichtige Hinweise zur Nutzung
17
+ ## ⚠️ Important Notices
13
18
 
14
- > **Nur getestet mit: Controller 69 Pro (CTR69P)**
19
+ > **Only tested with: Controller 69 Pro (CTR69P)**
15
20
  >
16
- > Alle anderen Modelle (69 WiFi, 69 Pro+, AI+, Outlet AI, Outlet AI+) sind im Code implementiert, konnten jedoch mangels Hardware **nicht getestet werden**. Die Funktion dieser Geräte ist nicht garantiert.
21
+ > All other models (69 WiFi, 69 Pro+, AI+, Outlet AI, Outlet AI+) are implemented in the code but could **not be tested** due to lack of hardware. Correct operation of these devices is not guaranteed.
17
22
  >
18
- > **Nutzung auf eigene Gefahr.** Es wird keinerlei Gewähr für Funktionsfähigkeit, Richtigkeit oder Eignung für einen bestimmten Zweck übernommen. Jegliche Haftung für direkte oder indirekte Schäden ist ausdrücklich ausgeschlosseneinschließlich Geräteausfälle, Datenverluste oder Fehlfunktionen des Systems.
23
+ > **Use at your own risk.** No warranty is provided for functionality, accuracy, or fitness for any particular purpose. Any liability for direct or indirect damages is expressly disclaimedincluding device failures, data loss, or system malfunctions.
19
24
 
20
25
  ---
21
26
 
22
- ## Herkunft & Credits
27
+ ## Origin & Credits
23
28
 
24
- Das **API-Reverse-Engineering** sowie das vollständige Verständnis der AC Infinity Cloud-Protokoll-Struktur stammen aus dem Home Assistant Adapter:
29
+ The **API reverse engineering** and full understanding of the AC Infinity cloud protocol structure originate from the Home Assistant integration:
25
30
 
26
31
  > **[dalinicus/homeassistant-acinfinity](https://github.com/dalinicus/homeassistant-acinfinity)**
27
32
  >
28
- > Alle Credits für die API-Analyse und das Protokoll-Verständnis gehen an dieses Projekt.
33
+ > All credits for the API analysis and protocol understanding go to this project.
29
34
 
30
- Der **gesamte ioBroker-Adapter-Code** wurde mit **[Claude Code](https://claude.ai/code)** (Anthropic AI) implementiert und auf Basis der oben genannten Home Assistant Integration für die ioBroker-Plattform umgeschrieben.
35
+ The **entire ioBroker adapter code** was implemented using **[Claude Code](https://claude.ai/code)** (Anthropic AI) and rewritten for the ioBroker platform based on the Home Assistant integration above.
31
36
 
32
37
  ---
33
38
 
34
- ## Unterstützte Geräte
39
+ ## Supported Devices
35
40
 
36
- | Modell | Typ-ID | Teststatus |
41
+ | Model | Type ID | Test Status |
37
42
  |---|---|---|
38
- | Controller 69 WiFi (CTR69W) | 1 | ⚠️ Nicht getestet |
39
- | Controller 69 Pro (CTR69P) | 11 | ✅ Getestet |
40
- | Controller 69 Pro+ (CTR69Q) | 18 | ⚠️ Nicht getestet |
41
- | Controller AI+ (CTR89Q) | 20 | ⚠️ Nicht getestet |
42
- | Controller Outlet AI (AC-ADA4) | 22 | ⚠️ Nicht getestet |
43
- | Controller Outlet AI+ (AC-ADA8) | 24 | ⚠️ Nicht getestet |
43
+ | Controller 69 WiFi (CTR69W) | 1 | ⚠️ Not tested |
44
+ | Controller 69 Pro (CTR69P) | 11 | ✅ Tested |
45
+ | Controller 69 Pro+ (CTR69Q) | 18 | ⚠️ Not tested |
46
+ | Controller AI+ (CTR89Q) | 20 | ⚠️ Not tested |
47
+ | Controller Outlet AI (AC-ADA4) | 22 | ⚠️ Not tested |
48
+ | Controller Outlet AI+ (AC-ADA8) | 24 | ⚠️ Not tested |
44
49
 
45
- > **Nicht unterstützt:** Nur-Bluetooth-Controller (z.B. Controller 67) — WiFi und Cloud-Sync erforderlich.
50
+ > **Not supported:** Bluetooth-only controllers (e.g. Controller 67) — WiFi and cloud sync are required.
46
51
 
47
52
  ---
48
53
 
49
- ## Funktionen
54
+ ## Features
50
55
 
51
- ### Sensoren (nur lesen)
56
+ ### Sensors (read-only)
52
57
 
53
- | State | Beschreibung | Einheit |
58
+ | State | Description | Unit |
54
59
  |---|---|---|
55
- | `sensors.temperature` | Lufttemperatur | °C |
56
- | `sensors.humidity` | Relative Luftfeuchtigkeit | % |
57
- | `sensors.vpd` | Sättigungsdefizit (VPD) | kPa |
58
- | `sensors.co2` | CO₂-Konzentration (wenn Sensor angeschlossen) | ppm |
59
- | `sensors.soilMoisture` | Bodenfeuchtigkeit (wenn Sensor angeschlossen) | % |
60
- | `sensors.waterLevel` | Wasserstand (wenn Sensor angeschlossen) | % |
61
- | `sensors.pluggedIn` | Controller Online-/Verbindungsstatus | boolean |
60
+ | `sensors.temperature` | Air temperature | °C |
61
+ | `sensors.humidity` | Relative humidity | % |
62
+ | `sensors.vpd` | Vapour pressure deficit (VPD) | kPa |
63
+ | `sensors.co2` | CO concentration (if sensor connected) | ppm |
64
+ | `sensors.soilMoisture` | Soil moisture (if sensor connected) | % |
65
+ | `sensors.waterLevel` | Water level (if sensor connected) | % |
66
+ | `sensors.pluggedIn` | Controller online/connection status | boolean |
62
67
 
63
- ### Port-Steuerung (lesen/schreiben pro Port)
68
+ ### Port Control (read/write per port)
64
69
 
65
- **Basis**
70
+ **Basic**
66
71
 
67
- | State | Beschreibung | Werte |
72
+ | State | Description | Values |
68
73
  |---|---|---|
69
- | `ports.X.mode.active` | Aktiver Modus | Off / On / Auto / Timer to On / Timer to Off / Cycle / Schedule / VPD |
70
- | `ports.X.mode.onSpeed` | Geschwindigkeit im aktiven Betrieb | 0–10 |
71
- | `ports.X.mode.offSpeed` | Mindestgeschwindigkeit im inaktiven Betrieb | 0–10 |
72
- | `ports.X.info.power` | Aktuelle Laufgeschwindigkeit | 0–10 |
73
- | `ports.X.info.state` | Laststatus (Gerät läuft) | boolean |
74
- | `ports.X.info.remainingTime` | Sekunden bis zur nächsten Statusänderung | s |
75
- | `ports.X.info.nextStateChange` | Zeitstempel der nächsten Statusänderung | ISO-String |
74
+ | `ports.X.mode.active` | Active operating mode | Off / On / Auto / Timer to On / Timer to Off / Cycle / Schedule / VPD |
75
+ | `ports.X.mode.onSpeed` | Speed during active operation | 0–10 |
76
+ | `ports.X.mode.offSpeed` | Minimum speed during inactive operation | 0–10 |
77
+ | `ports.X.info.power` | Current running speed | 0–10 |
78
+ | `ports.X.info.state` | Load status (device running) | boolean |
79
+ | `ports.X.info.remainingTime` | Seconds until next state change | s |
80
+ | `ports.X.info.nextStateChange` | Timestamp of next state change | ISO string |
76
81
 
77
- **Timer-Modus** (`ports.X.mode.timer.*`)
82
+ **Timer Mode** (`ports.X.mode.timer.*`)
78
83
 
79
- | State | Beschreibung |
84
+ | State | Description |
80
85
  |---|---|
81
- | `toOnMinutes` | Minuten bis das Gerät einschaltet |
82
- | `toOffMinutes` | Minuten bis das Gerät ausschaltet |
86
+ | `toOnMinutes` | Minutes until device turns on |
87
+ | `toOffMinutes` | Minutes until device turns off |
83
88
 
84
- **Zyklus-Modus** (`ports.X.mode.cycle.*`)
89
+ **Cycle Mode** (`ports.X.mode.cycle.*`)
85
90
 
86
- | State | Beschreibung |
91
+ | State | Description |
87
92
  |---|---|
88
- | `onMinutes` | Dauer der EIN-Phase (Minuten) |
89
- | `offMinutes` | Dauer der AUS-Phase (Minuten) |
93
+ | `onMinutes` | Duration of ON phase (minutes) |
94
+ | `offMinutes` | Duration of OFF phase (minutes) |
90
95
 
91
- **Zeitplan-Modus** (`ports.X.mode.schedule.*`)
96
+ **Schedule Mode** (`ports.X.mode.schedule.*`)
92
97
 
93
- | State | Beschreibung |
98
+ | State | Description |
94
99
  |---|---|
95
- | `startEnabled` | Tägliche Startzeit aktivieren |
96
- | `startTime` | Startzeit (HH:MM) |
97
- | `endEnabled` | Tägliche Endzeit aktivieren |
98
- | `endTime` | Endzeit (HH:MM) |
100
+ | `startEnabled` | Enable daily start time |
101
+ | `startTime` | Start time (HH:MM) |
102
+ | `endEnabled` | Enable daily end time |
103
+ | `endTime` | End time (HH:MM) |
99
104
 
100
- **Auto-Modus** (`ports.X.mode.auto.*`)
105
+ **Auto Mode** (`ports.X.mode.auto.*`)
101
106
 
102
- | State | Beschreibung |
107
+ | State | Description |
103
108
  |---|---|
104
- | `settingsMode` | Auto / Target (Zielwert) |
105
- | `tempHighEnabled` | Temperatur-Obergrenze aktivieren |
106
- | `tempHighTrigger` | Temperatur-Obergrenze (°C) |
107
- | `tempLowEnabled` | Temperatur-Untergrenze aktivieren |
108
- | `tempLowTrigger` | Temperatur-Untergrenze (°C) |
109
- | `humidityHighEnabled` | Feuchtigkeits-Obergrenze aktivieren |
110
- | `humidityHighTrigger` | Feuchtigkeits-Obergrenze (%) |
111
- | `humidityLowEnabled` | Feuchtigkeits-Untergrenze aktivieren |
112
- | `humidityLowTrigger` | Feuchtigkeits-Untergrenze (%) |
113
- | `targetTempEnabled` | Zieltemperatur-Modus aktivieren |
114
- | `targetTemp` | Zieltemperatur (°C) |
115
- | `targetHumidityEnabled` | Zielfeuchtigkeit-Modus aktivieren |
116
- | `targetHumidity` | Zielfeuchtigkeit (%) |
117
-
118
- **VPD-Modus** (`ports.X.mode.vpd.*`)
119
-
120
- | State | Beschreibung |
109
+ | `settingsMode` | Auto / Target |
110
+ | `tempHighEnabled` | Enable temperature upper limit |
111
+ | `tempHighTrigger` | Temperature upper limit (°C) |
112
+ | `tempLowEnabled` | Enable temperature lower limit |
113
+ | `tempLowTrigger` | Temperature lower limit (°C) |
114
+ | `humidityHighEnabled` | Enable humidity upper limit |
115
+ | `humidityHighTrigger` | Humidity upper limit (%) |
116
+ | `humidityLowEnabled` | Enable humidity lower limit |
117
+ | `humidityLowTrigger` | Humidity lower limit (%) |
118
+ | `targetTempEnabled` | Enable target temperature mode |
119
+ | `targetTemp` | Target temperature (°C) |
120
+ | `targetHumidityEnabled` | Enable target humidity mode |
121
+ | `targetHumidity` | Target humidity (%) |
122
+
123
+ **VPD Mode** (`ports.X.mode.vpd.*`)
124
+
125
+ | State | Description |
121
126
  |---|---|
122
- | `settingsMode` | Auto / Target (Zielwert) |
123
- | `highEnabled` | VPD-Obergrenze aktivieren |
124
- | `highTrigger` | VPD-Obergrenze (kPa) |
125
- | `lowEnabled` | VPD-Untergrenze aktivieren |
126
- | `lowTrigger` | VPD-Untergrenze (kPa) |
127
- | `targetEnabled` | Ziel-VPD-Modus aktivieren |
128
- | `target` | Ziel-VPD (kPa) |
127
+ | `settingsMode` | Auto / Target |
128
+ | `highEnabled` | Enable VPD upper limit |
129
+ | `highTrigger` | VPD upper limit (kPa) |
130
+ | `lowEnabled` | Enable VPD lower limit |
131
+ | `lowTrigger` | VPD lower limit (kPa) |
132
+ | `targetEnabled` | Enable target VPD mode |
133
+ | `target` | Target VPD (kPa) |
129
134
 
130
- **Erweiterte Port-Einstellungen** (`ports.X.settings.*`)
135
+ **Advanced Port Settings** (`ports.X.settings.*`)
131
136
 
132
- | State | Beschreibung |
137
+ | State | Description |
133
138
  |---|---|
134
- | `deviceType` | Angeschlossener Gerätetyp (Grow Light / Humidifier / Heater / AC / Fan) |
135
- | `dynamicResponse` | Transition (Übergang) / Buffer (Puffer) |
136
- | `dynamicTransitionTemp` | Übergangstemperatur-Schrittweite (°) |
137
- | `dynamicTransitionHumidity` | Übergangsfeuchtigkeit-Schrittweite (%) |
138
- | `dynamicTransitionVPD` | Übergangs-VPD-Schrittweite (kPa) |
139
- | `dynamicBufferTemp` | Puffertemperatur (°) |
140
- | `dynamicBufferHumidity` | Pufferfeuchtigkeit (%) |
141
- | `dynamicBufferVPD` | Puffer-VPD (kPa) |
142
- | `sunriseTimerEnabled` | Sonnenaufgang/Sonnenuntergang-Rampe aktiviert |
143
- | `sunriseTimerMinutes` | Rampendauer (Minuten) |
144
-
145
- ### Controller-Einstellungen (lesen/schreiben pro Controller)
146
-
147
- | State | Beschreibung |
139
+ | `deviceType` | Connected device type (Grow Light / Humidifier / Heater / AC / Fan) |
140
+ | `dynamicResponse` | Transition / Buffer |
141
+ | `dynamicTransitionTemp` | Transition temperature step size (°) |
142
+ | `dynamicTransitionHumidity` | Transition humidity step size (%) |
143
+ | `dynamicTransitionVPD` | Transition VPD step size (kPa) |
144
+ | `dynamicBufferTemp` | Buffer temperature (°) |
145
+ | `dynamicBufferHumidity` | Buffer humidity (%) |
146
+ | `dynamicBufferVPD` | Buffer VPD (kPa) |
147
+ | `sunriseTimerEnabled` | Sunrise/sunset ramp enabled |
148
+ | `sunriseTimerMinutes` | Ramp duration (minutes) |
149
+
150
+ ### Controller Settings (read/write per controller)
151
+
152
+ | State | Description |
148
153
  |---|---|
149
- | `settings.temperatureUnit` | C / F (nur lesen, Änderung in der AC Infinity App) |
150
- | `settings.temperatureCalibration` | Temperatur-Kalibrierungsoffset (°) |
151
- | `settings.humidityCalibration` | Feuchtigkeits-Kalibrierungsoffset (%) |
152
- | `settings.vpdLeafTemperatureOffset` | Blatttemperatur-Offset für VPD-Berechnung (°) |
153
- | `settings.outsideTemperature` | Außentemperatur-Referenz: Neutral / Lower / Higher |
154
- | `settings.outsideHumidity` | Außenfeuchtigkeit-Referenz: Neutral / Lower / Higher |
154
+ | `settings.temperatureUnit` | C / F (read-only; change in AC Infinity app) |
155
+ | `settings.temperatureCalibration` | Temperature calibration offset (°) |
156
+ | `settings.humidityCalibration` | Humidity calibration offset (%) |
157
+ | `settings.vpdLeafTemperatureOffset` | Leaf temperature offset for VPD calculation (°) |
158
+ | `settings.outsideTemperature` | Outside temperature reference: Neutral / Lower / Higher |
159
+ | `settings.outsideHumidity` | Outside humidity reference: Neutral / Lower / Higher |
155
160
 
156
161
  ---
157
162
 
158
- ## Einrichtung
163
+ ## Setup
159
164
 
160
- 1. Adapter in ioBroker installieren
161
- 2. **E-Mail-Adresse und Passwort** des AC Infinity-Kontos eingeben
162
- 3. **Abfrageintervall** festlegen (Minimum 10 Sekunden, Standard 30 Sekunden)
163
- 4. **Speichern & Schließen** klicken
165
+ 1. Install the adapter in ioBroker
166
+ 2. Enter the **email address and password** of your AC Infinity account
167
+ 3. Set the **polling interval** (minimum 10 seconds, default 30 seconds)
168
+ 4. Click **Save & Close**
164
169
 
165
- Der Adapter erkennt automatisch alle verbundenen Controller und legt den State-Baum unter `acinfinity.0.devices.<deviceId>` an.
170
+ The adapter automatically detects all connected controllers and creates the state tree under `acinfinity.0.devices.<deviceId>`.
166
171
 
167
172
  ---
168
173
 
169
- ## Wie die Port-Modi funktionieren
174
+ ## How Port Modes Work
170
175
 
171
- | Modus | Verhalten |
176
+ | Mode | Behaviour |
172
177
  |---|---|
173
- | **Off** | Gerät läuft dauerhaft mit `offSpeed` |
174
- | **On** | Gerät läuft dauerhaft mit `onSpeed` |
175
- | **Auto** | Gerät schaltet basierend auf Temperatur- und/oder Feuchtigkeitsschwellwerten |
176
- | **Timer to On** | Gerät schaltet nach `toOnMinutes` Minuten ein |
177
- | **Timer to Off** | Gerät schaltet nach `toOffMinutes` Minuten aus |
178
- | **Cycle** | Gerät wechselt zwischen EIN (`onMinutes`) und AUS (`offMinutes`) |
179
- | **Schedule** | Gerät läuft täglich zwischen `startTime` und `endTime` |
180
- | **VPD** | Gerät schaltet basierend auf VPD-Schwellwerten (Sättigungsdefizit) |
178
+ | **Off** | Device runs continuously at `offSpeed` |
179
+ | **On** | Device runs continuously at `onSpeed` |
180
+ | **Auto** | Device switches based on temperature and/or humidity thresholds |
181
+ | **Timer to On** | Device turns on after `toOnMinutes` minutes |
182
+ | **Timer to Off** | Device turns off after `toOffMinutes` minutes |
183
+ | **Cycle** | Device alternates between ON (`onMinutes`) and OFF (`offMinutes`) |
184
+ | **Schedule** | Device runs daily between `startTime` and `endTime` |
185
+ | **VPD** | Device switches based on VPD thresholds (vapour pressure deficit) |
181
186
 
182
- ### Dynamische Reaktion: Transition vs. Buffer
187
+ ### Dynamic Response: Transition vs. Buffer
183
188
 
184
- - **Transition (Übergang):** Das Gerät erhöht die Geschwindigkeit schrittweise, je weiter die Messwerte vom Ziel abweichen. Jede Schrittweite ändert die Lüftergeschwindigkeit um eine Stufe.
185
- - **Buffer (Puffer):** Erzeugt eine Hysteresezone um den Auslösepunkt, um schnelles Ein-/Ausschalten zu vermeiden.
189
+ - **Transition:** The device gradually increases speed the further measurements deviate from the target. Each step changes fan speed by one level.
190
+ - **Buffer:** Creates a hysteresis zone around the trigger point to avoid rapid switching.
186
191
 
187
192
  ---
188
193
 
189
- ## Fehlerbehebung
194
+ ## Troubleshooting
190
195
 
191
- **Adapter verbindet nicht**
192
- - E-Mail und Passwort in den Adapter-Einstellungen prüfen
193
- - Sicherstellen, dass der Controller in der AC Infinity App online ist
194
- - ioBroker-Log auf spezifische Fehlermeldungen prüfen
196
+ **Adapter does not connect**
197
+ - Check email and password in adapter settings
198
+ - Make sure the controller is online in the AC Infinity app
199
+ - Check the ioBroker log for specific error messages
195
200
 
196
- **Statusänderungen haben keine Wirkung**
197
- - Log auf API-Fehlerantworten prüfen
198
- - Adapter-Instanz neu speichern, um einen erneuten Login zu erzwingen
199
- - Erreichbarkeit des Controllers prüfen (State `info.connection`)
201
+ **State changes have no effect**
202
+ - Check the log for API error responses
203
+ - Re-save the adapter instance to force a new login
204
+ - Check controller reachability (`info.connection` state)
200
205
 
201
- **Sensorwerte fehlen**
202
- - CO₂-, Boden- und Wasserstand-States erhalten nur Daten, wenn die entsprechenden UIS-Sensoren physisch angeschlossen und mit der Cloud synchronisiert sind
206
+ **Sensor values missing**
207
+ - CO₂, soil moisture and water level states only receive data when the corresponding UIS sensors are physically connected and synced with the cloud
203
208
 
204
209
  ---
205
210
 
206
211
  ## Changelog
207
212
 
213
+ ### 0.9.7 (2026-03-02)
214
+ - Fix: remove deprecated `common.title` field from io-package.json (W184)
215
+ - Docs: add manufacturer link to README (required for repository submission)
216
+
217
+ ### 0.9.6 (2026-03-02)
218
+ - Docs: README.md translated to English (required for ioBroker community)
219
+ - Docs: German README moved to docs/de/README.md
220
+ - CI: Node.js 24.x added to test matrix
221
+
208
222
  ### 0.9.5 (2026-03-02)
209
- - Fix: LICENSE Copyright-Format korrigiert (ioBroker Checker E7001)
210
- - CI: Node.js 18.x aus Test-Matrix entfernt (Adapter erfordert Node ≥ 20)
223
+ - Fix: LICENSE copyright format corrected (ioBroker checker E7001)
224
+ - CI: Node.js 18.x removed from test matrix (adapter requires Node ≥ 20)
211
225
 
212
226
  ### 0.9.0 (2026-03-02)
213
- - Sicherheit: Auth-Token wird nicht mehr in Logs geschrieben
214
- - Stabilität: Race Condition bei parallelen Re-Login-Versuchen behoben
215
- - Robustheit: Null-Prüfung für Sensorwerte (verhindert NaN bei nicht angeschlossenen Sensoren)
216
- - Dokumentation: HTTP-Nutzung der AC Infinity API im Code kommentiert
217
- - Hinweis: AC Infinity API unterstützt kein HTTPS (serverseitige Einschränkung)
227
+ - Security: auth token no longer written to logs
228
+ - Stability: race condition in parallel re-login attempts fixed
229
+ - Robustness: null checks for sensor values (prevents NaN for unconnected sensors)
230
+ - Docs: HTTP usage of AC Infinity API documented in code
231
+ - Note: AC Infinity API does not support HTTPS (server-side limitation)
218
232
 
219
233
  ### 0.8.5 (2026-03-01)
220
- - Admin-UI: Hinweistext jetzt rot und fett dargestellt
221
- - Admin-UI: Minimales Abfrageintervall von 5 auf 10 Sekunden erhöht
234
+ - Admin UI: disclaimer text now displayed in red and bold
235
+ - Admin UI: minimum polling interval increased from 5 to 10 seconds
222
236
 
223
237
  ### 0.8.1 (2026-03-01)
224
- - Fix: JSON-Syntaxfehler (überschüssiges Komma) in io-package.json behoben
238
+ - Fix: JSON syntax error (trailing comma) in io-package.json
225
239
 
226
240
  ### 0.8.0 (2026-03-01)
227
- - Sicherheit: axios und form-data aktualisiert zur Behebung kritischer Sicherheitslücken (GHSA-4hjh-wcwx-xvwj, GHSA-43fc-jf86-j433, GHSA-fjxv-7rqg-78g4)
241
+ - Security: updated axios and form-data to fix critical vulnerabilities (GHSA-4hjh-wcwx-xvwj, GHSA-43fc-jf86-j433, GHSA-fjxv-7rqg-78g4)
228
242
 
229
243
  ### 0.7.4 (2026-03-01)
230
- - Admin-UI: Hinweistext zur eingeschränkten Gerätekompatibilität und Haftungsausschluss hinzugefügt
244
+ - Admin UI: added disclaimer note about limited device compatibility
231
245
 
232
246
  ### 0.7.3 (2026-03-01)
233
- - Admin-UI: Warnhinweis-Box entfernt, Einstellungslayout überarbeitet, Hilfe-Link korrigiert
247
+ - Admin UI: removed warning box, improved settings layout, fixed help link
234
248
 
235
249
  ### 0.7.2 (2026-03-01)
236
- - Code: Migration auf ESLint 9 mit @iobroker/eslint-config
250
+ - Code: migrated to ESLint 9 with @iobroker/eslint-config
237
251
 
238
252
  ### 0.7.1 (2026-03-01)
239
- - Wertebereiche zu Datenpunkt-Namen hinzugefügt für bessere Lesbarkeit
253
+ - Added value ranges to state names for better readability
240
254
 
241
255
  ### 0.7.0 (2026-03-01)
242
- - Adapter-Code vollständig mit Claude Code (Anthropic AI) auf Basis von homeassistant-acinfinity neu implementiert
243
- - Alle 8 Port-Modi vollständig schreibbar aus ioBroker (Off / On / Auto / Timer to On / Timer to Off / Cycle / Schedule / VPD)
244
- - curl durch axios ersetzt keine Shell-Aufrufe mehr
245
- - Neue Sensoren: CO₂, Bodenfeuchtigkeit, Wasserstand, pluggedIn
246
- - Erweiterte Controller-Typen: CTR69W, CTR69P, CTR69Q, CTR89Q, AC-ADA4, AC-ADA8
247
- - deviceType-Bug behoben im Port-Einstellungs-Handler
248
- - Hardcodierten Referenz-Payload entfernt
249
- - Abhängigkeiten aktualisiert: js-controller ≥6.0.11, admin ≥7.6.20, Node.js ≥20
256
+ - Adapter code fully reimplemented with Claude Code (Anthropic AI) based on homeassistant-acinfinity
257
+ - All 8 port modes fully writable from ioBroker (Off / On / Auto / Timer to On / Timer to Off / Cycle / Schedule / VPD)
258
+ - Replaced curl with axios — no more shell calls
259
+ - New sensors: CO₂, soil moisture, water level, pluggedIn
260
+ - Extended controller types: CTR69W, CTR69P, CTR69Q, CTR89Q, AC-ADA4, AC-ADA8
261
+ - Fixed deviceType bug in port settings handler
262
+ - Removed hardcoded reference payload
263
+ - Updated dependencies: js-controller ≥6.0.11, admin ≥7.6.20, Node.js ≥20
250
264
 
251
265
  ### 0.5.6 (2025-04-27)
252
- - Fehlerbehebungen und Verbesserungen
266
+ - Bug fixes and improvements
253
267
 
254
268
  ### 0.5.5 (2025-04-12)
255
- - Weitere Fehler und Warnungen behoben
269
+ - Further bug fixes and warnings resolved
256
270
 
257
271
  ### 0.5.2 (2025-04-08)
258
- - Weitere Fehlerbehebungen und Verbesserungen
272
+ - Further bug fixes and improvements
259
273
 
260
274
  ### 0.4.3 (2025-03-28)
261
- - Fehlerbehebungen und Verbesserungen
275
+ - Bug fixes and improvements
262
276
 
263
277
  ### 0.3.1 (2025-03-27)
264
- - Erstveröffentlichung
278
+ - Initial release
265
279
 
266
280
  ---
267
281
 
268
- ## Haftungsausschluss
269
-
270
- Die Nutzung dieser Software erfolgt ausdrücklich auf eigene Gefahr. Es wird keinerlei Garantie für die Funktionsfähigkeit, Fehlerfreiheit oder Eignung für einen bestimmten Zweck übernommen. Jegliche Haftung für direkte oder indirekte Schäden — einschließlich, aber nicht beschränkt auf Geräteausfälle, Datenverluste oder Fehlverhalten des Systems — wird ausdrücklich ausgeschlossen.
282
+ ## Disclaimer
271
283
 
272
- The use of this software is entirely at your own risk. No guarantees are made regarding functionality, reliability, or suitability for any particular purpose. Any liability for direct or indirect damages is expressly disclaimed.
284
+ The use of this software is entirely at your own risk. No guarantees are made regarding functionality, reliability, or suitability for any particular purpose. Any liability for direct or indirect damages is expressly disclaimed — including, but not limited to, device failures, data loss, or system malfunctions.
273
285
 
274
286
  ---
275
287
 
package/io-package.json CHANGED
@@ -1,8 +1,34 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "acinfinity",
4
- "version": "0.9.5",
4
+ "version": "0.9.7",
5
5
  "news": {
6
+ "0.9.7": {
7
+ "en": "Fix: remove deprecated common.title field (W184); add manufacturer link to README",
8
+ "de": "Fix: veraltetes Feld common.title entfernt (W184); Hersteller-Link in README hinzugefügt",
9
+ "ru": "Исправление: удалено устаревшее поле common.title (W184); добавлена ссылка на производителя в README",
10
+ "pt": "Fix: campo common.title obsoleto removido (W184); link do fabricante adicionado ao README",
11
+ "nl": "Fix: verouderd veld common.title verwijderd (W184); fabrikantlink toegevoegd aan README",
12
+ "fr": "Fix: champ common.title obsolète supprimé (W184); lien fabricant ajouté au README",
13
+ "it": "Fix: campo common.title obsoleto rimosso (W184); link produttore aggiunto al README",
14
+ "es": "Fix: campo common.title obsoleto eliminado (W184); enlace fabricante añadido al README",
15
+ "pl": "Poprawka: usunięto przestarzałe pole common.title (W184); dodano link producenta do README",
16
+ "uk": "Виправлення: видалено застаріле поле common.title (W184); додано посилання на виробника в README",
17
+ "zh-cn": "修复:移除已弃用的common.title字段(W184);README中添加制造商链接"
18
+ },
19
+ "0.9.6": {
20
+ "en": "Docs: README translated to English; German README moved to docs/de/; CI: Node.js 24.x added to test matrix",
21
+ "de": "Doku: README auf Englisch übersetzt; Deutsche README nach docs/de/ verschoben; CI: Node.js 24.x zur Test-Matrix hinzugefügt",
22
+ "ru": "Документация: README переведён на английский; немецкий README перемещён в docs/de/; CI: добавлен Node.js 24.x",
23
+ "pt": "Docs: README traduzido para inglês; README alemão movido para docs/de/; CI: Node.js 24.x adicionado à matriz de testes",
24
+ "nl": "Docs: README vertaald naar Engels; Duitse README verplaatst naar docs/de/; CI: Node.js 24.x toegevoegd aan testmatrix",
25
+ "fr": "Docs: README traduit en anglais; README allemand déplacé vers docs/de/; CI: Node.js 24.x ajouté à la matrice de tests",
26
+ "it": "Docs: README tradotto in inglese; README tedesco spostato in docs/de/; CI: Node.js 24.x aggiunto alla matrice di test",
27
+ "es": "Docs: README traducido al inglés; README alemán movido a docs/de/; CI: Node.js 24.x añadido a la matriz de pruebas",
28
+ "pl": "Dokumentacja: README przetłumaczony na angielski; niemiecki README przeniesiony do docs/de/; CI: dodano Node.js 24.x",
29
+ "uk": "Документація: README перекладено англійською; німецький README переміщено до docs/de/; CI: додано Node.js 24.x",
30
+ "zh-cn": "文档:README翻译为英文;德文README移至docs/de/;CI:测试矩阵新增Node.js 24.x"
31
+ },
6
32
  "0.9.5": {
7
33
  "en": "Fix: LICENSE copyright format (ioBroker checker E7001); CI: drop Node.js 18.x (requires Node >=20)",
8
34
  "de": "Fix: LICENSE Copyright-Format korrigiert (E7001); CI: Node.js 18.x entfernt (erfordert Node ≥20)",
@@ -55,19 +81,6 @@
55
81
  "uk": "Виправлення: зайва кома в io-package.json видалена",
56
82
  "zh-cn": "修复:删除 io-package.json 中多余的逗号"
57
83
  },
58
- "0.8.0": {
59
- "en": "Security: update axios and form-data to fix high and critical vulnerabilities",
60
- "de": "Sicherheit: axios und form-data aktualisiert zur Behebung kritischer Sicherheitslücken",
61
- "ru": "Безопасность: обновлены axios и form-data для устранения критических уязвимостей",
62
- "pt": "Segurança: atualização do axios e form-data para corrigir vulnerabilidades críticas",
63
- "nl": "Beveiliging: axios en form-data bijgewerkt om kritieke kwetsbaarheden te verhelpen",
64
- "fr": "Sécurité: mise à jour d'axios et form-data pour corriger des vulnérabilités critiques",
65
- "it": "Sicurezza: aggiornamento di axios e form-data per correggere vulnerabilità critiche",
66
- "es": "Seguridad: actualización de axios y form-data para corregir vulnerabilidades críticas",
67
- "pl": "Bezpieczeństwo: aktualizacja axios i form-data w celu usunięcia krytycznych luk bezpieczeństwa",
68
- "uk": "Безпека: оновлено axios та form-data для усунення критичних вразливостей",
69
- "zh-cn": "安全:更新 axios 和 form-data 以修复严重安全漏洞"
70
- },
71
84
  "0.7.4": {
72
85
  "en": "Admin UI: add disclaimer note about limited device compatibility",
73
86
  "de": "Admin-UI: Hinweis zur eingeschränkten Gerätekompatibilität hinzugefügt",
@@ -80,19 +93,6 @@
80
93
  "pl": "Admin UI: dodano informację o ograniczonej kompatybilności urządzeń",
81
94
  "uk": "Admin UI: додано застереження про обмежену сумісність пристроїв",
82
95
  "zh-cn": "管理界面:添加关于设备兼容性有限的免责声明"
83
- },
84
- "0.7.3": {
85
- "en": "Admin UI: remove warning box, clean up settings layout, fix help link",
86
- "de": "Admin-UI: Warnhinweis entfernt, Einstellungslayout bereinigt, Hilfe-Link korrigiert",
87
- "ru": "Admin UI: убран блок предупреждения, улучшен макет настроек, исправлена ссылка на справку",
88
- "pt": "Admin UI: caixa de aviso removida, layout de configurações limpo, link de ajuda corrigido",
89
- "nl": "Admin UI: waarschuwingsvak verwijderd, instellingen layout verbeterd, helplink gecorrigeerd",
90
- "fr": "Admin UI: bloc d'avertissement supprimé, mise en page des paramètres améliorée, lien d'aide corrigé",
91
- "it": "Admin UI: riquadro di avviso rimosso, layout impostazioni migliorato, link guida corretto",
92
- "es": "Admin UI: cuadro de advertencia eliminado, diseño de configuración mejorado, enlace de ayuda corregido",
93
- "pl": "Admin UI: usunięto pole ostrzeżenia, poprawiono układ ustawień, naprawiono link pomocy",
94
- "uk": "Admin UI: видалено блок попередження, покращено макет налаштувань, виправлено посилання на довідку",
95
- "zh-cn": "管理界面:移除警告框,优化设置布局,修复帮助链接"
96
96
  }
97
97
  },
98
98
  "titleLang": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.acinfinity",
3
- "version": "0.9.5",
3
+ "version": "0.9.7",
4
4
  "description": "Monitor and control AC Infinity devices",
5
5
  "author": {
6
6
  "name": "laurent Standard",