iobroker.tibberlink 1.5.0 → 1.6.1

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 CHANGED
@@ -53,18 +53,59 @@ If you're not currently a Tibber user, I would greatly appreciate it if you coul
53
53
  - Each channel populates an external state as output, which has to be selected in the settings tab. For instance, this state might be "0_userdata.0.example_state" or any other writable external state.
54
54
  - The values to be written to the output state can be defined in "value YES" and "value NO," e.g., "true" for boolean states or a number or text to be written.
55
55
  - Outputs:
56
- - "Best cost": Utilizes the "TriggerPrice" state as input, and the output is "YES" every hour when the current Tibber energy cost is below the trigger price.
57
- - "Best single hours": The output is "YES" during the cheapest number of hours, with the number defined in the "AmountHours" state.
58
- - "Best hours block": The output is "YES" during the best block of hours, with the number of hours defined in the "AmountHours" state.
56
+ - "Best cost": Utilizes the "TriggerPrice" state as input, producing a "YES" output every hour when the current Tibber energy cost is below the trigger price.
57
+ - "Best single hours": Generates a "YES" output during the least expensive hours, with the number defined in the "AmountHours" state.
58
+ - "Best hours block": Outputs "YES" during the most cost-effective block of hours, with the number of hours specified in the "AmountHours" state.
59
+ - "Best cost LTF": "Best cost" within a Limited Time Frame (LTF).
60
+ - "Best single hours LTF": "Best single hours" within a Limited Time Frame (LTF).
61
+ - "Best hours block LTF": "Best hours block" within a Limited Time Frame (LTF).
62
+ - LTF channels: Function similarly to standard channels but only operate within a time frame defined by the "StartTime" and "StopTime" state objects. After "StopTime," the channel deactivates itself. "StartTime" and "StopTime" may span over several days. The states must be filled with a date-time string in ISO-8601 format with a timezone offset, such as: "2023-11-17T21:00:00.000+01:00".
63
+
64
+ ### Hint
65
+
66
+ #### Inverse Usage:
67
+
68
+ To obtain, for example, peak hours instead of optimal hours, simply invert the usage and parameters:
69
+ ![Calculator States Inverse](docu/calculatorStatesInverse.png)
70
+ By swapping true <-> false, you will receive a true at a low cost in the first line and a true at a high cost in the second line (Channel names are not triggers and are still free to choose).
71
+
72
+ Attention: For peak single hours, such as in the example, you also need to adjust the number of hours. Original: 5 -> Inverse (24-5) = 19 -> You will obtain a true result during the 5 peak hours.
73
+
74
+ #### LTF channels:
75
+
76
+ The calculation is performed for "multiday" data. As we only have information for "today" and "tomorrow" (available after approximately 13:00), the time scope is effectively limited to a maximum of 35 hours. However, it's crucial to be mindful of this behavior because the calculated result may/will change around 13:00 when new data for tomorrow's prices becomes available.
77
+
78
+ To observe this dynamic change in the time scope for a standard channel, you may opt for a Limited Time Frame (LTF) spanning several years. This is particularly useful for the "Best Single Hours LTF" scenario.
59
79
 
60
80
  ## Notes
61
81
 
