iobroker.poolcontrol 1.3.29 → 1.3.31

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.
@@ -0,0 +1,158 @@
1
+ {
2
+ "0.5x": "0,5x",
3
+ "1.0x": "1,0x",
4
+ "1.5x": "1,5x",
5
+ "2.0x": "2,0x",
6
+ "2.5x": "2,5x",
7
+ "3.0x": "3,0x",
8
+ "Additional Actuators": "Додаткові приводи",
9
+ "Additional actuators (valves, lighting & auxiliary pumps)": "Додаткові приводи (клапани, освітлення та допоміжні насоси)",
10
+ "Alexa device": "пристрій Alexa",
11
+ "All text and speech outputs of the adapter – including AI forecasts, warnings, pump status, solar hints and diagnostic messages – are emitted via the central 'speech.queue' datapoint. This datapoint should be used for VIS displays, Alexa or Telegram outputs.": "Усі текстові та мовні виходи адаптера, включаючи прогнози ШІ, попередження, стан насоса, сонячні підказки та діагностичні повідомлення, випромінюються через центральну точку даних «speech.queue». Цю точку даних слід використовувати для дисплеїв VIS, виводів Alexa або Telegram.",
12
+ "Amazon Alexa": "Amazon Alexa",
13
+ "Announce / Notify on Warning": "Оголошувати / Повідомляти про попередження",
14
+ "Announce error messages": "Оголошення повідомлень про помилки",
15
+ "Auxiliary pump 1 active": "Допоміжний насос 1 активний",
16
+ "Auxiliary pump 2 active": "Активний допоміжний насос 2",
17
+ "Auxiliary pump 3 active": "Допоміжний насос 3 активний",
18
+ "Auxiliary pumps & attractions": "Допоміжні насоси та атракціони",
19
+ "Central speech output (speech.queue)": "Центральний мовний вихід (speech.queue)",
20
+ "Collector Temperature Off Threshold (°C)": "Поріг вимкнення температури колектора (°C)",
21
+ "Collector Temperature On Threshold (°C)": "Порогове значення температури колектора (°C)",
22
+ "Collector Temperature Warning": "Попередження про температуру колектора",
23
+ "Collector Temperature Warning Threshold (°C)": "Порогове значення температури колектора (°C)",
24
+ "Consumption and cost calculation": "Розрахунок витрат і витрат",
25
+ "Datapoint containing current PV power (Watts)": "Точка даних, що містить поточну потужність PV (ват)",
26
+ "Datapoint containing current house consumption (Watts)": "Точка даних, що містить поточне домашнє споживання (ват)",
27
+ "Default (female)": "За замовчуванням (жіночий)",
28
+ "Difference between PV generation and house consumption that counts as surplus": "Різниця між виробництвом PV та споживанням будинку, що вважається надлишком",
29
+ "Electricity price (€ / kWh)": "Ціна електроенергії (€ / кВт/год)",
30
+ "Email adapter instance": "Екземпляр адаптера електронної пошти",
31
+ "Email subject": "Тема електронного листа",
32
+ "Enable Alexa output": "Увімкнути вихід Alexa",
33
+ "Enable Collector Temperature Warning": "Увімкнути попередження про температуру колектора",
34
+ "Enable Frost Protection": "Увімкнути захист від замерзання",
35
+ "Enable Heating Control": "Увімкнути керування опаленням",
36
+ "Enable Solar Control": "Увімкнути Solar Control",
37
+ "Enable Telegram output": "Увімкнути вихід Telegram",
38
+ "Enable Time Window 1": "Увімкнути часове вікно 1",
39
+ "Enable Time Window 2": "Увімкнути часове вікно 2",
40
+ "Enable Time Window 3": "Увімкнути часове вікно 3",
41
+ "Enable consumption and cost calculation": "Увімкнути розрахунок споживання та вартості",
42
+ "Enable email output": "Увімкнути вихід електронної пошти",
43
+ "Enable safety functions also in 'Manual' mode": "Увімкніть функції безпеки також у «Ручному» режимі",
44
+ "Enable speech output": "Увімкнути мовний вихід",
45
+ "End (HH:MM)": "Кінець (ГГ:ХХ)",
46
+ "Example: Dirk,Dennis (empty = send to all users)": "Приклад: Dirk,Dennis (пусто = надіслати всім користувачам)",
47
+ "Friday": "П'ятниця",
48
+ "Frost Protection": "Захист від замерзання",
49
+ "Frost Protection Temperature (°C)": "Температура захисту від замерзання (°C)",
50
+ "General": "Загальний",
51
+ "General Pool Settings": "Загальні параметри пулу",
52
+ "General Settings": "Загальні налаштування",
53
+ "Heating / Heat Pump": "Опалення / Тепловий насос",
54
+ "Help & Info": "Довідка та інформація",
55
+ "Help and Information": "Довідка та інформація",
56
+ "Here you will find the complete documentation and information about all settings. Additional information about future versions will follow.": "Тут ви знайдете повну документацію та інформацію про всі налаштування. Додаткова інформація про майбутні версії буде надана далі.",
57
+ "Hysteresis": "Гістерезис",
58
+ "If enabled, safety functions such as frost protection and overheating protection (solar) remain active.": "Якщо ввімкнено, функції безпеки, такі як захист від замерзання та захист від перегріву (сонячна батарея), залишаються активними.",
59
+ "Important information about the AI system": "Важлива інформація про систему ШІ",
60
+ "Internet access & data protection": "Доступ до Інтернету та захист даних",
61
+ "Lighting": "Освітлення",
62
+ "Lighting 1 active": "Освітлення 1 активне",
63
+ "Lighting 2 active": "Освітлення 2 активне",
64
+ "Lighting 3 active": "Освітлення 3 активне",
65
+ "Logical Control State (true / false)": "Логічний контрольний стан (істина/хибність)",
66
+ "Mail": "Пошта",
67
+ "Male": "Чоловік",
68
+ "Many automatic features (e.g. solar control, photovoltaic mode, AI weather logic and diagnostic functions) only operate when the pool season is active. The season status can be changed at any time via the 'status.season_active' datapoint or your visualization. The instance configuration only provides the initial value when the datapoint is created for the first time.": "Багато автоматичних функцій (наприклад, сонячний контроль, фотоелектричний режим, логіка погоди штучного інтелекту та функції діагностики) працюють лише під час сезону басейну. Статус сезону можна будь-коли змінити за допомогою точки даних status.season_active або вашої візуалізації. Конфігурація екземпляра надає лише початкове значення, коли точка даних створюється вперше.",
69
+ "Max Power (Watt)": "Максимальна потужність (ват)",
70
+ "Maximum Pool Temperature (°C – Safety Cutoff)": "Максимальна температура басейну (°C – безпечне обмеження)",
71
+ "Minimum Circulation per Day": "Мінімальний тираж за день",
72
+ "Monday": "понеділок",
73
+ "Name Auxiliary pump 1": "Назва Допоміжний насос 1",
74
+ "Name Auxiliary pump 2": "Назва Допоміжний насос 2",
75
+ "Name Auxiliary pump 3": "Назва Допоміжний насос 3",
76
+ "Name Lighting 1": "Назва освітлення 1",
77
+ "Name Lighting 2": "Назва освітлення 2",
78
+ "Name Lighting 3": "Назва освітлення 3",
79
+ "Note about pool season": "Примітка про сезон басейну",
80
+ "Note: An external kWh meter is required for consumption calculation (e.g. smart plug).": "Примітка. Для розрахунку споживання потрібен зовнішній лічильник кВт-год (наприклад, розумна розетка).",
81
+ "Note: Heating control is temperature-driven and only active during pool season. Depending on the selected control type, either a smart plug is switched or a logical control state (true/false) is set.": "Примітка. Контроль нагріву залежить від температури і активний лише під час сезону басейну. Залежно від вибраного типу керування, або перемикається розумна розетка, або встановлюється логічний стан керування (істина/хибність).",
82
+ "Note: Supports external sensors as well as the PoolControl pressure box.": "Примітка: підтримує зовнішні датчики, а також коробку тиску PoolControl.",
83
+ "Note: The AI features are completely optional and can be disabled at any time via the 'ai.enabled' datapoint. Weather features (e.g. weather hints, pool tips, forecast for tomorrow) can also be individually enabled or disabled via 'ai.weather.switches.*'. The adapter uses the Open-Meteo service to generate weather data. For this, the geo-coordinates stored in ioBroker (latitude and longitude from system.config) are required.": "Примітка. Функції штучного інтелекту абсолютно необов’язкові, і їх можна будь-коли вимкнути за допомогою точки даних «ai.enabled». Погодні функції (наприклад, підказки про погоду, поради для басейну, прогноз на завтра) також можна окремо ввімкнути або вимкнути за допомогою 'ai.weather.switches.*'. Адаптер використовує сервіс Open-Meteo для генерації даних про погоду. Для цього потрібні геокоординати, збережені в ioBroker (широта та довгота з system.config).",
84
+ "Note: The warning resets automatically once the temperature drops 10% below the configured threshold.": "Примітка. Попередження автоматично скидається, коли температура падає на 10% нижче налаштованого порогу.",
85
+ "Note: These settings are mainly used as initial values when PoolControl is set up for the first time. Later operation should be done via the PoolControl datapoints or your visualization. Existing runtime datapoints are not overwritten on adapter restart.": "Примітка. Ці налаштування в основному використовуються як початкові значення, коли PoolControl налаштовується вперше. Подальшу операцію слід виконувати через точки даних PoolControl або вашу візуалізацію. Існуючі точки виконання даних не перезаписуються під час перезапуску адаптера.",
86
+ "Object ID Auxiliary pump 1": "Ідентифікатор об’єкта Допоміжний насос 1",
87
+ "Object ID Auxiliary pump 2": "Ідентифікатор об’єкта Допоміжний насос 2",
88
+ "Object ID Auxiliary pump 3": "Ідентифікатор об’єкта Допоміжний насос 3",
89
+ "Object ID Collector Sensor": "Датчик збирача ідентифікаторів об’єктів",
90
+ "Object ID Current Power (W)": "Ідентифікатор об'єкта Поточна потужність (Вт)",
91
+ "Object ID Flow Sensor": "Object ID Flow Sensor",
92
+ "Object ID Ground Sensor": "Object ID Ground Sensor",
93
+ "Object ID Heating / Heat Pump": "Ідентифікатор об'єкта Опалення / Тепловий насос",
94
+ "Object ID Lighting 1": "Object ID Lighting 1",
95
+ "Object ID Lighting 2": "Object ID Lighting 2",
96
+ "Object ID Lighting 3": "Object ID Lighting 3",
97
+ "Object ID Outside Temperature Sensor": "Ідентифікатор об’єкта Датчик зовнішньої температури",
98
+ "Object ID PV generation power (W)": "Ідентифікатор об'єкта Потужність генерації PV (Вт)",
99
+ "Object ID Pressure Sensor (bar)": "Ідентифікатор об'єкта Датчик тиску (бар)",
100
+ "Object ID Pump Switch Socket": "Ідентифікатор об'єкта Гніздо перемикача насоса",
101
+ "Object ID Return Sensor": "Датчик повернення ідентифікатора об’єкта",
102
+ "Object ID Surface Sensor": "Поверхневий датчик ідентифікатора об’єкта",
103
+ "Object ID external kWh meter": "Ідентифікатор об'єкта зовнішній лічильник кВт*год",
104
+ "Object ID house consumption (W)": "Ідентифікатор об'єкта споживання будинку (Вт)",
105
+ "Open documentation (English) on GitHub": "Відкрити документацію (англійською) на GitHub",
106
+ "Open documentation (German) on GitHub": "Відкрити документацію (німецькою) на GitHub",
107
+ "Optional additional actuators can be configured here. Actuators are only created in the adapter if they are explicitly enabled.": "Тут можна налаштувати додаткові додаткові приводи. Актуатори створюються в адаптері, лише якщо вони явно ввімкнені.",
108
+ "PV, Consumption & Costs": "PV, споживання та витрати",
109
+ "Photovoltaics (Surplus detection)": "Фотовольтаїка (виявлення надлишку)",
110
+ "Pool Name": "Назва басейну",
111
+ "Pool Season Active": "Активний сезон басейну",
112
+ "Pool Size (Liters)": "Розмір басейну (літри)",
113
+ "Pressure Sensor (Filter Pressure)": "Датчик тиску (тиск фільтра)",
114
+ "Pump": "Насос",
115
+ "Pump Data Points (Smart Socket & Current Power Consumption)": "Точки даних насоса (розумна розетка та поточне енергоспоживання)",
116
+ "Pump Flow Rate (l/h)": "Витрата насоса (л/год)",
117
+ "Pump Settings (Rated Power)": "Параметри насоса (номінальна потужність)",
118
+ "Pump mode (Auto/Manual/Off/Timer) can be controlled via data point 'pump.mode'.": "Режим насоса (автоматичний/ручний/вимкнений/таймер) можна контролювати за допомогою точки даних «pump.mode».",
119
+ "Recipient address": "Адреса отримувача",
120
+ "Safety Functions": "Функції безпеки",
121
+ "Saturday": "Субота",
122
+ "Season Settings": "Налаштування сезону",
123
+ "Solar / Heating Control": "Контроль сонячної енергії/опалення",
124
+ "Speech Output": "Вивід мовлення",
125
+ "Start (HH:MM)": "Початок (ГГ:ХХ)",
126
+ "Sunday": "неділя",
127
+ "Switch Smart Plug (On / Off)": "Перемикач Smart Plug (Увімк. / Вимк.)",
128
+ "Target Pool Temperature (°C)": "Цільова температура басейну (°C)",
129
+ "Telegram": "Телеграма",
130
+ "Telegram instance": "Примірник Telegram",
131
+ "Telegram recipients (usernames, comma separated / empty = send to all users)": "Одержувачі Telegram (імена користувачів, розділені комами / пусті = надіслати всім користувачам)",
132
+ "Temperature Management": "Управління температурою",
133
+ "Temperature Sensors": "Датчики температури",
134
+ "Temperature threshold for announcement (°C)": "Температурний поріг для оголошення (°C)",
135
+ "The AI system (aiHelper & aiForecastHelper) retrieves weather data from Open-Meteo via HTTPS. It uses the geo-coordinates from the ioBroker system configuration (system.config › latitude/longitude). No data is stored or transmitted to third parties. Without valid geo-coordinates, the AI system cannot generate forecasts.": "Система AI (aiHelper & aiForecastHelper) отримує дані про погоду з Open-Meteo через HTTPS. Він використовує геокоординати з конфігурації системи ioBroker (system.config › широта/довгота). Жодні дані не зберігаються та не передаються третім особам. Без дійсних геокоординат система ШІ не може створювати прогнози.",
136
+ "The PoolControl adapter works completely locally by default. Currently, only the AI features access weather data from Open-Meteo via encrypted HTTPS. Only the geo-coordinates stored in ioBroker (latitude and longitude) are transmitted. No additional data is stored or sent to third parties. Future optional internet services may be added, but they will always be clearly marked.": "Адаптер PoolControl за замовчуванням працює повністю локально. Наразі тільки функції ШІ отримують доступ до даних про погоду з Open-Meteo через зашифрований HTTPS. Передаються лише геокоординати, збережені в ioBroker (широта та довгота). Ніякі додаткові дані не зберігаються та не надсилаються третім особам. Майбутні додаткові інтернет-послуги можуть бути додані, але вони завжди будуть чітко позначені.",
137
+ "These warning values are used as initial values when the datapoints are created for the first time. Later changes should be made via 'solar.warn_active', 'solar.warn_temp' and 'solar.warn_speech' or your visualization.": "Ці значення попередження використовуються як початкові значення, коли точки даних створюються вперше. Зміни слід вносити пізніше за допомогою 'solar.warn_active', 'solar.warn_temp' і 'solar.warn_speech' або вашої візуалізації.",
138
+ "This value is used as the initial season status when the datapoint is created for the first time. Later changes should be made via 'status.season_active' or your visualization.": "Це значення використовується як початковий статус сезону, коли точка даних створюється вперше. Пізніші зміни слід вносити через 'status.season_active' або вашу візуалізацію.",
139
+ "Threshold for PV surplus (W)": "Поріг для надлишку PV (Вт)",
140
+ "Thursday": "четвер",
141
+ "Time Control": "Контроль часу",
142
+ "Time Window 2": "Часове вікно 2",
143
+ "Time Window 3": "Часове вікно 3",
144
+ "Time Windows": "Вікна часу",
145
+ "Tuesday": "вівторок",
146
+ "Type of Heating Control": "Тип контролю опалення",
147
+ "Use Collector Sensor": "Використовуйте датчик колектора",
148
+ "Use Flow Sensor": "Використовуйте датчик потоку",
149
+ "Use Ground Sensor": "Використовуйте датчик землі",
150
+ "Use Hysteresis Control": "Використовуйте керування гістерезисом",
151
+ "Use Outside Temperature Sensor": "Використовуйте датчик зовнішньої температури",
152
+ "Use Pressure Sensor": "Використовуйте датчик тиску",
153
+ "Use Return Sensor": "Використовуйте датчик повернення",
154
+ "Use Surface Sensor": "Використовуйте датчик поверхні",
155
+ "Voice": "Голос",
156
+ "Volume (0–100)": "Обсяг (0–100)",
157
+ "Wednesday": "Середа"
158
+ }
@@ -0,0 +1,158 @@
1
+ {
2
+ "0.5x": "0.5倍",
3
+ "1.0x": "1.0倍",
4
+ "1.5x": "1.5倍",
5
+ "2.0x": "2.0倍",
6
+ "2.5x": "2.5倍",
7
+ "3.0x": "3.0倍",
8
+ "Additional Actuators": "附加执行器",
9
+ "Additional actuators (valves, lighting & auxiliary pumps)": "附加执行器(阀门、照明和辅助泵)",
10
+ "Alexa device": "Alexa 设备",
11
+ "All text and speech outputs of the adapter – including AI forecasts, warnings, pump status, solar hints and diagnostic messages – are emitted via the central 'speech.queue' datapoint. This datapoint should be used for VIS displays, Alexa or Telegram outputs.": "适配器的所有文本和语音输出(包括人工智能预测、警告、泵状态、太阳能提示和诊断消息)均通过中央“speech.queue”数据点发出。该数据点应用于 VIS 显示、Alexa 或 Telegram 输出。",
12
+ "Amazon Alexa": "亚马逊 Alexa",
13
+ "Announce / Notify on Warning": "公布/通知警告",
14
+ "Announce error messages": "公布错误信息",
15
+ "Auxiliary pump 1 active": "辅助泵 1 启用",
16
+ "Auxiliary pump 2 active": "辅助泵 2 激活",
17
+ "Auxiliary pump 3 active": "辅助泵 3 激活",
18
+ "Auxiliary pumps & attractions": "辅助泵和景点",
19
+ "Central speech output (speech.queue)": "中央语音输出(speech.queue)",
20
+ "Collector Temperature Off Threshold (°C)": "集电极温度关闭阈值 (°C)",
21
+ "Collector Temperature On Threshold (°C)": "集电极温度阈值 (°C)",
22
+ "Collector Temperature Warning": "集热器温度警告",
23
+ "Collector Temperature Warning Threshold (°C)": "集电极温度警告阈值 (°C)",
24
+ "Consumption and cost calculation": "消耗及成本计算",
25
+ "Datapoint containing current PV power (Watts)": "包含当前光伏功率(瓦)的数据点",
26
+ "Datapoint containing current house consumption (Watts)": "包含当前房屋消耗(瓦)的数据点",
27
+ "Default (female)": "默认(女)",
28
+ "Difference between PV generation and house consumption that counts as surplus": "光伏发电与家庭消费之间的差额算作盈余",
29
+ "Electricity price (€ / kWh)": "电价(欧元/千瓦时)",
30
+ "Email adapter instance": "电子邮件适配器实例",
31
+ "Email subject": "电子邮件主题",
32
+ "Enable Alexa output": "启用 Alexa 输出",
33
+ "Enable Collector Temperature Warning": "启用收集器温度警告",
34
+ "Enable Frost Protection": "启用防霜冻保护",
35
+ "Enable Heating Control": "启用加热控制",
36
+ "Enable Solar Control": "启用太阳能控制",
37
+ "Enable Telegram output": "启用电报输出",
38
+ "Enable Time Window 1": "启用时间窗口 1",
39
+ "Enable Time Window 2": "启用时间窗口 2",
40
+ "Enable Time Window 3": "启用时间窗口 3",
41
+ "Enable consumption and cost calculation": "启用消耗和成本计算",
42
+ "Enable email output": "启用电子邮件输出",
43
+ "Enable safety functions also in 'Manual' mode": "在“手动”模式下也启用安全功能",
44
+ "Enable speech output": "启用语音输出",
45
+ "End (HH:MM)": "结束(时:分)",
46
+ "Example: Dirk,Dennis (empty = send to all users)": "示例:Dirk,Dennis(空 = 发送给所有用户)",
47
+ "Friday": "星期五",
48
+ "Frost Protection": "防冻保护",
49
+ "Frost Protection Temperature (°C)": "防冻温度 (°C)",
50
+ "General": "一般的",
51
+ "General Pool Settings": "常规池设置",
52
+ "General Settings": "常规设置",
53
+ "Heating / Heat Pump": "供暖/热泵",
54
+ "Help & Info": "帮助和信息",
55
+ "Help and Information": "帮助和信息",
56
+ "Here you will find the complete documentation and information about all settings. Additional information about future versions will follow.": "在这里您可以找到有关所有设置的完整文档和信息。有关未来版本的更多信息将随之而来。",
57
+ "Hysteresis": "迟滞",
58
+ "If enabled, safety functions such as frost protection and overheating protection (solar) remain active.": "如果启用,防冻保护和过热保护(太阳能)等安全功能将保持激活状态。",
59
+ "Important information about the AI system": "有关人工智能系统的重要信息",
60
+ "Internet access & data protection": "互联网访问和数据保护",
61
+ "Lighting": "灯光",
62
+ "Lighting 1 active": "照明 1 激活",
63
+ "Lighting 2 active": "照明 2 激活",
64
+ "Lighting 3 active": "照明 3 激活",
65
+ "Logical Control State (true / false)": "逻辑控制状态(真/假)",
66
+ "Mail": "邮件",
67
+ "Male": "男性",
68
+ "Many automatic features (e.g. solar control, photovoltaic mode, AI weather logic and diagnostic functions) only operate when the pool season is active. The season status can be changed at any time via the 'status.season_active' datapoint or your visualization. The instance configuration only provides the initial value when the datapoint is created for the first time.": "许多自动功能(例如太阳能控制、光伏模式、人工智能天气逻辑和诊断功能)仅在泳池季节活跃时运行。季节状态可以随时通过“status.season_active”数据点或可视化更改。实例配置仅在第一次创建数据点时提供初始值。",
69
+ "Max Power (Watt)": "最大功率(瓦)",
70
+ "Maximum Pool Temperature (°C – Safety Cutoff)": "最高水池温度(°C – 安全截止值)",
71
+ "Minimum Circulation per Day": "每日最低流通量",
72
+ "Monday": "周一",
73
+ "Name Auxiliary pump 1": "名称 辅助泵1",
74
+ "Name Auxiliary pump 2": "名称 辅助泵2",
75
+ "Name Auxiliary pump 3": "名称 辅助泵3",
76
+ "Name Lighting 1": "名称 灯光 1",
77
+ "Name Lighting 2": "名称 灯光 2",
78
+ "Name Lighting 3": "名称 灯光 3",
79
+ "Note about pool season": "关于泳池季节的注意事项",
80
+ "Note: An external kWh meter is required for consumption calculation (e.g. smart plug).": "注意:消耗量计算需要外部千瓦时表(例如智能插头)。",
81
+ "Note: Heating control is temperature-driven and only active during pool season. Depending on the selected control type, either a smart plug is switched or a logical control state (true/false) is set.": "注意:加热控制由温度驱动,仅在泳池季节有效。根据所选的控制类型,切换智能插头或设置逻辑控制状态(真/假)。",
82
+ "Note: Supports external sensors as well as the PoolControl pressure box.": "注意:支持外部传感器以及 PoolControl 压力盒。",
83
+ "Note: The AI features are completely optional and can be disabled at any time via the 'ai.enabled' datapoint. Weather features (e.g. weather hints, pool tips, forecast for tomorrow) can also be individually enabled or disabled via 'ai.weather.switches.*'. The adapter uses the Open-Meteo service to generate weather data. For this, the geo-coordinates stored in ioBroker (latitude and longitude from system.config) are required.": "注意:AI 功能完全是可选的,可以随时通过“ai.enabled”数据点禁用。天气功能(例如天气提示、泳池提示、明天天气预报)也可以通过“ai.weather.switches.*”单独启用或禁用。该适配器使用 Open-Meteo 服务生成天气数据。为此,需要存储在 ioBroker 中的地理坐标(来自 system.config 的纬度和经度)。",
84
+ "Note: The warning resets automatically once the temperature drops 10% below the configured threshold.": "注意:一旦温度下降到配置阈值以下 10%,警告就会自动重置。",
85
+ "Note: These settings are mainly used as initial values when PoolControl is set up for the first time. Later operation should be done via the PoolControl datapoints or your visualization. Existing runtime datapoints are not overwritten on adapter restart.": "注意:这些设置主要用作第一次设置 PoolControl 时的初始值。稍后的操作应通过 PoolControl 数据点或可视化来完成。适配器重新启动时不会覆盖现有运行时数据点。",
86
+ "Object ID Auxiliary pump 1": "对象 ID 辅助泵 1",
87
+ "Object ID Auxiliary pump 2": "对象 ID 辅助泵 2",
88
+ "Object ID Auxiliary pump 3": "对象 ID 辅助泵 3",
89
+ "Object ID Collector Sensor": "物体 ID 收集器传感器",
90
+ "Object ID Current Power (W)": "对象 ID 当前功率(W)",
91
+ "Object ID Flow Sensor": "物体 ID 流量传感器",
92
+ "Object ID Ground Sensor": "物体 ID 地面传感器",
93
+ "Object ID Heating / Heat Pump": "对象 ID 加热/热泵",
94
+ "Object ID Lighting 1": "对象 ID 照明 1",
95
+ "Object ID Lighting 2": "对象 ID 照明 2",
96
+ "Object ID Lighting 3": "对象 ID 照明 3",
97
+ "Object ID Outside Temperature Sensor": "物体 ID 外部温度传感器",
98
+ "Object ID PV generation power (W)": "对象ID 光伏发电功率(W)",
99
+ "Object ID Pressure Sensor (bar)": "对象 ID 压力传感器 (bar)",
100
+ "Object ID Pump Switch Socket": "对象 ID 泵开关插座",
101
+ "Object ID Return Sensor": "物体 ID 返回传感器",
102
+ "Object ID Surface Sensor": "物体 ID 表面传感器",
103
+ "Object ID external kWh meter": "对象 ID 外部电能表",
104
+ "Object ID house consumption (W)": "对象ID房屋消耗(W)",
105
+ "Open documentation (English) on GitHub": "GitHub 上的开放文档(英文)",
106
+ "Open documentation (German) on GitHub": "GitHub 上的开放文档(德语)",
107
+ "Optional additional actuators can be configured here. Actuators are only created in the adapter if they are explicitly enabled.": "可以在此处配置可选的附加执行器。仅当明确启用执行器时,才会在适配器中创建执行器。",
108
+ "PV, Consumption & Costs": "光伏、消耗和成本",
109
+ "Photovoltaics (Surplus detection)": "光伏(剩余检测)",
110
+ "Pool Name": "矿池名称",
111
+ "Pool Season Active": "泳池季节活跃",
112
+ "Pool Size (Liters)": "泳池尺寸(升)",
113
+ "Pressure Sensor (Filter Pressure)": "压力传感器(过滤器压力)",
114
+ "Pump": "泵",
115
+ "Pump Data Points (Smart Socket & Current Power Consumption)": "泵数据点(智能插座和当前功耗)",
116
+ "Pump Flow Rate (l/h)": "泵流量(升/小时)",
117
+ "Pump Settings (Rated Power)": "泵设置(额定功率)",
118
+ "Pump mode (Auto/Manual/Off/Timer) can be controlled via data point 'pump.mode'.": "泵模式(自动/手动/关闭/定时器)可以通过数据点“pump.mode”进行控制。",
119
+ "Recipient address": "收件人地址",
120
+ "Safety Functions": "安全功能",
121
+ "Saturday": "周六",
122
+ "Season Settings": "季节设置",
123
+ "Solar / Heating Control": "太阳能/加热控制",
124
+ "Speech Output": "语音输出",
125
+ "Start (HH:MM)": "开始(小时:分钟)",
126
+ "Sunday": "星期日",
127
+ "Switch Smart Plug (On / Off)": "开关智能插头(开/关)",
128
+ "Target Pool Temperature (°C)": "目标水池温度 (°C)",
129
+ "Telegram": "电报",
130
+ "Telegram instance": "电报实例",
131
+ "Telegram recipients (usernames, comma separated / empty = send to all users)": "电报收件人(用户名,逗号分隔/空=发送给所有用户)",
132
+ "Temperature Management": "温度管理",
133
+ "Temperature Sensors": "温度传感器",
134
+ "Temperature threshold for announcement (°C)": "公告温度阈值(℃)",
135
+ "The AI system (aiHelper & aiForecastHelper) retrieves weather data from Open-Meteo via HTTPS. It uses the geo-coordinates from the ioBroker system configuration (system.config › latitude/longitude). No data is stored or transmitted to third parties. Without valid geo-coordinates, the AI system cannot generate forecasts.": "AI 系统(aiHelper 和 aiForecastHelper)通过 HTTPS 从 Open-Meteo 检索天气数据。它使用 ioBroker 系统配置(system.config › 纬度/经度)中的地理坐标。不会存储任何数据或将其传输给第三方。如果没有有效的地理坐标,人工智能系统就无法生成预测。",
136
+ "The PoolControl adapter works completely locally by default. Currently, only the AI features access weather data from Open-Meteo via encrypted HTTPS. Only the geo-coordinates stored in ioBroker (latitude and longitude) are transmitted. No additional data is stored or sent to third parties. Future optional internet services may be added, but they will always be clearly marked.": "默认情况下,PoolControl 适配器完全在本地工作。目前,只有 AI 功能可以通过加密的 HTTPS 访问 Open-Meteo 的天气数据。仅传输存储在 ioBroker 中的地理坐标(纬度和经度)。不会存储任何额外数据或将其发送给第三方。未来可能会添加可选的互联网服务,但它们将始终被明确标记。",
137
+ "These warning values are used as initial values when the datapoints are created for the first time. Later changes should be made via 'solar.warn_active', 'solar.warn_temp' and 'solar.warn_speech' or your visualization.": "首次创建数据点时,这些警告值将用作初始值。稍后的更改应通过“solar.warn_active”、“solar.warn_temp”和“solar.warn_speech”或您的可视化进行。",
138
+ "This value is used as the initial season status when the datapoint is created for the first time. Later changes should be made via 'status.season_active' or your visualization.": "当第一次创建数据点时,该值用作初始季节状态。稍后的更改应通过“status.season_active”或您的可视化进行。",
139
+ "Threshold for PV surplus (W)": "光伏剩余阈值(W)",
140
+ "Thursday": "周四",
141
+ "Time Control": "时间控制",
142
+ "Time Window 2": "时间窗口2",
143
+ "Time Window 3": "时间窗口3",
144
+ "Time Windows": "时间窗口",
145
+ "Tuesday": "周二",
146
+ "Type of Heating Control": "加热控制类型",
147
+ "Use Collector Sensor": "使用收集器传感器",
148
+ "Use Flow Sensor": "使用流量传感器",
149
+ "Use Ground Sensor": "使用地面传感器",
150
+ "Use Hysteresis Control": "使用迟滞控制",
151
+ "Use Outside Temperature Sensor": "使用室外温度传感器",
152
+ "Use Pressure Sensor": "使用压力传感器",
153
+ "Use Return Sensor": "使用返回传感器",
154
+ "Use Surface Sensor": "使用表面传感器",
155
+ "Voice": "嗓音",
156
+ "Volume (0–100)": "音量 (0–100)",
157
+ "Wednesday": "周三"
158
+ }
package/io-package.json CHANGED
@@ -1,8 +1,34 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "poolcontrol",
4
- "version": "1.3.29",
4
+ "version": "1.3.31",
5
5
  "news": {
6
+ "1.3.31": {
7
+ "en": "Fixed automatic circulation top-up logic when temperature sensors are missing. Automatic top-up is now only blocked by collector/pool temperature comparison when solar control is active and both temperatures are valid.",
8
+ "de": "Fehler in der automatischen Nachpump-Logik bei fehlenden Temperatursensoren behoben. Das automatische Nachpumpen wird jetzt nur noch durch den Kollektor-/Pooltemperaturvergleich blockiert, wenn die Solarsteuerung aktiv ist und beide Temperaturwerte gültig vorliegen.",
9
+ "ru": "Исправлена ​​логика автоматического пополнения циркуляции при отсутствии датчиков температуры. Автоматическое пополнение теперь блокируется только при сравнении температур коллектора и бассейна, когда активно управление солнечной батареей и обе температуры действительны.",
10
+ "pt": "Lógica de recarga automática de circulação corrigida quando faltam sensores de temperatura. O reabastecimento automático agora só é bloqueado pela comparação da temperatura do coletor/piscina quando o controle solar está ativo e ambas as temperaturas são válidas.",
11
+ "nl": "Probleem opgelost met het automatisch bijvullen van de circulatie wanneer temperatuursensoren ontbreken. Het automatisch bijvullen wordt nu alleen geblokkeerd door de vergelijking van de collector-/zwembadtemperatuur als de zonneregeling actief is en beide temperaturen geldig zijn.",
12
+ "fr": "Correction de la logique de recharge automatique de la circulation lorsque les capteurs de température sont manquants. L'appoint automatique n'est désormais bloqué par la comparaison des températures capteur/piscine que lorsque le contrôle solaire est actif et que les deux températures sont valables.",
13
+ "it": "Risolta la logica di rabbocco della circolazione automatica in caso di mancanza dei sensori di temperatura. Il rabbocco automatico ora è bloccato solo dal confronto della temperatura collettore/piscina quando il controllo solare è attivo ed entrambe le temperature sono valide.",
14
+ "es": "Se corrigió la lógica de recarga de circulación automática cuando faltaban sensores de temperatura. La recarga automática ahora solo se bloquea mediante la comparación de temperatura del colector/piscina cuando el control solar está activo y ambas temperaturas son válidas.",
15
+ "pl": "Naprawiono logikę automatycznego uzupełniania cyrkulacji w przypadku braku czujników temperatury. Automatyczne uzupełnianie jest teraz blokowane tylko przez porównanie temperatur kolektora/basenu, gdy aktywna jest kontrola solarna i obie temperatury są prawidłowe.",
16
+ "uk": "Виправлена ​​логіка автоматичного доповнення циркуляції, коли датчики температури відсутні. Автоматичне поповнення тепер блокується лише шляхом порівняння температури колектора/басейну, коли активовано сонячне керування та обидві температури дійсні.",
17
+ "zh-cn": "修复了缺少温度传感器时的自动循环充值逻辑。现在,仅当太阳能控制处于活动状态并且两个温度都有效时,自动充值才会被收集器/池温度比较阻止。"
18
+ },
19
+ "1.3.30": {
20
+ "en": "Updated release tooling to the required minimum version. Cleaned up outdated Admin i18n keys. Replaced native timers in AI weather helpers with ioBroker adapter timers.",
21
+ "de": "Release-Werkzeuge auf die erforderliche Mindestversion aktualisiert. Veraltete Admin-i18n-Schlüssel bereinigt. Native Timer in den KI-Wetter-Helpern durch ioBroker-Adapter-Timer ersetzt.",
22
+ "ru": "Обновлены инструменты выпуска до необходимой минимальной версии. Очищены устаревшие ключи администратора i18n. Заменены встроенные таймеры в помощниках погоды AI на таймеры адаптера ioBroker.",
23
+ "pt": "Ferramentas de lançamento atualizadas para a versão mínima exigida. Limpeza de chaves Admin i18n desatualizadas. Temporizadores nativos substituídos em ajudantes meteorológicos de IA por temporizadores adaptadores ioBroker.",
24
+ "nl": "Releasetooling bijgewerkt naar de vereiste minimumversie. Verouderde Admin i18n-sleutels opgeschoond. Native timers in AI-weerhelpers vervangen door ioBroker-adaptertimers.",
25
+ "fr": "Outils de version mis à jour vers la version minimale requise. Nettoyage des clés Admin i18n obsolètes. Remplacement des minuteries natives dans les assistants météo AI par des minuteries d'adaptateur ioBroker.",
26
+ "it": "Strumenti di rilascio aggiornati alla versione minima richiesta. Ripulite le chiavi Admin i18n obsolete. Sostituiti i timer nativi negli assistenti meteorologici AI con i timer dell'adattatore ioBroker.",
27
+ "es": "Herramientas de lanzamiento actualizadas a la versión mínima requerida. Se limpiaron las claves de Admin i18n obsoletas. Se reemplazaron los temporizadores nativos en los asistentes meteorológicos de IA con temporizadores del adaptador ioBroker.",
28
+ "pl": "Zaktualizowano narzędzia wydania do wymaganej wersji minimalnej. Wyczyszczono nieaktualne klucze administratora i18n. Zastąpiono natywne liczniki czasu w pomocnikach pogodowych AI zegarami adaptera ioBroker.",
29
+ "uk": "Оновлено інструмент випуску до необхідної мінімальної версії. Очищено застарілі ключі адміністратора i18n. Вбудовані таймери в помічниках погоди штучного інтелекту замінено на таймери адаптера ioBroker.",
30
+ "zh-cn": "将发布工具更新为所需的最低版本。清理了过时的 Admin i18n 密钥。将 AI 天气助手中的本机计时器替换为 ioBroker 适配器计时器。"
31
+ },
6
32
  "1.3.29": {
7
33
  "en": "Added Pool Insights V1 with observations, status evaluation and runtime i18n support. Improved Pool Insights text generation and removed dependency on external summary blocks. Fixed missing initialization of season and solar warning runtime states from adapter configuration. Added admin UI notes explaining initial values versus runtime datapoint control.",
8
34
  "de": "Pool Insights V1 mit Beobachtungen, Statusbewertung und Runtime-i18n hinzugefügt. Pool-Insights-Texte verbessert und die Abhängigkeit von externen Summary-Blöcken entfernt. Fehlende Initialisierung der Saison- und Solarwarnungs-States aus der Adapterkonfiguration behoben. Hinweise in der Admin-Oberfläche ergänzt, die den Unterschied zwischen Initialwerten und Runtime-Datenpunkten erläutern.",
@@ -41,32 +67,6 @@
41
67
  "pl": "Dodano nowe narzędzia chemiczne z kalkulatorem pH Plus, kalkulatorem pH Minus i kalkulatorem soli. Dodano weryfikację, teksty wyników, obsługę błędów i automatyczne wstępne wypełnianie objętości puli. Rozszerzona dokumentacja i przeglądy funkcji.",
42
68
  "uk": "Додано нові хімічні інструменти з калькулятором pH Plus, калькулятором pH мінус і калькулятором солі. Додано перевірку, тексти результатів, обробку помилок і автоматичне попереднє заповнення обсягу пулу. Розширена документація та огляд функцій.",
43
69
  "zh-cn": "添加了新的化学工具,包括 pH 加计算器、pH 减计算器和盐计算器。添加了验证、结果文本、错误处理和自动池容量预填充。扩展的文档和功能概述。"
44
- },
45
- "1.3.26": {
46
- "en": "Reworked several warnings and review notes from official ioBroker checks. Various small improvements and internal cleanups.",
47
- "de": "Mehrere Warnungen und Review-Hinweise aus offiziellen ioBroker-Checks überarbeitet. Diverse kleine Verbesserungen und interne Bereinigungen.",
48
- "ru": "Переработано несколько предупреждений и примечаний к обзору официальных проверок ioBroker. Различные мелкие улучшения и внутренние чистки.",
49
- "pt": "Vários avisos e notas de revisão das verificações oficiais do ioBroker foram reformulados. Várias pequenas melhorias e limpezas internas.",
50
- "nl": "Verschillende waarschuwingen en beoordelingsnotities van officiële ioBroker-controles herwerkt. Diverse kleine verbeteringen en interne opruimingen.",
51
- "fr": "Retravaillé plusieurs avertissements et notes de révision des contrôles officiels d'ioBroker. Diverses petites améliorations et nettoyages internes.",
52
- "it": "Rielaborati diversi avvisi e note di revisione dai controlli ufficiali di ioBroker. Varie piccole migliorie e pulizie interne.",
53
- "es": "Se modificaron varias advertencias y notas de revisión de las comprobaciones oficiales de ioBroker. Varias pequeñas mejoras y limpiezas internas.",
54
- "pl": "Przerobiono kilka ostrzeżeń i uwag z oficjalnych kontroli ioBroker. Różne drobne ulepszenia i wewnętrzne porządki.",
55
- "uk": "Перероблено кілька попереджень і приміток до огляду з офіційних перевірок ioBroker. Різні невеликі покращення та внутрішні очищення.",
56
- "zh-cn": "重新设计了官方 ioBroker 检查中的几条警告和审查说明。各种小的改进和内部清理。"
57
- },
58
- "1.3.25": {
59
- "en": "Updated documentation and repository maintenance: improved README structure, synchronized function overviews and updated development dependencies",
60
- "de": "Dokumentation und Repository-Wartung aktualisiert: README-Struktur verbessert, Funktionsübersichten synchronisiert und Entwicklungsabhängigkeiten aktualisiert",
61
- "ru": "Обновленная документация и обслуживание репозитория: улучшенная структура README, синхронизированные обзоры функций и обновленные зависимости разработки.",
62
- "pt": "Documentação atualizada e manutenção de repositório: estrutura README aprimorada, visões gerais de funções sincronizadas e dependências de desenvolvimento atualizadas",
63
- "nl": "Bijgewerkte documentatie en repository-onderhoud: verbeterde README-structuur, gesynchroniseerde functieoverzichten en bijgewerkte ontwikkelingsafhankelijkheden",
64
- "fr": "Documentation mise à jour et maintenance du référentiel : structure README améliorée, aperçus des fonctions synchronisés et dépendances de développement mises à jour",
65
- "it": "Documentazione aggiornata e manutenzione del repository: struttura README migliorata, panoramiche delle funzioni sincronizzate e dipendenze di sviluppo aggiornate",
66
- "es": "Documentación actualizada y mantenimiento del repositorio: estructura README mejorada, descripciones generales de funciones sincronizadas y dependencias de desarrollo actualizadas",
67
- "pl": "Zaktualizowana dokumentacja i konserwacja repozytorium: ulepszona struktura README, zsynchronizowane przeglądy funkcji i zaktualizowane zależności programistyczne",
68
- "uk": "Оновлена ​​документація та обслуговування репозиторію: покращена структура README, синхронізовані огляди функцій та оновлені залежності розробки",
69
- "zh-cn": "更新的文档和存储库维护:改进的自述文件结构、同步的功能概述和更新的开发依赖项"
70
70
  }
71
71
  },
