Unified Printer API HOME ASSISTANT · INTEGRACJA PRINTDECK

Twoja drukarka staje się
częścią inteligentnego domu.

Home Assistant może odpytywać PrintDeck w sieci lokalnej, przekształcać znormalizowane dane drukarki w encje i reagować na każdą zmianę stanu wydruku.

Automatyczne wykrywanie mDNS Jedno żądanie, wiele sensorów Chronione tokenem Bearer Klipper i Bambu Lab
POMYSŁ

PrintDeck tłumaczy.
Home Assistant reaguje.

Integracja PrintDeck wykrywa zgodne urządzenia, prosi o token Unified API w interfejsie Home Assistant i automatycznie tworzy dostępne encje drukarek.

01

Zakończony wydruk

Włącz lampę, wyślij powiadomienie na telefon albo ogłoś, że wydruk jest gotowy.

02

Progi postępu

Reaguj, gdy postęp przekroczy 25%, 50% lub 75%, aby zmienić lampkę kontrolną albo zaktualizować panel.

03

Zadanie wstrzymane lub zatrzymane

Zareaguj na wstrzymane, nieudane lub anulowane zadanie, zanim wrócisz do warsztatu.

04

Przegląd warsztatu

Pokaż połączenie, temperatury, pozostały czas i bieżącą warstwę na jednym lokalnym panelu.

ZACZNIJ TUTAJ · YAML NIE JEST POTRZEBNY

Bez configuration.yaml.
Skonfiguruj wszystko w interfejsie.

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.

  1. 01

    Włącz API w PrintDeck

    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.

  2. 02

    Dodaj PrintDeck do HACS

    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 PrintDeck w HACS
    Dodaj repozytorium ręcznie

    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 HACS
  3. 03

    Pobierz i uruchom ponownie

    W 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.

  4. 04

    Dodaj integrację

    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ź.

  5. 05

    Nazwij i przypisz

    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.

  6. 06

    Sprawdź encje

    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.

    Drukarki synchronizują się automatycznie

    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.

TWOJA PIERWSZA AUTOMATYZACJA

Włącz jedną lampę
gdy postęp osiągnie 75%.

Ten przykład korzysta z wizualnego edytora automatyzacji. Działa z dowolnym procentem, także 82% lub 88%.

  1. KIEDY

    Wybierz Stan liczbowy, wskaż encję Postęp wydruku drukarki i ustaw Powyżej na 74,9.

  2. ORAZ JEŚLI

    Wybierz Stan, wskaż encję Etap wydruku tej samej drukarki i ustaw stan na Printing.

  3. NASTĘPNIE

    Wybierz Światło: Włącz i wskaż jedną lampę. Użyj Włącz zamiast Przełącz, aby efekt był przewidywalny.

  4. ZAPISZ

    Nadaj automatyzacji nazwę i zapisz ją. Uruchom działania testuje tylko lampę; krótki wydruk testuje wyzwalacz i warunek.

Dlaczego 74,9 zamiast 75?

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.

GOTOWE BLUEPRINTY

Wolisz formularz krok po kroku?

Zaimportuj blueprint, a następnie wybierz sensor drukarki i lampę z list w Home Assistant.

SZYBKIE ROZWIĄZYWANIE PROBLEMÓW

Jeśli czegoś nie widać,
najpierw sprawdź te punkty.

PrintDeck nie pojawia się w Dodaj integrację

Upewnij się, że HACS pobrał integrację, uruchom ponownie Home Assistant i odśwież przeglądarkę po restarcie.

Home Assistant prosi o aktualizację oprogramowania

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.

Nie można połączyć się z hostem

Trzymaj Home Assistant i PrintDeck w tej samej sieci lokalnej. Jeśli printdeck.local nie działa, wpisz lokalny adres IP pokazany przez PrintDeck.

Token jest odrzucany

Skopiuj nowy token z PrintDeck Web Config i wklej go dokładnie. W formularzu natywnej integracji nie dopisuj Bearer.

Postęp jest niedostępny

Wybierz tę drukarkę na PrintDeck, aby uzyskała pełne połączenie na żywo. Niektóre nieaktywne drukarki udostępniają tylko dane skrócone.

Światło się nie włączyło

Otwórz automatyzację i wybierz Ślady. Ślad pokaże, czy wyzwalacz postępu zadziałał i czy warunek Printing został spełniony.

PRZYKŁAD HOME ASSISTANT

Znajdź PrintDeck w oknie Dodaj integrację

Wyszukiwanie PrintDeck w oknie Dodaj integrację Home Assistant
Wyszukaj PrintDeck i wybierz wynik z okrągłą ikoną PrintDeck.
PRZYKŁAD HOME ASSISTANT

