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.
- package/README.md +10 -0
- package/admin/i18n/de/translations.json +0 -2
- package/admin/i18n/es/translations.json +0 -2
- package/admin/i18n/fr/translations.json +0 -2
- package/admin/i18n/it/translations.json +0 -2
- package/admin/i18n/nl/translations.json +0 -2
- package/admin/i18n/pl/translations.json +0 -2
- package/admin/i18n/pt/translations.json +0 -2
- package/admin/i18n/ru/translations.json +0 -2
- package/admin/i18n/uk/translations.json +0 -2
- package/admin/i18n/zh-cn/translations.json +0 -2
- package/io-package.json +14 -27
- package/lib/helpers/aiChemistryHelpHelper.js +146 -143
- package/lib/i18n/de.json +69 -0
- package/lib/i18n/en.json +141 -0
- package/lib/i18n/es.json +141 -0
- package/lib/i18n/fr.json +141 -0
- package/lib/i18n/it.json +141 -0
- package/lib/i18n/nl.json +141 -0
- package/lib/i18n/pl.json +141 -0
- package/lib/i18n/pt.json +141 -0
- package/lib/i18n/ru.json +141 -0
- package/lib/i18n/uk.json +141 -0
- package/lib/i18n/zh-cn.json +141 -0
- package/lib/stateDefinitions/actuatorsStates.js +132 -19
- package/lib/stateDefinitions/aiChemistryHelpStates.js +58 -37
- package/lib/stateDefinitions/aiStates.js +201 -31
- package/lib/stateDefinitions/consumptionStates.js +140 -14
- package/lib/stateDefinitions/controlStates.js +120 -34
- package/lib/stateDefinitions/debugLogStates.js +32 -10
- package/lib/stateDefinitions/generalStates.js +28 -4
- package/lib/stateDefinitions/heatStates.js +132 -17
- package/lib/stateDefinitions/infoStates.js +20 -5
- package/lib/stateDefinitions/photovoltaicStates.js +78 -19
- package/lib/stateDefinitions/pumpSpeedStates.js +76 -11
- package/lib/stateDefinitions/pumpStates.js +100 -15
- package/lib/stateDefinitions/pumpStates2.js +36 -9
- package/lib/stateDefinitions/pumpStates3.js +92 -23
- package/lib/stateDefinitions/pumpStates4.js +120 -30
- package/lib/stateDefinitions/runtimeStates.js +74 -10
- package/lib/stateDefinitions/solarStates.js +68 -9
- package/lib/stateDefinitions/speechStates.js +133 -18
- package/lib/stateDefinitions/statisticsStates.js +167 -24
- package/lib/stateDefinitions/statusStates.js +92 -12
- package/lib/stateDefinitions/temperatureStates.js +117 -18
- package/lib/stateDefinitions/timeStates.js +43 -12
- package/main.js +4 -0
- 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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
48
|
-
|
|
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
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
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
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
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,
|