{ "config": { "step": { "user": { "title": "Konfiguracja WashData", "description": "Skonfiguruj swoją pralkę lub inne urządzenie.\n\nWymagany jest czujnik mocy.\n\n**Następnie zostaniesz zapytany, czy chcesz utworzyć swój pierwszy profil.**", "data": { "name": "Nazwa urządzenia", "device_type": "Typ urządzenia", "power_sensor": "Czujnik mocy", "min_power": "Minimalny próg mocy (W)" }, "data_description": { "name": "Przyjazna nazwa tego urządzenia (np. „Pralka”, „Zmywarka”).", "device_type": "Jakiego typu jest to urządzenie? Pomaga dostosować wykrywanie i etykietowanie.", "power_sensor": "Encja czujnika, która raportuje zużycie energii w czasie rzeczywistym (w watach) przez inteligentną wtyczkę.", "min_power": "Odczyty mocy powyżej tego progu (w watach) wskazują, że urządzenie pracuje. Zacznij od 2 W dla większości urządzeń." } }, "first_profile": { "title": "Utwórz pierwszy profil", "description": "**Cykl** to pełny przebieg urządzenia (np. załadowanie prania). **Profil** grupuje te cykle według rodzaju (np. „Bawełna”, „Pranie szybkie”). Utworzenie profilu teraz umożliwia natychmiastowe szacowanie czasu trwania.\n\nMożesz ręcznie wybrać ten profil w elementach sterujących urządzenia, jeśli nie zostanie wykryty automatycznie.\n\n**Pozostaw pole „Nazwa profilu” puste, aby pominąć ten krok.**", "data": { "profile_name": "Nazwa profilu (opcjonalnie)", "manual_duration": "Szacowany czas trwania (minuty)" } } }, "error": { "cannot_connect": "Nie udało się połączyć", "invalid_auth": "Nieprawidłowe uwierzytelnienie", "unknown": "Nieoczekiwany błąd" }, "abort": { "already_configured": "Urządzenie jest już skonfigurowane" } }, "options": { "step": { "init": { "menu_options": { "learning_feedbacks": "Przejrzyj opinie dotyczące uczenia", "settings": "Ustawienia", "notifications": "Powiadomienia", "manage_cycles": "Zarządzaj cyklami", "manage_profiles": "Zarządzaj profilami", "manage_phase_catalog": "Zarządzaj katalogiem faz", "record_cycle": "Nagraj cykl (ręcznie)", "diagnostics": "Diagnostyka i konserwacja" } }, "apply_suggestions": { "title": "Kopiuj sugerowane wartości", "description": "Spowoduje to skopiowanie bieżących sugerowanych wartości do zapisanych ustawień. Jest to czynność jednorazowa i nie powoduje automatycznego nadpisywania.\n\nSugerowane wartości do skopiowania:\n{suggested}", "data": { "confirm": "Potwierdź operację kopiowania" } }, "apply_suggestions_confirm": { "title": "Przejrzyj sugerowane zmiany", "description": "WashData znalazł **{pending_count}** sugerowane wartości do zastosowania.\n\nZmiany:\n{changes}\n\n✅ Zaznacz pole poniżej i kliknij **Prześlij**, aby natychmiast zastosować i zapisać zmiany.\n❌ Pozostaw tę opcję niezaznaczoną i kliknij **Wyślij**, aby anulować i wrócić.", "data": { "confirm_apply_suggestions": "Zastosuj i zapisz te zmiany" } }, "settings": { "title": "Ustawienia", "description": "{deprecation_warning}Dostosuj progi wykrywania, uczenie i zaawansowane zachowanie. Ustawienia domyślne działają dobrze dla większości konfiguracji.\n\nDostępne sugerowane ustawienia: {suggestions_count}.\nJeśli wartość jest powyżej 0, otwórz Ustawienia zaawansowane i użyj opcji Zastosuj sugerowane wartości, aby przejrzeć zalecenia.", "data": { "apply_suggestions": "Zastosuj sugerowane wartości", "device_type": "Typ urządzenia", "power_sensor": "Encja czujnika mocy", "min_power": "Minimalna moc (W)", "off_delay": "Opóźnienie zakończenia cyklu (s)", "notify_actions": "Akcje powiadomień", "notify_people": "Opóźnij dostarczenie, aż te osoby wrócą do domu", "notify_only_when_home": "Opóźnij powiadomienia, aż wybrana osoba będzie w domu", "notify_fire_events": "Wyzwalaj zdarzenia automatyzacji", "notify_start_services": "Rozpoczęcie cyklu - Cele powiadomień", "notify_finish_services": "Zakończenie cyklu - Cele powiadomień", "notify_live_services": "Postęp na żywo - cele powiadomień", "notify_before_end_minutes": "Powiadomienie przed zakończeniem (minuty przed końcem)", "notify_title": "Tytuł powiadomienia", "notify_icon": "Ikona powiadomienia", "notify_start_message": "Format wiadomości startowej", "notify_finish_message": "Format wiadomości końcowej", "notify_pre_complete_message": "Format wiadomości przed zakończeniem", "show_advanced": "Edytuj ustawienia zaawansowane (następny krok)" }, "data_description": { "apply_suggestions": "Zaznacz to pole, aby skopiować do formularza wartości sugerowane przez algorytm uczący. Przejrzyj przed zapisaniem.\n\nSugerowane (z algorytmu uczącego):\n- min_power: {suggested_min_power} W\n- off_delay: {suggested_off_delay} s\n- watchdog_interval: {suggested_watchdog_interval} s\n- no_update_active_timeout: {suggested_no_update_active_timeout} s\n- profile_match_interval: {suggested_profile_match_interval} s\n- auto_label_confidence: {suggested_auto_label_confidence}\n- duration_tolerance: {suggested_duration_tolerance}\n- profile_duration_tolerance: {suggested_profile_duration_tolerance}\n- profile_match_min_duration_ratio: {suggested_profile_match_min_duration_ratio}\n- profile_match_max_duration_ratio: {suggested_profile_match_max_duration_ratio}\n- start_threshold_w: {suggested_start_threshold_w} W\n- stop_threshold_w: {suggested_stop_threshold_w} W\n- end_energy_threshold: {suggested_end_energy_threshold} Wh\n- running_dead_zone: {suggested_running_dead_zone} s\n{suggested_reason}", "device_type": "Wybierz typ urządzenia (pralka, suszarka, zmywarka, ekspres do kawy, EV). Ten znacznik jest zapisywany przy każdym cyklu dla lepszej organizacji.", "power_sensor": "Encja czujnika raportująca moc w czasie rzeczywistym (w watach). Możesz to zmienić w dowolnym momencie bez utraty danych historycznych - przydatne przy wymianie inteligentnej wtyczki.", "min_power": "Odczyty mocy powyżej tego progu (w watach) wskazują, że urządzenie pracuje. Zacznij od 2 W dla większości urządzeń.", "off_delay": "Wygładzona moc musi przez tyle sekund pozostać poniżej progu zatrzymania, aby oznaczyć zakończenie. Domyślnie: 120 s.", "notify_actions": "Opcjonalna sekwencja akcji Home Assistant do uruchomienia przy powiadomieniach (skrypty, notify, TTS itp.). Jeśli ustawione, akcje są uruchamiane przed zapasową usługą powiadomień.", "notify_people": "Encje osób używane do kontroli obecności. Gdy włączone, dostarczanie powiadomień jest opóźniane do czasu, aż przynajmniej jedna wybrana osoba wróci do domu.", "notify_only_when_home": "Jeśli włączone, opóźnia powiadomienia do czasu, aż przynajmniej jedna wybrana osoba będzie w domu.", "notify_fire_events": "Jeśli włączone, wyzwala zdarzenia Home Assistant na początku i końcu cyklu (ha_washdata_cycle_started i ha_washdata_cycle_ended) do napędzania automatyzacji.", "notify_start_services": "Jedna lub więcej usług powiadamiających o rozpoczęciu cyklu. Pozostaw puste, aby pominąć powiadomienia o uruchomieniu.", "notify_finish_services": "Jedna lub więcej usług powiadamiających o zakończeniu cyklu lub jego zbliżaniu się do końca. Pozostaw puste, aby pominąć powiadomienia o zakończeniu.", "notify_live_services": "Jedna lub więcej usług powiadamiania o konieczności otrzymywania aktualnych informacji o postępie podczas trwania cyklu (tylko aplikacja mobilna). Pozostaw puste, aby pominąć aktualizacje na żywo.", "notify_before_end_minutes": "Minuty przed przewidywanym końcem cyklu, aby wywołać powiadomienie. Ustaw 0, aby wyłączyć. Domyślnie: 0.", "notify_title": "Niestandardowy tytuł powiadomień. Obsługuje symbol zastępczy {device}.", "notify_icon": "Ikona używana do powiadomień (np. mdi:washing-machine). Pozostaw puste, aby wysłać bez ikony.", "notify_start_message": "Wiadomość wysyłana po rozpoczęciu cyklu. Obsługuje symbol zastępczy {device}.", "notify_finish_message": "Wiadomość wysyłana po zakończeniu cyklu. Obsługuje symbole zastępcze {device}, {duration}, {program}, {energy_kwh}, {cost}.", "notify_pre_complete_message": "Tekst cyklicznych aktualizacji postępu na żywo podczas trwania cyklu. Obsługuje symbole zastępcze {device}, {minutes}, {program}." } }, "notifications": { "title": "Powiadomienia", "description": "Skonfiguruj kanały powiadomień, szablony i opcjonalne aktualizacje postępu na żywo na urządzeniach mobilnych.", "data": { "notify_actions": "Akcje powiadomień", "notify_people": "Opóźnij dostarczenie, aż te osoby wrócą do domu", "notify_only_when_home": "Opóźnij powiadomienia, aż wybrana osoba będzie w domu", "notify_fire_events": "Wyzwalaj zdarzenia automatyzacji", "notify_start_services": "Rozpoczęcie cyklu - Cele powiadomień", "notify_finish_services": "Zakończenie cyklu - Cele powiadomień", "notify_live_services": "Postęp na żywo - cele powiadomień", "notify_before_end_minutes": "Powiadomienie przed zakończeniem (minuty przed końcem)", "notify_live_interval_seconds": "Interwał aktualizacji na żywo (sekundy)", "notify_live_overrun_percent": "Dopuszczalne przekroczenie aktualizacji na żywo (%)", "notify_live_chronometer": "Minutnik chronometru", "notify_title": "Tytuł powiadomienia", "notify_icon": "Ikona powiadomienia", "notify_start_message": "Format wiadomości startowej", "notify_finish_message": "Format wiadomości końcowej", "notify_pre_complete_message": "Format wiadomości przed zakończeniem", "energy_price_entity": "Cena energii - jednostka (opcjonalnie)", "energy_price_static": "Cena energii - wartość statyczna (opcjonalnie)", "go_back": "Wróć bez zapisywania", "notify_reminder_message": "Format wiadomości przypomnienia", "notify_timeout_seconds": "Automatyczne odrzucanie po (sekundach)", "notify_channel": "Kanał powiadomień (status/na żywo/przypomnienie)", "notify_finish_channel": "Zakończony kanał powiadomień" }, "data_description": { "go_back": "Zaznacz to pole i kliknij Prześlij, aby odrzucić wszystkie powyższe zmiany i wrócić do menu głównego.", "notify_actions": "Opcjonalna sekwencja akcji Home Assistant do uruchomienia przy powiadomieniach (skrypty, notify, TTS itp.). Jeśli ustawione, akcje są uruchamiane przed zapasową usługą powiadomień.", "notify_people": "Encje osób używane do kontroli obecności. Gdy włączone, dostarczanie powiadomień jest opóźniane do czasu, aż przynajmniej jedna wybrana osoba wróci do domu.", "notify_only_when_home": "Jeśli włączone, opóźnia powiadomienia do czasu, aż przynajmniej jedna wybrana osoba będzie w domu.", "notify_fire_events": "Jeśli włączone, wyzwala zdarzenia Home Assistant na początku i końcu cyklu (ha_washdata_cycle_started i ha_washdata_cycle_ended) do napędzania automatyzacji.", "notify_start_services": "Jedna lub więcej usług powiadamiających o rozpoczęciu cyklu (np. notify.mobile_app_my_phone). Pozostaw puste, aby pominąć powiadomienia o uruchomieniu.", "notify_finish_services": "Jedna lub więcej usług powiadamiających o zakończeniu cyklu lub jego zbliżaniu się do końca. Pozostaw puste, aby pominąć powiadomienia o zakończeniu.", "notify_live_services": "Jedna lub więcej usług powiadamiania o konieczności otrzymywania aktualnych informacji o postępie podczas trwania cyklu (tylko aplikacja mobilna). Pozostaw puste, aby pominąć aktualizacje na żywo.", "notify_before_end_minutes": "Minuty przed przewidywanym końcem cyklu, aby wywołać powiadomienie. Ustaw 0, aby wyłączyć. Domyślnie: 0.", "notify_live_interval_seconds": "Jak często aktualizacje postępu są wysyłane podczas pracy. Niższe wartości są bardziej responsywne, ale zużywają więcej powiadomień. Wymuszone jest minimum 30 sekund - wartości poniżej 30 s są automatycznie zaokrąglane do 30 s.", "notify_live_overrun_percent": "Margines bezpieczeństwa powyżej szacowanej liczby aktualizacji dla długich lub przekraczających cykli (np. 20% zezwala na 1,2× szacowanych aktualizacji).", "notify_live_chronometer": "Po włączeniu każda aktualizacja na żywo zawiera odliczanie chronometru do szacowanego czasu zakończenia. Licznik powiadomień odlicza automatycznie czas na urządzeniu pomiędzy aktualizacjami (tylko aplikacja towarzysząca na Androida).", "notify_title": "Niestandardowy tytuł powiadomień. Obsługuje symbol zastępczy {device}.", "notify_icon": "Ikona używana do powiadomień (np. mdi:washing-machine). Pozostaw puste, aby wysłać bez ikony.", "notify_start_message": "Wiadomość wysyłana po rozpoczęciu cyklu. Obsługuje symbol zastępczy {device}.", "notify_finish_message": "Wiadomość wysyłana po zakończeniu cyklu. Obsługuje symbole zastępcze {device}, {duration}, {program}, {energy_kwh}, {cost}.", "energy_price_entity": "Wybierz jednostkę liczbową zawierającą aktualną cenę energii elektrycznej (np. czujnik.cena_elektryczności, numer_wejściowy.stawka_energii). Po ustawieniu włącza symbol zastępczy {cost}. Ma pierwszeństwo przed wartością statyczną, jeśli obie są skonfigurowane.", "energy_price_static": "Stała cena energii elektrycznej za kWh. Po ustawieniu włącza symbol zastępczy {cost}. Ignorowane, jeśli jednostka jest skonfigurowana powyżej. Dodaj symbol swojej waluty w szablonie wiadomości, np. {cost} €.", "notify_reminder_message": "Tekst jednorazowego przypomnienia wysyłany na skonfigurowaną liczbę minut przed przewidywanym zakończeniem. Różni się od powtarzających się aktualizacji na żywo powyżej. Obsługuje symbole zastępcze {device}, {minutes}, {program}.", "notify_timeout_seconds": "Automatycznie odrzucaj powiadomienia po tylu sekundach (przekazywane jako „przekroczenie limitu czasu” aplikacji towarzyszącej). Ustaw na 0, aby zachować je do momentu zwolnienia. Wartość domyślna: 0.", "notify_channel": "Kanał powiadomień aplikacji towarzyszącej Android, zawierający powiadomienia o statusie, postępie na żywo i przypomnieniach. Dźwięk i ważność kanału konfiguruje się w aplikacji towarzyszącej przy pierwszym użyciu nazwy kanału – WashData ustawia jedynie nazwę kanału. Pozostaw puste, aby ustawić domyślną aplikację.", "notify_finish_channel": "Oddzielny kanał Android dla powiadomienia o zakończeniu (wykorzystywany również przez przypomnienie i sygnał oczekiwania na pranie), aby mógł mieć własny dźwięk. Pozostaw puste, aby ponownie wykorzystać powyższy kanał.", "notify_pre_complete_message": "Tekst cyklicznych aktualizacji postępu na żywo podczas trwania cyklu. Obsługuje symbole zastępcze {device}, {minutes}, {program}." } }, "advanced_settings": { "title": "Ustawienia zaawansowane", "description": "Dostosuj progi wykrywania, uczenie i zaawansowane zachowanie. Ustawienia domyślne działają dobrze dla większości konfiguracji.", "sections": { "suggestions_section": { "name": "Sugerowane ustawienia", "description": "Dostępnych jest {suggestions_count} wyuczonych sugestii. Zaznacz 'Zastosuj sugerowane wartości', aby przed zapisaniem przejrzeć proponowane zmiany.", "data": { "apply_suggestions": "Zastosuj sugerowane wartości" }, "data_description": { "apply_suggestions": "Zaznacz to pole, aby otworzyć krok przeglądu sugerowanych wartości z algorytmu uczącego. Nic nie jest zapisywane automatycznie.\n\nSugerowane (z algorytmu uczącego):\n- min_power: {suggested_min_power} W\n- off_delay: {suggested_off_delay} s\n- watchdog_interval: {suggested_watchdog_interval} s\n- no_update_active_timeout: {suggested_no_update_active_timeout} s\n- profile_match_interval: {suggested_profile_match_interval} s\n- auto_label_confidence: {suggested_auto_label_confidence}\n- duration_tolerance: {suggested_duration_tolerance}\n- profile_duration_tolerance: {suggested_profile_duration_tolerance}\n- profile_match_min_duration_ratio: {suggested_profile_match_min_duration_ratio}\n- profile_match_max_duration_ratio: {suggested_profile_match_max_duration_ratio}\n- start_threshold_w: {suggested_start_threshold_w} W\n- stop_threshold_w: {suggested_stop_threshold_w} W\n- end_energy_threshold: {suggested_end_energy_threshold} Wh\n- running_dead_zone: {suggested_running_dead_zone} s\n{suggested_reason}" } }, "detection_section": { "name": "Wykrywanie i progi mocy", "description": "Określa, kiedy urządzenie jest uznawane za WŁĄCZONE lub WYŁĄCZONE, bramki energii oraz czasy przejść między stanami.", "data": { "start_duration_threshold": "Czas trwania debouncingu startu (s)", "start_energy_threshold": "Brama energetyczna startu (Wh)", "completion_min_seconds": "Zakończenie: minimalny czas pracy (sekundy)", "start_threshold_w": "Próg startowy (W)", "stop_threshold_w": "Próg zatrzymania (W)", "end_energy_threshold": "Brama energetyczna końca (Wh)", "running_dead_zone": "Martwa strefa po starcie (sekundy)", "end_repeat_count": "Liczba powtórzeń warunku końca", "min_off_gap": "Min. przerwa między cyklami (s)", "sampling_interval": "Interwał próbkowania (s)" }, "data_description": { "start_duration_threshold": "Ignoruj krótkie skoki mocy krótsze niż ten czas (sekundy). Filtruje skoki rozruchu (np. 60 W przez 2 s) przed rozpoczęciem właściwego cyklu. Domyślnie: 5 s.", "start_energy_threshold": "Cykl musi zgromadzić co najmniej tyle energii (Wh) w fazie STARTU, aby zostać potwierdzony. Domyślnie: 0,005 Wh.", "completion_min_seconds": "Cykle krótsze niż ten czas zostaną oznaczone jako „przerwane”, nawet jeśli zakończą się naturalnie. Domyślnie: 600 s.", "start_threshold_w": "Moc musi wzrosnąć POWYŻEJ tego progu, aby ROZPOCZĄĆ cykl. Ustaw wyżej niż moc w trybie czuwania. Domyślnie: min_power + 1 W.", "stop_threshold_w": "Moc musi spaść PONIŻEJ tego progu, aby ZAKOŃCZYĆ cykl. Ustaw nieco powyżej zera, aby szum nie wyzwalał fałszywych zakończeń. Domyślnie: 0,6 × min_power.", "end_energy_threshold": "Cykl kończy się tylko wtedy, gdy energia w ostatnim oknie opóźnienia wyłączenia spadnie poniżej tej wartości (Wh). Zapobiega fałszywym zakończeniom, gdy moc waha się blisko zera. Domyślnie: 0,05 Wh.", "running_dead_zone": "Po rozpoczęciu cyklu ignoruj spadki mocy przez tyle sekund, aby zapobiec fałszywemu wykryciu końca podczas fazy rozruchu. Ustaw 0, aby wyłączyć. Domyślnie: 0 s.", "end_repeat_count": "Liczba kolejnych spełnień warunku końca (moc poniżej progu przez czas opóźnienia wyłączenia) wymagana przed zakończeniem cyklu. Wyższe wartości zapobiegają fałszywym zakończeniom podczas pauz. Domyślnie: 1.", "min_off_gap": "Jeśli cykl rozpocznie się w ciągu tylu sekund od zakończenia poprzedniego, zostaną POŁĄCZONE w jeden cykl.", "sampling_interval": "Minimalny interwał próbkowania w sekundach. Aktualizacje szybsze niż ta częstotliwość będą ignorowane. Domyślnie: 30 s (2 s dla pralek, pralko-suszarek i zmywarek)." } }, "matching_section": { "name": "Dopasowanie profili i uczenie", "description": "Określa, jak agresywnie WashData dopasowuje trwające cykle do wyuczonych profili i kiedy prosić o opinię.", "data": { "profile_match_min_duration_ratio": "Minimalny współczynnik czasu trwania dopasowania profilu (0,1–1,0)", "profile_match_interval": "Interwał dopasowania profilu (sekundy)", "profile_match_threshold": "Próg dopasowania profilu", "profile_unmatch_threshold": "Próg braku dopasowania profilu", "auto_label_confidence": "Pewność automatycznego etykietowania (0-1)", "learning_confidence": "Pewność żądania opinii (0-1)", "suppress_feedback_notifications": "Pomiń powiadomienia o opiniach", "duration_tolerance": "Tolerancja czasu trwania (0-0,5)", "smoothing_window": "Okno wygładzania (próbki)", "profile_duration_tolerance": "Tolerancja czasu trwania dopasowania profilu (0-0,5)" }, "data_description": { "profile_match_min_duration_ratio": "Minimalny współczynnik czasu trwania do dopasowania profilu. Bieżący cykl musi obejmować co najmniej tę część czasu trwania profilu, aby dopasować. Niższy = wcześniejsze dopasowanie. Domyślnie: 0,50 (50%).", "profile_match_interval": "Jak często (w sekundach) próbować dopasowania profilu podczas cyklu. Niższe wartości zapewniają szybsze wykrywanie, ale zużywają więcej CPU. Domyślnie: 300 s (5 minut).", "profile_match_threshold": "Minimalny wynik podobieństwa DTW (0,0–1,0) wymagany do uznania profilu za dopasowany. Wyższy = ściślejsze dopasowanie, mniej wyników fałszywie dodatnich. Domyślnie: 0,4.", "profile_unmatch_threshold": "Wynik podobieństwa DTW (0,0–1,0), poniżej którego wcześniej dopasowany profil jest odrzucany. Powinien być niższy niż próg dopasowania, aby zapobiec migotaniu. Domyślnie: 0,35.", "auto_label_confidence": "Po zakończeniu automatycznie etykietuj cykle na tym poziomie pewności lub wyższym (0,0–1,0).", "learning_confidence": "Minimalna pewność do żądania weryfikacji użytkownika przez zdarzenie (0,0–1,0).", "suppress_feedback_notifications": "Po włączeniu WashData będzie nadal wewnętrznie śledzić i żądać informacji zwrotnych, ale nie będzie wyświetlać trwałych powiadomień z prośbą o potwierdzenie cykli. Przydatne, gdy cykle są zawsze wykrywane prawidłowo, a monity rozpraszają.", "duration_tolerance": "Tolerancja dla szacunków pozostałego czasu podczas cyklu (0,0–0,5 odpowiada 0–50%).", "smoothing_window": "Liczba ostatnich odczytów mocy używanych do wygładzania średnią kroczącą.", "profile_duration_tolerance": "Tolerancja stosowana przez dopasowanie profilu dla całkowitej wariancji czasu trwania (0,0–0,5). Domyślne zachowanie: ±25%." } }, "timing_section": { "name": "Czas, konserwacja i debugowanie", "description": "Watchdog, reset postępu, automatyczna konserwacja i udostępnianie encji debugujących.", "data": { "watchdog_interval": "Interwał watchdoga (sekundy)", "no_update_active_timeout": "Limit czasu braku aktualizacji (s)", "progress_reset_delay": "Opóźnienie resetowania postępu (sekundy)", "auto_maintenance": "Włącz automatyczną konserwację", "expose_debug_entities": "Pokaż encje debugowania", "save_debug_traces": "Zapisz ślady debugowania" }, "data_description": { "watchdog_interval": "Sekundy między kontrolami watchdoga podczas pracy. Domyślnie: 5 s. OSTRZEŻENIE: Upewnij się, że jest WYŻSZY niż interwał aktualizacji czujnika, aby uniknąć fałszywych zatrzymań (np. jeśli czujnik aktualizuje się co 60 s, użyj 65 s+).", "no_update_active_timeout": "Dla czujników publikujących tylko przy zmianie: wymuś zakończenie AKTYWNEGO cyklu tylko wtedy, gdy przez tyle sekund nie nadeszły żadne aktualizacje. Zakończenie przy niskiej mocy nadal korzysta z opóźnienia wyłączenia.", "progress_reset_delay": "Po zakończeniu cyklu (100%) odczekaj tyle sekund bezczynności, zanim zresetujesz postęp do 0%. Domyślnie: 300 s.", "auto_maintenance": "Włącz automatyczną konserwację (napraw próbki, scalaj fragmenty).", "expose_debug_entities": "Pokaż zaawansowane czujniki (pewność, faza, niejednoznaczność) do debugowania.", "save_debug_traces": "Przechowuj szczegółowe dane rankingowe i ślady mocy w historii (zwiększa zużycie pamięci)." } }, "anti_wrinkle_section": { "name": "Tarcza antygniotowa (suszarki)", "description": "Ignoruj obroty bębna po zakończeniu cyklu, aby zapobiec cyklom-duchom. Tylko suszarka / pralko-suszarka.", "data": { "anti_wrinkle_enabled": "Tarcza antygniotowa (tylko suszarka/pralko-suszarka)", "anti_wrinkle_max_power": "Maks. moc antygniotowa (W) (tylko suszarka/pralko-suszarka)", "anti_wrinkle_max_duration": "Maks. czas trwania antygniotowy (s) (tylko suszarka/pralko-suszarka)", "anti_wrinkle_exit_power": "Moc wyjścia z trybu antygniotowego (W) (tylko suszarka/pralko-suszarka)" }, "data_description": { "anti_wrinkle_enabled": "Ignoruj krótkie obroty bębna przy niskiej mocy po zakończeniu cyklu, aby zapobiec cyklom-duchom (tylko suszarka/pralko-suszarka).", "anti_wrinkle_max_power": "Impulsy na tym poziomie mocy lub poniżej są traktowane jako obroty antygniotowe, a nie nowe cykle. Dotyczy tylko wtedy, gdy Tarcza antygniotowa jest włączona.", "anti_wrinkle_max_duration": "Maksymalna długość impulsu traktowanego jako obrót antygniotowy. Dotyczy tylko wtedy, gdy Tarcza antygniotowa jest włączona.", "anti_wrinkle_exit_power": "Jeśli moc spadnie poniżej tego poziomu, natychmiast zakończ tryb antygniotowy (prawdziwe wyłączenie). Dotyczy tylko wtedy, gdy Tarcza antygniotowa jest włączona." } }, "delay_start_section": { "name": "Wykrywanie opóźnionego startu", "description": "Traktuj utrzymujący się stan gotowości o niskim poborze mocy jako stan 'Oczekiwanie na start', dopóki cykl faktycznie się nie rozpocznie.", "data": { "delay_start_detect_enabled": "Włącz wykrywanie opóźnionego startu", "delay_confirm_seconds": "Opóźniony start: czas potwierdzenia stanu gotowości (s)", "delay_timeout_hours": "Opóźniony start: Maksymalny czas oczekiwania (h)" }, "data_description": { "delay_start_detect_enabled": "Po włączeniu krótki skok poboru mocy przy niskim poborze mocy, po którym następuje utrzymujące się zasilanie w trybie gotowości, jest wykrywany jako opóźniony start. Podczas opóźnienia czujnik stanu wyświetla komunikat „Oczekiwanie na start”. Do momentu faktycznego rozpoczęcia cyklu nie jest śledzony czas trwania programu ani jego postęp. Wymaga ustawienia start_threshold_w powyżej szczytowej mocy drenu.", "delay_confirm_seconds": "Moc musi pozostawać między progiem zatrzymania (W) a progiem startu (W) przez tyle sekund, zanim WashData przejdzie do stanu 'Oczekiwanie na start'. Odfiltrowuje to krótkie skoki podczas nawigacji po menu. Domyślnie: 60 s.", "delay_timeout_hours": "Limit czasu bezpieczeństwa: jeśli po upływie tylu godzin urządzenie nadal znajduje się w stanie „Oczekiwanie na uruchomienie”, funkcja WashData zostaje zresetowana do ustawienia Wyłączone. Wartość domyślna: 8 godz." } }, "external_triggers_section": { "name": "Zewnętrzne wyzwalacze, drzwi i pauza", "description": "Opcjonalny zewnętrzny czujnik zakończenia cyklu, czujnik drzwi do wykrywania pauzy / opróżnienia oraz przełącznik odcinający zasilanie podczas pauzy.", "data": { "external_end_trigger_enabled": "Włącz zewnętrzny wyzwalacz zakończenia cyklu", "external_end_trigger": "Zewnętrzny czujnik końca cyklu", "external_end_trigger_inverted": "Odwróć logikę wyzwalania (wyzwalaj przy WYŁĄCZENIU)", "door_sensor_entity": "Czujnik drzwi", "pause_cuts_power": "Odetnij zasilanie podczas pauzy", "switch_entity": "Jednostka przełączająca (w celu wstrzymania przerwy w dostawie prądu)", "notify_unload_delay_minutes": "Opóźnienie powiadomienia o oczekiwaniu na pranie (min)" }, "data_description": { "external_end_trigger_enabled": "Włącz monitorowanie zewnętrznego czujnika binarnego, aby wyzwolić zakończenie cyklu.", "external_end_trigger": "Wybierz encję czujnika binarnego. Po uruchomieniu tego czujnika bieżący cykl zakończy się ze statusem „zakończony”.", "external_end_trigger_inverted": "Domyślnie wyzwalacz uruchamia się, gdy czujnik się WŁĄCZY. Zaznacz to pole, aby wyzwalać, gdy czujnik się WYŁĄCZY.", "door_sensor_entity": "Opcjonalny czujnik binarny drzwi maszyny (wł. = otwarte, wył. = zamknięte). Kiedy drzwiczki zostaną otwarte podczas aktywnego cyklu, WashData potwierdzi, że cykl został celowo wstrzymany. Jeśli po zakończeniu cyklu drzwi są nadal zamknięte, stan zmienia się na „Czyszczenie” do czasu otwarcia drzwi. Uwaga: zamknięcie drzwi NIE powoduje automatycznego wznowienia wstrzymanego cyklu - wznowienie należy uruchomić ręcznie za pomocą przycisku Wznów cykl lub za pomocą usługi.", "pause_cuts_power": "Wstrzymując się za pomocą przycisku lub usługi Wstrzymaj cykl, wyłącz także skonfigurowaną jednostkę przełączającą. Działa tylko wtedy, gdy dla tego urządzenia skonfigurowano jednostkę przełączającą.", "switch_entity": "Jednostka przełączająca do przełączania podczas wstrzymywania lub wznawiania. Wymagane, gdy włączona jest opcja „Odetnij zasilanie podczas pauzy”.", "notify_unload_delay_minutes": "Wyślij powiadomienie za pośrednictwem kanału powiadomień o zakończeniu, gdy cykl się zakończy, a drzwi nie zostaną otwarte przez tyle minut (wymaga czujnika drzwi). Ustaw na 0, aby wyłączyć. Domyślnie: 60 minut." } }, "pump_section": { "name": "Monitor pompy", "description": "Tylko dla urządzeń typu pompa. Wywołuje zdarzenie, jeśli cykl pompy trwa dłużej niż ten czas.", "data": { "pump_stuck_duration": "Próg alarmu o zablokowaniu pompy (tylko pompa)" }, "data_description": { "pump_stuck_duration": "Jeżeli po tylu sekundach cykl pompy nadal trwa, jednokrotnie uruchamiane jest zdarzenie ha_washdata_pump_stuck. Użyj tego, aby wykryć zablokowany silnik (typowy czas pracy pompy ściekowej wynosi mniej niż 60 s). Domyślnie: 1800 s (30 min). Tylko typ urządzenia pompującego." } }, "device_link_section": { "name": "Połączenie urządzenia", "description": "Opcjonalnie połącz to urządzenie WashData z istniejącym urządzeniem Home Assistant (na przykład inteligentną wtyczką lub samym urządzeniem). Urządzenie WashData zostanie wówczas pokazane jako „Połączone przez” to urządzenie. Pozostaw puste, aby WashData pozostała samodzielnym urządzeniem.", "data": { "linked_device": "Połączone urządzenie" }, "data_description": { "linked_device": "Wybierz urządzenie, z którym chcesz połączyć WashData. Spowoduje to dodanie odniesienia „Połączono przez” w rejestrze urządzeń; WashData utrzymuje własną kartę urządzenia i podmioty. Wyczyść zaznaczenie, aby usunąć łącze." } } } }, "diagnostics": { "title": "Diagnostyka i konserwacja", "description": "Wykonuj czynności konserwacyjne, takie jak scalanie fragmentarycznych cykli lub migracja przechowywanych danych.\n\n**Wykorzystanie miejsca**\n\n- Rozmiar pliku: {file_size_kb} KB\n- Cykle: {cycle_count}\n- Profile: {profile_count}\n- Ślady debugowania: {debug_count}", "menu_options": { "reprocess_history": "Konserwacja: ponowne przetwarzanie i optymalizacja danych", "clear_debug_data": "Wyczyść dane debugowania (zwolnij miejsce)", "wipe_history": "Usuń WSZYSTKIE dane z tego urządzenia (nieodwracalne)", "export_import": "Eksportuj/importuj JSON z ustawieniami (kopiuj/wklej)", "menu_back": "← Wstecz" } }, "clear_debug_data": { "title": "Wyczyść dane debugowania", "description": "Czy na pewno chcesz usunąć wszystkie zapisane ślady debugowania? Spowoduje to zwolnienie miejsca, ale usunie szczegółowe informacje rankingowe z poprzednich cykli." }, "manage_cycles": { "title": "Zarządzaj cyklami", "description": "Ostatnie cykle:\n{recent_cycles}", "menu_options": { "auto_label_cycles": "Automatyczne etykietowanie starych cykli", "select_cycle_to_label": "Etykietuj konkretny cykl", "select_cycle_to_delete": "Usuń cykl", "interactive_editor": "Interaktywny edytor scalania/podziału", "trim_cycle_select": "Przytnij dane cyklu", "menu_back": "← Wstecz" } }, "manage_cycles_empty": { "title": "Zarządzaj cyklami", "description": "Nie zapisano jeszcze żadnych cykli.", "menu_options": { "auto_label_cycles": "Automatyczne etykietowanie starych cykli", "menu_back": "← Wstecz" } }, "manage_profiles": { "title": "Zarządzaj profilami", "description": "Podsumowanie profili:\n{profile_summary}", "menu_options": { "create_profile": "Utwórz nowy profil", "edit_profile": "Edytuj/zmień nazwę profilu", "delete_profile_select": "Usuń profil", "profile_stats": "Statystyki profilu", "cleanup_profile": "Czyszczenie historii - wykres i usuwanie", "assign_profile_phases_select": "Przypisz zakresy faz", "menu_back": "← Wstecz" } }, "manage_profiles_empty": { "title": "Zarządzaj profilami", "description": "Nie utworzono jeszcze żadnych profili.", "menu_options": { "create_profile": "Utwórz nowy profil", "menu_back": "← Wstecz" } }, "manage_phase_catalog": { "title": "Zarządzaj katalogiem faz", "description": "Katalog faz (domyślne dla tego urządzenia + fazy niestandardowe):\n{phase_summary}", "menu_options": { "phase_catalog_create": "Utwórz nową fazę", "phase_catalog_edit_select": "Edytuj fazę", "phase_catalog_delete": "Usuń fazę", "menu_back": "← Wstecz" } }, "phase_catalog_create": { "title": "Utwórz fazę niestandardową", "description": "Utwórz niestandardową nazwę i opis fazy oraz wybierz typ urządzenia, do którego ma zastosowanie.", "data": { "target_device_type": "Docelowy typ urządzenia", "phase_name": "Nazwa fazy", "phase_description": "Opis fazy" } }, "phase_catalog_edit_select": { "title": "Edytuj fazę niestandardową", "description": "Wybierz fazę niestandardową do edycji.", "data": { "phase_name": "Faza niestandardowa" } }, "phase_catalog_edit": { "title": "Edytuj fazę niestandardową", "description": "Edycja fazy: {phase_name}", "data": { "phase_name": "Nazwa fazy", "phase_description": "Opis fazy" } }, "phase_catalog_delete": { "title": "Usuń fazę niestandardową", "description": "Wybierz fazę niestandardową do usunięcia. Wszelkie przypisane zakresy korzystające z tej fazy zostaną usunięte.", "data": { "phase_name": "Faza niestandardowa" } }, "assign_profile_phases": { "title": "Przypisz zakresy faz", "description": "Podgląd fazy dla profilu: **{profile_name}**\n\n{timeline_svg}\n\n**Aktualne zakresy:**\n{current_ranges}\n\nUżyj poniższych akcji, aby dodawać, edytować, usuwać lub zapisywać zakresy.", "menu_options": { "assign_profile_phases_add": "Dodaj zakres fazy", "assign_profile_phases_edit_select": "Edytuj zakres fazy", "assign_profile_phases_delete": "Usuń zakres fazy", "phase_ranges_clear": "Wyczyść wszystkie zakresy", "assign_profile_phases_auto_detect": "Automatycznie wykryj fazy", "phase_ranges_save": "Zapisz i wróć", "menu_back": "← Wstecz" } }, "assign_profile_phases_add": { "title": "Dodaj zakres fazy", "description": "Dodaj jeden zakres fazy do bieżącego szkicu.", "data": { "phase_name": "Faza", "start_min": "Minuta rozpoczęcia", "end_min": "Minuta zakończenia" } }, "assign_profile_phases_edit_select": { "title": "Edytuj zakres fazy", "description": "Wybierz zakres do edycji.", "data": { "range_index": "Zakres fazy" } }, "assign_profile_phases_edit": { "title": "Edytuj zakres fazy", "description": "Zaktualizuj wybrany zakres fazy.", "data": { "phase_name": "Faza", "start_min": "Minuta rozpoczęcia", "end_min": "Minuta zakończenia" } }, "assign_profile_phases_delete": { "title": "Usuń zakres fazy", "description": "Wybierz zakres do usunięcia ze szkicu.", "data": { "range_index": "Zakres fazy" } }, "assign_profile_phases_auto_detect": { "title": "Automatycznie wykryte fazy", "description": "Profil: **{profile_name}**\n\n{timeline_svg}\n\n**{detected_count} faz(y) wykrytych automatycznie.** Wybierz akcję poniżej.", "data": { "action": "Akcja" } }, "assign_profile_phases_auto_detect_name": { "title": "Nadaj nazwy wykrytym fazom", "description": "Profil: **{profile_name}**\n\n**Wykryto {detected_count} faz(y):**\n{ranges_summary}\n\nPrzypisz nazwę do każdej fazy." }, "assign_profile_phases_select": { "title": "Przypisz zakresy faz", "description": "Wybierz profil, aby skonfigurować zakresy faz.", "data": { "profile": "Profil" } }, "profile_stats": { "title": "Statystyki profilu", "description": "{stats_table}" }, "create_profile": { "title": "Utwórz nowy profil", "description": "Utwórz nowy profil ręcznie lub z poprzedniego cyklu.\n\nPrzykłady nazw profili: „Delikatne”, „Intensywne”, „Szybkie pranie”", "data": { "profile_name": "Nazwa profilu", "reference_cycle": "Cykl referencyjny (opcjonalnie)", "manual_duration": "Ręczny czas trwania (minuty)" } }, "edit_profile": { "title": "Edytuj profil", "description": "Wybierz profil do zmiany nazwy", "data": { "profile": "Profil" } }, "rename_profile": { "title": "Edytuj szczegóły profilu", "description": "Aktualny profil: {current_name}", "data": { "new_name": "Nazwa profilu", "manual_duration": "Ręczny czas trwania (minuty)" } }, "delete_profile_select": { "title": "Usuń profil", "description": "Wybierz profil do usunięcia", "data": { "profile": "Profil" } }, "delete_profile_confirm": { "title": "Potwierdź usunięcie profilu", "description": "⚠️ Spowoduje to trwałe usunięcie profilu: {profile_name}", "data": { "unlabel_cycles": "Usuń etykietę z cykli korzystających z tego profilu" } }, "auto_label_cycles": { "title": "Automatyczne etykietowanie starych cykli", "description": "Znaleziono łącznie {total_count} cykli. Profile: {profiles}", "data": { "confidence_threshold": "Minimalna pewność (0,50-0,95)" } }, "select_cycle_to_label": { "title": "Wybierz cykl do etykietowania", "description": "✓ = zakończone, ⚠ = wznowione, ✗ = przerwane", "data": { "cycle_id": "Cykl" } }, "select_cycle_to_delete": { "title": "Usuń cykl", "description": "⚠️ Spowoduje to trwałe usunięcie wybranego cyklu", "data": { "cycle_id": "Cykl do usunięcia" } }, "label_cycle": { "title": "Etykietuj cykl", "description": "{cycle_info}", "data": { "profile_name": "Profil", "new_profile_name": "Nowa nazwa profilu (jeśli tworzysz)" } }, "post_process": { "title": "Przetwarzanie historii (scalanie/podział)", "description": "Wyczyść historię cykli, łącząc fragmentaryczne przebiegi i dzieląc niepoprawnie połączone cykle w oknie czasowym. Wprowadź liczbę godzin do sprawdzenia (wpisz 999999 dla wszystkich).", "data": { "time_range": "Okres wsteczny (godziny)", "gap_seconds": "Próg scalania/podziału (sekundy)" }, "data_description": { "time_range": "Liczba godzin skanowania w celu połączenia fragmentarycznych cykli. Użyj 999999, aby przetworzyć wszystkie dane historyczne.", "gap_seconds": "Próg decydujący o podziale lub scaleniu. Luki KRÓTSZE niż ten czas są scalane. Luki DŁUŻSZE są dzielone. Obniż tę wartość, aby wymusić podział cyklu, który został nieprawidłowo scalony." } }, "cleanup_profile": { "title": "Czyszczenie historii - wybierz profil", "description": "Wybierz profil do wizualizacji. Spowoduje to wygenerowanie wykresu przedstawiającego wszystkie poprzednie cykle dla tego profilu, co pomoże zidentyfikować wartości odstające.", "data": { "profile": "Profil" } }, "cleanup_select": { "title": "Czyszczenie historii - wykres i usuwanie", "description": "![Wykres]({graph_url})\n\n**Wizualizacja: {profile_name}**\n\nWykres przedstawia poszczególne cykle w postaci kolorowych linii. Zidentyfikuj wartości odstające (linie oddalone od grupy) i dopasuj ich kolor na poniższej liście, aby je usunąć.\n\n**Wybierz cykle do TRWAŁEGO usunięcia:**", "data": { "cycles_to_delete": "Cykle do usunięcia (sprawdź pasujące kolory)" } }, "interactive_editor": { "title": "Interaktywny edytor scalania/podziału", "description": "Wybierz ręczną akcję do wykonania na historii cykli.", "menu_options": { "editor_split": "Podziel cykl (znajdź przerwy)", "editor_merge": "Scal cykle (połącz fragmenty)", "editor_delete": "Usuń cykl(e)", "menu_back": "← Wstecz" } }, "editor_select": { "title": "Wybierz cykle", "description": "Wybierz cykl(e) do przetworzenia.\n\n{info_text}", "data": { "selected_cycles": "Cykle" } }, "editor_configure": { "title": "Konfiguruj i zastosuj", "description": "{preview_md}", "data": { "confirm_action": "Akcja", "merged_profile": "Wynikowy profil", "new_profile_name": "Nowa nazwa profilu", "confirm_commit": "Tak, potwierdzam tę akcję", "segment_0_profile": "Profil segmentu 1", "segment_1_profile": "Profil segmentu 2", "segment_2_profile": "Profil segmentu 3", "segment_3_profile": "Profil segmentu 4", "segment_4_profile": "Profil segmentu 5", "segment_5_profile": "Profil segmentu 6", "segment_6_profile": "Profil segmentu 7", "segment_7_profile": "Profil segmentu 8", "segment_8_profile": "Profil segmentu 9", "segment_9_profile": "Profil segmentu 10" } }, "editor_split_params": { "title": "Konfiguracja podziału", "description": "Dostosuj czułość podziału tego cyklu. Każda przerwa bezczynności dłuższa niż ten czas spowoduje podział.", "data": { "split_mode": "Metoda podziału" } }, "editor_split_auto_params": { "title": "Konfiguracja automatycznego podziału", "description": "Dostosuj czułość dzielenia tego cyklu. Każda przerwa bezczynności dłuższa niż ta spowoduje podział.", "data": { "min_gap_seconds": "Próg przerwy podziału (sekundy)" } }, "editor_split_manual_params": { "title": "Ręczne znaczniki czasu podziału", "description": "{preview_md}Okno cyklu: **{cycle_start_wallclock} → {cycle_end_wallclock}** dnia {cycle_date}.\n\nWprowadź jeden lub więcej znaczników czasu podziału (`HH:MM` lub `HH:MM:SS`), po jednym w wierszu. Cykl zostanie przecięty przy każdym znaczniku czasu — N znaczników czasu tworzy N+1 segmentów.", "data": { "split_timestamps": "Znaczniki czasu podziału" } }, "reprocess_history": { "title": "Konserwacja: ponowne przetwarzanie i optymalizacja danych", "description": "Wykonuje głębokie czyszczenie danych historycznych:\n1. Przycina odczyty mocy zerowej (cisza).\n2. Naprawia czas/czas trwania cyklu.\n3. Przelicza wszystkie modele statystyczne (koperty).\n\n**Uruchom, aby naprawić problemy z danymi lub zastosować nowe algorytmy.**" }, "wipe_history": { "title": "Wyczyść historię (tylko do testów)", "description": "⚠️ Spowoduje to trwałe usunięcie WSZYSTKICH zapisanych cykli i profili dla tego urządzenia. Tego nie można cofnąć!" }, "export_import": { "title": "Eksportuj/importuj JSON", "description": "Kopiuj/wklej cykle, profile ORAZ ustawienia dla tego urządzenia. Eksportuj poniżej lub wklej JSON, aby zaimportować.", "data": { "mode": "Akcja", "json_payload": "Pełna konfiguracja JSON" }, "data_description": { "mode": "Wybierz Eksportuj, aby skopiować aktualne dane i ustawienia, lub Importuj, aby wkleić dane wyeksportowane z innego urządzenia WashData.", "json_payload": "Do eksportu: skopiuj ten JSON (zawiera cykle, profile i wszystkie dopracowane ustawienia). Do importu: wklej JSON wyeksportowany z WashData." } }, "record_cycle": { "title": "Nagraj cykl", "description": "Ręcznie nagraj cykl, aby utworzyć czysty profil bez zakłóceń.\n\nStan: **{status}**\nCzas trwania: {duration} s\nPróbki: {samples}", "menu_options": { "record_refresh": "Odśwież stan", "record_stop": "Zatrzymaj nagrywanie (zapisz i przetwórz)", "record_start": "Rozpocznij nowe nagranie", "record_process": "Przetwórz ostatnie nagranie (przytnij i zapisz)", "record_discard": "Odrzuć ostatnie nagranie", "menu_back": "← Wstecz" } }, "record_process": { "title": "Przetwarzanie nagrania", "description": "![Wykres]({graph_url})\n\n**Wykres przedstawia surowe nagranie.** Niebieski = zachowaj, Czerwony = proponowane przycięcie.\n*Wykres jest statyczny i nie aktualizuje się przy zmianach formularza.*\n\nNagrywanie zatrzymane. Przycięcia są wyrównywane do wykrytej częstotliwości próbkowania (~{sampling_rate} s).\n\nSurowy czas trwania: {duration} s\nPróbki: {samples}", "data": { "head_trim": "Przycięcie początku (sekundy)", "tail_trim": "Przycięcie końca (sekundy)", "save_mode": "Miejsce docelowe zapisu", "profile_name": "Nazwa profilu" } }, "learning_feedbacks": { "title": "Opinie dotyczące uczenia", "description": "Oczekujące opinie: {count}\n\n{pending_table}\n\nWybierz prośbę o przegląd cyklu do przetworzenia.", "menu_options": { "learning_feedbacks_pick": "Przejrzyj oczekującą opinię", "learning_feedbacks_dismiss_all": "Odrzuć wszystkie oczekujące opinie", "menu_back": "← Wstecz" } }, "learning_feedbacks_pick": { "title": "Wybierz opinię do przejrzenia", "description": "Wybierz żądanie przeglądu cyklu do otwarcia.", "data": { "selected_feedback": "Wybierz cykl do przejrzenia" } }, "learning_feedbacks_empty": { "title": "Opinie dotyczące uczenia", "description": "Nie znaleziono żadnych oczekujących próśb o opinię.", "menu_options": { "menu_back": "← Wstecz" } }, "learning_feedbacks_dismiss_all": { "title": "Odrzuć wszystkie oczekujące opinie", "description": "Zaraz odrzucisz **{count}** oczekujących żądań opinii. Odrzucone cykle pozostaną w historii, ale nie będą wnosić nowego sygnału uczenia. Tego nie można cofnąć.\n\n✅ Zaznacz pole poniżej i kliknij **Prześlij**, aby odrzucić wszystko.\n❌ Pozostaw tę opcję niezaznaczoną i kliknij **Prześlij**, aby anulować i wrócić.", "data": { "confirm_dismiss_all": "Potwierdź: odrzuć wszystkie oczekujące prośby o opinię" } }, "resolve_feedback": { "title": "Rozpatrz opinię", "description": "{comparison_img}{candidates_table}\n**Wykryty profil**: {detected_profile} ({confidence_pct}%)\n**Szacowany czas trwania**: {est_duration_min} min\n**Rzeczywisty czas trwania**: {act_duration_min} min\n\n__Wybierz akcję poniżej:__", "data": { "action": "Co chcesz zrobić?", "corrected_profile": "Prawidłowy program (jeśli korygujesz)", "corrected_duration": "Prawidłowy czas trwania w sekundach (jeśli korygujesz)" } }, "trim_cycle_select": { "title": "Przytnij cykl - wybierz cykl", "description": "Wybierz cykl do przycięcia. ✓ = zakończone, ⚠ = wznowione, ✗ = przerwane", "data": { "cycle_id": "Cykl" } }, "trim_cycle": { "title": "Przytnij cykl", "description": "Bieżące okno: {trim_summary}\n\n{trim_svg}", "data": { "action": "Akcja" } }, "trim_cycle_start": { "title": "Ustaw punkt początku przycięcia", "description": "Okno cyklu: {cycle_start_wallclock} → {cycle_end_wallclock}\n\nBieżący początek: **{current_wallclock}** (+{current_offset_min} min od początku cyklu)\n\nWybierz nowy czas rozpoczęcia, korzystając z poniższego selektora zegara.", "data": { "trim_start_time": "Nowy czas rozpoczęcia", "trim_start_min": "Nowy start (minuty od rozpoczęcia cyklu)" } }, "trim_cycle_end": { "title": "Ustaw punkt końca przycięcia", "description": "Okno cyklu: {cycle_start_wallclock} → {cycle_end_wallclock}\n\nBieżący koniec: **{current_wallclock}** (+{current_offset_min} min od początku cyklu)\n\nWybierz nową godzinę zakończenia, korzystając z poniższego selektora zegara.", "data": { "trim_end_time": "Nowy czas zakończenia", "trim_end_min": "Nowy koniec (minuty od rozpoczęcia cyklu)" } } }, "error": { "import_failed": "Import nie powiódł się. Wklej prawidłowy plik JSON eksportu WashData.", "select_exactly_one": "Wybierz dokładnie jeden cykl dla tej akcji.", "select_at_least_one": "Wybierz co najmniej jeden cykl dla tej akcji.", "select_at_least_two": "Wybierz co najmniej dwa cykle dla tej akcji.", "profile_exists": "Profil o tej nazwie już istnieje", "rename_failed": "Zmiana nazwy profilu nie powiodła się. Profil może nie istnieć lub nowa nazwa jest już zajęta.", "assignment_failed": "Przypisanie profilu do cyklu nie powiodło się", "duplicate_phase": "Faza o tej nazwie już istnieje.", "phase_not_found": "Nie znaleziono wybranej fazy.", "invalid_phase_name": "Nazwa fazy nie może być pusta.", "phase_name_too_long": "Nazwa fazy jest za długa.", "invalid_phase_range": "Zakres fazy jest nieprawidłowy. Koniec musi być większy niż początek.", "invalid_phase_timestamp": "Sygnatura czasowa jest nieprawidłowa. Użyj formatu RRRR-MM-DD GG:MM lub GG:MM.", "overlapping_phase_ranges": "Zakresy faz nakładają się. Dostosuj zakresy i spróbuj ponownie.", "incomplete_phase_row": "Każdy wiersz fazy musi zawierać fazę oraz pełne wartości początkowe/końcowe dla wybranego trybu.", "timestamp_mode_cycle_required": "Jeśli korzystasz z trybu sygnatury czasowej, wybierz cykl źródłowy.", "no_phase_ranges": "Dla tej akcji nie są jeszcze dostępne żadne zakresy faz.", "feedback_notification_title": "WashData: sprawdź cykl ({device})", "feedback_notification_message": "**Urządzenie**: {device}\n**Program**: {program} ({confidence}% pewności)\n**Czas**: {time}\n\nWashData potrzebuje Twojej pomocy, aby zweryfikować wykryty cykl.\n\nPrzejdź do **Ustawienia > Urządzenia i usługi > WashData > Konfiguruj > Opinie dotyczące uczenia**, aby potwierdzić lub poprawić ten wynik.", "suggestions_ready_notification_title": "WashData: sugerowane ustawienia gotowe ({device})", "suggestions_ready_notification_message": "Czujnik **Sugerowane ustawienia** zgłasza teraz **{count}** możliwych do zastosowania zaleceń.\n\nAby je przejrzeć i zastosować: **Ustawienia > Urządzenia i usługi > WashData > Konfiguruj > Ustawienia zaawansowane > Zastosuj sugerowane wartości**.\n\nSugestie są opcjonalne i wyświetlane do przeglądu przed zapisaniem.", "trim_range_invalid": "Początek musi być przed końcem. Dostosuj punkty przycięcia.", "trim_failed": "Przycinanie nie powiodło się. Cykl może już nie istnieć lub okno jest puste.", "invalid_split_timestamp": "Znacznik czasu jest nieprawidłowy lub poza oknem cyklu. Użyj HH:MM lub HH:MM:SS w obrębie okna cyklu.", "no_split_segments_found": "Z tych znaczników czasu nie udało się utworzyć prawidłowych segmentów. Upewnij się, że każdy znacznik czasu mieści się w oknie cyklu, a segmenty mają co najmniej 1 minutę długości.", "auto_tune_suggestion": "{device_type} {device_title} wykrył cykle duchów. Sugerowana zmiana min_power: {current_min}W -> {new_min}W (nie stosowana automatycznie).", "auto_tune_title": "Automatyczne dostrajanie WashData", "auto_tune_fallback": "{device_type} {device_title} wykrył cykle duchów. Sugerowana zmiana min_power: {current_min}W -> {new_min}W (nie stosowana automatycznie)." }, "abort": { "no_cycles_found": "Nie znaleziono cykli", "no_split_segments_found": "W wybranym cyklu nie znaleziono segmentów nadających się do podziału.", "cycle_not_found": "Nie można było załadować wybranego cyklu.", "no_power_data": "Brak danych śladu mocy dla wybranego cyklu.", "no_profiles_found": "Nie znaleziono profili. Najpierw utwórz profil.", "no_profiles_for_matching": "Brak dostępnych profili do dopasowania. Najpierw utwórz profile.", "no_unlabeled_cycles": "Wszystkie cykle są już oetykietowane", "no_suggestions": "Nie są jeszcze dostępne żadne sugerowane wartości. Wykonaj kilka cykli i spróbuj ponownie.", "no_predictions": "Brak prognoz", "no_custom_phases": "Nie znaleziono faz niestandardowych.", "reprocess_success": "Pomyślnie przetworzono ponownie {count} cykli.", "debug_data_cleared": "Pomyślnie wyczyszczono dane debugowania z {count} cykli." } }, "selector": { "notify_events_option": { "options": { "cycle_start": "Rozpoczęcie cyklu", "cycle_finish": "Zakończenie cyklu", "cycle_live": "Postęp na żywo" } }, "common_text": { "options": { "unlabeled": "(Bez etykiety)", "create_new_profile": "Utwórz nowy profil", "remove_label": "Usuń etykietę", "no_reference_cycle": "(Brak cyklu referencyjnego)", "all_device_types": "Wszystkie typy urządzeń", "current_suffix": "(aktualny)", "editor_select_info": "Wybierz 1 cykl do podziału lub 2+ cykli do scalenia.", "editor_select_info_split": "Wybierz 1 cykl do podziału.", "editor_select_info_merge": "Wybierz 2+ cykle do scalenia.", "editor_select_info_delete": "Wybierz 1+ cykli do usunięcia.", "no_cycles_recorded": "Nie zapisano jeszcze żadnych cykli.", "profile_summary_line": "- **{name}**: {count} cykli, śr. {avg} min", "no_profiles_created": "Nie utworzono jeszcze żadnych profili.", "phase_preview": "Podgląd fazy", "phase_preview_no_curve": "Krzywa średniego profilu nie jest jeszcze dostępna. Uruchom lub oetykietuj więcej cykli dla tego profilu.", "average_power_curve": "Krzywa średniej mocy", "unit_min": "min", "profile_option_fmt": "{name} ({count} cykli, ~{duration} min śr.)", "profile_option_short_fmt": "{name} ({count} cykli, ~{duration} min)", "deleted_cycles_from_profile": "Usunięto {count} cykli z {profile}.", "not_enough_data_graph": "Za mało danych, aby wygenerować wykres.", "no_profiles_found": "Nie znaleziono profili.", "cycle_info_fmt": "Cykl: {start}, {duration} min, aktualnie: {label}", "top_candidates_header": "### Najlepsi kandydaci", "tbl_profile": "Profil", "tbl_confidence": "Pewność", "tbl_correlation": "Korelacja", "tbl_duration_match": "Dopasowanie czasu trwania", "detected_profile": "Wykryty profil", "estimated_duration": "Szacowany czas trwania", "actual_duration": "Rzeczywisty czas trwania", "choose_action": "__Wybierz akcję poniżej:__", "tbl_count": "Liczba", "tbl_avg": "Śr.", "tbl_min": "Min", "tbl_max": "Maks", "tbl_energy_avg": "Energia (śr.)", "tbl_energy_total": "Energia (łącznie)", "tbl_consistency": "Spójn.", "tbl_last_run": "Ostatni cykl", "graph_legend_title": "Legenda wykresu", "graph_legend_body": "Niebieski pasek przedstawia zaobserwowany minimalny i maksymalny zakres poboru mocy. Linia pokazuje krzywą średniej mocy.", "recording_preview": "Podgląd nagrania", "trim_start": "Przycięcie początku", "trim_end": "Przycięcie końca", "split_preview_title": "Podgląd podziału", "split_preview_found_fmt": "Znaleziono {count} segmentów.", "split_preview_confirm_fmt": "Kliknij Potwierdź, aby podzielić ten cykl na {count} oddzielnych cykli.", "merge_preview_title": "Podgląd scalania", "merge_preview_joining_fmt": "Scalanie {count} cykli. Luki zostaną wypełnione odczytami 0 W.", "editor_delete_preview_title": "Podgląd usuwania", "editor_delete_preview_intro": "Wybrane cykle zostaną trwale usunięte:", "editor_delete_preview_confirm": "Kliknij Potwierdź, aby trwale usunąć te rekordy cykli.", "no_power_preview": "*Brak danych mocy dostępnych do podglądu.*", "profile_comparison": "Porównanie profili", "actual_cycle_label": "Ten cykl (rzeczywisty)", "storage_usage_header": "Wykorzystanie miejsca", "storage_file_size": "Rozmiar pliku", "storage_cycles": "Cykle", "storage_profiles": "Profile", "storage_debug_traces": "Ślady debugowania", "overview_suffix": "Przegląd", "phase_preview_for_profile": "Podgląd fazy dla profilu", "current_ranges_header": "Aktualne zakresy", "assign_phases_help": "Użyj poniższych akcji, aby dodawać, edytować, usuwać lub zapisywać zakresy.", "profile_summary_header": "Podsumowanie profili", "recent_cycles_header": "Ostatnie cykle", "trim_cycle_preview_title": "Podgląd przycięcia cyklu", "trim_cycle_preview_no_data": "Brak danych mocy dla tego cyklu.", "trim_cycle_preview_kept_suffix": "zachowane", "table_program": "Program", "table_when": "Kiedy", "table_length": "Długość", "table_match": "Dopasowanie", "table_profile": "Profil", "table_cycles": "Cykle", "table_avg_length": "Śr. długość", "table_last_run": "Ostatni cykl", "table_avg_energy": "Śr. energia", "table_detected_program": "Wykryty program", "table_confidence": "Pewność", "table_reported": "Zgłoszono", "phase_builtin_suffix": "(Wbudowany)", "phase_none_available": "Brak dostępnych faz.", "settings_deprecation_warning": "⚠️ **Wycofany typ urządzenia:** Urządzenie {device_type} ma zostać usunięte w przyszłej wersji. Potok dopasowujący WashData nie zapewnia wiarygodnych wyników dla tej klasy urządzeń. Twoja integracja będzie działać przez cały okres wycofania; aby wyciszyć to ostrzeżenie, przełącz **Typ urządzenia** poniżej na jeden z obsługiwanych typów (pralka, suszarka, pralko-suszarka, zmywarka, frytownica, wypiekacz do chleba lub pompa) lub na **Inny (zaawansowany)**, jeśli Twoje urządzenie nie pasuje do żadnego z obsługiwanych typów. **Inne (zaawansowane)** zawiera celowo ogólne ustawienia domyślne, które nie są dostrojone do żadnego konkretnego urządzenia, dlatego konieczne będzie samodzielne skonfigurowanie progów, limitów czasu i dopasowywania parametrów; wszystkie istniejące ustawienia zostaną zachowane po przełączeniu.", "phase_other_device_types": "Inne typy urządzeń:" } }, "interactive_editor_action": { "options": { "split": "Podziel cykl (znajdź przerwy)", "merge": "Scal cykle (połącz fragmenty)", "delete": "Usuń cykl(e)" } }, "split_mode": { "options": { "auto": "Automatycznie wykryj przerwy bezczynności", "manual": "Ręczne znaczniki czasu" } }, "diagnostics_action": { "options": { "reprocess_history": "Konserwacja: ponowne przetwarzanie i optymalizacja danych", "clear_debug_data": "Wyczyść dane debugowania (zwolnij miejsce)", "wipe_history": "Usuń WSZYSTKIE dane z tego urządzenia (nieodwracalne)", "export_import": "Eksportuj/importuj JSON z ustawieniami (kopiuj/wklej)" } }, "export_import_mode": { "options": { "export": "Eksportuj wszystkie dane", "import": "Importuj/scal dane" } }, "manage_cycles_action": { "options": { "auto_label_cycles": "Automatyczne etykietowanie starych cykli", "select_cycle_to_label": "Etykietuj konkretny cykl", "select_cycle_to_delete": "Usuń cykl", "interactive_editor": "Interaktywny edytor scalania/podziału", "trim_cycle": "Przytnij dane cyklu" } }, "manage_profiles_action": { "options": { "create_profile": "Utwórz nowy profil", "edit_profile": "Edytuj/zmień nazwę profilu", "delete_profile": "Usuń profil", "profile_stats": "Statystyki profilu", "cleanup_profile": "Czyszczenie historii - wykres i usuwanie", "assign_phases": "Przypisz zakresy faz" } }, "manage_phase_catalog_action": { "options": { "create_custom_phase": "Utwórz nową fazę", "edit_custom_phase": "Edytuj fazę", "delete_custom_phase": "Usuń fazę" } }, "assign_profile_phases_action": { "options": { "add_range": "Dodaj zakres fazy", "edit_range": "Edytuj zakres fazy", "delete_range": "Usuń zakres fazy", "clear_ranges": "Wyczyść wszystkie zakresy", "auto_detect_ranges": "Automatycznie wykryj fazy", "save_ranges": "Zapisz i wróć" } }, "record_cycle_action": { "options": { "refresh_status": "Odśwież stan", "stop_recording": "Zatrzymaj nagrywanie (zapisz i przetwórz)", "start_recording": "Rozpocznij nowe nagranie", "process_recording": "Przetwórz ostatnie nagranie (przytnij i zapisz)", "discard_recording": "Odrzuć ostatnie nagranie" } }, "record_process_save_mode": { "options": { "new_profile": "Utwórz nowy profil", "existing_profile": "Dodaj do istniejącego profilu", "discard": "Odrzuć nagranie" } }, "resolve_feedback_action": { "options": { "confirm": "Potwierdź - poprawne wykrycie", "correct": "Popraw - wybierz program/czas trwania", "ignore": "Ignoruj - fałszywy alarm/zakłócony cykl", "delete": "Usuń - usuń z historii" } }, "assign_profile_phases_auto_detect_action": { "options": { "name_phases": "Nadaj nazwy i zastosuj fazy", "cancel": "Wróć bez zmian" } }, "trim_cycle_action": { "options": { "set_start": "Ustaw punkt początku", "set_end": "Ustaw punkt końca", "reset": "Zresetuj do pełnego czasu trwania", "apply": "Zastosuj przycięcie", "cancel": "Anuluj" } }, "device_type": { "options": { "washing_machine": "Pralka", "dryer": "Suszarka", "washer_dryer": "Zestaw pralko-suszarki", "dishwasher": "Pomywaczka", "coffee_machine": "Ekspres do kawy (przestarzały)", "ev": "Pojazd elektryczny (przestarzałe)", "air_fryer": "Frytkownica powietrzna", "heat_pump": "Pompa ciepła (przestarzała)", "bread_maker": "Wypiekacz chleba", "pump": "Pompa/pompa ściekowa", "oven": "Piekarnik (przestarzały)", "other": "Inne (zaawansowane)" } } }, "services": { "label_cycle": { "name": "Etykietuj cykl", "description": "Przypisz istniejący profil do poprzedniego cyklu lub usuń etykietę.", "fields": { "device_id": { "name": "Urządzenie", "description": "Urządzenie WashData do etykietowania." }, "cycle_id": { "name": "Identyfikator cyklu", "description": "Identyfikator cyklu do oetykietowania." }, "profile_name": { "name": "Nazwa profilu", "description": "Nazwa istniejącego profilu (utwórz profile w menu Zarządzaj profilami). Pozostaw puste, aby usunąć etykietę." } } }, "create_profile": { "name": "Utwórz profil", "description": "Utwórz nowy profil (samodzielny lub oparty na cyklu referencyjnym).", "fields": { "device_id": { "name": "Urządzenie", "description": "Urządzenie WashData." }, "profile_name": { "name": "Nazwa profilu", "description": "Nazwa nowego profilu (np. „Intensywne”, „Delikatne”)." }, "reference_cycle_id": { "name": "Identyfikator cyklu referencyjnego", "description": "Opcjonalny identyfikator cyklu, na którym można oprzeć ten profil." } } }, "delete_profile": { "name": "Usuń profil", "description": "Usuń profil i opcjonalnie usuń etykietę z cykli go używających.", "fields": { "device_id": { "name": "Urządzenie", "description": "Urządzenie WashData." }, "profile_name": { "name": "Nazwa profilu", "description": "Profil do usunięcia." }, "unlabel_cycles": { "name": "Usuń etykiety z cykli", "description": "Usuń etykietę profilu z cykli korzystających z tego profilu." } } }, "auto_label_cycles": { "name": "Automatyczne etykietowanie starych cykli", "description": "Wstecznie etykietuj nieoetykietowane cykle za pomocą dopasowania profilu.", "fields": { "device_id": { "name": "Urządzenie", "description": "Urządzenie WashData." }, "confidence_threshold": { "name": "Próg pewności", "description": "Minimalna pewność dopasowania (0,50–0,95), aby zastosować etykiety." } } }, "export_config": { "name": "Eksportuj konfigurację", "description": "Eksportuj profile, cykle i ustawienia tego urządzenia do pliku JSON (na urządzenie).", "fields": { "device_id": { "name": "Urządzenie", "description": "Urządzenie WashData do eksportu." }, "path": { "name": "Ścieżka", "description": "Opcjonalna bezwzględna ścieżka pliku do zapisu (domyślnie: /config/ha_washdata_export_{entry}.json)." } } }, "import_config": { "name": "Importuj konfigurację", "description": "Importuj profile, cykle i ustawienia dla tego urządzenia z pliku eksportu JSON (ustawienia mogą zostać nadpisane).", "fields": { "device_id": { "name": "Urządzenie", "description": "Urządzenie WashData, do którego chcesz zaimportować." }, "path": { "name": "Ścieżka", "description": "Bezwzględna ścieżka do eksportowanego pliku JSON do zaimportowania." } } }, "submit_cycle_feedback": { "name": "Prześlij opinię dotyczącą cyklu", "description": "Potwierdź lub popraw automatycznie wykryty program po zakończeniu cyklu. Podaj `entry_id` (zaawansowane) lub `device_id` (zalecane).", "fields": { "device_id": { "name": "Urządzenie", "description": "Urządzenie WashData (zalecane zamiast entry_id)." }, "entry_id": { "name": "Identyfikator wpisu", "description": "Identyfikator wpisu konfiguracji urządzenia (alternatywa dla device_id)." }, "cycle_id": { "name": "Identyfikator cyklu", "description": "Identyfikator cyklu pokazany w powiadomieniu/dziennikach opinii." }, "user_confirmed": { "name": "Potwierdź wykryty program", "description": "Ustaw true, jeśli wykryty program jest poprawny." }, "corrected_profile": { "name": "Poprawiony profil", "description": "Jeśli nie potwierdzasz, podaj prawidłową nazwę profilu/programu." }, "corrected_duration": { "name": "Poprawiony czas trwania (sekundy)", "description": "Opcjonalnie poprawiony czas trwania w sekundach." }, "notes": { "name": "Notatki", "description": "Opcjonalne uwagi dotyczące tego cyklu." } } }, "record_start": { "name": "Nagraj start cyklu", "description": "Rozpocznij ręczne nagrywanie czystego cyklu (pomija całą logikę dopasowania).", "fields": { "device_id": { "name": "Urządzenie", "description": "Urządzenie WashData do nagrywania." } } }, "record_stop": { "name": "Nagraj zatrzymanie cyklu", "description": "Zatrzymaj nagrywanie ręczne.", "fields": { "device_id": { "name": "Urządzenie", "description": "Urządzenie WashData do zatrzymania nagrywania." } } }, "trim_cycle": { "name": "Przytnij cykl", "description": "Przytnij dane mocy z poprzedniego cyklu do określonego okna czasowego.", "fields": { "device_id": { "name": "Urządzenie", "description": "Urządzenie WashData." }, "cycle_id": { "name": "Identyfikator cyklu", "description": "Identyfikator cyklu do przycięcia." }, "trim_start_s": { "name": "Przycięcie początku (sekundy)", "description": "Zachowuj dane od tego przesunięcia w sekundach. Domyślnie 0." }, "trim_end_s": { "name": "Przycięcie końca (sekundy)", "description": "Zachowuj dane do tego przesunięcia w sekundach. Domyślnie = pełny czas trwania." } } }, "pause_cycle": { "name": "Wstrzymaj cykl", "description": "Wstrzymaj aktywny cykl urządzenia WashData.", "fields": { "device_id": { "name": "Urządzenie", "description": "Urządzenie WashData do wstrzymania." } } }, "resume_cycle": { "name": "Wznów cykl", "description": "Wznów wstrzymany cykl dla urządzenia WashData.", "fields": { "device_id": { "name": "Urządzenie", "description": "Urządzenie WashData do wznowienia." } } } }, "entity": { "binary_sensor": { "running": { "name": "Pracuje" }, "match_ambiguity": { "name": "Niejednoznaczność dopasowania" } }, "sensor": { "washer_state": { "name": "Stan", "state": { "off": "Wyłączony", "idle": "Bezczynny", "starting": "Uruchamianie", "running": "Pracuje", "paused": "Wstrzymany", "user_paused": "Wstrzymane przez użytkownika", "ending": "Kończenie", "finished": "Zakończony", "anti_wrinkle": "Antygniotowy", "delay_wait": "Oczekiwanie na start", "interrupted": "Przerwany", "force_stopped": "Wymuszone zatrzymanie", "rinse": "Płukanie", "unknown": "Nieznany", "clean": "Czysty" } }, "washer_program": { "name": "Program" }, "time_remaining": { "name": "Pozostały czas" }, "total_duration": { "name": "Całkowity czas trwania" }, "cycle_progress": { "name": "Postęp" }, "current_power": { "name": "Aktualna moc" }, "elapsed_time": { "name": "Czas, który upłynął" }, "debug_info": { "name": "Informacje debugowania" }, "match_confidence": { "name": "Pewność dopasowania" }, "top_candidates": { "name": "Najlepsi kandydaci", "state": { "none": "Brak" } }, "current_phase": { "name": "Bieżąca faza" }, "wash_phase": { "name": "Faza" }, "profile_cycle_count": { "name": "Profil {profile_name} - liczba", "unit_of_measurement": "cykle" }, "suggestions": { "name": "Dostępne sugerowane ustawienia" }, "pump_runs_today": { "name": "Pompa pracuje (ostatnie 24 godziny)" }, "cycle_count": { "name": "Liczba cykli" } }, "select": { "program_select": { "name": "Program cyklu", "state": { "auto_detect": "Automatyczne wykrywanie" } } }, "button": { "force_end_cycle": { "name": "Wymuś zakończenie cyklu" }, "pause_cycle": { "name": "Wstrzymaj cykl" }, "resume_cycle": { "name": "Wznów cykl" } } }, "exceptions": { "device_id_required": { "message": "Wymagany jest prawidłowy identyfikator urządzenia." }, "cycle_id_required": { "message": "Wymagany jest prawidłowy identyfikator cyklu." }, "profile_name_required": { "message": "Wymagana jest prawidłowa nazwa_profilu." }, "device_not_found": { "message": "Nie znaleziono urządzenia." }, "no_config_entry": { "message": "Nie znaleziono wpisu konfiguracji dla urządzenia." }, "integration_not_loaded": { "message": "Integracja nie załadowana dla tego urządzenia." }, "cycle_not_found_or_no_power": { "message": "Nie znaleziono cyklu lub brak danych mocy." }, "trim_failed_empty_window": { "message": "Przycinanie nie powiodło się - nie znaleziono cyklu, brak danych mocy lub wynikowe okno jest puste." }, "trim_invalid_range": { "message": "trim_end_s musi być większe niż trim_start_s." } } }