72
72
  "titleLang": {
@@ -41,7 +41,9 @@ const aiForecastHelper = {
41
41
  // ----------------------------------------------------------
42
42
  // NEU: Delay, damit ioBroker alle States laden kann
43
43
  // ----------------------------------------------------------
44
- await new Promise(res => setTimeout(res, 1500));
44
+ await new Promise(resolve => {
45
+ this.adapter.setTimeout(resolve, 1500);
46
+ });
45
47
 
46
48
  // ----------------------------------------------------------
47
49
  // NEU: Sofortige Ausführung beim Adapterstart (wenn aktiviert)
@@ -64,7 +66,7 @@ const aiForecastHelper = {
64
66
  */
65
67
  cleanup() {
66
68
  if (this.timer) {
67
- clearInterval(this.timer);
69
+ this.adapter.clearInterval(this.timer);
68
70
  this.timer = null;
69
71
  }
70
72
  this.adapter && this.adapter.log.debug('[aiForecastHelper] cleanup finished');
@@ -113,7 +115,7 @@ const aiForecastHelper = {
113
115
  async _refreshTimer() {
114
116
  // alten Timer stoppen
115
117
  if (this.timer) {
116
- clearInterval(this.timer);
118
+ this.adapter.clearInterval(this.timer);
117
119
  this.timer = null;
118
120
  }
119
121
 
@@ -132,7 +134,7 @@ const aiForecastHelper = {
132
134
  );
133
135
 
134
136
  // minütlicher Check
135
- this.timer = setInterval(async () => {
137
+ this.timer = this.adapter.setInterval(async () => {
136
138
  const now = new Date();
137
139
  if (now.getHours() === time.hour && now.getMinutes() === time.minute) {
138
140
  try {
@@ -123,7 +123,9 @@ const aiHelper = {
123
123
  // ----------------------------------------------------------
124
124
  // NEU: Delay, damit ioBroker alle States laden kann
125
125
  // ----------------------------------------------------------
126
- await new Promise(res => setTimeout(res, 1500));
126
+ await new Promise(resolve => {
127
+ this.adapter.setTimeout(resolve, 1500);
128
+ });
127
129
 
128
130
  // NEU: Wenn Uhrzeit heute noch in der Zukunft liegt → sofort ausführen
129
131
  try {
@@ -183,7 +185,7 @@ const aiHelper = {
183
185
  */
184
186
  _clearTimers() {
185
187
  for (const t of this.timers) {
186
- clearInterval(t);
188
+ this.adapter.clearInterval(t);
187
189
  }
188
190
  this.timers = [];
189
191
  },
@@ -257,7 +259,7 @@ const aiHelper = {
257
259
  //--------------------------------------------------------
258
260
  this.adapter.log.debug('[aiHelper] setting hourly weather update timer');
259
261
 
260
- const hourlyTimer = setInterval(
262
+ const hourlyTimer = this.adapter.setInterval(
261
263
  async () => {
262
264
  try {
263
265
  const geo = await this._loadGeoLocation();
@@ -303,7 +305,7 @@ const aiHelper = {
303
305
  */
304
306
  _createDailyTimer(timeObj, callback) {
305
307
  const { hour, minute } = timeObj;
306
- const timer = setInterval(async () => {
308
+ const timer = this.adapter.setInterval(async () => {
307
309
  const now = new Date();
308
310
 
309
311
  // --- FIX: Nachholen nur in den ersten 3 Minuten nach Adapterstart ---
@@ -79,10 +79,23 @@ async function _runDailyCirculationCheck() {
79
79
 
80
80
  const seasonActive = (await adapter.getStateAsync('status.season_active'))?.val;
81
81
  const mode = (await adapter.getStateAsync('control.circulation.mode'))?.val || 'off';
82
+ const solarControlActive = (await adapter.getStateAsync('solar.solar_control_active'))?.val === true;
82
83
  const dailyTotal = Math.round((await adapter.getStateAsync('circulation.daily_total'))?.val || 0);
83
84
  const dailyRequired = Math.round((await adapter.getStateAsync('circulation.daily_required'))?.val || 0);
84
- const collector = Number((await adapter.getStateAsync('temperature.collector.current'))?.val || 0);
85
- const pool = Number((await adapter.getStateAsync('temperature.surface.current'))?.val || 0);
85
+
86
+ // FIX: Treat missing, empty or non-numeric temperature values as invalid instead of silently using 0.
87
+ const readOptionalNumber = async stateId => {
88
+ const value = (await adapter.getStateAsync(stateId))?.val;
89
+ if (value === null || value === undefined || value === '') {
90
+ return null;
91
+ }
92
+
93
+ const numberValue = Number(value);
94
+ return Number.isFinite(numberValue) ? numberValue : null;
95
+ };
96
+
97
+ const collector = await readOptionalNumber('temperature.collector.current');
98
+ const pool = await readOptionalNumber('temperature.surface.current');
86
99
 
87
100
  if (!seasonActive) {
88
101
  adapter.log.debug('[controlHelper] season inactive - daily check skipped.');
@@ -110,12 +123,30 @@ async function _runDailyCirculationCheck() {
110
123
  case 'auto':
111
124
  if (percent >= 100) {
112
125
  message = `Tagesumwälzung abgeschlossen: ${dailyTotal} l (${percent} %). Kein Nachpumpen erforderlich.`;
113
- } else if (collector > pool) {
114
- message = `Heutige Umwälzung: ${dailyTotal} l (${percent} %). Es fehlen ${missing} l. Nachpumpen startet automatisch (Kollektor wärmer).`;
126
+ } else {
127
+ if (solarControlActive && collector !== null && pool !== null && collector <= pool) {
128
+ // FIX: Block automatic follow-up pumping only when solar control is active and both temperatures are valid but the collector is not warmer than the pool.
129
+ adapter.log.debug(
130
+ `[controlHelper] automatic pumping blocked by active solar temperature check: collector (${collector}°C) is not warmer than pool (${pool}°C).`,
131
+ );
132
+ message = `Heutige Umwälzung: ${dailyTotal} l (${percent} %). Kein automatisches Nachpumpen, da die Solarsteuerung aktiv ist und der Kollektor nicht wärmer als der Pool ist.`;
133
+ await _sendSpeech(message);
134
+ await adapter.setStateAsync('control.circulation.last_report', {
135
+ val: new Date().toISOString(),
136
+ ack: true,
137
+ });
138
+ return;
139
+ }
140
+
141
+ // FIX: Missing or partially available temperatures do not block automatic follow-up pumping.
142
+ message = `Heutige Umwälzung: ${dailyTotal} l (${percent} %). Automatisches Nachpumpen wird gestartet.`;
143
+ await _sendSpeech(message);
144
+ await adapter.setStateAsync('control.circulation.last_report', {
145
+ val: new Date().toISOString(),
146
+ ack: true,
147
+ });
115
148
  await _startAutoPumping(missing);
116
149
  return;
117
- } else {
118
- message = `Heutige Umwälzung: ${dailyTotal} l (${percent} %). Kein automatisches Nachpumpen, Kollektor kälter als Pool.`;
119
150
  }
120
151
  break;
121
152
 
@@ -40,7 +40,7 @@ function init(a) {
40
40
  async function _scheduleBackwashReminder() {
41
41
  try {
42
42
  if (backwashReminderTimer) {
43
- clearTimeout(backwashReminderTimer);
43
+ adapter.clearTimeout(backwashReminderTimer);
44
44
  }
45
45
 
46
46
  const now = new Date();
@@ -55,7 +55,7 @@ async function _scheduleBackwashReminder() {
55
55
  const diffMs = next - now;
56
56
  adapter.log.debug(`[controlHelper2] next backwash reminder check scheduled for ${next.toLocaleString()}`);
57
57
 
58
- backwashReminderTimer = setTimeout(async () => {
58
+ backwashReminderTimer = adapter.setTimeout(async () => {
59
59
  await _runBackwashReminderCheck();
60
60
  await _scheduleBackwashReminder(); // neu planen
61
61
  }, diffMs);
@@ -184,7 +184,7 @@ async function _sendSpeech(text) {
184
184
  */
185
185
  function cleanup() {
186
186
  if (backwashReminderTimer) {
187
- clearTimeout(backwashReminderTimer);
187
+ adapter.clearTimeout(backwashReminderTimer);
188
188
  backwashReminderTimer = null;
189
189
  }
190
190
  lastReminderDay = null;
@@ -142,7 +142,7 @@ const debugLogHelper = {
142
142
  if (this.buffer.length > 2000) {
143
143
  await this._flushBuffer();
144
144
  } else if (!this.bufferTimer) {
145
- this.bufferTimer = setTimeout(() => this._flushBuffer(), 5000);
145
+ this.bufferTimer = this.adapter.setTimeout(() => this._flushBuffer(), 5000);
146
146
  }
147
147
  } catch (err) {
148
148
  this.adapter.log.warn(`[debugLogHelper] Error while appending to log: ${err.message}`);
@@ -161,6 +161,9 @@ const debugLogHelper = {
161
161
  ack: true,
162
162
  }); // max ~60k Zeichen
163
163
  this.buffer = '';
164
+ if (this.bufferTimer) {
165
+ this.adapter.clearTimeout(this.bufferTimer);
166
+ }
164
167
  this.bufferTimer = null;
165
168
  } catch (err) {
166
169
  this.adapter.log.warn(`[debugLogHelper] Error while writing to log: ${err.message}`);
@@ -182,7 +185,8 @@ const debugLogHelper = {
182
185
 
183
186
  cleanup() {
184
187
  if (this.bufferTimer) {
185
- clearTimeout(this.bufferTimer);
188
+ this.adapter.clearTimeout(this.bufferTimer);
189
+ this.bufferTimer = null;
186
190
  }
187
191
  this.adapter.log.debug('[debugLogHelper] Cleanup done');
188
192
  },