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
@@ -0,0 +1,141 @@
1
+ {
2
+ "No issue selected": "未选择问题",
3
+ "pH is too low": "pH 值太低",
4
+ "pH is too high": "pH 值太高",
5
+ "Chlorine is too low": "氯含量太低",
6
+ "Chlorine is too high": "氯含量太高",
7
+ "Chlorine does not rise despite dosing": "尽管添加剂量,氯含量仍不上升",
8
+ "Strong chlorine smell despite reading": "尽管读数,氯味强烈",
9
+ "Water is green": "水是绿色的",
10
+ "Water is cloudy / gray / milky": "水是浑浊的 / 灰色的 / 乳白色的",
11
+ "Algae visible on walls or floor": "墙壁或地板上可见藻类",
12
+ "Foam on the water surface": "水面上有泡沫",
13
+ "Skin or eye irritation when swimming": "游泳时皮肤或眼睛刺激",
14
+ "Water values are often unstable": "水值经常不稳定",
15
+ "Issue unclear / not specific": "问题不清楚 / 不具体",
16
+
17
+ "Important:": "重要:",
18
+ "Always proceed step by step: measure first → correct in small steps → let the water circulate → measure again.": "始终逐步进行:首先测量 → 小步纠正 → 让水循环 → 再次测量。",
19
+ "Always follow the product instructions (concentration and pool volume may differ).": "始终遵循产品说明(浓度和泳池体积可能不同)。",
20
+ "If you are unsure, correct more slowly rather than forcing it.": "如果不确定:纠正得慢一点,而不是强迫。",
21
+
22
+ "Problem: pH value is too low (water is too acidic).": "问题:pH 值太低(水太酸性)。",
23
+ "What this means:": "这意味着什么:",
24
+ "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.": "pH 值太低会更强烈地攻击材料(金属 / 内置部件),并可能增加沐浴时的刺激。它还可能使整体水平衡不稳定。",
25
+ "Common causes:": "常见原因:",
26
+ "A lot of rainwater / fresh water (can acidify the water)": "大量雨水 / 淡水(可能酸化水)",
27
+ "Low alkalinity (buffer missing → pH drops faster)": "低碱度(缓冲剂缺失 → pH 下降更快)",
28
+ "Frequent corrections / backwashing / water changes": "频繁纠正 / 反冲洗 / 换水",
29
+ "Typical corrective direction:": "典型纠正方向:",
30
+ "Raise the pH gradually with a pH increaser / pH plus product.": "使用 pH 增高剂 / pH plus 产品逐渐提高 pH。",
31
+ "If the pH keeps dropping again, also check total alkalinity / the buffer, otherwise every pH correction will only hold for a short time.": "如果 pH 继续下降,也检查总碱度 / 缓冲剂,否则每次 pH 纠正只会持续很短时间。",
32
+
33
+ "Problem: pH value is too high (water is too alkaline).": "问题:pH 值太高(水太碱性)。",
34
+ "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.": "如果 pH 值太高,氯 / 消毒通常工作效率较低,浑浊 / 沉淀(例如石灰)更容易发生。眼睛和皮肤也可能受到刺激。",
35
+ "Strong outgassing / a lot of bubbling (CO₂ escapes → pH rises)": "强烈出气 / 大量气泡(CO₂ 逸出 → pH 上升)",
36
+ "Hard water / high alkalinity": "硬水 / 高碱度",
37
+ "Some pools / materials can initially push the pH upward": "一些泳池 / 材料最初可能推动 pH 向上",
38
+ "Lower the pH in small steps with a pH reducer / pH minus product.": "使用 pH 降低剂 / pH minus 产品小步降低 pH。",
39
+ "If the pH repeatedly rises again, also consider alkalinity / water hardness, because this strongly affects stability.": "如果 pH 反复上升,也考虑碱度 / 水硬度,因为这强烈影响稳定性。",
40
+
41
+ "Problem: Chlorine level is too low.": "问题:氯含量太低。",
42
+ "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.": "有效氯太少可能让细菌和藻类更容易繁殖。通常第一个迹象是看起来疲惫的水:清晰度较低,气味更多,沉淀形成更快。",
43
+ "A lot of sun / UV exposure (chlorine breaks down faster)": "大量阳光 / UV 暴露(氯分解更快)",
44
+ "High bathing load (sweat / organic matter consumes chlorine)": "高沐浴负荷(汗水 / 有机物消耗氯)",
45
+ "Unfavorable pH value (chlorine works less effectively)": "不利 pH 值(氯工作效率较低)",
46
+ "Bring disinfection back into a normal range and check the pH in parallel.": "将消毒带回正常范围并并行检查 pH。",
47
+ "If chlorine keeps dropping permanently, also check causes such as organic load, filter condition, and circulation.": "如果氯持续永久下降,也检查原因如有机负荷、过滤器状况和循环。",
48
+
49
+ "Problem: Chlorine level is too high.": "问题:氯含量太高。",
50
+ "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.": "氯含量太高可能刺激眼睛和皮肤,引起强烈气味,并给材料和覆盖物带来更多压力。在这种情况下,添加更多化学品几乎永远不是正确的方向。",
51
+ "Too much chlorine added / shock treatment too high": "添加氯太多 / 冲击处理太高",
52
+ "Too little natural breakdown (cover on + little sun)": "自然分解太少(覆盖物开启 + 阳光少)",
53
+ "Do not add more chlorine.": "不要添加更多氯。",
54
+ "Let time do the work (sun / UV reduces chlorine) and keep the water circulating well.": "让时间做工作(阳光 / UV 减少氯)并保持水循环良好。",
55
+ "Only evaluate further corrections (for example pH) once chlorine is back in a normal range.": "只有当氯回到正常范围时,才评估进一步纠正(例如 pH)。",
56
+
57
+ "Problem: Chlorine level does not rise despite dosing.": "问题:尽管添加剂量,氯含量仍不上升。",
58
+ "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.": "这通常发生在水有高氯需求时:添加的氯在稳定自由氯水平可以保持可测量之前立即被消耗。",
59
+ "High organic load (dirt, biofilm, heavy use)": "高有机负荷(污垢、生物膜、重度使用)",
60
+ "Early / invisible algae growth": "早期 / 不可见藻类生长",
61
+ "Strongly incorrect pH value (effectiveness reduced)": "强烈不正确 pH 值(有效性降低)",
62
+ "First check the basic values (pH, filter / circulation, visual inspection for deposits).": "首先检查基本值(pH、过滤器 / 循环、视觉检查沉淀)。",
63
+ "Get the water clean again (clean / backwash the filter, brush the pool), so chlorine is not only being consumed immediately.": "再次清洁水(清洁 / 反冲洗过滤器、刷泳池),这样氯不会只被立即消耗。",
64
+ "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.": "如果没有效果可以永久测量,通常存在氧化需求(氯立即被绑定 / 分解) – 然后只有一致减少原因和再次测量会有帮助。",
65
+
66
+ "Problem: Strong chlorine smell despite the measured value.": "问题:尽管测量值,氯味强烈。",
67
+ "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.": "典型的室内泳池气味通常不是来自太多好氯,而是来自绑定氯化合物(氯胺)。这些是在氯与氮 / 有机物从汗水和类似污染结合时形成的。",
68
+ "High bathing load / organic input": "高沐浴负荷 / 有机输入",
69
+ "Too little fresh water / breakdown / filter care": "淡水太少 / 分解 / 过滤器护理",
70
+ "Poor ventilation (for indoor pools) increases the perceived smell": "通风不良(对于室内泳池)增加感知气味",
71
+ "The goal is to reduce bound contamination: good circulation / filtration, pool cleaning, and possibly a fresh water share.": "目标是减少绑定污染:良好循环 / 过滤、泳池清洁,并可能有淡水份额。",
72
+ "Also check the pH in parallel, because an incorrect pH further reduces disinfection performance.": "也并行检查 pH,因为不正确的 pH 进一步降低消毒性能。",
73
+
74
+ "Problem: Water is green.": "问题:水是绿色的。",
75
+ "Green water is very often a sign of algae growth (often caused by too little effective chlorine and / or poor circulation).": "绿水非常经常是藻类生长的迹象(经常由太少有效氯和 / 或不良循环引起)。",
76
+ "Free chlorine too low or already consumed": "自由氯太低或已被消耗",
77
+ "pH too high → chlorine works much less effectively": "pH 太高 → 氯工作效率低得多",
78
+ "Insufficient filter / circulation or dirty filter": "过滤器 / 循环不足或过滤器脏",
79
+ "High temperature + sun (algae growth is encouraged)": "高温 + 阳光(藻类生长被鼓励)",
80
+ "Check the water values (especially pH and chlorine) and improve circulation / filter condition.": "检查水值(尤其是 pH 和氯)并改善循环 / 过滤器状况。",
81
+ "Brush / vacuum the pool thoroughly so deposits do not survive.": "彻底刷 / 吸泳池以便沉淀不存活。",
82
+ "Then let the filter run patiently until the water becomes clear again.": "然后让过滤器耐心运行直到水再次变清。",
83
+
84
+ "Problem: Water is cloudy / gray / milky.": "问题:水是浑浊的 / 灰色的 / 乳白色的。",
85
+ "Cloudy water is often caused by fine suspended particles or chemical imbalances (for example pH / alkalinity / lime) that the filter cannot handle well.": "浑浊水经常由细悬浮颗粒或化学不平衡引起(例如 pH / 碱度 / 石灰),过滤器无法很好处理。",
86
+ "Dirty filter / filter runtime too short": "脏过滤器 / 过滤器运行时间太短",
87
+ "pH / alkalinity outside the stable range": "pH / 碱度在稳定范围之外",
88
+ "High water hardness (lime) – especially together with high pH": "高水硬度(石灰) – 尤其是与高 pH 一起",
89
+ "Too little disinfection → biological cloudiness is possible": "消毒太少 → 生物浑浊可能",
90
+ "Check the filter condition (cleaning / backwashing) and ensure sufficient circulation.": "检查过滤器状况(清洁 / 反冲洗)并确保足够循环。",
91
+ "Check the basic values pH / chlorine and stabilize them.": "检查基本值 pH / 氯并稳定它们。",
92
+ "If the cloudiness looks mineral (milky / white), also consider water hardness / balance.": "如果浑浊看起来矿物质(乳白 / 白),也考虑水硬度 / 平衡。",
93
+
94
+ "Problem: Algae visible on walls or floor.": "问题:墙壁或地板上可见藻类。",
95
+ "Visible algae are a clear sign that disinfection / circulation was not sufficient or that local dead zones are forming (corners / pipes).": "可见藻类是消毒 / 循环不足或局部死区正在形成(角落 / 管道)的明确迹象。",
96
+ "Chlorine too low or already consumed": "氯太低或已被消耗",
97
+ "pH too high (chlorine works less effectively)": "pH 太高(氯工作效率较低)",
98
+ "Too little brushing / pool care, poor circulation": "刷洗太少 / 泳池护理,循环不良",
99
+ "Mechanics first: brush / vacuum consistently, maintain the filter.": "机械首先:一致刷 / 吸,维护过滤器。",
100
+ "Then stabilize the values (pH / chlorine) and improve circulation.": "然后稳定值(pH / 氯)并改善循环。",
101
+ "The goal is to remove algae not only chemically, but also mechanically.": "目标不仅是化学上移除藻类,还要机械上。",
102
+
103
+ "Problem: Foam on the water surface.": "问题:水面上有泡沫。",
104
+ "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.": "泡沫经常由表面活性剂 / 有机物引起(防晒霜、身体护理产品、清洁残留),一些藻类杀灭剂 / 聚合物,或也空气在系统中。通常不是氯问题,而是水中物质问题。",
105
+ "A lot of lotions / oils in the water, high organic load": "水中很多乳液 / 油,高有机负荷",
106
+ "Certain anti-algae products can promote foam": "某些抗藻产品可以促进泡沫",
107
+ "Air entering the system (small leaks) → foam appears stronger": "空气进入系统(小泄漏) → 泡沫显得更强",
108
+ "Skim off the surface, keep the filter clean, and reduce organic input.": "从表面撇去,保持过滤器清洁,并减少有机输入。",
109
+ "Keep an eye on pH / chlorine as well (stable values help break down organic matter faster).": "也关注 pH / 氯(稳定值帮助更快分解有机物)。",
110
+ "If foam remains permanently, systematically narrow down the source (products / contamination / technology).": "如果泡沫永久存在,系统地缩小来源(产品 / 污染 / 技术)。",
111
+
112
+ "Problem: Skin or eye irritation while swimming.": "问题:游泳时皮肤或眼睛刺激。",
113
+ "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.": "刺激可能有几个原因:pH 太高或非常低,消毒剂浓度太高,或由有机污染引起的绑定氯化合物(氯胺)。",
114
+ "pH outside the comfortable range": "pH 在舒适范围之外",
115
+ "Chlorine clearly too high": "氯明显太高",
116
+ "Chlorine smell / chloramines caused by strong organic input": "氯味 / 由强有机输入引起的氯胺",
117
+ "Measure first (pH and chlorine) and bring the values back into a normal range.": "首先测量(pH 和氯)并将值带回正常范围。",
118
+ "Keep the pool / filter clean so that organic contamination does not turn into bound compounds.": "保持泳池 / 过滤器清洁以便有机污染不变成绑定化合物。",
119
+ "If irritation is strong, pause swimming until the water values are stable.": "如果刺激强烈,暂停游泳直到水值稳定。",
120
+
121
+ "Problem: Water values are often unstable (change quickly).": "问题:水值经常不稳定(变化快)。",
122
+ "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.": "如果 pH / 氯总是强烈波动,水经常缺乏稳定性:缓冲剂(碱度)太低 / 太高,负荷频繁变化,或循环 / 过滤不够恒定。",
123
+ "Total alkalinity too low → pH jumps / tips over quickly": "总碱度太低 → pH 跳跃 / 快速翻转",
124
+ "Many small corrections without enough circulation time": "许多小纠正没有足够循环时间",
125
+ "Poor filter condition / filter times too short": "过滤器状况差 / 过滤时间太短",
126
+ "Strong external influences (rain, heat, heavy use)": "强外部影响(雨、热、重度使用)",
127
+ "First get the basics stable (buffer / filter / regularity), then only fine-tune.": "首先使基础稳定(缓冲剂 / 过滤器 / 规律性),然后只微调。",
128
+ "Always correct in small steps and allow enough time for mixing.": "总是小步纠正并允许足够时间混合。",
129
+
130
+ "Problem: It is unclear what exactly is wrong.": "问题:不清楚到底出了什么问题。",
131
+ "Procedure (minimal and sensible):": "程序(最小和合理):",
132
+ "Visual check: Green? Cloudy? Deposits? Foam?": "视觉检查:绿色?浑浊?沉淀?泡沫?",
133
+ "Two measured values are enough for the start: pH + free chlorine.": "两个测量值足够开始:pH + 自由氯。",
134
+ "Check the technology: Is circulation running? Is the filter clean? Is backwashing needed?": "检查技术:循环在运行吗?过滤器干净吗?需要反冲洗吗?",
135
+ "Typical rule of thumb:": "典型经验法则:",
136
+ "Visual problems (green / cloudy) are very often a combination of disinfection + pH + filtration.": "视觉问题(绿色 / 浑浊)非常经常是消毒 + pH + 过滤的组合。",
137
+ "Odor / irritation is often not too much chlorine, but incorrectly bound / organically loaded water.": "气味 / 刺激经常不是太多氯,而是错误绑定 / 有机负荷水。",
138
+
139
+ "Note: This problem is not known yet.": "注意:这个问题还不知道。",
140
+ "Please select one of the existing items or use \"Issue unclear / not specific\".": "请选择现有项目之一或使用 \"问题不清楚 / 不具体\"。"
141
+ }
@@ -28,7 +28,10 @@ async function createActuatorsStates(adapter) {
28
28
  await adapter.setObjectNotExistsAsync('actuators', {
29
29
  type: 'channel',
30
30
  common: {
31
- name: 'Additional actuators',
31
+ name: {
32
+ en: 'Additional actuators',
33
+ de: 'Zusatz-Aktoren',
34
+ },
32
35
  },
33
36
  native: {},
34
37
  });
@@ -39,7 +42,10 @@ async function createActuatorsStates(adapter) {
39
42
  await adapter.setObjectNotExistsAsync('actuators.lighting', {
40
43
  type: 'channel',
41
44
  common: {
42
- name: 'Lighting',
45
+ name: {
46
+ en: 'Lighting',
47
+ de: 'Beleuchtung',
48
+ },
43
49
  },
44
50
  native: {},
45
51
  });
@@ -50,7 +56,10 @@ async function createActuatorsStates(adapter) {
50
56
  await adapter.setObjectNotExistsAsync(base, {
51
57
  type: 'channel',
52
58
  common: {
53
- name: `Lighting ${i}`,
59
+ name: {
60
+ en: `Lighting ${i}`,
61
+ de: `Beleuchtung ${i}`,
62
+ },
54
63
  },
55
64
  native: {},
56
65
  });
@@ -58,7 +67,14 @@ async function createActuatorsStates(adapter) {
58
67
  await adapter.setObjectNotExistsAsync(`${base}.switch`, {
59
68
  type: 'state',
60
69
  common: {
61
- name: 'Switch (On/Off)',
70
+ name: {
71
+ en: 'Switch (On/Off)',
72
+ de: 'Schalter (Ein/Aus)',
73
+ },
74
+ desc: {
75
+ en: 'Switch state for actuator on/off control',
76
+ de: 'Schaltzustand für die Ein-/Aus-Steuerung des Aktors',
77
+ },
62
78
  type: 'boolean',
63
79
  role: 'switch',
64
80
  read: true,
@@ -72,7 +88,14 @@ async function createActuatorsStates(adapter) {
72
88
  await adapter.setObjectNotExistsAsync(`${base}.active`, {
73
89
  type: 'state',
74
90
  common: {
75
- name: 'Active',
91
+ name: {
92
+ en: 'Active',
93
+ de: 'Aktiv',
94
+ },
95
+ desc: {
96
+ en: 'Shows whether this actuator is enabled in the instance configuration',
97
+ de: 'Zeigt an, ob dieser Aktor in der Instanzkonfiguration aktiviert ist',
98
+ },
76
99
  type: 'boolean',
77
100
  role: 'indicator',
78
101
  read: true,
@@ -87,7 +110,14 @@ async function createActuatorsStates(adapter) {
87
110
  await adapter.setObjectNotExistsAsync(`${base}.name`, {
88
111
  type: 'state',
89
112
  common: {
90
- name: 'Name',
113
+ name: {
114
+ en: 'Name',
115
+ de: 'Name',
116
+ },
117
+ desc: {
118
+ en: 'Custom name from the instance configuration for this actuator',
119
+ de: 'Frei vergebener Name aus der Instanzkonfiguration für diesen Aktor',
120
+ },
91
121
  type: 'string',
92
122
  role: 'text',
93
123
  read: true,
@@ -102,7 +132,14 @@ async function createActuatorsStates(adapter) {
102
132
  await adapter.setObjectNotExistsAsync(`${base}.permanent`, {
103
133
  type: 'state',
104
134
  common: {
105
- name: 'Continuous operation',
135
+ name: {
136
+ en: 'Continuous operation',
137
+ de: 'Dauerbetrieb',
138
+ },
139
+ desc: {
140
+ en: 'Enables continuous operation for this actuator',
141
+ de: 'Aktiviert den Dauerbetrieb für diesen Aktor',
142
+ },
106
143
  type: 'boolean',
107
144
  role: 'switch',
108
145
  read: true,
@@ -117,7 +154,14 @@ async function createActuatorsStates(adapter) {
117
154
  await adapter.setObjectNotExistsAsync(`${base}.runtime_minutes`, {
118
155
  type: 'state',
119
156
  common: {
120
- name: 'Runtime (minutes)',
157
+ name: {
158
+ en: 'Runtime (minutes)',
159
+ de: 'Laufzeit (Minuten)',
160
+ },
161
+ desc: {
162
+ en: 'Configured runtime in minutes for this actuator',
163
+ de: 'Eingestellte Laufzeit in Minuten für diesen Aktor',
164
+ },
121
165
  type: 'number',
122
166
  role: 'level',
123
167
  read: true,
@@ -133,7 +177,14 @@ async function createActuatorsStates(adapter) {
133
177
  await adapter.setObjectNotExistsAsync(`${base}.remaining_minutes`, {
134
178
  type: 'state',
135
179
  common: {
136
- name: 'Remaining runtime',
180
+ name: {
181
+ en: 'Remaining runtime',
182
+ de: 'Verbleibende Laufzeit',
183
+ },
184
+ desc: {
185
+ en: 'Remaining runtime in minutes for this actuator',
186
+ de: 'Verbleibende Laufzeit dieses Aktors in Minuten',
187
+ },
137
188
  type: 'number',
138
189
  role: 'value',
139
190
  read: true,
@@ -147,7 +198,14 @@ async function createActuatorsStates(adapter) {
147
198
  await adapter.setObjectNotExistsAsync(`${base}.status`, {
148
199
  type: 'state',
149
200
  common: {
150
- name: 'Status',
201
+ name: {
202
+ en: 'Status',
203
+ de: 'Status',
204
+ },
205
+ desc: {
206
+ en: 'Current status text of this actuator',
207
+ de: 'Aktueller Statustext dieses Aktors',
208
+ },
151
209
  type: 'string',
152
210
  role: 'text',
153
211
  read: true,
@@ -164,7 +222,10 @@ async function createActuatorsStates(adapter) {
164
222
  await adapter.setObjectNotExistsAsync('actuators.extrapumps', {
165
223
  type: 'channel',
166
224
  common: {
167
- name: 'Auxiliary pumps & attractions',
225
+ name: {
226
+ en: 'Auxiliary pumps & attractions',
227
+ de: 'Zusatzpumpen & Attraktionen',
228
+ },
168
229
  },
169
230
  native: {},
170
231
  });
@@ -175,7 +236,10 @@ async function createActuatorsStates(adapter) {
175
236
  await adapter.setObjectNotExistsAsync(base, {
176
237
  type: 'channel',
177
238
  common: {
178
- name: `Auxiliary pump / attraction ${i}`,
239
+ name: {
240
+ en: `Auxiliary pump / attraction ${i}`,
241
+ de: `Zusatzpumpe / Attraktion ${i}`,
242
+ },
179
243
  },
180
244
  native: {},
181
245
  });
@@ -183,7 +247,14 @@ async function createActuatorsStates(adapter) {
183
247
  await adapter.setObjectNotExistsAsync(`${base}.switch`, {
184
248
  type: 'state',
185
249
  common: {
186
- name: 'Switch (On/Off)',
250
+ name: {
251
+ en: 'Switch (On/Off)',
252
+ de: 'Schalter (Ein/Aus)',
253
+ },
254
+ desc: {
255
+ en: 'Switch state for actuator on/off control',
256
+ de: 'Schaltzustand für die Ein-/Aus-Steuerung des Aktors',
257
+ },
187
258
  type: 'boolean',
188
259
  role: 'switch',
189
260
  read: true,
@@ -197,7 +268,14 @@ async function createActuatorsStates(adapter) {
197
268
  await adapter.setObjectNotExistsAsync(`${base}.active`, {
198
269
  type: 'state',
199
270
  common: {
200
- name: 'Active',
271
+ name: {
272
+ en: 'Active',
273
+ de: 'Aktiv',
274
+ },
275
+ desc: {
276
+ en: 'Shows whether this actuator is enabled in the instance configuration',
277
+ de: 'Zeigt an, ob dieser Aktor in der Instanzkonfiguration aktiviert ist',
278
+ },
201
279
  type: 'boolean',
202
280
  role: 'indicator',
203
281
  read: true,
@@ -212,7 +290,14 @@ async function createActuatorsStates(adapter) {
212
290
  await adapter.setObjectNotExistsAsync(`${base}.name`, {
213
291
  type: 'state',
214
292
  common: {
215
- name: 'Name',
293
+ name: {
294
+ en: 'Name',
295
+ de: 'Name',
296
+ },
297
+ desc: {
298
+ en: 'Custom name from the instance configuration for this actuator',
299
+ de: 'Frei vergebener Name aus der Instanzkonfiguration für diesen Aktor',
300
+ },
216
301
  type: 'string',
217
302
  role: 'text',
218
303
  read: true,
@@ -227,7 +312,14 @@ async function createActuatorsStates(adapter) {
227
312
  await adapter.setObjectNotExistsAsync(`${base}.permanent`, {
228
313
  type: 'state',
229
314
  common: {
230
- name: 'Continuous operation',
315
+ name: {
316
+ en: 'Continuous operation',
317
+ de: 'Dauerbetrieb',
318
+ },
319
+ desc: {
320
+ en: 'Enables continuous operation for this actuator',
321
+ de: 'Aktiviert den Dauerbetrieb für diesen Aktor',
322
+ },
231
323
  type: 'boolean',
232
324
  role: 'switch',
233
325
  read: true,
@@ -242,7 +334,14 @@ async function createActuatorsStates(adapter) {
242
334
  await adapter.setObjectNotExistsAsync(`${base}.runtime_minutes`, {
243
335
  type: 'state',
244
336
  common: {
245
- name: 'Runtime (minutes)',
337
+ name: {
338
+ en: 'Runtime (minutes)',
339
+ de: 'Laufzeit (Minuten)',
340
+ },
341
+ desc: {
342
+ en: 'Configured runtime in minutes for this actuator',
343
+ de: 'Eingestellte Laufzeit in Minuten für diesen Aktor',
344
+ },
246
345
  type: 'number',
247
346
  role: 'level',
248
347
  read: true,
@@ -258,7 +357,14 @@ async function createActuatorsStates(adapter) {
258
357
  await adapter.setObjectNotExistsAsync(`${base}.remaining_minutes`, {
259
358
  type: 'state',
260
359
  common: {
261
- name: 'Remaining runtime',
360
+ name: {
361
+ en: 'Remaining runtime',
362
+ de: 'Verbleibende Laufzeit',
363
+ },
364
+ desc: {
365
+ en: 'Remaining runtime in minutes for this actuator',
366
+ de: 'Verbleibende Laufzeit dieses Aktors in Minuten',
367
+ },
262
368
  type: 'number',
263
369
  role: 'value',
264
370
  read: true,
@@ -272,7 +378,14 @@ async function createActuatorsStates(adapter) {
272
378
  await adapter.setObjectNotExistsAsync(`${base}.status`, {
273
379
  type: 'state',
274
380
  common: {
275
- name: 'Status',
381
+ name: {
382
+ en: 'Status',
383
+ de: 'Status',
384
+ },
385
+ desc: {
386
+ en: 'Current status text of this actuator',
387
+ de: 'Aktueller Statustext dieses Aktors',
388
+ },
276
389
  type: 'string',
277
390
  role: 'text',
278
391
  read: true,
@@ -1,5 +1,7 @@
1
1
  'use strict';
2
2
 
3
+ const { I18n } = require('@iobroker/adapter-core');
4
+
3
5
  /**
4
6
  * aiChemistryHelpStates.js
5
7
  * ----------------------------------------------------------
@@ -27,13 +29,43 @@ async function createAiChemistryHelpStates(adapter) {
27
29
  // FIX: Logs must be English (mcm requirement)
28
30
  adapter.log.debug('[aiChemistryHelpStates] Initialization started');
29
31
 
32
+ const issueStates = {
33
+ none: I18n.t('No issue selected'),
34
+
35
+ // pH
36
+ ph_low: I18n.t('pH is too low'),
37
+ ph_high: I18n.t('pH is too high'),
38
+
39
+ // Chlorine / disinfection
40
+ chlor_low: I18n.t('Chlorine is too low'),
41
+ chlor_high: I18n.t('Chlorine is too high'),
42
+ chlor_no_effect: I18n.t('Chlorine does not rise despite dosing'),
43
+ chlor_smell: I18n.t('Strong chlorine smell despite reading'),
44
+
45
+ // Water appearance
46
+ water_green: I18n.t('Water is green'),
47
+ water_cloudy: I18n.t('Water is cloudy / gray / milky'),
48
+ algae_visible: I18n.t('Algae visible on walls or floor'),
49
+ foam_on_surface: I18n.t('Foam on the water surface'),
50
+
51
+ // Swim feel / stability
52
+ skin_eye_irritation: I18n.t('Skin or eye irritation when swimming'),
53
+ values_unstable: I18n.t('Water values are often unstable'),
54
+
55
+ // Uncertainty
56
+ unknown_problem: I18n.t('Issue unclear / not specific'),
57
+ };
58
+
30
59
  // ----------------------------------------------------------
31
60
  // Channel: ai.chemistry_help
32
61
  // ----------------------------------------------------------
33
62
  await adapter.setObjectNotExistsAsync('ai.chemistry_help', {
34
63
  type: 'channel',
35
64
  common: {
36
- name: 'Chemistry help (explanations & causes)',
65
+ name: {
66
+ en: 'Chemistry help (explanations & causes)',
67
+ de: 'Chemie-Hilfe (Erklärungen & Ursachen)',
68
+ },
37
69
  },
38
70
  native: {},
39
71
  });
@@ -44,39 +76,20 @@ async function createAiChemistryHelpStates(adapter) {
44
76
  await adapter.setObjectNotExistsAsync('ai.chemistry_help.issue', {
45
77
  type: 'state',
46
78
  common: {
47
- name: 'Chemistry help: select issue',
48
- desc: 'Manual selection of an observed pool issue to display general explanations.',
79
+ name: {
80
+ en: 'Chemistry help: select issue',
81
+ de: 'Chemie-Hilfe: Problem auswählen',
82
+ },
83
+ desc: {
84
+ en: 'Manual selection of an observed pool issue to display general explanations.',
85
+ de: 'Manuelle Auswahl eines beobachteten Poolproblems zur Anzeige allgemeiner Erklärungen.',
86
+ },
49
87
  type: 'string',
50
88
  role: 'level',
51
89
  read: true,
52
90
  write: true,
53
91
  def: 'none',
54
- states: {
55
- none: 'No issue selected',
56
-
57
- // pH
58
- ph_low: 'pH is too low',
59
- ph_high: 'pH is too high',
60
-
61
- // Chlorine / disinfection
62
- chlor_low: 'Chlorine is too low',
63
- chlor_high: 'Chlorine is too high',
64
- chlor_no_effect: 'Chlorine does not rise despite dosing',
65
- chlor_smell: 'Strong chlorine smell despite reading',
66
-
67
- // Water appearance
68
- water_green: 'Water is green',
69
- water_cloudy: 'Water is cloudy / gray / milky',
70
- algae_visible: 'Algae visible on walls or floor',
71
- foam_on_surface: 'Foam on the water surface',
72
-
73
- // Swim feel / stability
74
- skin_eye_irritation: 'Skin or eye irritation when swimming',
75
- values_unstable: 'Water values are often unstable',
76
-
77
- // Uncertainty
78
- unknown_problem: 'Issue unclear / not specific',
79
- },
92
+ states: issueStates,
80
93
  },
81
94
  native: {},
82
95
  });
@@ -87,10 +100,14 @@ async function createAiChemistryHelpStates(adapter) {
87
100
  await adapter.setObjectNotExistsAsync('ai.chemistry_help.help_text', {
88
101
  type: 'state',
89
102
  common: {
90
- // FIX: i18n for name
91
- name: 'Chemistry help: explanation',
92
- // FIX: i18n for desc
93
- desc: 'Explanatory text about causes and general approaches (no dosing, no control).',
103
+ name: {
104
+ en: 'Chemistry help: explanation',
105
+ de: 'Chemie-Hilfe: Erklärung',
106
+ },
107
+ desc: {
108
+ en: 'Explanatory text about causes and general approaches (no dosing, no control).',
109
+ de: 'Erklärender Text zu Ursachen und allgemeinen Ansätzen (keine Dosierung, keine Steuerung).',
110
+ },
94
111
  type: 'string',
95
112
  role: 'text',
96
113
  read: true,
@@ -106,10 +123,14 @@ async function createAiChemistryHelpStates(adapter) {
106
123
  await adapter.setObjectNotExistsAsync('ai.chemistry_help.last_issue_time', {
107
124
  type: 'state',
108
125
  common: {
109
- // FIX: i18n for name
110
- name: 'Chemistry help: last selection',
111
- // FIX: i18n for desc
112
- desc: 'Timestamp of the last selected chemistry help issue.',
126
+ name: {
127
+ en: 'Chemistry help: last selection',
128
+ de: 'Chemie-Hilfe: letzte Auswahl',
129
+ },
130
+ desc: {
131
+ en: 'Timestamp of the last selected chemistry help issue.',
132
+ de: 'Zeitstempel des zuletzt ausgewählten Chemie-Hilfe-Problems.',
133
+ },
113
134
  type: 'number',
114
135
  role: 'value.time',
115
136
  read: true,