-
Notifications
You must be signed in to change notification settings - Fork 6
Automations
Przewodnik po sekcji Automatyzacje (macOS i Windows): jak działają wyzwalacze i akcje, oraz gotowe przykłady własnych komend MQTT i skryptów. Sekcja pojawia się w widoku Szczegóły po włączeniu trybu deweloperskiego w Ustawieniach.
⚠️ Bezpieczeństwo. Skrypty uruchamiają się przez/bin/zsh -cz Twoimi uprawnieniami. Regułę tworzysz świadomie, ale reguła warunkowa może odpalić skrypt bez nadzoru. Testuj każdy skrypt najpierw ręcznie (przycisk Uruchom). Komendy MQTT wysyłasz do drukarki po sieci lokalnej — nie wszystkie są odwracalne (np.stop).
Otwórz Szczegóły drukarki → kafel Sterowanie i automatyzacje → Automatyzacje….
Każda automatyzacja to wyzwalacz → akcja:
-
Wyzwalacze
- Ręczny — odpala tylko przyciskiem Uruchom.
-
Po warstwie ≥ N — gdy
layer_numosiągnie N. - Po ≥ % — gdy postęp osiągnie zadany procent.
- Gdy stan — przy wejściu w stan: drukuje / pauza / zakończono / błąd / gotowa.
- Akcje wbudowane — Światło wł./wył., Pauza, Wznów, Stop, Powiadomienie (własny tekst).
- Tworzenie własnych — Własna komenda (surowy JSON MQTT) oraz Skrypt (zsh).
Reguła warunkowa odpala się raz na wydruk (licznik zeruje się przy nowym zadaniu). „Uruchom" pozwala odpalić dowolną regułę ręcznie w każdej chwili.
Komenda to surowy JSON, który Gantry publikuje na device/<serial>/request. Pole sequence_id
może być dowolne. Komendy siedzą pod kluczem system (sprzęt) lub print (zadanie/gcode).
Zestaw komend zależy od modelu i firmware. Poniżej sprawdzone/powszechnie używane; każdą przetestuj ręcznie na swojej drukarce.
{"system":{"sequence_id":"0","command":"ledctrl","led_node":"chamber_light","led_mode":"on"}}led_mode: on / off / flashing. led_node: chamber_light (główne), na części modeli też
work_light. Miganie z własnym rytmem:
{"system":{"sequence_id":"0","command":"ledctrl","led_node":"chamber_light","led_mode":"flashing","led_on_time":500,"led_off_time":500,"loop_times":3,"interval_time":1000}}{"print":{"sequence_id":"0","command":"pause"}}
{"print":{"sequence_id":"0","command":"resume"}}
{"print":{"sequence_id":"0","command":"stop"}}{"print":{"sequence_id":"0","command":"print_speed","param":"2"}}param: 1 cichy · 2 standard · 3 sport · 4 wariat.
gcode_line wysyła surowy G-code (pamiętaj o \n na końcu każdej linii):
{"print":{"sequence_id":"0","command":"gcode_line","param":"M106 P1 S255\n"}}Przydatne linie do param:
- Wentylatory (
M106 P<n> S<0-255>,M107= wył):P1part ·P2aux ·P3komora.- Part 100%:
M106 P1 S255\n· Aux wył:M107 P2\n
- Part 100%:
- Temperatury: dysza
M104 S220\n, stółM140 S60\n(bez czekania),M109/M190z czekaniem. - Wiele linii naraz:
M140 S0\nM104 S0\nM106 P1 S0\n(wychłodzenie po druku).
Uwaga:
gcode_linew trakcie druku ingeruje w zadanie — używaj świadomie (np. schłodzenie po zakończeniu, nie w środku warstwy).
W akcji Skrypt wklejasz treść. Zachowanie zależy od pierwszej linii:
-
Zwykły shell — jeśli nie zaczyna się od
#!, treść leci przez/bin/zsh -c "…". -
Shebang — jeśli pierwsza linia to
#!…(np.#!/usr/bin/env python3), Gantry zapisuje treść do pliku tymczasowego i uruchamia właściwym interpreterem. Dzięki temu wklejasz czysty kod .py (albo bash/node/ruby…) bez wskazywania pliku.
Gdy skrypt odpali się automatycznie, Gantry wysyła powiadomienie „Uruchomiono skrypt".
#!/usr/bin/env python3
import subprocess
subprocess.run(["osascript", "-e", 'display notification "Warstwa 20" with title "Gantry"'])python3 -c 'print("z Pythona")'osascript -e 'display notification "Osiągnięto warstwę 20" with title "Gantry" sound name "Glass"'say "Wydruk zakończony"echo "$(date '+%Y-%m-%d %H:%M:%S') zdarzenie druku" >> "$HOME/gantry-druk.log"curl -sS -X POST -H "Content-Type: application/json" \
-d '{"content":"✅ Druk gotowy"}' \
"https://discord.com/api/webhooks/XXXX/YYYY"curl -sS -X POST \
-H "Authorization: Bearer TWÓJ_TOKEN" \
-H "Content-Type: application/json" \
-d '{"entity_id":"switch.drukarka"}' \
"http://HA_IP:8123/api/services/switch/turn_off"printf "Druk zakończony o %s\n" "$(date)" | mail -s "Gantry: druk gotowy" ty@example.comafplay /System/Library/Sounds/Hero.aiff| Cel | Wyzwalacz | Akcja |
|---|---|---|
| Zgaś LED po rozgrzaniu |
Po warstwie 3
|
Światło wył. |
| Świeć tylko na starcie |
Gdy stan drukuje
|
Światło wł. |
| Powiadom o końcu |
Gdy stan zakończono
|
Powiadomienie „Druk gotowy 🎉" |
| Mów przy błędzie |
Gdy stan błąd
|
Skrypt say "Uwaga, błąd drukarki"
|
| Schłodź po druku |
Gdy stan zakończono
|
Własna komenda gcode_line M140 S0\nM104 S0\n
|
| Zgaś wtyczkę po druku |
Gdy stan zakończono
|
Skrypt (webhook / HA jak wyżej) |
| Log co wydruk |
Gdy stan drukuje
|
Skrypt echo "$(date) start" >> ~/druk.log
|
- + Dodaj automatyzację
- Wyzwalacz: Po warstwie →
20 - Akcja: Światło wył.
Odpali się raz, po osiągnięciu warstwy 20. Chcesz świecić od startu i zgasić na N? Zrób dwie
reguły: Gdy stan drukuje → Światło wł. oraz Po warstwie 20 → Światło wył.
-
Komenda nic nie robi — drukarka musi być połączona (widzisz telemetrię). Sprawdź
led_nodei format JSON. Część komend istnieje tylko na niektórych modelach/firmware. - Reguła nie odpala — warunkowe działają tylko przy zmianie wartości w trakcie druku i raz na zadanie. Do testów użyj wyzwalacza Ręczny + Uruchom.
-
Skrypt nie działa — przetestuj tę samą linię w Terminalu. Ścieżki bezwzględne, cudzysłowy
ostrożnie.
PATHmoże być minimalny — podawaj pełne ścieżki do narzędzi, jeśli trzeba.