iobroker.poolcontrol 1.3.7 → 1.3.10
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 +42 -10
- package/io-package.json +29 -28
- package/lib/helpers/photovoltaicHelper.js +54 -18
- package/lib/helpers/photovoltaicInsightsHelper.js +306 -0
- package/lib/helpers/solarExtendedHelper.js +39 -0
- package/lib/helpers/solarHelper.js +39 -0
- package/lib/helpers/solarInsightsHelper.js +29 -6
- package/lib/helpers/solarLogbookHelper.js +70 -11
- package/lib/i18n/de.json +18 -1
- package/lib/i18n/en.json +18 -1
- package/lib/i18n/es.json +18 -2
- package/lib/i18n/fr.json +18 -2
- package/lib/i18n/it.json +18 -2
- package/lib/i18n/nl.json +18 -2
- package/lib/i18n/pl.json +18 -2
- package/lib/i18n/pt.json +18 -2
- package/lib/i18n/ru.json +18 -2
- package/lib/i18n/uk.json +18 -2
- package/lib/i18n/zh-cn.json +18 -2
- package/lib/stateDefinitions/photovoltaicInsightsStates.js +444 -0
- package/main.js +17 -0
- package/package.json +1 -1
|
@@ -131,6 +131,12 @@ const solarHelper = {
|
|
|
131
131
|
});
|
|
132
132
|
|
|
133
133
|
// ZENTRAL: Pumpe über Bool-Schalter setzen
|
|
134
|
+
if (shouldRun) {
|
|
135
|
+
await this._setActiveHelperIfAllowed('solarHelper');
|
|
136
|
+
} else {
|
|
137
|
+
await this._releaseActiveHelperIfOwned();
|
|
138
|
+
}
|
|
139
|
+
|
|
134
140
|
await this.adapter.setStateChangedAsync('pump.pump_switch', {
|
|
135
141
|
val: shouldRun,
|
|
136
142
|
ack: false,
|
|
@@ -145,6 +151,8 @@ const solarHelper = {
|
|
|
145
151
|
ack: true,
|
|
146
152
|
});
|
|
147
153
|
|
|
154
|
+
await this._releaseActiveHelperIfOwned();
|
|
155
|
+
|
|
148
156
|
// Keine Schaltung – Grund protokollieren
|
|
149
157
|
const reason = !season
|
|
150
158
|
? 'Saison inaktiv'
|
|
@@ -209,6 +217,37 @@ const solarHelper = {
|
|
|
209
217
|
}
|
|
210
218
|
},
|
|
211
219
|
|
|
220
|
+
async _setActiveHelperIfAllowed(helperName) {
|
|
221
|
+
try {
|
|
222
|
+
const activeHelper = (await this.adapter.getStateAsync('pump.active_helper'))?.val || '';
|
|
223
|
+
|
|
224
|
+
if (activeHelper && activeHelper !== helperName) {
|
|
225
|
+
this.adapter.log.debug(
|
|
226
|
+
`[solarHelper] Active helper not changed because '${activeHelper}' currently owns the pump.`,
|
|
227
|
+
);
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
await this.adapter.setStateAsync('pump.active_helper', { val: helperName, ack: true });
|
|
232
|
+
} catch (err) {
|
|
233
|
+
this.adapter.log.warn(`[solarHelper] Could not set pump.active_helper: ${err.message}`);
|
|
234
|
+
}
|
|
235
|
+
},
|
|
236
|
+
|
|
237
|
+
async _releaseActiveHelperIfOwned() {
|
|
238
|
+
try {
|
|
239
|
+
const activeHelper = (await this.adapter.getStateAsync('pump.active_helper'))?.val || '';
|
|
240
|
+
|
|
241
|
+
if (activeHelper !== 'solarHelper') {
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
await this.adapter.setStateAsync('pump.active_helper', { val: '', ack: true });
|
|
246
|
+
} catch (err) {
|
|
247
|
+
this.adapter.log.warn(`[solarHelper] Could not release pump.active_helper: ${err.message}`);
|
|
248
|
+
}
|
|
249
|
+
},
|
|
250
|
+
|
|
212
251
|
cleanup() {
|
|
213
252
|
if (this.checkTimer) {
|
|
214
253
|
this.adapter.clearInterval(this.checkTimer);
|
|
@@ -15,6 +15,7 @@ const solarInsightsHelper = {
|
|
|
15
15
|
checkTimer: null,
|
|
16
16
|
resetTimer: null,
|
|
17
17
|
lastCheckTimestamp: null,
|
|
18
|
+
lastSolarLogicActive: false,
|
|
18
19
|
|
|
19
20
|
init(adapter) {
|
|
20
21
|
this.adapter = adapter;
|
|
@@ -35,8 +36,11 @@ const solarInsightsHelper = {
|
|
|
35
36
|
return;
|
|
36
37
|
}
|
|
37
38
|
|
|
38
|
-
// Tages-Latch
|
|
39
|
-
if (
|
|
39
|
+
// FIX: Tages-Latch auch bei vollständigen ioBroker IDs sicher setzen
|
|
40
|
+
if (
|
|
41
|
+
(this._matchesStateId(id, 'solar.request_active') || this._matchesStateId(id, 'solar.extended.active')) &&
|
|
42
|
+
state.val === true
|
|
43
|
+
) {
|
|
40
44
|
void this.adapter.setStateChangedAsync('analytics.insights.solar.results.solar_ran_today', {
|
|
41
45
|
val: true,
|
|
42
46
|
ack: true,
|
|
@@ -99,6 +103,7 @@ const solarInsightsHelper = {
|
|
|
99
103
|
});
|
|
100
104
|
|
|
101
105
|
this.lastCheckTimestamp = null;
|
|
106
|
+
this.lastSolarLogicActive = false;
|
|
102
107
|
|
|
103
108
|
await this.adapter.setStateChangedAsync('analytics.insights.solar.debug.last_update', {
|
|
104
109
|
val: new Date().toISOString(),
|
|
@@ -185,7 +190,13 @@ const solarInsightsHelper = {
|
|
|
185
190
|
'ai.weather.outputs.daily_summary',
|
|
186
191
|
];
|
|
187
192
|
|
|
188
|
-
|
|
193
|
+
// FIX: Also support full ioBroker IDs like "poolcontrol.0.solar.request_active"
|
|
194
|
+
return ids.some(relevantId => id === relevantId || id.endsWith(`.${relevantId}`));
|
|
195
|
+
},
|
|
196
|
+
|
|
197
|
+
_matchesStateId(id, stateId) {
|
|
198
|
+
// FIX: Also support full ioBroker IDs like "poolcontrol.0.solar.request_active"
|
|
199
|
+
return id === stateId || id.endsWith(`.${stateId}`);
|
|
189
200
|
},
|
|
190
201
|
|
|
191
202
|
async _checkSolarInsights() {
|
|
@@ -353,13 +364,18 @@ const solarInsightsHelper = {
|
|
|
353
364
|
peakPowerTodayW = 0;
|
|
354
365
|
}
|
|
355
366
|
|
|
356
|
-
if (this.lastCheckTimestamp &&
|
|
367
|
+
if (this.lastCheckTimestamp && (this.lastSolarLogicActive || solarLogicActive)) {
|
|
357
368
|
const deltaHours = (nowTs - this.lastCheckTimestamp) / 3600000;
|
|
358
369
|
|
|
359
|
-
//
|
|
370
|
+
// FIX: Count active solar minutes based on solar runtime, not only on positive thermal gain.
|
|
371
|
+
// The interval is counted if solar was active at the previous or current check.
|
|
360
372
|
if (deltaHours > 0 && deltaHours <= 0.5) {
|
|
361
|
-
estimatedGainTodayWh = Number((estimatedGainTodayWh + thermalPowerW * deltaHours).toFixed(2));
|
|
362
373
|
activeMinutesToday = Number((activeMinutesToday + deltaHours * 60).toFixed(2));
|
|
374
|
+
|
|
375
|
+
// FIX: Energy gain is only accumulated when a positive thermal power can be calculated
|
|
376
|
+
if (solarEffectiveNow && Number.isFinite(thermalPowerW) && thermalPowerW > 0) {
|
|
377
|
+
estimatedGainTodayWh = Number((estimatedGainTodayWh + thermalPowerW * deltaHours).toFixed(2));
|
|
378
|
+
}
|
|
363
379
|
}
|
|
364
380
|
}
|
|
365
381
|
|
|
@@ -681,7 +697,14 @@ const solarInsightsHelper = {
|
|
|
681
697
|
ack: true,
|
|
682
698
|
});
|
|
683
699
|
|
|
700
|
+
await this.adapter.setStateChangedAsync('analytics.insights.solar.debug.last_update', {
|
|
701
|
+
val: new Date().toISOString(),
|
|
702
|
+
ack: true,
|
|
703
|
+
});
|
|
704
|
+
|
|
684
705
|
this.lastCheckTimestamp = nowTs;
|
|
706
|
+
this.lastSolarLogicActive = solarLogicActive;
|
|
707
|
+
|
|
685
708
|
this.adapter.log.debug('[solarInsightsHelper] Block 7 updated successfully');
|
|
686
709
|
} catch (err) {
|
|
687
710
|
this.adapter.log.warn(`[solarInsightsHelper] Error in check: ${err.message}`);
|
|
@@ -224,10 +224,6 @@ const solarLogbookHelper = {
|
|
|
224
224
|
|
|
225
225
|
const currentEntry = await this._readString('analytics.insights.solar.logbook.current_entry');
|
|
226
226
|
|
|
227
|
-
if (currentEntry === entry.text) {
|
|
228
|
-
return;
|
|
229
|
-
}
|
|
230
|
-
|
|
231
227
|
const now = new Date();
|
|
232
228
|
const nowIso = now.toISOString();
|
|
233
229
|
const timeLabel = this._formatTime(now);
|
|
@@ -241,13 +237,31 @@ const solarLogbookHelper = {
|
|
|
241
237
|
};
|
|
242
238
|
|
|
243
239
|
const dayLogJsonRaw = await this._readString('analytics.insights.solar.logbook.day_log_json');
|
|
244
|
-
|
|
240
|
+
let dayLog = this._safeParseArray(dayLogJsonRaw);
|
|
241
|
+
|
|
242
|
+
// FIX: Remove obsolete "no runtime today" entries once solar has actually run today.
|
|
243
|
+
// The current_entry remains live, but the readable day log should not keep a misleading
|
|
244
|
+
// "Solar did not run today" entry after solar runtime was detected.
|
|
245
|
+
if (entry.type !== 'no_runtime_today') {
|
|
246
|
+
dayLog = dayLog.filter(item => item && item.type !== 'no_runtime_today');
|
|
247
|
+
}
|
|
245
248
|
|
|
246
|
-
dayLog.
|
|
249
|
+
const lastLogItem = dayLog.length > 0 ? dayLog[dayLog.length - 1] : null;
|
|
250
|
+
const shouldAppendLogEntry = this._shouldAppendLogEntry(lastLogItem, entry, now);
|
|
247
251
|
|
|
248
|
-
|
|
252
|
+
// FIX: current_entry is the live readable status and may change often.
|
|
253
|
+
// day_log_json/day_log_text are readable day history and should only receive meaningful entries.
|
|
254
|
+
if (currentEntry === entry.text && !shouldAppendLogEntry) {
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
249
257
|
|
|
250
|
-
|
|
258
|
+
let trimmedLog = dayLog.slice(-100);
|
|
259
|
+
|
|
260
|
+
if (shouldAppendLogEntry) {
|
|
261
|
+
trimmedLog = [...dayLog, newLogItem].slice(-100);
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
const dayLogText = this._buildDayLogText(trimmedLog);
|
|
251
265
|
|
|
252
266
|
await this.adapter.setStateChangedAsync('analytics.insights.solar.logbook.current_entry', {
|
|
253
267
|
val: entry.text,
|
|
@@ -269,8 +283,10 @@ const solarLogbookHelper = {
|
|
|
269
283
|
ack: true,
|
|
270
284
|
});
|
|
271
285
|
|
|
286
|
+
const lastEntryTime = await this._readString('analytics.insights.solar.logbook.last_entry_time');
|
|
287
|
+
|
|
272
288
|
await this.adapter.setStateChangedAsync('analytics.insights.solar.logbook.last_entry_time', {
|
|
273
|
-
val: nowIso,
|
|
289
|
+
val: shouldAppendLogEntry ? nowIso : lastEntryTime,
|
|
274
290
|
ack: true,
|
|
275
291
|
});
|
|
276
292
|
|
|
@@ -472,18 +488,61 @@ const solarLogbookHelper = {
|
|
|
472
488
|
};
|
|
473
489
|
},
|
|
474
490
|
|
|
491
|
+
// ================================
|
|
492
|
+
// FIX: Logbook Filter & Throttling
|
|
493
|
+
// ================================
|
|
494
|
+
|
|
495
|
+
_shouldAppendLogEntry(lastLogItem, entry, now) {
|
|
496
|
+
if (!lastLogItem) {
|
|
497
|
+
return true;
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
if (!entry || !entry.type) {
|
|
501
|
+
return false;
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
// Statuswechsel IMMER loggen
|
|
505
|
+
if (lastLogItem.type !== entry.type) {
|
|
506
|
+
return true;
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
const lastTimestamp = Date.parse(lastLogItem.ts);
|
|
510
|
+
|
|
511
|
+
if (!Number.isFinite(lastTimestamp)) {
|
|
512
|
+
return true;
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
// max alle 15 Minuten neuen Eintrag
|
|
516
|
+
const minIntervalMs = 15 * 60 * 1000;
|
|
517
|
+
|
|
518
|
+
return now.getTime() - lastTimestamp >= minIntervalMs;
|
|
519
|
+
},
|
|
520
|
+
|
|
521
|
+
_buildDayLogText(dayLog) {
|
|
522
|
+
return dayLog.map(item => `${item.time} - ${item.text}`).join('\n');
|
|
523
|
+
},
|
|
524
|
+
|
|
475
525
|
_extractShortWeather(weatherSummary) {
|
|
476
526
|
if (!weatherSummary || weatherSummary.trim() === '') {
|
|
477
527
|
return '';
|
|
478
528
|
}
|
|
479
529
|
|
|
480
530
|
const text = weatherSummary.replace(/\s+/g, ' ').trim();
|
|
531
|
+
const maxLength = 140;
|
|
481
532
|
|
|
482
|
-
if (text.length <=
|
|
533
|
+
if (text.length <= maxLength) {
|
|
483
534
|
return text;
|
|
484
535
|
}
|
|
485
536
|
|
|
486
|
-
|
|
537
|
+
// FIX: Do not cut the weather summary in the middle of a word
|
|
538
|
+
const shortened = text.slice(0, maxLength);
|
|
539
|
+
const lastSpaceIndex = shortened.lastIndexOf(' ');
|
|
540
|
+
|
|
541
|
+
if (lastSpaceIndex > 0) {
|
|
542
|
+
return `${shortened.slice(0, lastSpaceIndex)}…`;
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
return `${shortened}…`;
|
|
487
546
|
},
|
|
488
547
|
|
|
489
548
|
async _readState(id) {
|
package/lib/i18n/de.json
CHANGED
|
@@ -167,5 +167,22 @@
|
|
|
167
167
|
"solar_log_text_weather_supported_with_text": "Wetterbasierte Plausibilisierung ist aktiv. Aktuelle Wetterzusammenfassung: %s",
|
|
168
168
|
"solar_log_text_weather_supported": "Für diese Bewertung ist eine wetterbasierte Plausibilisierung aktiv.",
|
|
169
169
|
"solar_log_text_small_gain_detail": "Der aktuell geschätzte Tagesertrag liegt bei etwa %s Wh, das entspricht etwa %s kWh.",
|
|
170
|
-
"solar_log_text_quality_level": "Die aktuelle Qualitätsstufe der Bewertung ist %s."
|
|
170
|
+
"solar_log_text_quality_level": "Die aktuelle Qualitätsstufe der Bewertung ist %s.",
|
|
171
|
+
|
|
172
|
+
"photovoltaic_insights_calculation_mode_daily": "Tägliche PV-Überschussanalyse",
|
|
173
|
+
"photovoltaic_insights_price_source_adapter_config": "Adapter-Konfiguration",
|
|
174
|
+
"photovoltaic_insights_calculation_note_block_2": "Der Berechnungsblock bereitet die Quelleninformationen für die Photovoltaik-Insights-Analyse vor.",
|
|
175
|
+
"photovoltaic_insights_summary_text_block_3": "PV-Überschuss hat die Pumpe heute %s Minuten betrieben, dabei etwa %s kWh genutzt und ungefähr %s € eingespart.",
|
|
176
|
+
"photovoltaic_insights_label_mode": "Modus",
|
|
177
|
+
"photovoltaic_insights_label_pv_surplus_active": "PV-Überschuss aktiv",
|
|
178
|
+
"photovoltaic_insights_label_pv_controls_pump": "PV steuert Pumpe",
|
|
179
|
+
"photovoltaic_insights_label_runtime_today": "Laufzeit heute",
|
|
180
|
+
"photovoltaic_insights_label_energy_used_today": "Genutzte Energie heute",
|
|
181
|
+
"photovoltaic_insights_label_savings_today": "Einsparung heute",
|
|
182
|
+
"photovoltaic_insights_label_starts_today": "Starts heute",
|
|
183
|
+
"photovoltaic_insights_label_summary": "Zusammenfassung",
|
|
184
|
+
"photovoltaic_insights_debug_reason_pv_runtime_active": "PV-Überschussbetrieb aktiv",
|
|
185
|
+
"photovoltaic_insights_debug_reason_no_pv_runtime": "Kein aktiver PV-Überschussbetrieb",
|
|
186
|
+
"photovoltaic_insights_debug_text_pv_runtime_active": "PV-Überschuss ist aktiv und der Photovoltaik-Helper besitzt aktuell die Pumpe.",
|
|
187
|
+
"photovoltaic_insights_debug_text_no_pv_runtime": "Aktuell wird keine PV-Laufzeit gezählt, weil entweder kein PV-Überschuss aktiv ist oder der Photovoltaik-Helper die Pumpe nicht besitzt."
|
|
171
188
|
}
|
package/lib/i18n/en.json
CHANGED
|
@@ -239,5 +239,22 @@
|
|
|
239
239
|
"solar_log_text_weather_supported_with_text": "Weather-based plausibility is active. Current weather summary: %s",
|
|
240
240
|
"solar_log_text_weather_supported": "Weather-based plausibility is active for this assessment.",
|
|
241
241
|
"solar_log_text_small_gain_detail": "The currently estimated daily gain is about %s Wh, which corresponds to about %s kWh.",
|
|
242
|
-
"solar_log_text_quality_level": "The current quality level of the assessment is %s."
|
|
242
|
+
"solar_log_text_quality_level": "The current quality level of the assessment is %s.",
|
|
243
|
+
|
|
244
|
+
"photovoltaic_insights_calculation_mode_daily": "Daily PV surplus analysis",
|
|
245
|
+
"photovoltaic_insights_price_source_adapter_config": "Adapter configuration",
|
|
246
|
+
"photovoltaic_insights_calculation_note_block_2": "The calculation block prepares the source information for the photovoltaic insights analysis.",
|
|
247
|
+
"photovoltaic_insights_summary_text_block_3": "PV ran today for %s minutes, used %s kWh and saved approximately %s €.",
|
|
248
|
+
"photovoltaic_insights_label_mode": "Mode",
|
|
249
|
+
"photovoltaic_insights_label_pv_surplus_active": "PV surplus active",
|
|
250
|
+
"photovoltaic_insights_label_pv_controls_pump": "PV controls pump",
|
|
251
|
+
"photovoltaic_insights_label_runtime_today": "Runtime today",
|
|
252
|
+
"photovoltaic_insights_label_energy_used_today": "Energy used today",
|
|
253
|
+
"photovoltaic_insights_label_savings_today": "Savings today",
|
|
254
|
+
"photovoltaic_insights_label_starts_today": "Starts today",
|
|
255
|
+
"photovoltaic_insights_label_summary": "Summary",
|
|
256
|
+
"photovoltaic_insights_debug_reason_pv_runtime_active": "PV surplus operation active",
|
|
257
|
+
"photovoltaic_insights_debug_reason_no_pv_runtime": "No active PV surplus operation",
|
|
258
|
+
"photovoltaic_insights_debug_text_pv_runtime_active": "PV surplus is active and the photovoltaic helper currently owns the pump.",
|
|
259
|
+
"photovoltaic_insights_debug_text_no_pv_runtime": "No PV runtime is currently counted because either no PV surplus is active or the photovoltaic helper does not own the pump."
|
|
243
260
|
}
|
package/lib/i18n/es.json
CHANGED
|
@@ -239,5 +239,21 @@
|
|
|
239
239
|
"solar_log_text_weather_supported_with_text": "La plausibilidad basada en el clima está activa. Resumen meteorológico actual: %s",
|
|
240
240
|
"solar_log_text_weather_supported": "La plausibilidad basada en el clima está activa para esta evaluación.",
|
|
241
241
|
"solar_log_text_small_gain_detail": "La ganancia diaria estimada actualmente es de aproximadamente %s Wh, lo que corresponde a unos %s kWh.",
|
|
242
|
-
"solar_log_text_quality_level": "El nivel de calidad actual de la evaluación es %s."
|
|
243
|
-
|
|
242
|
+
"solar_log_text_quality_level": "El nivel de calidad actual de la evaluación es %s.",
|
|
243
|
+
"photovoltaic_insights_calculation_mode_daily": "Análisis diario de excedente fotovoltaico",
|
|
244
|
+
"photovoltaic_insights_price_source_adapter_config": "Configuración del adaptador",
|
|
245
|
+
"photovoltaic_insights_calculation_note_block_2": "El bloque de cálculo prepara la información de origen para el análisis de información fotovoltaica.",
|
|
246
|
+
"photovoltaic_insights_summary_text_block_3": "El excedente fotovoltaico hizo funcionar la bomba durante %s minutos hoy, utilizó aproximadamente %s kWh y ahorró alrededor de %s €.",
|
|
247
|
+
"photovoltaic_insights_label_mode": "Modo",
|
|
248
|
+
"photovoltaic_insights_label_pv_surplus_active": "Excedente FV activo",
|
|
249
|
+
"photovoltaic_insights_label_pv_controls_pump": "FV controla la bomba",
|
|
250
|
+
"photovoltaic_insights_label_runtime_today": "Tiempo de funcionamiento hoy",
|
|
251
|
+
"photovoltaic_insights_label_energy_used_today": "Energía utilizada hoy",
|
|
252
|
+
"photovoltaic_insights_label_savings_today": "Ahorro hoy",
|
|
253
|
+
"photovoltaic_insights_label_starts_today": "Arranques hoy",
|
|
254
|
+
"photovoltaic_insights_label_summary": "Resumen",
|
|
255
|
+
"photovoltaic_insights_debug_reason_pv_runtime_active": "Operación con excedente FV activa",
|
|
256
|
+
"photovoltaic_insights_debug_reason_no_pv_runtime": "Sin operación activa con excedente FV",
|
|
257
|
+
"photovoltaic_insights_debug_text_pv_runtime_active": "El excedente FV está activo y el helper fotovoltaico posee actualmente la bomba.",
|
|
258
|
+
"photovoltaic_insights_debug_text_no_pv_runtime": "Actualmente no se cuenta ningún tiempo de funcionamiento FV porque no hay excedente FV activo o el helper fotovoltaico no posee la bomba."
|
|
259
|
+
}
|
package/lib/i18n/fr.json
CHANGED
|
@@ -239,5 +239,21 @@
|
|
|
239
239
|
"solar_log_text_weather_supported_with_text": "La plausibilité basée sur la météo est active. Résumé météo actuel : %s",
|
|
240
240
|
"solar_log_text_weather_supported": "Une plausibilité basée sur la météo est active pour cette évaluation.",
|
|
241
241
|
"solar_log_text_small_gain_detail": "Le gain journalier actuellement estimé est d’environ %s Wh, ce qui correspond à environ %s kWh.",
|
|
242
|
-
"solar_log_text_quality_level": "Le niveau de qualité actuel de l’évaluation est %s."
|
|
243
|
-
|
|
242
|
+
"solar_log_text_quality_level": "Le niveau de qualité actuel de l’évaluation est %s.",
|
|
243
|
+
"photovoltaic_insights_calculation_mode_daily": "Analyse quotidienne du surplus photovoltaïque",
|
|
244
|
+
"photovoltaic_insights_price_source_adapter_config": "Configuration de l’adaptateur",
|
|
245
|
+
"photovoltaic_insights_calculation_note_block_2": "Le bloc de calcul prépare les informations sources pour l’analyse des insights photovoltaïques.",
|
|
246
|
+
"photovoltaic_insights_summary_text_block_3": "Le surplus photovoltaïque a fait fonctionner la pompe pendant %s minutes aujourd’hui, a utilisé environ %s kWh et a économisé approximativement %s €.",
|
|
247
|
+
"photovoltaic_insights_label_mode": "Mode",
|
|
248
|
+
"photovoltaic_insights_label_pv_surplus_active": "Surplus PV actif",
|
|
249
|
+
"photovoltaic_insights_label_pv_controls_pump": "Le PV contrôle la pompe",
|
|
250
|
+
"photovoltaic_insights_label_runtime_today": "Temps de fonctionnement aujourd’hui",
|
|
251
|
+
"photovoltaic_insights_label_energy_used_today": "Énergie utilisée aujourd’hui",
|
|
252
|
+
"photovoltaic_insights_label_savings_today": "Économies aujourd’hui",
|
|
253
|
+
"photovoltaic_insights_label_starts_today": "Démarrages aujourd’hui",
|
|
254
|
+
"photovoltaic_insights_label_summary": "Résumé",
|
|
255
|
+
"photovoltaic_insights_debug_reason_pv_runtime_active": "Fonctionnement sur surplus PV actif",
|
|
256
|
+
"photovoltaic_insights_debug_reason_no_pv_runtime": "Aucun fonctionnement actif sur surplus PV",
|
|
257
|
+
"photovoltaic_insights_debug_text_pv_runtime_active": "Le surplus PV est actif et le helper photovoltaïque possède actuellement la pompe.",
|
|
258
|
+
"photovoltaic_insights_debug_text_no_pv_runtime": "Aucun temps de fonctionnement PV n’est actuellement comptabilisé, car aucun surplus PV n’est actif ou le helper photovoltaïque ne possède pas la pompe."
|
|
259
|
+
}
|
package/lib/i18n/it.json
CHANGED
|
@@ -239,5 +239,21 @@
|
|
|
239
239
|
"solar_log_text_weather_supported_with_text": "La plausibilità basata sul meteo è attiva. Riepilogo meteo attuale: %s",
|
|
240
240
|
"solar_log_text_weather_supported": "La plausibilità basata sul meteo è attiva per questa valutazione.",
|
|
241
241
|
"solar_log_text_small_gain_detail": "Il guadagno giornaliero attualmente stimato è di circa %s Wh, che corrisponde a circa %s kWh.",
|
|
242
|
-
"solar_log_text_quality_level": "Il livello di qualità attuale della valutazione è %s."
|
|
243
|
-
|
|
242
|
+
"solar_log_text_quality_level": "Il livello di qualità attuale della valutazione è %s.",
|
|
243
|
+
"photovoltaic_insights_calculation_mode_daily": "Analisi giornaliera del surplus FV",
|
|
244
|
+
"photovoltaic_insights_price_source_adapter_config": "Configurazione dell'adattatore",
|
|
245
|
+
"photovoltaic_insights_calculation_note_block_2": "Il blocco di calcolo prepara le informazioni di origine per l'analisi degli insight fotovoltaici.",
|
|
246
|
+
"photovoltaic_insights_summary_text_block_3": "Il surplus fotovoltaico ha fatto funzionare la pompa per %s minuti oggi, ha utilizzato circa %s kWh e ha risparmiato circa %s €.",
|
|
247
|
+
"photovoltaic_insights_label_mode": "Modalità",
|
|
248
|
+
"photovoltaic_insights_label_pv_surplus_active": "Surplus FV attivo",
|
|
249
|
+
"photovoltaic_insights_label_pv_controls_pump": "Il FV controlla la pompa",
|
|
250
|
+
"photovoltaic_insights_label_runtime_today": "Tempo di funzionamento oggi",
|
|
251
|
+
"photovoltaic_insights_label_energy_used_today": "Energia usata oggi",
|
|
252
|
+
"photovoltaic_insights_label_savings_today": "Risparmio oggi",
|
|
253
|
+
"photovoltaic_insights_label_starts_today": "Avvii oggi",
|
|
254
|
+
"photovoltaic_insights_label_summary": "Riepilogo",
|
|
255
|
+
"photovoltaic_insights_debug_reason_pv_runtime_active": "Funzionamento con surplus FV attivo",
|
|
256
|
+
"photovoltaic_insights_debug_reason_no_pv_runtime": "Nessun funzionamento attivo con surplus FV",
|
|
257
|
+
"photovoltaic_insights_debug_text_pv_runtime_active": "Il surplus FV è attivo e l'helper fotovoltaico possiede attualmente la pompa.",
|
|
258
|
+
"photovoltaic_insights_debug_text_no_pv_runtime": "Attualmente non viene conteggiato alcun tempo di funzionamento FV perché non c'è surplus FV attivo oppure l'helper fotovoltaico non possiede la pompa."
|
|
259
|
+
}
|
package/lib/i18n/nl.json
CHANGED
|
@@ -239,5 +239,21 @@
|
|
|
239
239
|
"solar_log_text_weather_supported_with_text": "Weer-gebaseerde plausibiliteit is actief. Huidige weerssamenvatting: %s",
|
|
240
240
|
"solar_log_text_weather_supported": "Voor deze beoordeling is weer-gebaseerde plausibiliteit actief.",
|
|
241
241
|
"solar_log_text_small_gain_detail": "De momenteel geschatte dagopbrengst ligt rond %s Wh, wat overeenkomt met ongeveer %s kWh.",
|
|
242
|
-
"solar_log_text_quality_level": "Het huidige kwaliteitsniveau van de beoordeling is %s."
|
|
243
|
-
|
|
242
|
+
"solar_log_text_quality_level": "Het huidige kwaliteitsniveau van de beoordeling is %s.",
|
|
243
|
+
"photovoltaic_insights_calculation_mode_daily": "Dagelijkse analyse van PV-overschot",
|
|
244
|
+
"photovoltaic_insights_price_source_adapter_config": "Adapterconfiguratie",
|
|
245
|
+
"photovoltaic_insights_calculation_note_block_2": "Het berekeningsblok bereidt de broninformatie voor de PV-inzichtenanalyse voor.",
|
|
246
|
+
"photovoltaic_insights_summary_text_block_3": "PV-overschot heeft de pomp vandaag %s minuten laten draaien, ongeveer %s kWh gebruikt en circa %s € bespaard.",
|
|
247
|
+
"photovoltaic_insights_label_mode": "Modus",
|
|
248
|
+
"photovoltaic_insights_label_pv_surplus_active": "PV-overschot actief",
|
|
249
|
+
"photovoltaic_insights_label_pv_controls_pump": "PV stuurt de pomp",
|
|
250
|
+
"photovoltaic_insights_label_runtime_today": "Looptijd vandaag",
|
|
251
|
+
"photovoltaic_insights_label_energy_used_today": "Gebruikte energie vandaag",
|
|
252
|
+
"photovoltaic_insights_label_savings_today": "Besparing vandaag",
|
|
253
|
+
"photovoltaic_insights_label_starts_today": "Starts vandaag",
|
|
254
|
+
"photovoltaic_insights_label_summary": "Samenvatting",
|
|
255
|
+
"photovoltaic_insights_debug_reason_pv_runtime_active": "PV-overschotbedrijf actief",
|
|
256
|
+
"photovoltaic_insights_debug_reason_no_pv_runtime": "Geen actief PV-overschotbedrijf",
|
|
257
|
+
"photovoltaic_insights_debug_text_pv_runtime_active": "PV-overschot is actief en de photovoltaic helper bezit momenteel de pomp.",
|
|
258
|
+
"photovoltaic_insights_debug_text_no_pv_runtime": "Er wordt momenteel geen PV-looptijd geteld omdat er geen PV-overschot actief is of omdat de photovoltaic helper de pomp niet bezit."
|
|
259
|
+
}
|
package/lib/i18n/pl.json
CHANGED
|
@@ -239,5 +239,21 @@
|
|
|
239
239
|
"solar_log_text_weather_supported_with_text": "Uwzględnienie warunków pogodowych jest aktywne. Aktualne podsumowanie pogody: %s",
|
|
240
240
|
"solar_log_text_weather_supported": "Uwzględnienie warunków pogodowych jest aktywne dla tej oceny.",
|
|
241
241
|
"solar_log_text_small_gain_detail": "Aktualnie szacowany dzienny uzysk wynosi około %s Wh, co odpowiada około %s kWh.",
|
|
242
|
-
"solar_log_text_quality_level": "Aktualny poziom jakości oceny to %s."
|
|
243
|
-
|
|
242
|
+
"solar_log_text_quality_level": "Aktualny poziom jakości oceny to %s.",
|
|
243
|
+
"photovoltaic_insights_calculation_mode_daily": "Dzienna analiza nadwyżki PV",
|
|
244
|
+
"photovoltaic_insights_price_source_adapter_config": "Konfiguracja adaptera",
|
|
245
|
+
"photovoltaic_insights_calculation_note_block_2": "Blok obliczeniowy przygotowuje informacje źródłowe do analizy danych fotowoltaicznych.",
|
|
246
|
+
"photovoltaic_insights_summary_text_block_3": "Nadwyżka PV zasilała dziś pompę przez %s minut, wykorzystała około %s kWh i zaoszczędziła około %s €.",
|
|
247
|
+
"photovoltaic_insights_label_mode": "Tryb",
|
|
248
|
+
"photovoltaic_insights_label_pv_surplus_active": "Nadwyżka PV aktywna",
|
|
249
|
+
"photovoltaic_insights_label_pv_controls_pump": "PV steruje pompą",
|
|
250
|
+
"photovoltaic_insights_label_runtime_today": "Czas pracy dzisiaj",
|
|
251
|
+
"photovoltaic_insights_label_energy_used_today": "Energia użyta dzisiaj",
|
|
252
|
+
"photovoltaic_insights_label_savings_today": "Oszczędności dzisiaj",
|
|
253
|
+
"photovoltaic_insights_label_starts_today": "Starty dzisiaj",
|
|
254
|
+
"photovoltaic_insights_label_summary": "Podsumowanie",
|
|
255
|
+
"photovoltaic_insights_debug_reason_pv_runtime_active": "Praca z nadwyżki PV aktywna",
|
|
256
|
+
"photovoltaic_insights_debug_reason_no_pv_runtime": "Brak aktywnej pracy z nadwyżki PV",
|
|
257
|
+
"photovoltaic_insights_debug_text_pv_runtime_active": "Nadwyżka PV jest aktywna, a helper fotowoltaiczny aktualnie posiada pompę.",
|
|
258
|
+
"photovoltaic_insights_debug_text_no_pv_runtime": "Obecnie nie jest zliczany czas pracy PV, ponieważ nie ma aktywnej nadwyżki PV albo helper fotowoltaiczny nie posiada pompy."
|
|
259
|
+
}
|
package/lib/i18n/pt.json
CHANGED
|
@@ -239,5 +239,21 @@
|
|
|
239
239
|
"solar_log_text_weather_supported_with_text": "A plausibilidade baseada no clima está ativa. Resumo meteorológico atual: %s",
|
|
240
240
|
"solar_log_text_weather_supported": "A plausibilidade baseada no clima está ativa para esta avaliação.",
|
|
241
241
|
"solar_log_text_small_gain_detail": "O ganho diário atualmente estimado é de cerca de %s Wh, o que corresponde a cerca de %s kWh.",
|
|
242
|
-
"solar_log_text_quality_level": "O nível atual de qualidade da avaliação é %s."
|
|
243
|
-
|
|
242
|
+
"solar_log_text_quality_level": "O nível atual de qualidade da avaliação é %s.",
|
|
243
|
+
"photovoltaic_insights_calculation_mode_daily": "Análise diária do excedente fotovoltaico",
|
|
244
|
+
"photovoltaic_insights_price_source_adapter_config": "Configuração do adaptador",
|
|
245
|
+
"photovoltaic_insights_calculation_note_block_2": "O bloco de cálculo prepara as informações de origem para a análise de insights fotovoltaicos.",
|
|
246
|
+
"photovoltaic_insights_summary_text_block_3": "O excedente fotovoltaico operou a bomba por %s minutos hoje, usou cerca de %s kWh e economizou aproximadamente %s €.",
|
|
247
|
+
"photovoltaic_insights_label_mode": "Modo",
|
|
248
|
+
"photovoltaic_insights_label_pv_surplus_active": "Excedente FV ativo",
|
|
249
|
+
"photovoltaic_insights_label_pv_controls_pump": "FV controla a bomba",
|
|
250
|
+
"photovoltaic_insights_label_runtime_today": "Tempo de funcionamento hoje",
|
|
251
|
+
"photovoltaic_insights_label_energy_used_today": "Energia usada hoje",
|
|
252
|
+
"photovoltaic_insights_label_savings_today": "Economia hoje",
|
|
253
|
+
"photovoltaic_insights_label_starts_today": "Partidas hoje",
|
|
254
|
+
"photovoltaic_insights_label_summary": "Resumo",
|
|
255
|
+
"photovoltaic_insights_debug_reason_pv_runtime_active": "Operação com excedente FV ativa",
|
|
256
|
+
"photovoltaic_insights_debug_reason_no_pv_runtime": "Nenhuma operação ativa com excedente FV",
|
|
257
|
+
"photovoltaic_insights_debug_text_pv_runtime_active": "O excedente FV está ativo e o helper fotovoltaico possui atualmente a bomba.",
|
|
258
|
+
"photovoltaic_insights_debug_text_no_pv_runtime": "Atualmente nenhum tempo de funcionamento FV é contado porque não há excedente FV ativo ou o helper fotovoltaico não possui a bomba."
|
|
259
|
+
}
|
package/lib/i18n/ru.json
CHANGED
|
@@ -239,5 +239,21 @@
|
|
|
239
239
|
"solar_log_text_weather_supported_with_text": "Учет погодных условий активен. Текущая сводка погоды: %s",
|
|
240
240
|
"solar_log_text_weather_supported": "Для этой оценки активен учет погодных условий.",
|
|
241
241
|
"solar_log_text_small_gain_detail": "Текущий оценочный суточный прирост составляет около %s Wh, что соответствует примерно %s кВт·ч.",
|
|
242
|
-
"solar_log_text_quality_level": "Текущий уровень качества оценки — %s."
|
|
243
|
-
|
|
242
|
+
"solar_log_text_quality_level": "Текущий уровень качества оценки — %s.",
|
|
243
|
+
"photovoltaic_insights_calculation_mode_daily": "Ежедневный анализ излишков PV",
|
|
244
|
+
"photovoltaic_insights_price_source_adapter_config": "Конфигурация адаптера",
|
|
245
|
+
"photovoltaic_insights_calculation_note_block_2": "Блок расчета подготавливает исходную информацию для анализа данных фотоэлектрической системы.",
|
|
246
|
+
"photovoltaic_insights_summary_text_block_3": "Излишки PV сегодня обеспечивали работу насоса в течение %s минут, использовали около %s кВт·ч и сэкономили приблизительно %s €.",
|
|
247
|
+
"photovoltaic_insights_label_mode": "Режим",
|
|
248
|
+
"photovoltaic_insights_label_pv_surplus_active": "Излишек PV активен",
|
|
249
|
+
"photovoltaic_insights_label_pv_controls_pump": "PV управляет насосом",
|
|
250
|
+
"photovoltaic_insights_label_runtime_today": "Время работы сегодня",
|
|
251
|
+
"photovoltaic_insights_label_energy_used_today": "Использованная энергия сегодня",
|
|
252
|
+
"photovoltaic_insights_label_savings_today": "Экономия сегодня",
|
|
253
|
+
"photovoltaic_insights_label_starts_today": "Запуски сегодня",
|
|
254
|
+
"photovoltaic_insights_label_summary": "Сводка",
|
|
255
|
+
"photovoltaic_insights_debug_reason_pv_runtime_active": "Работа от излишка PV активна",
|
|
256
|
+
"photovoltaic_insights_debug_reason_no_pv_runtime": "Нет активной работы от излишка PV",
|
|
257
|
+
"photovoltaic_insights_debug_text_pv_runtime_active": "Излишек PV активен, и photovoltaic helper сейчас владеет насосом.",
|
|
258
|
+
"photovoltaic_insights_debug_text_no_pv_runtime": "Время работы PV сейчас не учитывается, потому что либо нет активного излишка PV, либо photovoltaic helper не владеет насосом."
|
|
259
|
+
}
|
package/lib/i18n/uk.json
CHANGED
|
@@ -239,5 +239,21 @@
|
|
|
239
239
|
"solar_log_text_weather_supported_with_text": "Погодна перевірка достовірності активна. Поточний опис погоди: %s",
|
|
240
240
|
"solar_log_text_weather_supported": "Для цієї оцінки активна погодна перевірка достовірності.",
|
|
241
241
|
"solar_log_text_small_gain_detail": "Поточний оцінений добовий приріст становить приблизно %s Wh, що відповідає приблизно %s кВт·год.",
|
|
242
|
-
"solar_log_text_quality_level": "Поточний рівень якості оцінки — %s."
|
|
243
|
-
|
|
242
|
+
"solar_log_text_quality_level": "Поточний рівень якості оцінки — %s.",
|
|
243
|
+
"photovoltaic_insights_calculation_mode_daily": "Щоденний аналіз надлишку PV",
|
|
244
|
+
"photovoltaic_insights_price_source_adapter_config": "Конфігурація адаптера",
|
|
245
|
+
"photovoltaic_insights_calculation_note_block_2": "Блок розрахунку готує вихідну інформацію для аналізу даних фотоелектричної системи.",
|
|
246
|
+
"photovoltaic_insights_summary_text_block_3": "Надлишок PV сьогодні забезпечував роботу насоса протягом %s хвилин, використав близько %s кВт·год і заощадив приблизно %s €.",
|
|
247
|
+
"photovoltaic_insights_label_mode": "Режим",
|
|
248
|
+
"photovoltaic_insights_label_pv_surplus_active": "Надлишок PV активний",
|
|
249
|
+
"photovoltaic_insights_label_pv_controls_pump": "PV керує насосом",
|
|
250
|
+
"photovoltaic_insights_label_runtime_today": "Час роботи сьогодні",
|
|
251
|
+
"photovoltaic_insights_label_energy_used_today": "Використана енергія сьогодні",
|
|
252
|
+
"photovoltaic_insights_label_savings_today": "Економія сьогодні",
|
|
253
|
+
"photovoltaic_insights_label_starts_today": "Запуски сьогодні",
|
|
254
|
+
"photovoltaic_insights_label_summary": "Підсумок",
|
|
255
|
+
"photovoltaic_insights_debug_reason_pv_runtime_active": "Робота від надлишку PV активна",
|
|
256
|
+
"photovoltaic_insights_debug_reason_no_pv_runtime": "Немає активної роботи від надлишку PV",
|
|
257
|
+
"photovoltaic_insights_debug_text_pv_runtime_active": "Надлишок PV активний, і photovoltaic helper наразі володіє насосом.",
|
|
258
|
+
"photovoltaic_insights_debug_text_no_pv_runtime": "Наразі час роботи PV не підраховується, оскільки або немає активного надлишку PV, або photovoltaic helper не володіє насосом."
|
|
259
|
+
}
|
package/lib/i18n/zh-cn.json
CHANGED
|
@@ -239,5 +239,21 @@
|
|
|
239
239
|
"solar_log_text_weather_supported_with_text": "已启用基于天气的合理性校验。当前天气概况:%s",
|
|
240
240
|
"solar_log_text_weather_supported": "此评估已启用基于天气的合理性校验。",
|
|
241
241
|
"solar_log_text_small_gain_detail": "当前估算当日增益约为 %s Wh,约等于 %s kWh。",
|
|
242
|
-
"solar_log_text_quality_level": "当前评估质量等级为 %s。"
|
|
243
|
-
|
|
242
|
+
"solar_log_text_quality_level": "当前评估质量等级为 %s。",
|
|
243
|
+
"photovoltaic_insights_calculation_mode_daily": "每日光伏余电分析",
|
|
244
|
+
"photovoltaic_insights_price_source_adapter_config": "适配器配置",
|
|
245
|
+
"photovoltaic_insights_calculation_note_block_2": "计算块为光伏洞察分析准备源信息。",
|
|
246
|
+
"photovoltaic_insights_summary_text_block_3": "光伏余电今天使泵运行了 %s 分钟,使用约 %s kWh,并节省约 %s €。",
|
|
247
|
+
"photovoltaic_insights_label_mode": "模式",
|
|
248
|
+
"photovoltaic_insights_label_pv_surplus_active": "光伏余电已激活",
|
|
249
|
+
"photovoltaic_insights_label_pv_controls_pump": "光伏控制泵",
|
|
250
|
+
"photovoltaic_insights_label_runtime_today": "今天运行时间",
|
|
251
|
+
"photovoltaic_insights_label_energy_used_today": "今天使用的能源",
|
|
252
|
+
"photovoltaic_insights_label_savings_today": "今天节省",
|
|
253
|
+
"photovoltaic_insights_label_starts_today": "今天启动次数",
|
|
254
|
+
"photovoltaic_insights_label_summary": "摘要",
|
|
255
|
+
"photovoltaic_insights_debug_reason_pv_runtime_active": "光伏余电运行已激活",
|
|
256
|
+
"photovoltaic_insights_debug_reason_no_pv_runtime": "没有活跃的光伏余电运行",
|
|
257
|
+
"photovoltaic_insights_debug_text_pv_runtime_active": "光伏余电处于激活状态,并且 photovoltaic helper 当前拥有泵。",
|
|
258
|
+
"photovoltaic_insights_debug_text_no_pv_runtime": "当前未统计光伏运行时间,因为没有活跃的光伏余电,或者 photovoltaic helper 未拥有泵。"
|
|
259
|
+
}
|