iobroker.poolcontrol 1.2.12 → 1.2.14

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 (48) hide show
  1. package/README.md +10 -0
  2. package/admin/i18n/de/translations.json +0 -2
  3. package/admin/i18n/es/translations.json +0 -2
  4. package/admin/i18n/fr/translations.json +0 -2
  5. package/admin/i18n/it/translations.json +0 -2
  6. package/admin/i18n/nl/translations.json +0 -2
  7. package/admin/i18n/pl/translations.json +0 -2
  8. package/admin/i18n/pt/translations.json +0 -2
  9. package/admin/i18n/ru/translations.json +0 -2
  10. package/admin/i18n/uk/translations.json +0 -2
  11. package/admin/i18n/zh-cn/translations.json +0 -2
  12. package/io-package.json +14 -27
  13. package/lib/helpers/aiChemistryHelpHelper.js +146 -143
  14. package/lib/i18n/de.json +69 -0
  15. package/lib/i18n/en.json +141 -0
  16. package/lib/i18n/es.json +141 -0
  17. package/lib/i18n/fr.json +141 -0
  18. package/lib/i18n/it.json +141 -0
  19. package/lib/i18n/nl.json +141 -0
  20. package/lib/i18n/pl.json +141 -0
  21. package/lib/i18n/pt.json +141 -0
  22. package/lib/i18n/ru.json +141 -0
  23. package/lib/i18n/uk.json +141 -0
  24. package/lib/i18n/zh-cn.json +141 -0
  25. package/lib/stateDefinitions/actuatorsStates.js +132 -19
  26. package/lib/stateDefinitions/aiChemistryHelpStates.js +58 -37
  27. package/lib/stateDefinitions/aiStates.js +201 -31
  28. package/lib/stateDefinitions/consumptionStates.js +140 -14
  29. package/lib/stateDefinitions/controlStates.js +120 -34
  30. package/lib/stateDefinitions/debugLogStates.js +32 -10
  31. package/lib/stateDefinitions/generalStates.js +28 -4
  32. package/lib/stateDefinitions/heatStates.js +132 -17
  33. package/lib/stateDefinitions/infoStates.js +20 -5
  34. package/lib/stateDefinitions/photovoltaicStates.js +78 -19
  35. package/lib/stateDefinitions/pumpSpeedStates.js +76 -11
  36. package/lib/stateDefinitions/pumpStates.js +100 -15
  37. package/lib/stateDefinitions/pumpStates2.js +36 -9
  38. package/lib/stateDefinitions/pumpStates3.js +92 -23
  39. package/lib/stateDefinitions/pumpStates4.js +120 -30
  40. package/lib/stateDefinitions/runtimeStates.js +74 -10
  41. package/lib/stateDefinitions/solarStates.js +68 -9
  42. package/lib/stateDefinitions/speechStates.js +133 -18
  43. package/lib/stateDefinitions/statisticsStates.js +167 -24
  44. package/lib/stateDefinitions/statusStates.js +92 -12
  45. package/lib/stateDefinitions/temperatureStates.js +117 -18
  46. package/lib/stateDefinitions/timeStates.js +43 -12
  47. package/main.js +4 -0
  48. package/package.json +1 -1
package/README.md CHANGED
@@ -189,6 +189,16 @@ New features are added regularly – please refer to the changelog.
189
189
 
190
190
  ## Changelog
191
191
 
192
+ ### 1.2.14
193
+ Release: 22.03.2026
194
+ - ### add i18n support for chemistry help texts
195
+
196
+ ### 1.2.13
197
+ Release: 22.03.2026
198
+ - Added multilingual state names and descriptions (DE/EN)
199
+ - Improved consistency of all state texts
200
+ - Minor text and structure refinements
201
+
192
202
  ### 1.2.12
193
203
  Release: 21.03.2026
194
204
  - Repository cleanup and fixes for ioBroker repository checker
@@ -153,7 +153,5 @@
153
153
  "Voice": "Stimme",
154
154
  "Volume (0–100)": "Lautstärke (0–100)",
155
155
  "Wednesday": "Mittwoch",
156
- "option1": "Option1",
157
- "option2": "Option2",
158
156
  "poolcontrol adapter settings": "Adaptereinstellungen für Poolcontrol"
159
157
  }
@@ -153,7 +153,5 @@
153
153
  "Voice": "Voz",
154
154
  "Volume (0–100)": "Volumen (0–100)",
155
155
  "Wednesday": "Miércoles",
156
- "option1": "Opción1",
157
- "option2": "opción 2",
158
156
  "poolcontrol adapter settings": "Ajustes del adaptador para poolcontrol"
159
157
  }
@@ -153,7 +153,5 @@
153
153
  "Voice": "Voix",
154
154
  "Volume (0–100)": "Volume (0 à 100)",
155
155
  "Wednesday": "Mercredi",
156
- "option1": "option1",
157
- "option2": "Option2",
158
156
  "poolcontrol adapter settings": "Paramètres d'adaptateur pour poolcontrol"
159
157
  }
@@ -153,7 +153,5 @@
153
153
  "Voice": "Voce",
154
154
  "Volume (0–100)": "Volume (0–100)",
155
155
  "Wednesday": "Mercoledì",
156
- "option1": "opzione1",
157
- "option2": "opzione2",
158
156
  "poolcontrol adapter settings": "Impostazioni dell'adattatore per poolcontrol"
159
157
  }
@@ -153,7 +153,5 @@
153
153
  "Voice": "Stem",
154
154
  "Volume (0–100)": "Volume (0–100)",
155
155
  "Wednesday": "Woensdag",
156
- "option1": "Option1",
157
- "option2": "Optie2",
158
156
  "poolcontrol adapter settings": "Adapterinstellingen voor poolcontrol"
159
157
  }
@@ -153,7 +153,5 @@
153
153
  "Voice": "Głos",
154
154
  "Volume (0–100)": "Głośność (0–100)",
155
155
  "Wednesday": "Środa",