Nazwij monitor i drukarki

Ekran Nazwij i przypisz Home Assistant dla monitora PrintDeck i jego drukarek
Obszary są opcjonalne. Wybierz Pomiń i zakończ, jeśli nie chcesz jeszcze porządkować urządzeń.
PRZYKŁAD HOME ASSISTANT

Hub i jego drukarki

Strona integracji PrintDeck z jednym hubem i czterema drukarkami
Hub reprezentuje fizyczny monitor PrintDeck. Wiersze pod nim to drukarki skonfigurowane na tym monitorze.
PRZYKŁAD HOME ASSISTANT

Kompletna automatyzacja postępu

Automatyzacja Home Assistant z wyzwalaczem postępu, warunkiem Printing i działaniem Włącz światło
Ten działający przykład używa 82%. Dla 75% wpisz Powyżej 74,9 i pozostaw ten sam warunek Printing.
PRZYKŁAD ROZWIĄZYWANIA PROBLEMU

Wymagana aktualizacja oprogramowania

Formularz połączenia PrintDeck w Home Assistant z ostrzeżeniem o aktualizacji oprogramowania
To przykład błędu, a nie oczekiwany ekran powodzenia. Zaktualizuj PrintDeck i ponownie zatwierdź połączenie.
RĘCZNA ALTERNATYWA REST

Wolisz YAML?
Połącz jeden stan z jednym światłem.

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.

Pokaż ręczną instrukcję REST
  1. 01

    Włącz API

    Otwórz Web Config w PrintDeck, wybierz Unified Printer API, włącz je i skopiuj wygenerowany token dostępu.

  2. 02

    Znajdź identyfikator drukarki

    Pobierz listę drukarek i zapisz identyfikator drukarki, którą chcesz obserwować.

    Terminal
    curl http://PRINTDECK-IP/v1/printers \
      -H 'Authorization: Bearer pd_your_token_here'
  3. 03

    Przechowuj token w secrets.yaml

    Uwzględnij słowo Bearer w wartości sekretu.

    secrets.yaml
    printdeck_api_bearer: "Bearer pd_your_token_here"
  4. 04

    Dodaj sensor etapu

    Powoduje to wysłanie jednego żądania co 10 sekund. Zmień PRINTDECK-IP i identyfikator drukarki 1 w adresie URL.

    configuration.yaml
    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 }}"
  5. 05

    Sprawdź i uruchom ponownie Home Assistant

    Sprawdź poprawność YAML w Narzędziach deweloperskich, uruchom ponownie Home Assistant, a następnie potwierdź, że encja PrintDeck Phase ma wartość.

  6. 06

    Dodaj automatyzację

    Zastąp light.living_room identyfikatorem encji swojej lampy.

    automations.yaml
    - 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: single
  7. 07

    Uruchom krótki wydruk testowy

    Obserwuj, 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.

WSZYSTKIE ZNORMALIZOWANE STANY

Używaj ogólnych etapów
lub szczegółowych aktywności.

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.

Etapy zadania

Każda obsługiwana wartość etapu zadania:

unknownidlepreparingprintingpausedcompletedfailedcancelled

Szczegółowe aktywności

Każda obsługiwana wartość aktywności zadania:

unknownstandbypreparingnozzle_heatingbed_heatinghomingbed_levelingnozzle_cleaningcalibratingfilament_changingfilament_unloadingfilament_loadingfilament_purgingprintingpausedcompletedfailedcancelled

Nie 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ść.

Wartości połączenia i statusu

connection.state
stopped waiting_for_network connecting online offline
connection.reachability
unknown online offline
connection.detail_level
summary full
job.kind
print calibration

Dostę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.

PEŁNY ZESTAW SENSORÓW STATUSU

Jedno żądanie API.
Każde pole szczegółowego statusu.

Natywna integracja tworzy te encje automatycznie. Ten zestaw YAML pozostaje dostępny dla zaawansowanych, ręcznych instalacji REST.

Pokaż pełny ręczny YAML sensorów
configuration.yaml
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
Przed ponownym uruchomieniem

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.

WARTO WIEDZIEĆ

Lokalne z założenia.
Tylko do odczytu z założenia.

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 API

MQTT dla Twoich lokalnych narzędzi

PrintDeck 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.

01

Aktualizacje statusu

Odbieraj stan zadania, postęp, temperatury i dostępność w panelach lub przepływach Node-RED.

02

Zdarzenia wydruku

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.

03

Wykrywanie Home Assistant

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.