62
82
  This adapter employs Sentry libraries to automatically report exceptions and code errors to the developers. For more details and information on how to disable error reporting, please consult the [Sentry-Plugin Documentation](https://github.com/ioBroker/plugin-sentry#plugin-sentry)! Sentry reporting is initiated starting with js-controller 3.0.
63
83
 
84
+ ## Donate
85
+
86
+ <a href="https://www.paypal.com/donate/?hosted_button_id=F7NM9R2E2DUYS"><img src="https://raw.githubusercontent.com/Hombach/ioBroker.tibberlink/main/docu/bluePayPal.svg" height="40"></a>
87
+ If you enjoyed this project — or just feeling generous, consider buying me a beer. Cheers! :beers:
88
+
64
89
  ## Changelog
65
90
 
66
91
  ! Note that missing version entries are typically dependency updates for improved security.
67
92
 
93
+ ### 1.6.1 (2023-11-26)
94
+
95
+ - (HombachC) cleanup in documentation and translation handling
96
+
97
+ ### 1.6.0 (2023-11-26)
98
+
99
+ - (HombachC) fixed major bug in 1.5.0, not working calculator channels (#212)
100
+ - (HombachC) implement limit calculations to a time frame (#153)
101
+ - (HombachC) fix error of missing price data upon not working tibber server connect at adapter start (#204)
102
+ - (HombachC) fixed possible error with wrong price date in multi home systems
103
+ - (HombachC) fixed possible type error, notified by Sentry
104
+ - (HombachC) added some documentation for inverse use of channels (#202)
105
+ - (HombachC) added Sentry statistics
106
+ - (HombachC) optimize translation handling
107
+ - (HombachC) bump dependencies
108
+
68
109
  ### 1.5.0 (2023-11-13)
69
110
 
70
111
  - (HombachC) implement calculator channel names (#186)
@@ -139,127 +180,7 @@ This adapter employs Sentry libraries to automatically report exceptions and cod
139
180
  - (HombachC) Increase to the first major release, as now a stable level is reached
140
181
  - (HombachC) Code cleanup
141
182
 
142
- ### 0.4.2 (2023-10-03)
143
-
144
- - (HombachC) fixed error with polling multiple homes live data (#108)
145
- - (HombachC) Lots of dependency updates; code optimizations
146
-
147
- ### 0.4.1 (2023-09-24)
148
-
149
- - (HombachC) Hardened 2 typeerrors uppon sentry recognition
150
- - (HombachC) Fix error with not deleted averages of tomorrow pricing (#95)
151
- - (HombachC) preparations for tibber calculator
152
-
153
- ### 0.4.0 (2023-09-20)
154
-
155
- - (HombachC) Added daily average price values (#89)
156
-
157
- ### 0.3.3 (2023-09-17)
158
-
159
- - (HombachC) Fixed false positive connection message (#87)
160
- - (HombachC) Updated translations with ChatGPT
161
- - (HombachC) preparations for tibber calculator
162
-
163
- ### 0.3.2 (2023-09-14)
164
-
165
- - (HombachC) Fixed error when starting adapter first time (#82)
166
- - (HombachC) Fixed error in admin config from 0.3.0 (#81)
167
-
168
- ### 0.3.1 (2023-09-13)
169
-
170
- - (HombachC) Mitigate error in admin config from 0.3.0 (#81)
171
- - (HombachC) Change logging of TibberFeed errors from type error to type warn - because of too many downtimes of Tibber server (#80)
172
-
173
- ### 0.3.0 (2023-09-12)
174
-
175
- - (HombachC) BREAKING: change Pulse usage to be configurable for all homes seperately (#41)
176
- - (HombachC) optimize code again to mitigate set state timing for long JSON states (#68)
177
- - (HombachC) preparations for tibber calculator
178
-
179
- ### 0.2.7 (2023-09-07)
180
-
181
- - (HombachC) reducing polls at Tibber server by precheck of current price data
182
- - (HombachC) preparations for tibber calculator
183
-
184
- ### 0.2.6 (2023-09-04)
185
-
186
- - (HombachC) fix error with boolean states
187
-
188
- ### 0.2.5 (2023-09-03)
189
-
190
- - (HombachC) optimize code to mitigate set state timing for long JSON states (#68)
191
-
192
- ### 0.2.4 (2023-08-30)
193
-
194
- - (HombachC) enable correct price poll also for adapter running in different timezones (#63)
195
-
196
- ### 0.2.3 (2023-08-27)
197
-
198
- - (HombachC) fix error in 0.2.2 in start conditions of adapter
199
-
200
- ### 0.2.2 (2023-08-24)
201
-
202
- - (HombachC) reducing polls at Tibber server by precheck of known data
203
- - (HombachC) code optimizations
204
- - (HombachC) fix config screen (#55)
205
-
206
- ### 0.2.1 (2023-08-21)
207
-
208
- - (HombachC) double timeout for Tibber server queries
209
-
210
- ### 0.2.0 (2023-08-18)
211
-
212
- - (HombachC) introduces JSONs for prices sorted by price ascending
213
- - (HombachC) fix stupid error for obsolete next day pricing (#23, #50)
214
-
215
- ### 0.1.10 (2023-08-15)
216
-
217
- - (HombachC) preparations for tibber calculator
218
- - (HombachC) mitigate multi homes & pulse problems (#41)
219
- - (HombachC) add documentation to config screen (#47)
220
-
221
- ### 0.1.9 (2023-08-14)
222
-
223
- - (HombachC) optimizing fetching homes list (#32) after Tibber server error, restart adapter in case of trouble
224
-
225
- ### 0.1.8 (2023-08-12)
226
-
227
- - (HombachC) bump dev-dependencies, fix eslint/prettier issue
228
-
229
- ### 0.1.7 (2023-08-11)
230
-
231
- - (HombachC) code cleanup, fix error for obsolete next day pricing (#23)
232
- - (HombachC) add another try/catch while fetching homes list (#32)
233
-
234
- ### 0.1.6 (2023-07-30)
235
-
236
- - (HombachC) add units for live data, bump adapter-core to 3.x
237
-
238
- ### 0.1.5 (2023-07-18)
239
-
240
- - (HombachC) fix error in sentry logging
241
-
242
- ### 0.1.4 (2023-07-17)
243
-
244
- - (HombachC) BREAKING: encrypted API-Token in ioBroker
245
- - (HombachC) rearranged configuration options
246
- - (HombachC) fixed bug in state generation
247
-
248
- ### 0.1.3 (2023-07-17)
249
-
250
- - (HombachC) all log messages in English
251
- - (HombachC) remove unused state change handler
252
- - (HombachC) fixed state roles
253
-
254
- ### 0.1.2 (2023-07-17)
255
-
256
- - (HombachC) round grid consumption meter values to Wh accuracy
257
- - (HombachC) hide unused checkboxes in config
258
- - (HombachC) fix snyc and appveyor
259
-
260
- ### 0.1.0 (2023-07-14)
261
-
262
- - (HombachC) initial version
183
+ ### Old Changes see [CHANGELOG OLD](CHANGELOG_OLD.md)
263
184
 
264
185
  ## License
265
186
 
@@ -0,0 +1,3 @@
1
+ {
2
+ "s_Active": "Aktiv"
3
+ }
@@ -1,4 +1,3 @@
1
1
  {
2
- "s_Home": "Tibber Home",
3
2
  "s_Active": "Active"
4
3
  }
@@ -1,4 +1,3 @@
1
1
  {
2
- "s_Home": "Casa Tibber",
3
2
  "s_Active": "Activo"
4
3
  }
@@ -0,0 +1,3 @@
1
+ {
2
+ "s_Active": "Actif"
3
+ }
@@ -1,4 +1,3 @@
1
1
  {
2
- "s_Home": "Casa Tibber",
3
2
  "s_Active": "Attivo"
4
3
  }
@@ -0,0 +1,3 @@
1
+ {
2
+ "s_Active": "Actief"
3
+ }
@@ -1,4 +1,3 @@
1
1
  {
2
- "s_Home": "Dom Tibber",
3
2
  "s_Active": "Aktywny"
4
3
  }
@@ -0,0 +1,3 @@
1
+ {
2
+ "s_Active": "Ativo"
3
+ }
@@ -1,4 +1,3 @@
1
1
  {
2
- "s_Home": "Дом Tibber",
3
2
  "s_Active": "Активен"
4
3
  }
@@ -1,4 +1,3 @@
1
1
  {
2
- "s_Home": "Tibber Дім",
3
2
  "s_Active": "Активний"
4
3
  }
@@ -1,4 +1,3 @@
1
1
  {
2
- "s_Home": "Tibber家",
3
2
  "s_Active": "活跃"
4
3
  }
@@ -81,7 +81,19 @@
81
81
  "items": [
82
82
  {
83
83
  "type": "selectSendTo",
84
- "title": "s_Home",
84
+ "title": {
85
+ "en": "Tibber Home",
86
+ "de": "Tibber Zuhause",
87
+ "ru": "Дом Tibber",
88
+ "pt": "Casa Tibber",
89
+ "nl": "Tibber Thuis",
90
+ "fr": "Maison Tibber",
91
+ "it": "Casa Tibber",
92
+ "es": "Casa Tibber",
93
+ "pl": "Dom Tibber",
94
+ "uk": "Tibber Дім",
95
+ "zh-cn": "Tibber家"
96
+ },
85
97
  "command": "HomesForConfig",
86
98
  "attr": "homeID",
87
99
  "filter": false,
@@ -514,6 +526,54 @@
514
526
  "zh-cn": "最佳小时块"
515
527
  },
516
528
  "value": 3
529
+ },
530
+ {
531
+ "label": {
532
+ "en": "best cost LTF",
533
+ "de": "beste Kosten LTF",
534
+ "ru": "лучшие затраты LTF",
535
+ "pt": "melhor custo LTF",
536
+ "nl": "beste kosten LTF",
537
+ "fr": "meilleur coût LTF",
538
+ "it": "miglior costo LTF",
539
+ "es": "mejor costo LTF",
540
+ "pl": "najlepsze koszty LTF",
541
+ "uk": "Найкращі витрати LTF",
542
+ "zh-cn": "最佳成本 LTF"
543
+ },
544
+ "value": 4
545
+ },
546
+ {
547
+ "label": {
548
+ "en": "best single hours LTF",
549
+ "de": "beste Einzelstunden LTF",
550
+ "ru": "лучшие одиночные часы LTF",
551
+ "pt": "melhores horas únicas LTF",
552
+ "nl": "beste enkele uren LTF",
553
+ "fr": "meilleures heures uniques LTF",
554
+ "it": "migliori ore singole LTF",
555
+ "es": "mejores horas individuales LTF",
556
+ "pl": "najlepsze pojedyncze godziny LTF",
557
+ "uk": "кращі одиничні години LTF",
558
+ "zh-cn": "最佳单个小时 LTF"
559
+ },
560
+ "value": 5
561
+ },
562
+ {
563
+ "label": {
564
+ "en": "best hours block LTF",
565
+ "de": "beste Stundenblock LTF",
566
+ "ru": "лучший часовой блок LTF",
567
+ "pt": "melhor bloco de horas LTF",
568
+ "nl": "beste uren blok LTF",
569
+ "fr": "meilleur bloc d'heures LTF",
570
+ "it": "miglior blocco di ore LTF",
571
+ "es": "mejor bloque de horas LTF",
572
+ "pl": "najlepszy blok godzin LTF",
573
+ "uk": "кращий годинний блок LTF",
574
+ "zh-cn": "最佳小时块 LTF"
575
+ },
576
+ "value": 6
517
577
  }
518
578
  ],
519
579
  "filter": false,
@@ -535,7 +595,7 @@
535
595
  "uk": "Назва каналу",
536
596
  "zh-cn": "通道名称"
537
597
  },
538
- "maxLength": 20,
598
+ "maxLength": 25,
539
599
  "attr": "chName",
540
600
  "filter": false,
541
601
  "sort": false,
@@ -702,17 +762,17 @@
702
762
  "type": "staticText",
703
763
  "hidden": "!data.UseCalculator",
704
764
  "label": {
705
- "en": "Outputs:",
706
- "de": "Ausgaben:",
707
- "ru": "Вывод:",
708
- "pt": "Saídas:",
709
- "nl": "Uitvoer:",
710
- "fr": "Sorties :",
711
- "it": "Uscite:",
712
- "es": "Salidas:",
713
- "pl": "Wyniki:",
714
- "uk": "Виводи:",
715
- "zh-cn": "输出:"
765
+ "en": "<b>Outputs:</b>",
766
+ "de": "<b>Ausgaben:</b>",
767
+ "ru": "<b>Вывод:</b>",
768
+ "pt": "<b>Saídas:</b>",
769
+ "nl": "<b>Uitvoer:</b>",
770
+ "fr": "<b>Sorties:</b>",
771
+ "it": "<b>Uscite:</b>",
772
+ "es": "<b>Salidas:</b>",
773
+ "pl": "<b>Wyniki:</b>",
774
+ "uk": "<b>Виводи:</b>",
775
+ "zh-cn": "<b>输出:</b>"
716
776
  },
717
777
  "newLine": true
718
778
  },
@@ -720,17 +780,17 @@
720
780
  "type": "staticText",
721
781
  "hidden": "!data.UseCalculator",
722
782
  "label": {
723
- "en": " 'Best cost': Uses the 'TriggerPrice' state as input - output is 'YES' every hour the current Tibber energy cost is below the trigger price.",
724
- "de": " 'Beste Kosten': Verwendet den 'TriggerPrice'-State als Eingabe - die Ausgabe ist 'JA', wenn der aktuelle Tibber-Energiepreis stündlich unter dem Auslösepreis liegt.",
725
- "ru": " 'Лучшие затраты': Использует состояние 'TriggerPrice' в качестве входа - выход - 'ДА' каждый час, когда текущая стоимость энергии Tibber ниже уровня срабатывания.",
726
- "pt": " 'Melhor custo': Usa o estado 'TriggerPrice' como entrada - a saída é 'SIM' a cada hora em que o custo de energia atual do Tibber estiver abaixo do preço de gatilho.",
727
- "nl": " 'Beste kosten': Gebruikt de 'TriggerPrijs'-staat als invoer - de uitvoer is 'JA' elk uur dat de huidige Tibber energiekosten lager zijn dan de triggerprijs.",
728
- "fr": " 'Meilleur coût': Utilise l'état 'TriggerPrice' en tant qu'entrée - la sortie est 'OUI' chaque heure le coût actuel de l'énergie Tibber est inférieur au prix déclencheur.",
729
- "it": " 'Miglior costo': Utilizza lo stato 'TriggerPrice' come ingresso - l'uscita è '' ogni ora in cui il costo dell'energia Tibber attuale è inferiore al prezzo di scatto.",
730
- "es": " 'Mejor costo': Utiliza el estado 'PrecioGatillo' como entrada; la salida es '' cada hora en que el costo actual de la energía Tibber esté por debajo del precio de gatillo.",
731
- "pl": " 'Najlepszy koszt': Korzysta ze stanu 'CenaSpustowa' jako wejścia - wyjście to 'TAK' za każdą godzinę, gdy aktualny koszt energii Tibber jest poniżej ceny spustowej.",
732
- "uk": " 'Найкращі витрати': Використовує стан 'Ціна-спуск' в якості входу - вихід - 'ТАК' кожну годину, коли поточна вартість енергії Tibber нижча за ціною спуску.",
733
- "zh-cn": " “最佳成本”:使用“触发价格”状态作为输入 - 每小时输出为“是”,当前的Tibber能源成本低于触发价格。"
783
+ "en": " 'Best cost': Utilizes the 'TriggerPrice' object as input, producing a 'YES' output every hour when the current Tibber energy cost is below the trigger price",
784
+ "de": " 'Beste Kosten': Verwendet das Objekt 'TriggerPrice' als Eingabe und erzeugt jede Stunde eine 'YES'-Ausgabe, wenn die aktuellen Tibber-Energiekosten unter dem Auslösepreis liegen",
785
+ "ru": " 'Лучшие затраты': Использует объект 'TriggerPrice' в качестве входных данных, выдающее 'YES' каждый час, когда текущая стоимость энергии Tibber ниже цены триггера",
786
+ "pt": " 'Melhor custo': Utiliza o objeto 'TriggerPrice' como entrada, produzindo uma saída 'YES' a cada hora quando o custo de energia atual da Tibber estiver abaixo do preço de gatilho",
787
+ "nl": " 'Beste kost': Gebruikt het object 'TriggerPrice' als invoer, geeft elke uur een 'JA'-uitvoer wanneer de huidige Tibber energiekosten onder de drempelprijs liggen",
788
+ "fr": " 'Meilleur coût': Utilise l'objet 'TriggerPrice' comme entrée, produisant une sortie 'YES' chaque heure lorsque le coût actuel de l'énergie Tibber est inférieur au prix déclencheur",
789
+ "it": " 'Miglior costo': Utilizza l'oggetto 'TriggerPrice' come input, producendo un output 'YES' ogni ora quando il costo energetico corrente di Tibber è inferiore al prezzo di trigger",
790
+ "es": " 'Mejor costo': Utiliza el objeto 'TriggerPrice' como entrada, produciendo una salida 'YES' cada hora cuando el costo actual de la energía Tibber está por debajo del precio de activación",
791
+ "pl": " 'Najlepszy koszt': Wykorzystuje obiekt 'TriggerPrice' jako wejście, generując wyjście 'YES' co godzinę, gdy aktualny koszt energii Tibber jest poniżej ceny wyzwalacza",
792
+ "uk": " 'Best cost': Використовує об'єкт 'TriggerPrice' як вхідні дані, видає 'YES' кожну годину, коли поточна вартість енергії Tibber нижче тригер-ціни",
793
+ "zh-cn": " '最佳成本':使用'TriggerPrice'对象作为输入,当当前Tibber能源成本低于触发价格时,每小时产生'YES'输出"
734
794
  },
735
795
  "newLine": true
736
796
  },
@@ -738,17 +798,17 @@
738
798
  "type": "staticText",
739
799
  "hidden": "!data.UseCalculator",
740
800
  "label": {
741
- "en": " 'Best single hours' - output is 'YES' in the cheapest number of hours. Number is defined in state 'AmountHours'.",
742
- "de": " 'Beste Einzelstunden' - Ausgabe ist 'JA' in der günstigsten Anzahl von Stunden. Die Anzahl wird im 'AmountHours'-State definiert.",
743
- "ru": " 'Лучшие часы' - вывод 'ДА' в самое дешевое количество часов. Количество определяется в состоянии 'AmountHours'.",
744
- "pt": " 'Melhores horas únicas' - a saída é 'SIM' na quantidade mais barata de horas. O número é definido no estado 'AmountHours'.",
745
- "nl": " 'Beste enkele uren' - uitvoer is 'JA' in het goedkoopste aantal uren. Het aantal wordt gedefinieerd in de staat 'AmountHours'.",
746
- "fr": " 'Meilleures heures individuelles' - la sortie est 'OUI' dans le nombre d'heures le moins cher. Le nombre est défini dans l'état 'AmountHours'.",
747
- "it": " 'Migliori ore singole' - l'uscita è '' nel minor numero di ore più economico. Il numero è definito nello stato 'AmountHours'.",
748
- "es": " 'Mejores horas individuales' - la salida es '' en la cantidad más barata de horas. El número está definido en el estado 'AmountHours'.",
749
- "pl": " 'Najlepsze pojedyncze godziny' - wyjście jest 'TAK' w najtańszej liczbie godzin. Liczba jest określona w stanie 'AmountHours'.",
750
- "uk": " 'Найкращі години' - вихід 'ТАК' в найбільш вигідну кількість годин. Кількість визначається у стані 'AmountHours'.",
751
- "zh-cn": " “最佳单个小时” - 输出在最便宜的小时数中是“是”。 数量在状态“AmountHours”中定义。"
801
+ "en": " 'Best single hours': Generates a 'YES' output during the least expensive hours, with the number defined in the 'AmountHours' object",
802
+ "de": " 'Beste Einzelstunden': Erzeugt eine 'YES'-Ausgabe während der kostengünstigsten Stunden, mit der im Objekt 'AmountHours' definierten Anzahl",
803
+ "ru": " 'Лучшие одиночные часы': Генерирует выход 'YES' во время наименее дорогих часов, с количеством, определенным в объекте 'AmountHours'",
804
+ "pt": " 'Melhores horas únicas': Gera uma saída 'YES' durante as horas menos caras, com o número definido no objeto 'AmountHours'",
805
+ "nl": " 'Beste enkele uren': Genereert een 'JA'-uitvoer tijdens de goedkoopste uren, met het aantal gedefinieerd in het object 'AmountHours'",
806
+ "fr": " 'Meilleures heures uniques': Génère une sortie 'YES' pendant les heures les moins chères, avec le nombre défini dans l'objet 'AmountHours'",
807
+ "it": " 'Migliori ore singole': Genera un'uscita 'YES' durante le ore meno costose, con il numero definito nell'oggetto 'AmountHours'",
808
+ "es": " 'Mejores horas individuales': Genera una salida 'YES' durante las horas menos costosas, con el número definido en el objeto 'AmountHours'",
809
+ "pl": " 'Najlepsze pojedyncze godziny': Generuje wyjście 'YES' w trakcie najtańszych godzin, z liczbą określoną w obiekcie 'AmountHours'",
810
+ "uk": " 'Найкращі одиночні години': Генерує вихід 'YES' протягом найменш дорогих годин, з числом, визначеним у об'єкті 'AmountHours'",
811
+ "zh-cn": " '最佳单小时': 在最便宜的小时内生成'YES'输出,其数量在'AmountHours'对象中定义"
752
812
  },
753
813
  "newLine": true
754
814
  },
@@ -756,17 +816,89 @@
756
816
  "type": "staticText",
757
817
  "hidden": "!data.UseCalculator",
758
818
  "label": {
759
- "en": " 'Best hours block' - output is 'YES' in the best block of consecutive hours. Number of hours is defined in state 'AmountHours'.",
760
- "de": " 'Bester Stundenblock' - Ausgabe ist 'JA' im besten Block aufeinanderfolgender Stunden. Die Anzahl der Stunden ist im Zustand 'AmountHours' definiert.",
761
- "ru": " 'Лучший часовой блок' - вывод 'ДА' в лучшем блоке последовательных часов. Количество часов определено в состоянии 'AmountHours'.",
762
- "pt": " 'Melhor bloco de horas' - a saída é 'SIM' no melhor bloco de horas consecutivas. O número de horas é definido no estado 'AmountHours'.",
763
- "nl": " 'Beste uren blok' - uitvoer is 'JA' in het beste blok opeenvolgende uren. Het aantal uren is gedefinieerd in de staat 'AmountHours'.",
764
- "fr": " 'Meilleur bloc d'heures' - la sortie est 'OUI' dans le meilleur bloc d'heures consécutives. Le nombre d'heures est défini dans l'état 'AmountHours'.",
765
- "it": " 'Miglior blocco di ore' - l'uscita è '' nel miglior blocco di ore consecutive. Il numero di ore è definito nello stato 'AmountHours'.",
766
- "es": " 'Mejor bloque de horas' - la salida es '' en el mejor bloque de horas consecutivas. El número de horas está definido en el estado 'AmountHours'.",
767
- "pl": " 'Najlepszy blok godzin' - wyjście to 'TAK' w najlepszym bloku kolejnych godzin. Liczba godzin jest określona w stanie 'AmountHours'.",
768
- "uk": " 'Кращий годинний блок' - вивід 'ТАК' в найкращому блоку послідовних годин. Кількість годин визначено в стані 'AmountHours'.",
769
- "zh-cn": " “最佳小时块” - 输出在最佳连续小时块中为 '' 小时数在状态 'AmountHours' 中定义。"
819
+ "en": " 'Best hours block': Outputs 'YES' during the most cost-effective block of hours, with the number of hours specified in the 'AmountHours' object",
820
+ "de": " 'Bester Stundenblock': Gibt 'YES' während des kostengünstigsten Stundenblocks aus, mit der im Objekt 'AmountHours' festgelegten Anzahl von Stunden",
821
+ "ru": " 'Лучший блок часов': Выводит 'YES' во время наиболее эффективного по стоимости блока часов, с указанием количества часов в объекте 'AmountHours'",
822
+ "pt": " 'Melhor bloco de horas': Gera 'YES' durante o bloco de horas mais econômico, com o número de horas especificado no objeto 'AmountHours'",
823
+ "nl": " 'Beste uren blok': Geeft 'JA' uit tijdens het meest kosteneffectieve blok van uren, met het aantal uur gespecificeerd in het object 'AmountHours'",
824
+ "fr": " 'Meilleur bloc d'heures': Produit 'YES' pendant le bloc d'heures le plus rentable, avec le nombre d'heures spécifié dans l'objet 'AmountHours'",
825
+ "it": " 'Miglior blocco di ore': Emette un'uscita 'YES' durante il blocco di ore più conveniente, con il numero di ore specificato nell'oggetto 'AmountHours'",
826
+ "es": " 'Mejor bloque de horas': Genera 'YES' durante el bloque de horas más rentable, con el número de horas especificado en el objeto 'AmountHours'",
827
+ "pl": " 'Najlepszy blok godzin': Generuje 'YES' podczas najbardziej opłacalnego bloku godzin, z liczbą godzin określoną w obiekcie 'AmountHours'",
828
+ "uk": " 'Кращий блок годин': Виводить 'YES' під час найбільш вигідного блоку годин, із зазначенням кількості годин у об'єкті 'AmountHours'",
829
+ "zh-cn": " '最佳时段': 在最经济的小时内输出'YES',在'AmountHours'对象中指定的小时数"
830
+ },
831
+ "newLine": true
832
+ },
833
+ "_calculatorhelp10": {
834
+ "type": "staticText",
835
+ "hidden": "!data.UseCalculator",
836
+ "label": {
837
+ "en": " 'Best cost LTF': 'Best cost' within a Limited Time Frame (LTF)",
838
+ "de": " 'Beste Kosten LTF': 'Beste Kosten' innerhalb eines begrenzten Zeitrahmens (LTF)",
839
+ "ru": " 'Лучшие затраты LTF': 'Лучшие затраты' в пределах ограниченного временного интервала (LTF)",
840
+ "pt": " 'Melhor custo LTF': 'Melhor custo' dentro de um quadro de tempo limitado (LTF)",
841
+ "nl": " 'Beste kosten LTF': 'Beste kosten' binnen een beperkt tijdsbestek (LTF)",
842
+ "fr": " 'Meilleur coût LTF': 'Meilleur coût' dans un cadre temporel limité (LTF)",
843
+ "it": " 'Miglior costo LTF': 'Miglior costo' all'interno di un periodo di tempo limitato (LTF)",
844
+ "es": " 'Mejor costo LTF': 'Mejor costo' dentro de un Marco de Tiempo Limitado (LTF)",
845
+ "pl": " 'Najlepsze koszty LTF': 'Najlepsze koszty' w ramach ograniczonego okresu czasu (LTF)",
846
+ "uk": " 'Найкращі витрати LTF': 'Найкращі витрати' в межах обмеженого часового проміжку (LTF)",
847
+ "zh-cn": " '最佳成本 LTF': 在有限时间范围内的'最佳成本' (LTF)"
848
+ },
849
+ "newLine": true
850
+ },
851
+ "_calculatorhelp11": {
852
+ "type": "staticText",
853
+ "hidden": "!data.UseCalculator",
854
+ "label": {
855
+ "en": " 'Best single hours LTF': 'Best single hours' within a Limited Time Frame (LTF)",
856
+ "de": " 'Beste Einzelstunden LTF': 'Beste Einzelstunden' innerhalb eines begrenzten Zeitrahmens (LTF)",
857
+ "ru": " 'Лучшие одиночные часы LTF': 'Лучшие одиночные часы' в пределах ограниченного временного интервала (LTF)",
858
+ "pt": " 'Melhores horas únicas LTF': 'Melhores horas únicas' dentro de um quadro de tempo limitado (LTF)",
859
+ "nl": " 'Beste enkele uren LTF': 'Beste enkele uren' binnen een beperkt tijdsbestek (LTF)",
860
+ "fr": " 'Meilleures heures uniques LTF': 'Meilleures heures uniques' dans un cadre temporel limité (LTF)",
861
+ "it": " 'Miglior ore singole LTF': 'Miglior ore singole' all'interno di un periodo di tempo limitato (LTF)",
862
+ "es": " 'Mejor horas individuales LTF': 'Mejor horas individuales' dentro de un Marco de Tiempo Limitado (LTF)",
863
+ "pl": " 'Najlepsze pojedyncze godziny LTF': 'Najlepsze pojedyncze godziny' w ramach ograniczonego okresu czasu (LTF)",
864
+ "uk": " 'Найкращі одиночні години LTF': 'Найкращі одиночні години' в межах обмеженого часового проміжку (LTF)",
865
+ "zh-cn": " '最佳单小时 LTF': 在有限时间范围内的'最佳单小时' (LTF)"
866
+ },
867
+ "newLine": true
868
+ },
869
+ "_calculatorhelp12": {
870
+ "type": "staticText",
871
+ "hidden": "!data.UseCalculator",
872
+ "label": {
873
+ "en": " 'Best hours block LTF': 'Best hours block' within a Limited Time Frame (LTF)",
874
+ "de": " 'Bester Stundenblock LTF': 'Bester Stundenblock' innerhalb eines begrenzten Zeitrahmens (LTF)",
875
+ "ru": " 'Лучший блок часов LTF': 'Лучший блок часов' в пределах ограниченного временного интервала (LTF)",
876
+ "pt": " 'Melhor bloco de horas LTF': 'Melhor bloco de horas' dentro de um quadro de tempo limitado (LTF)",
877
+ "nl": " 'Beste uren blok LTF': 'Beste uren blok' binnen een beperkt tijdsbestek (LTF)",
878
+ "fr": " 'Meilleur bloc d'heures LTF': 'Meilleur bloc d'heures' dans un cadre temporel limité (LTF)",
879
+ "it": " 'Miglior blocco di ore LTF': 'Miglior blocco di ore' all'interno di un periodo di tempo limitato (LTF)",
880
+ "es": " 'Mejor bloque de horas LTF': 'Mejor bloque de horas' dentro de un Marco de Tiempo Limitado (LTF)",
881
+ "pl": " 'Najlepszy blok godzin LTF': 'Najlepszy blok godzin' w ramach ograniczonego okresu czasu (LTF)",
882
+ "uk": " 'Найкращий блок годин LTF': 'Найкращий блок годин' в межах обмеженого часового проміжку (LTF)",
883
+ "zh-cn": " '最佳时段 LTF': 在有限时间范围内的'最佳时段' (LTF)"
884
+ },
885
+ "newLine": true
886
+ },
887
+ "_calculatorhelp13": {
888
+ "type": "staticText",
889
+ "hidden": "!data.UseCalculator",
890
+ "label": {
891
+ "en": "LTF channels: Function similarly to standard channels but only operate within a time frame defined by the 'StartTime' and 'StopTime' state objects. After 'StopTime,' the channel deactivates itself. 'StartTime' and 'StopTime' may span over several days. The states must be filled with a date-time string in ISO-8601 format with a timezone offset, such as: '2023-11-17T21:00:00.000+01:00'",
892
+ "de": "LTF-Kanäle: Funktionieren ähnlich wie Standardkanäle, arbeiten jedoch nur innerhalb eines durch die Statusobjekte 'StartTime' und 'StopTime' definierten Zeitrahmens. Nach 'StopTime' deaktiviert sich der Kanal selbst. 'StartTime' und 'StopTime' können sich über mehrere Tage erstrecken. Die Zustände müssen mit einem Datum-Zeit-String im ISO-8601-Format mit einem Zeitzonenoffset gefüllt sein, z. B .: '2023-11-17T21:00:00.000+01:00'",
893
+ "ru": "LTF-каналы: Функционируют аналогично стандартным каналам, но работают только в пределах временного интервала, определенного объектами состояний 'StartTime' и 'StopTime'. После 'StopTime' канал деактивируется сам. 'StartTime' и 'StopTime' могут охватывать несколько дней. Состояния должны быть заполнены строкой даты-времени в формате ISO-8601 с смещением часового пояса, например: '2023-11-17T21:00:00.000+01:00'",
894
+ "pt": "Canais LTF: Funcionam de maneira semelhante aos canais padrão, mas operam apenas dentro de um intervalo de tempo definido pelos objetos de estado 'StartTime' e 'StopTime'. Após 'StopTime', o canal se desativa. 'StartTime' e 'StopTime' podem abranger vários dias. Os estados devem ser preenchidos com uma string de data e hora no formato ISO-8601 com um deslocamento de fuso horário, como: '2023-11-17T21:00:00.000+01:00'",
895
+ "nl": "LTF-kanalen: Functioneren op dezelfde manier als standaardkanalen, maar werken alleen binnen een tijdsbestek dat wordt gedefinieerd door de toestelobjecten 'StartTime' en 'StopTime'. Na 'StopTime' deactiveert het kanaal zichzelf. 'StartTime' en 'StopTime' kunnen zich over meerdere dagen uitstrekken. De staten moeten worden gevuld met een datum-tijdreeks in ISO-8601-indeling met een tijdzoneverschil, zoals: '2023-11-17T21:00:00.000+01:00'",
896
+ "fr": "Canaux LTF : Fonctionnent de manière similaire aux canaux standard mais n'opèrent que dans une plage horaire définie par les objets d'état 'StartTime' et 'StopTime'. Après 'StopTime', le canal se désactive. 'StartTime' et 'StopTime' peuvent s'étendre sur plusieurs jours. Les états doivent être remplis avec une chaîne de date-heure au format ISO-8601 avec un décalage de fuseau horaire, par exemple : '2023-11-17T21:00:00.000+01:00'",
897
+ "it": "Canali LTF: Funzionano in modo simile ai canali standard ma operano solo all'interno di un periodo definito dagli oggetti di stato 'StartTime' e 'StopTime'. Dopo 'StopTime', il canale si disattiva. 'StartTime' e 'StopTime' possono estendersi su più giorni. Gli stati devono essere compilati con una stringa di data e ora nel formato ISO-8601 con un offset di fuso orario, ad esempio: '2023-11-17T21:00:00.000+01:00'",
898
+ "es": "Canales LTF: Funcionan de manera similar a los canales estándar, pero solo operan dentro de un marco de tiempo definido por los objetos de estado 'StartTime' y 'StopTime'. Después de 'StopTime', el canal se desactiva. 'StartTime' y 'StopTime' pueden abarcar varios días. Los estados deben llenarse con una cadena de fecha y hora en formato ISO-8601 con un desplazamiento de zona horaria, como: '2023-11-17T21:00:00.000+01:00'",
899
+ "pl": "Kanały LTF: Działają podobnie jak standardowe kanały, ale działają tylko w oknie czasowym określonym przez obiekty stanu 'StartTime' i 'StopTime'. Po 'StopTime' kanał dezaktywuje się. 'StartTime' i 'StopTime' mogą obejmować kilka dni. Stany muszą być wypełnione ciągiem daty i godziny w formacie ISO-8601 z przesunięciem strefy czasowej, na przykład: '2023-11-17T21:00:00.000+01:00'",
900
+ "uk": "LTF-канали: Функціонують аналогічно стандартним каналам, але працюють лише в межах часового інтервалу, визначеного об'єктами стану 'StartTime' та 'StopTime'. Після 'StopTime' канал деактивується. 'StartTime' та 'StopTime' можуть охоплювати кілька днів. Стани повинні бути заповнені рядком дати та часу в форматі ISO-8601 з часовим поясом, наприклад: '2023-11-17T21:00:00.000+01:00'",
901
+ "zh-cn": "LTF通道:与标准通道类似,但仅在由'StartTime'和'StopTime'状态对象定义的时间范围内运行。在'StopTime'后,通道将自动停用。 'StartTime'和'StopTime'可能跨越多天。状态必须填写ISO-8601格式的带有时区偏移的日期时间字符串,例如:'2023-11-17T21:00:00.000+01:00'"
770
902
  },
771
903
  "newLine": true
772
904
  }