156
- "option1": "opcja 1",
157
- "option2": "opcja2",
158
156
  "poolcontrol adapter settings": "Ustawienia adaptera dla poolcontrol"
159
157
  }
@@ -153,7 +153,5 @@
153
153
  "Voice": "Voz",
154
154
  "Volume (0–100)": "Volume (0–100)",
155
155
  "Wednesday": "Quarta-feira",
156
- "option1": "opção1",
157
- "option2": "opção2",
158
156
  "poolcontrol adapter settings": "Configurações do adaptador para poolcontrol"
159
157
  }
@@ -153,7 +153,5 @@
153
153
  "Voice": "Голос",
154
154
  "Volume (0–100)": "Громкость (0–100)",
155
155
  "Wednesday": "Среда",
156
- "option1": "вариант1",
157
- "option2": "вариант2",
158
156
  "poolcontrol adapter settings": "Настройки адаптера для poolcontrol"
159
157
  }
@@ -153,7 +153,5 @@
153
153
  "Voice": "Голос",
154
154
  "Volume (0–100)": "Обсяг (0–100)",
155
155
  "Wednesday": "Середа",
156
- "option1": "Варіант1",
157
- "option2": "Варіант2",
158
156
  "poolcontrol adapter settings": "Налаштування адаптера для poolcontrol"
159
157
  }
@@ -153,7 +153,5 @@
153
153
  "Voice": "嗓音",
154
154
  "Volume (0–100)": "音量 (0–100)",
155
155
  "Wednesday": "周三",
156
- "option1": "选项1",
157
- "option2": "选项2",
158
156
  "poolcontrol adapter settings": "poolcontrol的适配器设置"
159
157
  }
package/io-package.json CHANGED
@@ -1,8 +1,21 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "poolcontrol",
4
- "version": "1.2.12",
4
+ "version": "1.2.14",
5
5
  "news": {
6
+ "1.2.14": {
7
+ "en": "Add i18n support for chemistry help (common.states and help texts), fix React issues caused by invalid translations, and improve multilingual user guidance.",
8
+ "de": "i18n-Unterstützung für Chemie-Hilfe hinzugefügt (common.states und Hilfetexte), React-Fehler durch fehlerhafte Übersetzungen behoben und mehrsprachige Benutzerführung verbessert.",
9
+ "ru": "Добавьте поддержку i18n для справки по химии (common.states и справочные тексты), исправьте проблемы React, вызванные неверными переводами, и улучшите многоязычное руководство пользователя.",
10
+ "pt": "Adicione suporte i18n para ajuda química (common.states e textos de ajuda), corrija problemas do React causados ​​por traduções inválidas e melhore a orientação multilíngue do usuário.",
11
+ "nl": "Voeg i18n-ondersteuning toe voor scheikundige hulp (common.states en helpteksten), repareer React-problemen veroorzaakt door ongeldige vertalingen en verbeter de meertalige gebruikersbegeleiding.",
12
+ "fr": "Ajoutez la prise en charge d'i18n pour l'aide chimique (common.states et textes d'aide), corrigez les problèmes de React causés par des traductions non valides et améliorez le guidage utilisateur multilingue.",
13
+ "it": "Aggiungi il supporto i18n per la guida in chimica (common.states e testi di aiuto), risolvi i problemi di React causati da traduzioni non valide e migliora la guida utente multilingue.",
14
+ "es": "Agregue soporte i18n para ayuda sobre química (estados comunes y textos de ayuda), solucione problemas de React causados ​​por traducciones no válidas y mejore la guía del usuario multilingüe.",
15
+ "pl": "Dodaj obsługę i18n dla pomocy chemicznej (stany wspólne i teksty pomocy), rozwiąż problemy z React spowodowane nieprawidłowymi tłumaczeniami i ulepsz wielojęzyczne wskazówki dla użytkownika.",
16
+ "uk": "Додайте підтримку i18n для довідки з хімії (common.states і тексти довідки), виправте проблеми з React, викликані недійсними перекладами, і покращте багатомовні інструкції для користувачів.",
17
+ "zh-cn": "添加对化学帮助(common.states 和帮助文本)的 i18n 支持,修复无效翻译导致的 React 问题,并改进多语言用户指南。"
18
+ },
6
19
  "1.2.12": {
7
20
  "en": "Repository cleanup and fixes for ioBroker repository checker. Restored required native object in io-package.json, removed invalid properties and updated README.",
8
21
  "de": "Repository-Bereinigung und Fehlerbehebungen für den ioBroker Repository-Checker. Erforderliches native-Objekt in der io-package.json wiederhergestellt, ungültige Eigenschaften entfernt und README aktualisiert.",
@@ -16,19 +29,6 @@
16
29
  "uk": "Очищення сховища та виправлення для засобу перевірки сховища ioBroker. Відновлено необхідний рідний об’єкт у io-package.json, видалено недійсні властивості та оновлено README.",
17
30
  "zh-cn": "ioBroker 存储库检查器的存储库清理和修复。恢复了 io-package.json 中所需的本机对象,删除了无效属性并更新了 README。"
18
31
  },
19
- "1.2.11": {
20
- "en": "Repository cleanup and fixes for ioBroker repository checker. Removed invalid properties from io-package.json and updated README.",
21
- "de": "Repository-Bereinigung und Fehlerbehebungen für den ioBroker Repository-Checker. Ungültige Eigenschaften aus der io-package.json entfernt und README aktualisiert.",
22
- "ru": "Очистка репозитория и исправления для средства проверки репозитория ioBroker. Удалены недопустимые свойства из io-package.json и обновлен README.",
23
- "pt": "Limpeza de repositório e correções para verificador de repositório ioBroker. Propriedades inválidas removidas de io-package.json e README atualizado.",
24
- "nl": "Opschonen van opslagplaatsen en oplossingen voor ioBroker-repositorycontrole. Ongeldige eigenschappen uit io-package.json verwijderd en README bijgewerkt.",
25
- "fr": "Nettoyage du référentiel et correctifs pour le vérificateur de référentiel ioBroker. Suppression des propriétés invalides de io-package.json et mise à jour du README.",
26
- "it": "Pulizia del repository e correzioni per il controllo del repository ioBroker. Rimosse proprietà non valide da io-package.json e README aggiornato.",
27
- "es": "Limpieza del repositorio y correcciones para el verificador del repositorio de ioBroker. Se eliminaron propiedades no válidas de io-package.json y se actualizó README.",
28
- "pl": "Oczyszczenie repozytorium i poprawki dla modułu sprawdzania repozytorium ioBroker. Usunięto nieprawidłowe właściwości z io-package.json i zaktualizowano plik README.",
29
- "uk": "Очищення сховища та виправлення для засобу перевірки сховища ioBroker. Видалено недійсні властивості з io-package.json і оновлено README.",
30
- "zh-cn": "ioBroker 存储库检查器的存储库清理和修复。从 io-package.json 中删除了无效属性并更新了 README。"
31
- },
32
32
  "1.2.10": {
33
33
  "en": "Improved German translations and terminology in admin UI (jsonConfig). Fixed incorrect or misleading sensor names (e.g. flow vs temperature sensors) and improved overall wording and consistency.",
34
34
  "de": "Verbesserte deutsche Übersetzungen und Begrifflichkeiten in der Admin-Oberfläche (jsonConfig). Falsche bzw. missverständliche Sensorbezeichnungen (z. B. Flow vs. Temperatursensoren) korrigiert und allgemeine Formulierungen sowie Konsistenz verbessert.",
@@ -67,19 +67,6 @@
67
67
  "pl": "Poprawione definicje ról dla stanów zapisywalnych zgodnie z wytycznymi ioBroker.",
68
68
  "uk": "Виправлено визначення ролей для записуваних станів відповідно до вказівок ioBroker.",
69
69
  "zh-cn": "根据 ioBroker 指南更正了可写状态的角色定义。"
70
- },
71
- "1.2.6": {
72
- "en": "Fixed adapter checker issues, converted remaining log messages to English, updated release-script plugins and dependabot configuration.",
73
- "de": "Adapter-Checker-Probleme behoben, verbleibende Logmeldungen auf Englisch umgestellt, release-script Plugins und Dependabot-Konfiguration aktualisiert.",
74
- "ru": "Исправлены проблемы с проверкой адаптера, преобразованы оставшиеся сообщения журнала на английский язык, обновлены плагины сценариев выпуска и конфигурация зависимостей.",
75
- "pt": "Corrigidos problemas do verificador do adaptador, convertidas mensagens de log restantes para inglês, plug-ins de script de lançamento atualizados e configuração do dependabot.",
76
- "nl": "Problemen met de adaptercontrole opgelost, resterende logberichten naar het Engels geconverteerd, release-scriptplug-ins en dependabot-configuratie bijgewerkt.",
77
- "fr": "Correction des problèmes de vérification d'adaptateur, conversion des messages de journal restants en anglais, mise à jour des plugins de script de version et configuration des dépendances.",
78
- "it": "Risolti i problemi di controllo dell'adattatore, convertiti i messaggi di registro rimanenti in inglese, aggiornati i plugin degli script di rilascio e la configurazione di dependabot.",
79
- "es": "Se solucionaron problemas del verificador de adaptadores, se convirtieron los mensajes de registro restantes al inglés, se actualizaron los complementos del script de lanzamiento y la configuración del dependabot.",
80
- "pl": "Naprawiono problemy z modułem sprawdzania adaptera, przekonwertowano pozostałe komunikaty dziennika na język angielski, zaktualizowano wtyczki skryptu wydania i konfigurację zależnego bota.",
81
- "uk": "Виправлено проблеми перевірки адаптера, перетворено решту повідомлень журналу на англійську мову, оновлено плагіни сценарію випуску та конфігурацію dependabot.",
82
- "zh-cn": "修复了适配器检查器问题,将剩余日志消息转换为英语,更新了发布脚本插件和 dependentabot 配置。"
83
70
  }
84
71
  },
