Zakończony wydruk
Włącz lampę, wyślij powiadomienie na telefon albo ogłoś, że wydruk jest gotowy.
Home Assistant może odpytywać PrintDeck w sieci lokalnej, przekształcać znormalizowane dane drukarki w encje i reagować na każdą zmianę stanu wydruku.
Integracja PrintDeck wykrywa zgodne urządzenia, prosi o token Unified API w interfejsie Home Assistant i automatycznie tworzy dostępne encje drukarek.
Włącz lampę, wyślij powiadomienie na telefon albo ogłoś, że wydruk jest gotowy.
Reaguj, gdy postęp przekroczy 25%, 50% lub 75%, aby zmienić lampkę kontrolną albo zaktualizować panel.
Zareaguj na wstrzymane, nieudane lub anulowane zadanie, zanim wrócisz do warsztatu.
Pokaż połączenie, temperatury, pozostały czas i bieżącą warstwę na jednym lokalnym panelu.
HACS instaluje utrzymywaną integrację PrintDeck. Później wszystko odbywa się w zwykłym interfejsie Home Assistant: wykrywanie, wpisanie tokenu, urządzenia, sensory i automatyzacje.
Ta sama sieć lokalnaHome Assistant i PrintDeck muszą mieć ze sobą łączność.
Aktualne oprogramowanie PrintDeckZaktualizuj monitor przed połączeniem integracji.
Zainstalowany HACSJeśli nie masz jeszcze HACS, zainstaluj go najpierw według oficjalnej instrukcji.
Otwórz PrintDeck Web Config, wybierz Ustawienia > Unified Printer API, włącz API i skopiuj wygenerowany token. Zachowaj go dla siebie; do Home Assistant wkleisz sam token bez dopisywania słowa Bearer.
Użyj przycisku poniżej. Otwiera on niestandardowe repozytorium PrintDeck bezpośrednio w HACS. Jeśli przycisk nie może połączyć się z Twoim Home Assistant, skorzystaj z ręcznej ścieżki opisanej niżej.
Otwórz HACS > Integracje > menu z trzema kropkami > Niestandardowe repozytoria. Wklej https://github.com/PrintDeck/home-assistant, wybierz typ Integracja, a następnie Dodaj.
Przeczytaj oficjalną instrukcję niestandardowych repozytoriów HACSW HACS wybierz PrintDeck, kliknij Pobierz i zainstaluj najnowszą wersję. Uruchom ponownie Home Assistant, gdy HACS o to poprosi. Samo odświeżenie przeglądarki nie jest restartem.
Otwórz Ustawienia > Urządzenia i usługi > Dodaj integrację i wyszukaj PrintDeck. Wybierz wykryty monitor albo wpisz printdeck.local lub jego lokalny adres IP. Wklej sam token Unified API i zatwierdź.
Home Assistant pokaże monitor PrintDeck i każdą skonfigurowaną drukarkę. W razie potrzeby zmień ich nazwy lub przypisz obszary, a następnie wybierz Zakończ. Użyj Dodaj hub tylko wtedy, gdy masz kolejny fizyczny monitor PrintDeck.
Otwórz integrację PrintDeck. Powinien być widoczny jeden hub oraz urządzenie dla każdej drukarki. Każda drukarka udostępnia postęp, etap, aktywność, temperatury, warstwy, czas, dane połączenia, adres sieciowy i port sieciowy, gdy są dostępne.
Dodaj drukarkę w PrintDeck, a Home Assistant utworzy jej urządzenie i encje po następnym cyklu odpytywania. Usuń drukarkę, a integracja w wersji 0.1.2 lub nowszej usunie jej urządzenie i encje z Home Assistant po następnym pełnym odświeżeniu. Chwilowy problem z połączeniem nigdy nie uruchamia czyszczenia. Usunięcie drukarki celowo zrywa automatyzacje odwołujące się do jej encji; jeśli zmienił się tylko adres, edytuj zapisany profil.
Ten przykład korzysta z wizualnego edytora automatyzacji. Działa z dowolnym procentem, także 82% lub 88%.
Wybierz Stan liczbowy, wskaż encję Postęp wydruku drukarki i ustaw Powyżej na 74,9.
Wybierz Stan, wskaż encję Etap wydruku tej samej drukarki i ustaw stan na Printing.
Wybierz Światło: Włącz i wskaż jedną lampę. Użyj Włącz zamiast Przełącz, aby efekt był przewidywalny.
Nadaj automatyzacji nazwę i zapisz ją. Uruchom działania testuje tylko lampę; krótki wydruk testuje wyzwalacz i warunek.
Test Powyżej w Home Assistant jest ścisły. Próg 74,9 zadziała, gdy sensor po raz pierwszy zgłosi 75 lub wyższą wartość. Warunek Printing zapobiega włączeniu światła przez zapamiętany postęp, gdy drukarka jest bezczynna.
Zaimportuj blueprint, a następnie wybierz sensor drukarki i lampę z list w Home Assistant.
Upewnij się, że HACS pobrał integrację, uruchom ponownie Home Assistant i odśwież przeglądarkę po restarcie.
Zaktualizuj monitor PrintDeck, a następnie spróbuj połączyć się ponownie. Ten komunikat oznacza, że monitor nie zgłasza jeszcze obsługi natywnej integracji.
Trzymaj Home Assistant i PrintDeck w tej samej sieci lokalnej. Jeśli printdeck.local nie działa, wpisz lokalny adres IP pokazany przez PrintDeck.
Skopiuj nowy token z PrintDeck Web Config i wklej go dokładnie. W formularzu natywnej integracji nie dopisuj Bearer.
Wybierz tę drukarkę na PrintDeck, aby uzyskała pełne połączenie na żywo. Niektóre nieaktywne drukarki udostępniają tylko dane skrócone.
Otwórz automatyzację i wybierz Ślady. Ślad pokaże, czy wyzwalacz postępu zadziałał i czy warunek Printing został spełniony.
Zalecamy natywną integrację opisaną wyżej. Otwórz ten zaawansowany wariant tylko wtedy, gdy nie możesz użyć HACS albo świadomie chcesz samodzielnie utrzymywać sensory REST.
Otwórz Web Config w PrintDeck, wybierz Unified Printer API, włącz je i skopiuj wygenerowany token dostępu.
Pobierz listę drukarek i zapisz identyfikator drukarki, którą chcesz obserwować.
curl http://PRINTDECK-IP/v1/printers \
-H 'Authorization: Bearer pd_your_token_here'Uwzględnij słowo Bearer w wartości sekretu.
printdeck_api_bearer: "Bearer pd_your_token_here"Powoduje to wysłanie jednego żądania co 10 sekund. Zmień PRINTDECK-IP i identyfikator drukarki 1 w adresie URL.
rest:
- resource: "http://PRINTDECK-IP/v1/printers/1/status"
method: GET
headers:
Authorization: !secret printdeck_api_bearer
scan_interval: 10
timeout: 5
sensor:
- name: "PrintDeck Phase"
unique_id: printdeck_printer_1_phase
value_template: "{{ value_json.status.job.phase }}"Sprawdź poprawność YAML w Narzędziach deweloperskich, uruchom ponownie Home Assistant, a następnie potwierdź, że encja PrintDeck Phase ma wartość.
Zastąp light.living_room identyfikatorem encji swojej lampy.
- alias: "PrintDeck - light on when print completes"
id: printdeck_light_on_when_print_completes
triggers:
- trigger: state
entity_id: sensor.printdeck_phase
to: "completed"
conditions:
- condition: template
value_template: >-
{{ trigger.from_state is not none and
trigger.from_state.state in ['preparing', 'printing', 'paused'] }}
actions:
- action: light.turn_on
target:
entity_id: light.living_room
mode: singleObserwuj, jak encja etapu przechodzi do wartości completed. Jeśli lampa się nie włączy, otwórz ślad automatyzacji, aby zobaczyć wyniki wyzwalacza i warunku.
Etap zadania najlepiej sprawdza się w większości automatyzacji. Aktywność zadania udostępnia szczegółowe czynności sterujące reakcjami PrintDeck, gdy drukarka je zgłasza.
Każda obsługiwana wartość etapu zadania:
unknownidlepreparingprintingpausedcompletedfailedcancelledKażda obsługiwana wartość aktywności zadania:
unknownstandbypreparingnozzle_heatingbed_heatinghomingbed_levelingnozzle_cleaningcalibratingfilament_changingfilament_unloadingfilament_loadingfilament_purgingprintingpausedcompletedfailedcancelledNie potrzebujesz osobnej encji dla każdej wartości. Poniższy sensor PrintDeck Activity przechodzi między wszystkimi wymienionymi aktywnościami, a automatyzacja może reagować na wybraną wartość.
connection.statestopped waiting_for_network connecting online offlineconnection.reachabilityunknown online offlineconnection.detail_levelsummary fulljob.kindprint calibrationDostępność szczegółowych aktywności zależy od danych zgłaszanych przez podłączoną drukarkę. Wartość API unknown korzysta z reakcji unavailable PrintDeck jako stanu zastępczego. Wybrana drukarka udostępnia pełne dane na żywo, a pozostałe zapisane drukarki mogą udostępniać dane skrócone zgodnie z ustawionym interwałem odświeżania listy drukarek.
Natywna integracja tworzy te encje automatycznie. Ten zestaw YAML pozostaje dostępny dla zaawansowanych, ręcznych instalacji REST.
rest:
- resource: "http://PRINTDECK-IP/v1/printers/1/status"
method: GET
headers:
Authorization: !secret printdeck_api_bearer
scan_interval: 10
timeout: 5
sensor:
- name: "PrintDeck Printer ID"
unique_id: printdeck_printer_1_id
value_template: "{{ value_json.status.printer_id }}"
- name: "PrintDeck Connection"
unique_id: printdeck_printer_1_connection
value_template: "{{ value_json.status.connection.state }}"
- name: "PrintDeck Reachability"
unique_id: printdeck_printer_1_reachability
value_template: "{{ value_json.status.connection.reachability }}"
- name: "PrintDeck Detail Level"
unique_id: printdeck_printer_1_detail_level
value_template: "{{ value_json.status.connection.detail_level }}"
- name: "PrintDeck Update Marker"
unique_id: printdeck_printer_1_updated_at_ms
value_template: "{{ value_json.status.connection.updated_at_ms }}"
unit_of_measurement: "ms"
- name: "PrintDeck Phase"
unique_id: printdeck_printer_1_phase
value_template: "{{ value_json.status.job.phase }}"
- name: "PrintDeck Job Kind"
unique_id: printdeck_printer_1_job_kind
value_template: "{{ value_json.status.job.kind }}"
- name: "PrintDeck Activity"
unique_id: printdeck_printer_1_activity
value_template: "{{ value_json.status.job.activity }}"
- name: "PrintDeck Job Name"
unique_id: printdeck_printer_1_job_name
value_template: "{{ value_json.status.job.name | default('none', true) }}"
- name: "PrintDeck Progress"
unique_id: printdeck_printer_1_progress
value_template: "{{ value_json.status.job.progress_percent }}"
availability: >-
{{ value_json.status.connection.detail_level == 'full' and
not value_json.status.connection.stale }}
unit_of_measurement: "%"
- name: "PrintDeck Elapsed"
unique_id: printdeck_printer_1_elapsed
value_template: "{{ value_json.status.job.elapsed_seconds }}"
availability: >-
{{ value_json.status.connection.detail_level == 'full' and
not value_json.status.connection.stale }}
device_class: duration
unit_of_measurement: "s"
- name: "PrintDeck Remaining"
unique_id: printdeck_printer_1_remaining
value_template: "{{ value_json.status.job.remaining_seconds }}"
availability: "{{ not value_json.status.connection.stale }}"
device_class: duration
unit_of_measurement: "s"
- name: "PrintDeck Current Layer"
unique_id: printdeck_printer_1_current_layer
value_template: "{{ value_json.status.job.current_layer }}"
availability: >-
{{ value_json.status.connection.detail_level == 'full' and
not value_json.status.connection.stale }}
- name: "PrintDeck Total Layers"
unique_id: printdeck_printer_1_total_layers
value_template: "{{ value_json.status.job.total_layers }}"
availability: >-
{{ value_json.status.connection.detail_level == 'full' and
not value_json.status.connection.stale }}
- name: "PrintDeck Nozzle Temperature"
unique_id: printdeck_printer_1_nozzle_temperature
value_template: "{{ value_json.status.temperatures.nozzle_current_c }}"
availability: >-
{{ value_json.status.temperatures.nozzle_current_c is not none and
not value_json.status.connection.stale }}
device_class: temperature
state_class: measurement
unit_of_measurement: "°C"
- name: "PrintDeck Nozzle Target"
unique_id: printdeck_printer_1_nozzle_target
value_template: "{{ value_json.status.temperatures.nozzle_target_c }}"
availability: >-
{{ value_json.status.temperatures.nozzle_target_c is not none and
not value_json.status.connection.stale }}
device_class: temperature
unit_of_measurement: "°C"
- name: "PrintDeck Bed Temperature"
unique_id: printdeck_printer_1_bed_temperature
value_template: "{{ value_json.status.temperatures.bed_current_c }}"
availability: >-
{{ value_json.status.temperatures.bed_current_c is not none and
not value_json.status.connection.stale }}
device_class: temperature
state_class: measurement
unit_of_measurement: "°C"
- name: "PrintDeck Bed Target"
unique_id: printdeck_printer_1_bed_target
value_template: "{{ value_json.status.temperatures.bed_target_c }}"
availability: >-
{{ value_json.status.temperatures.bed_target_c is not none and
not value_json.status.connection.stale }}
device_class: temperature
unit_of_measurement: "°C"
- name: "PrintDeck Chamber Temperature"
unique_id: printdeck_printer_1_chamber_temperature
value_template: "{{ value_json.status.temperatures.chamber_current_c }}"
availability: >-
{{ value_json.status.temperatures.chamber_current_c is not none and
not value_json.status.connection.stale }}
device_class: temperature
state_class: measurement
unit_of_measurement: "°C"
binary_sensor:
- name: "PrintDeck Data Stale"
unique_id: printdeck_printer_1_data_stale
value_template: "{{ value_json.status.connection.stale }}"
device_class: problem
- name: "PrintDeck Online"
unique_id: printdeck_printer_1_online
value_template: "{{ value_json.status.connection.state == 'online' }}"
device_class: connectivity
Przechowuj właściwy token w pliku secrets.yaml oraz zastąp PRINTDECK-IP i identyfikator drukarki 1. Jeśli plik configuration.yaml ma już główną sekcję rest, dodaj ten zasób pod nią zamiast tworzyć drugi klucz rest.
Home Assistant odpytuje PrintDeck; PrintDeck nie wysyła webhooków. Trzymaj oba urządzenia w zaufanej sieci lokalnej i nie udostępniaj portu API w internecie. Integracja zapisuje token we wpisie konfiguracyjnym Home Assistant; przy ręcznej konfiguracji REST przechowuj go w secrets.yaml.
Postęp, temperatury i szczegółowe aktywności używane przez reakcje są najpełniejsze dla drukarki aktualnie wybranej w PrintDeck. Informacje o połączeniu i skrócony stan zadania pozostają dostępne dla pozostałych zapisanych drukarek.
Wróć do Unified Printer APIPrintDeck wysyła ujednolicone dane drukarek do lokalnego brokera, np. Mosquitto. Aplikacje subskrybują aktualizacje, zamiast cyklicznie odpytywać REST API. HTTP i MQTT mogą działać niezależnie lub jednocześnie.
Odbieraj stan zadania, postęp, temperatury i dostępność w panelach lub przepływach Node-RED.
Reaguj na zaobserwowany start wydruku, etapy postępu i zdarzenia wymagające uwagi. Bieżące zdarzenia nie są zachowywane na brokerze ani odtwarzane po ponownym połączeniu.
Home Assistant może automatycznie tworzyć urządzenia i encje przez wbudowaną integrację MQTT. Możesz też wybrać integrację PrintDeck przez HACS z połączeniem MQTT — wtedy pozostaw standardowe wykrywanie wyłączone.