85
72
  "titleLang": {
@@ -1,4 +1,7 @@
1
1
  'use strict';
2
+
3
+ const { I18n } = require('@iobroker/adapter-core');
4
+
2
5
  /* eslint-disable jsdoc/require-param-description */
3
6
  /* eslint-disable jsdoc/require-returns-description */
4
7
 
@@ -150,40 +153,40 @@ const aiChemistryHelpHelper = {
150
153
  */
151
154
  _getHelpText(issue) {
152
155
  const commonFooter =
153
- '\n\nWichtig:\n' +
154
- ' Immer schrittweise vorgehen: erst messenklein korrigierenumwälzen lassenerneut messen.\n' +
155
- ' Angaben auf dem Produkt beachten (Konzentration/Beckenvolumen unterscheiden sich).\n' +
156
- ' Wenn du unsicher bist: lieber langsamer korrigieren als „mit Gewalt“.\n';
156
+ `\n\n${I18n.t('Important:')}\n` +
157
+ `• ${I18n.t('Always proceed step by step: measure firstcorrect in small steps let the water circulate measure again.')}\n` +
158
+ `• ${I18n.t('Always follow the product instructions (concentration and pool volume may differ).')}\n` +
159
+ `• ${I18n.t('If you are unsure, correct more slowly rather than forcing it.')}\n`;
157
160
 
158
161
  const map = {
159
162
  // ----------------------------------------------------------
160
163
  // pH
161
164
  // ----------------------------------------------------------
162
165
  ph_low:
163
- `Problem: pH-Wert ist zu niedrig (Wasser ist „zu sauer“).\n\n` +
164
- `Was das bedeutet:\n` +
165
- `Ein zu niedriger pH-Wert kann Material (Metalle/Einbauteile) stärker angreifen und Badereizungen begünstigen. Außerdem kann die Wasserbalance insgesamt instabil werden.\n\n` +
166
- `Häufige Ursachen:\n` +
167
- `• Viel Regen-/Frischwasser (kann das Wasser „ansäuern“)\n` +
168
- `• Niedrige Alkalinität (Puffer fehlt → pH fällt schneller)\n` +
169
- `• Häufige Korrekturen/Backwash/Wasserwechsel\n\n` +
170
- `Übliche Lösungsrichtung:\n` +
171
- `• pH mit einem pH-Plus“/pH-Heber schrittweise anheben.\n` +
172
- `• Wenn der pH ständig wieder fällt: Totalalkalinität/„Puffer“ mit prüfen, weil sonst jede pH-Korrektur nur kurz hält.\n${
166
+ `${I18n.t('Problem: pH value is too low (water is too acidic).')}\n\n` +
167
+ `${I18n.t('What this means:')}\n` +
168
+ `${I18n.t('A pH value that is too low can attack materials (metals / built-in parts) more strongly and can increase irritation during bathing. It can also make the overall water balance unstable.')}\n\n` +
169
+ `${I18n.t('Common causes:')}\n` +
170
+ `• ${I18n.t('A lot of rainwater / fresh water (can acidify the water)')}\n` +
171
+ `• ${I18n.t('Low alkalinity (buffer missing → pH drops faster)')}\n` +
172
+ `• ${I18n.t('Frequent corrections / backwashing / water changes')}\n\n` +
173
+ `${I18n.t('Typical corrective direction:')}\n` +
174
+ `• ${I18n.t('Raise the pH gradually with a pH increaser / pH plus product.')}\n` +
175
+ `• ${I18n.t('If the pH keeps dropping again, also check total alkalinity / the buffer, otherwise every pH correction will only hold for a short time.')}\n${
173
176
  commonFooter
174
177
  }`,
175
178
 
176
179
  ph_high:
177
- `Problem: pH-Wert ist zu hoch (Wasser ist „zu basisch“).\n\n` +
178
- `Was das bedeutet:\n` +
179
- `Bei zu hohem pH-Wert arbeitet Chlor/Desinfektion oft schlechter, und es kann leichter zu Trübungen/Ausfällungen kommen (z. B. Kalk). Außerdem können Augen/Haut gereizt sein.\n\n` +
180
- `Häufige Ursachen:\n` +
181
- `• Starkes „Ausgasen“/viel Sprudel (CO₂ entweicht → pH steigt)\n` +
182
- `• Hartes Wasser / hohe Alkalinität\n` +
183
- `• Manche Becken/Materialien können anfangs pH nach oben ziehen\n\n` +
184
- `Übliche Lösungsrichtung:\n` +
185
- `• pH mit pH-Minus“/pH-Senker in kleinen Schritten senken.\n` +
186
- `• Bei wiederkehrend hohem pH: Alkalinität/Wasserhärte mit betrachten, weil das die Stabilität stark beeinflusst.\n${
180
+ `${I18n.t('Problem: pH value is too high (water is too alkaline).')}\n\n` +
181
+ `${I18n.t('What this means:')}\n` +
182
+ `${I18n.t('If the pH value is too high, chlorine / disinfection often works less effectively and cloudiness / precipitation (for example lime) can occur more easily. Eyes and skin may also become irritated.')}\n\n` +
183
+ `${I18n.t('Common causes:')}\n` +
184
+ `• ${I18n.t('Strong outgassing / a lot of bubbling (CO₂ escapes → pH rises)')}\n` +
185
+ `• ${I18n.t('Hard water / high alkalinity')}\n` +
186
+ `• ${I18n.t('Some pools / materials can initially push the pH upward')}\n\n` +
187
+ `${I18n.t('Typical corrective direction:')}\n` +
188
+ `• ${I18n.t('Lower the pH in small steps with a pH reducer / pH minus product.')}\n` +
189
+ `• ${I18n.t('If the pH repeatedly rises again, also consider alkalinity / water hardness, because this strongly affects stability.')}\n${
187
190
  commonFooter
188
191
  }`,
189
192
 
@@ -191,118 +194,118 @@ const aiChemistryHelpHelper = {
191
194
  // Chlor
192
195
  // ----------------------------------------------------------
193
196
  chlor_low:
194
- `Problem: Chlorwert ist zu niedrig.\n\n` +
195
- `Was das bedeutet:\n` +
196
- `Zu wenig wirksames Chlor kann dazu führen, dass sich Keime/Algen leichter vermehren. Häufig sieht man dann zuerst „müdes“ Wasser: weniger klar, mehr Geruch, schneller Belag.\n\n` +
197
- `Häufige Ursachen:\n` +
198
- `• Viel Sonne/UV (Chlor wird schneller abgebaut)\n` +
199
- `• Hohe Badebelastung (Schweiß/Organik „verbraucht“ Chlor)\n` +
200
- `• pH-Wert ungünstig (Chlor wirkt schlechter)\n\n` +
201
- `Übliche Lösungsrichtung:\n` +
202
- `• Desinfektion wieder in einen normalen Bereich bringen und parallel pH kontrollieren.\n` +
203
- `• Wenn Chlor dauerhaft „wegbricht“: Ursachen wie organische Belastung/Filterzustand/Umwälzung mit prüfen.\n${
197
+ `${I18n.t('Problem: Chlorine level is too low.')}\n\n` +
198
+ `${I18n.t('What this means:')}\n` +
199
+ `${I18n.t('Too little effective chlorine can allow germs and algae to multiply more easily. Often the first signs are tired-looking water: less clarity, more odor, and deposits forming faster.')}\n\n` +
200
+ `${I18n.t('Common causes:')}\n` +
201
+ `• ${I18n.t('A lot of sun / UV exposure (chlorine breaks down faster)')}\n` +
202
+ `• ${I18n.t('High bathing load (sweat / organic matter consumes chlorine)')}\n` +
203
+ `• ${I18n.t('Unfavorable pH value (chlorine works less effectively)')}\n\n` +
204
+ `${I18n.t('Typical corrective direction:')}\n` +
205
+ `• ${I18n.t('Bring disinfection back into a normal range and check the pH in parallel.')}\n` +
206
+ `• ${I18n.t('If chlorine keeps dropping permanently, also check causes such as organic load, filter condition, and circulation.')}\n${
204
207
  commonFooter
205
208
  }`,
206
209
 
207
210
  chlor_high:
208
- `Problem: Chlorwert ist zu hoch.\n\n` +
209
- `Was das bedeutet:\n` +
210
- `Zu hoher Chlorwert kann Augen/Haut reizen, starken Geruch verursachen und Material/Abdeckungen stärker belasten. In diesem Zustand ist „mehr Chemie“ fast nie die richtige Richtung.\n\n` +
211
- `Häufige Ursachen:\n` +
212
- `• Zu viel nachdosiert / Schockbehandlung zu hoch\n` +
213
- `• Zu wenig Abbau (Abdeckung drauf + wenig Sonne)\n\n` +
214
- `Übliche Lösungsrichtung:\n` +
215
- `• Keine weitere Chlorzugabe.\n` +
216
- `• Zeit wirken lassen (Sonne/UV baut Chlor ab) und gut umwälzen.\n` +
217
- `• Erst wenn Chlor wieder im normalen Bereich ist, weitere Korrekturen (z. B. pH) sinnvoll bewerten.\n${
211
+ `${I18n.t('Problem: Chlorine level is too high.')}\n\n` +
212
+ `${I18n.t('What this means:')}\n` +
213
+ `${I18n.t('A chlorine level that is too high can irritate eyes and skin, cause strong odor, and put more stress on materials and covers. In this situation, adding even more chemicals is almost never the right direction.')}\n\n` +
214
+ `${I18n.t('Common causes:')}\n` +
215
+ `• ${I18n.t('Too much chlorine added / shock treatment too high')}\n` +
216
+ `• ${I18n.t('Too little natural breakdown (cover on + little sun)')}\n\n` +
217
+ `${I18n.t('Typical corrective direction:')}\n` +
218
+ `• ${I18n.t('Do not add more chlorine.')}\n` +
219
+ `• ${I18n.t('Let time do the work (sun / UV reduces chlorine) and keep the water circulating well.')}\n` +
220
+ `• ${I18n.t('Only evaluate further corrections (for example pH) once chlorine is back in a normal range.')}\n${
218
221
  commonFooter
219
222
  }`,
220
223
 
221
224
  chlor_no_effect:
222
- `Problem: „Chlor steigt trotz Zugabe nicht“.\n\n` +
223
- `Was das bedeutet:\n` +
224
- `Das passiert häufig, wenn das Wasser eine hohe „Chlornachfrage“ hat: Das zugegebene Chlor wird sofort verbraucht, bevor ein stabiler freier Chlorwert messbar bleibt.\n\n` +
225
- `Häufige Ursachen:\n` +
226
- `• Hohe organische Belastung (Schmutz, Biofilm, starke Nutzung)\n` +
227
- `• Beginnender/unsichtbarer Algenbefall\n` +
228
- `• Stark falscher pH-Wert (Wirkung eingeschränkt)\n\n` +
229
- `Übliche Lösungsrichtung:\n` +
230
- `• Erst Grundwerte prüfen (pH, Filter/Umwälzung, Sichtprüfung auf Beläge).\n` +
231
- `• Wasser „sauber bekommen“ (Filter reinigen/rückspülen, Becken bürsten), damit Chlor nicht nur „verbraucht“ wird.\n` +
232
- `• Wenn dauerhaft keine Wirkung messbar ist, liegt oft ein „oxidativer Bedarf“ vor (Chlor wird sofort gebunden/abgebaut) – dann hilft nur konsequent Ursachen reduzieren und danach erneut messen.\n${
225
+ `${I18n.t('Problem: Chlorine level does not rise despite dosing.')}\n\n` +
226
+ `${I18n.t('What this means:')}\n` +
227
+ `${I18n.t('This often happens when the water has a high chlorine demand: the added chlorine is consumed immediately before a stable free chlorine level can remain measurable.')}\n\n` +
228
+ `${I18n.t('Common causes:')}\n` +
229
+ `• ${I18n.t('High organic load (dirt, biofilm, heavy use)')}\n` +
230
+ `• ${I18n.t('Early / invisible algae growth')}\n` +
231
+ `• ${I18n.t('Strongly incorrect pH value (effectiveness reduced)')}\n\n` +
232
+ `${I18n.t('Typical corrective direction:')}\n` +
233
+ `• ${I18n.t('First check the basic values (pH, filter / circulation, visual inspection for deposits).')}\n` +
234
+ `• ${I18n.t('Get the water clean again (clean / backwash the filter, brush the pool), so chlorine is not only being consumed immediately.')}\n` +
235
+ `• ${I18n.t('If no effect can be measured permanently, there is often an oxidative demand present (chlorine is immediately bound / broken down) – then only consistent reduction of the causes and measuring again will help.')}\n${
233
236
  commonFooter
234
237
  }`,
235
238
 
236
239
  chlor_smell:
237
- `Problem: Starker „Chlorgeruch“ trotz Messwert.\n\n` +
238
- `Was das bedeutet:\n` +
239
- `Der typische „Hallenbad-Geruch“ kommt oft nicht von „zu viel gutem Chlor“, sondern von gebundenen Chlorverbindungen (Chloramine). Diese entstehen, wenn Chlor sich mit Stickstoff-/Organik aus Schweiß/Urinfrachten verbindet.\n\n` +
240
- `Häufige Ursachen:\n` +
241
- `• Hohe Badebelastung / organische Einträge\n` +
242
- `• Zu wenig Frischwasser/Abbau/Filterpflege\n` +
243
- `• Schlechte Lüftung (bei Indoor-Pools) verstärkt die Wahrnehmung\n\n` +
244
- `Übliche Lösungsrichtung:\n` +
245
- `• Ziel ist, gebundene Belastung zu reduzieren: gute Umwälzung/Filtration, Beckenreinigung, ggf. Frischwasseranteil.\n` +
246
- `• Parallel pH prüfen, weil falscher pH die Desinfektion zusätzlich verschlechtert.\n${commonFooter}`,
240
+ `${I18n.t('Problem: Strong chlorine smell despite the measured value.')}\n\n` +
241
+ `${I18n.t('What this means:')}\n` +
242
+ `${I18n.t('The typical indoor pool smell often does not come from too much good chlorine, but from bound chlorine compounds (chloramines). These are formed when chlorine combines with nitrogen / organic matter from sweat and similar contamination.')}\n\n` +
243
+ `${I18n.t('Common causes:')}\n` +
244
+ `• ${I18n.t('High bathing load / organic input')}\n` +
245
+ `• ${I18n.t('Too little fresh water / breakdown / filter care')}\n` +
246
+ `• ${I18n.t('Poor ventilation (for indoor pools) increases the perceived smell')}\n\n` +
247
+ `${I18n.t('Typical corrective direction:')}\n` +
248
+ `• ${I18n.t('The goal is to reduce bound contamination: good circulation / filtration, pool cleaning, and possibly a fresh water share.')}\n` +
249
+ `• ${I18n.t('Also check the pH in parallel, because an incorrect pH further reduces disinfection performance.')}\n${commonFooter}`,
247
250
 
248
251
  // ----------------------------------------------------------
249
252
  // Wasserbild / Optik
250
253
  // ----------------------------------------------------------
251
254
  water_green:
252
- `Problem: Wasser ist grün.\n\n` +
253
- `Was das bedeutet:\n` +
254
- `Grünes Wasser ist sehr häufig ein Hinweis auf Algenwachstum (oft ausgelöst durch zu wenig wirksames Chlor und/oder schlechte Umwälzung).\n\n` +
255
- `Häufige Ursachen:\n` +
256
- `• Freies Chlor zu niedrig oder „verbraucht“\n` +
257
- `• pH zu hochChlor wirkt deutlich schlechter\n` +
258
- `• Filter/Umwälzung unzureichend oder Filter verschmutzt\n` +
259
- `• Hohe Temperatur + Sonne (Algenwachstum wird begünstigt)\n\n` +
260
- `Übliche Lösungsrichtung:\n` +
261
- `• Wasserwerte prüfen (insb. pH und Chlor) und Umwälzung/Filterzustand verbessern.\n` +
262
- `• Becken gründlich bürsten/absaugen, damit Beläge nicht „überleben“.\n` +
263
- `• Danach geduldig filtern lassen, bis das Wasser wieder klar wird.\n${commonFooter}`,
255
+ `${I18n.t('Problem: Water is green.')}\n\n` +
256
+ `${I18n.t('What this means:')}\n` +
257
+ `${I18n.t('Green water is very often a sign of algae growth (often caused by too little effective chlorine and / or poor circulation).')}\n\n` +
258
+ `${I18n.t('Common causes:')}\n` +
259
+ `• ${I18n.t('Free chlorine too low or already consumed')}\n` +
260
+ `• ${I18n.t('pH too highchlorine works much less effectively')}\n` +
261
+ `• ${I18n.t('Insufficient filter / circulation or dirty filter')}\n` +
262
+ `• ${I18n.t('High temperature + sun (algae growth is encouraged)')}\n\n` +
263
+ `${I18n.t('Typical corrective direction:')}\n` +
264
+ `• ${I18n.t('Check the water values (especially pH and chlorine) and improve circulation / filter condition.')}\n` +
265
+ `• ${I18n.t('Brush / vacuum the pool thoroughly so deposits do not survive.')}\n` +
266
+ `• ${I18n.t('Then let the filter run patiently until the water becomes clear again.')}\n${commonFooter}`,
264
267
 
265
268
  water_cloudy:
266
- `Problem: Wasser ist trüb / grau / milchig.\n\n` +
267
- `Was das bedeutet:\n` +
268
- `Trübes Wasser entsteht oft durch feine Schwebstoffe oder chemische Ungleichgewichte (z. B. pH/Alkalinität/Kalk), die der Filter nicht gut „packt“.\n\n` +
269
- `Häufige Ursachen:\n` +
270
- `• Filter verschmutzt/zu kurze Filterlaufzeit\n` +
271
- `• pH/Alkalinität außerhalb des stabilen Bereichs\n` +
272
- `• Hohe Wasserhärte (Kalk) – besonders in Kombination mit hohem pH\n` +
273
- `• Zu wenig Desinfektionbiologische Trübung möglich\n\n` +
274
- `Übliche Lösungsrichtung:\n` +
275
- `• Filterzustand prüfen (Reinigung/Rückspülen) und ausreichend umwälzen.\n` +
276
- `• Grundwerte pH/Chlor prüfen und stabilisieren.\n` +
277
- `• Wenn die Trübung „mineralisch“ wirkt (milchig/weiß): Wasserhärte/Balance mit betrachten.\n${
269
+ `${I18n.t('Problem: Water is cloudy / gray / milky.')}\n\n` +
270
+ `${I18n.t('What this means:')}\n` +
271
+ `${I18n.t('Cloudy water is often caused by fine suspended particles or chemical imbalances (for example pH / alkalinity / lime) that the filter cannot handle well.')}\n\n` +
272
+ `${I18n.t('Common causes:')}\n` +
273
+ `• ${I18n.t('Dirty filter / filter runtime too short')}\n` +
274
+ `• ${I18n.t('pH / alkalinity outside the stable range')}\n` +
275
+ `• ${I18n.t('High water hardness (lime) – especially together with high pH')}\n` +
276
+ `• ${I18n.t('Too little disinfectionbiological cloudiness is possible')}\n\n` +
277
+ `${I18n.t('Typical corrective direction:')}\n` +
278
+ `• ${I18n.t('Check the filter condition (cleaning / backwashing) and ensure sufficient circulation.')}\n` +
279
+ `• ${I18n.t('Check the basic values pH / chlorine and stabilize them.')}\n` +
280
+ `• ${I18n.t('If the cloudiness looks mineral (milky / white), also consider water hardness / balance.')}\n${
278
281
  commonFooter
279
282
  }`,
280
283
 
281
284
  algae_visible:
282
- `Problem: Algen an Wänden oder Boden sichtbar.\n\n` +
283
- `Was das bedeutet:\n` +
284
- `Sichtbare Algen sind ein klares Zeichen, dass die Desinfektion/Umwälzung nicht ausreichend war oder lokal tote Zonen entstehen (Ecken/Leitungen).\n\n` +
285
- `Häufige Ursachen:\n` +
286
- `• Chlor zu niedrig oder „verbraucht“\n` +
287
- `• pH zu hoch (Chlor wirkt schlechter)\n` +
288
- `• Zu wenig Bürsten/Beckenpflege, schlechte Zirkulation\n\n` +
289
- `Übliche Lösungsrichtung:\n` +
290
- `• Mechanik zuerst: konsequent bürsten/absaugen, Filterpflege.\n` +
291
- `• Werte (pH/Chlor) danach stabilisieren und Umwälzung verbessern.\n` +
292
- `• Ziel ist, Algen nicht nur „chemisch“, sondern auch mechanisch zu entfernen.\n${commonFooter}`,
285
+ `${I18n.t('Problem: Algae visible on walls or floor.')}\n\n` +
286
+ `${I18n.t('What this means:')}\n` +
287
+ `${I18n.t('Visible algae are a clear sign that disinfection / circulation was not sufficient or that local dead zones are forming (corners / pipes).')}\n\n` +
288
+ `${I18n.t('Common causes:')}\n` +
289
+ `• ${I18n.t('Chlorine too low or already consumed')}\n` +
290
+ `• ${I18n.t('pH too high (chlorine works less effectively)')}\n` +
291
+ `• ${I18n.t('Too little brushing / pool care, poor circulation')}\n\n` +
292
+ `${I18n.t('Typical corrective direction:')}\n` +
293
+ `• ${I18n.t('Mechanics first: brush / vacuum consistently, maintain the filter.')}\n` +
294
+ `• ${I18n.t('Then stabilize the values (pH / chlorine) and improve circulation.')}\n` +
295
+ `• ${I18n.t('The goal is to remove algae not only chemically, but also mechanically.')}\n${commonFooter}`,
293
296
 
294
297
  foam_on_surface:
295
- `Problem: Schaumbildung auf der Wasseroberfläche.\n\n` +
296
- `Was das bedeutet:\n` +
297
- `Schaum entsteht oft durch Tenside/Organik (Sonnencreme, Körperpflege, Reinigungsreste), manche Algenmittel/Polymere oder auch Luft im System. Es ist meist kein „Chlor-Problem“, sondern ein „Stoffe-im-Wasser“-Problem.\n\n` +
298
- `Häufige Ursachen:\n` +
299
- `• Viele Lotionen/Öle im Wasser, hohe organische Belastung\n` +
300
- `• Bestimmte algenhemmende Mittel können Schaum begünstigen\n` +
301
- `• Luft zieht ins System (kleine Undichtigkeiten) → Schaum wirkt stärker\n\n` +
302
- `Übliche Lösungsrichtung:\n` +
303
- `• Oberfläche abschöpfen, Filter sauber halten, organische Einträge reduzieren.\n` +
304
- `• pH/Chlor im Blick behalten (stabile Werte helfen, Organik schneller abzubauen).\n` +
305
- `• Wenn Schaum dauerhaft bleibt: Quelle (Produkte/Einträge/Technik) systematisch eingrenzen.\n${
298
+ `${I18n.t('Problem: Foam on the water surface.')}\n\n` +
299
+ `${I18n.t('What this means:')}\n` +
300
+ `${I18n.t('Foam is often caused by surfactants / organic matter (sunscreen, body care products, cleaning residues), some algaecides / polymers, or also air in the system. It is usually not a chlorine problem, but rather a substances-in-the-water problem.')}\n\n` +
301
+ `${I18n.t('Common causes:')}\n` +
302
+ `• ${I18n.t('A lot of lotions / oils in the water, high organic load')}\n` +
303
+ `• ${I18n.t('Certain anti-algae products can promote foam')}\n` +
304
+ `• ${I18n.t('Air entering the system (small leaks) → foam appears stronger')}\n\n` +
305
+ `${I18n.t('Typical corrective direction:')}\n` +
306
+ `• ${I18n.t('Skim off the surface, keep the filter clean, and reduce organic input.')}\n` +
307
+ `• ${I18n.t('Keep an eye on pH / chlorine as well (stable values help break down organic matter faster).')}\n` +
308
+ `• ${I18n.t('If foam remains permanently, systematically narrow down the source (products / contamination / technology).')}\n${
306
309
  commonFooter
307
310
  }`,
308
311
 
@@ -310,40 +313,40 @@ const aiChemistryHelpHelper = {
310
313
  // Badegefühl / Stabilität
311
314
  // ----------------------------------------------------------
312
315
  skin_eye_irritation:
313
- `Problem: Haut- oder Augenreizungen beim Baden.\n\n` +
314
- `Was das bedeutet:\n` +
315
- `Reizungen können verschiedene Ursachen haben: zu hoher oder sehr niedriger pH, zu hohe Desinfektionskonzentration, oder gebundene Chlorverbindungen (Chloramine) bei organischer Belastung.\n\n` +
316
- `Häufige Ursachen:\n` +
317
- `• pH außerhalb des Wohlfühlbereichs\n` +
318
- `• Chlor deutlich zu hoch\n` +
319
- `• „Chlorgeruch“/Chloramine durch starke organische Einträge\n\n` +
320
- `Übliche Lösungsrichtung:\n` +
321
- `• Zuerst messen (pH & Chlor) und Werte wieder in einen normalen Bereich bringen.\n` +
322
- `• Becken/Filter sauber halten, damit organische Belastung nicht in „gebundene“ Formen kippt.\n` +
323
- `• Bei starken Beschwerden: Baden pausieren, bis Wasserwerte stabil sind.\n${commonFooter}`,
316
+ `${I18n.t('Problem: Skin or eye irritation while swimming.')}\n\n` +
317
+ `${I18n.t('What this means:')}\n` +
318
+ `${I18n.t('Irritation can have several causes: pH that is too high or very low, too high a disinfectant concentration, or bound chlorine compounds (chloramines) caused by organic contamination.')}\n\n` +
319
+ `${I18n.t('Common causes:')}\n` +
320
+ `• ${I18n.t('pH outside the comfortable range')}\n` +
321
+ `• ${I18n.t('Chlorine clearly too high')}\n` +
322
+ `• ${I18n.t('Chlorine smell / chloramines caused by strong organic input')}\n\n` +
323
+ `${I18n.t('Typical corrective direction:')}\n` +
324
+ `• ${I18n.t('Measure first (pH and chlorine) and bring the values back into a normal range.')}\n` +
325
+ `• ${I18n.t('Keep the pool / filter clean so that organic contamination does not turn into bound compounds.')}\n` +
326
+ `• ${I18n.t('If irritation is strong, pause swimming until the water values are stable.')}\n${commonFooter}`,
324
327
 
325
328
  values_unstable:
326
- `Problem: Wasserwerte sind häufig instabil (kippen schnell).\n\n` +
327
- `Was das bedeutet:\n` +
328
- `Wenn pH/Chlor ständig stark schwanken, fehlt oft „Stabilität“ im Wasser: Puffer (Alkalinität) zu niedrig/zu hoch, wechselnde Belastung, oder die Umwälzung/Filtration ist nicht konstant genug.\n\n` +
329
- `Häufige Ursachen:\n` +
330
- `• Totalalkalinität zu niedrig → pH springt/kippt schnell\n` +
331
- `• Viele kleine Korrekturen ohne ausreichende Umwälzzeit\n` +
332
- `• Filterzustand schlecht / zu kurze Filterzeiten\n` +
333
- `• Starke externe Einflüsse (Regen, Hitze, hohe Nutzung)\n\n` +
334
- `Übliche Lösungsrichtung:\n` +
335
- `• Einmal „Basis“ stabil bekommen (Puffer/Filter/Regelmäßigkeit), dann erst fein korrigieren.\n` +
336
- `• Korrigieren immer in kleinen Schritten und mit Zeit zum Durchmischen.\n${commonFooter}`,
329
+ `${I18n.t('Problem: Water values are often unstable (change quickly).')}\n\n` +
330
+ `${I18n.t('What this means:')}\n` +
331
+ `${I18n.t('If pH / chlorine fluctuate strongly all the time, the water often lacks stability: the buffer (alkalinity) is too low / too high, the load changes frequently, or circulation / filtration is not constant enough.')}\n\n` +
332
+ `${I18n.t('Common causes:')}\n` +
333
+ `• ${I18n.t('Total alkalinity too low → pH jumps / tips over quickly')}\n` +
334
+ `• ${I18n.t('Many small corrections without enough circulation time')}\n` +
335
+ `• ${I18n.t('Poor filter condition / filter times too short')}\n` +
336
+ `• ${I18n.t('Strong external influences (rain, heat, heavy use)')}\n\n` +
337
+ `${I18n.t('Typical corrective direction:')}\n` +
338
+ `• ${I18n.t('First get the basics stable (buffer / filter / regularity), then only fine-tune.')}\n` +
339
+ `• ${I18n.t('Always correct in small steps and allow enough time for mixing.')}\n${commonFooter}`,
337
340
 
338
341
  unknown_problem:
339
- `Problem: Unklar, was genau los ist.\n\n` +
340
- `Vorgehen (minimal & sinnvoll):\n` +
341
- `1) Sichtcheck: Grün? Trüb? Beläge? Schaum?\n` +
342
- `2) Zwei Messwerte reichen für den Start: pH + freies Chlor.\n` +
343
- `3) Technik prüfen: Läuft die Umwälzung? Filter sauber? Rückspülen nötig?\n\n` +
344
- `Typische Faustregel:\n` +
345
- `• Optik-Probleme (grün/trüb) sind sehr oft eine Kombination aus Desinfektion + pH + Filterung.\n` +
346
- `• „Geruch/Reizung“ ist oft nicht „zu viel Chlor“, sondern „falsch gebunden/organisch belastet“.\n${
342
+ `${I18n.t('Problem: It is unclear what exactly is wrong.')}\n\n` +
343
+ `${I18n.t('Procedure (minimal and sensible):')}\n` +
344
+ `1) ${I18n.t('Visual check: Green? Cloudy? Deposits? Foam?')}\n` +
345
+ `2) ${I18n.t('Two measured values are enough for the start: pH + free chlorine.')}\n` +
346
+ `3) ${I18n.t('Check the technology: Is circulation running? Is the filter clean? Is backwashing needed?')}\n\n` +
347
+ `${I18n.t('Typical rule of thumb:')}\n` +
348
+ `• ${I18n.t('Visual problems (green / cloudy) are very often a combination of disinfection + pH + filtration.')}\n` +
349
+ `• ${I18n.t('Odor / irritation is often not too much chlorine, but incorrectly bound / organically loaded water.')}\n${
347
350
  commonFooter
348
351
  }`,
349
352
  };
@@ -354,8 +357,8 @@ const aiChemistryHelpHelper = {
354
357
 
355
358
  // Fallback
356
359
  return (
357
- `Hinweis: Dieses Problem ist (noch) nicht bekannt.\n\n` +
358
- `Bitte wähle einen der vorhandenen Punkte aus oder nutze „Problem unklar / nicht eindeutig“.\n${
360
+ `${I18n.t('Note: This problem is not known yet.')}\n\n` +
361
+ `${I18n.t('Please select one of the existing items or use "Issue unclear / not specific".')}\n${
359
362
  commonFooter
360
363
  }`
361
364
  );