KlipperというKINGROON KP3Sでも利用可能なオープンソースの3Dプリンター用ファームウェアがある。
Klipperは、ステッピングモーターの高度な制御で3Dプリンターのヘッドを移動させるときの加減速を柔らかに行ない、速度耐性を高めハイスピードなプリントを実現するほか、ヘッドを高速に動かしたときに生じるリンギング(ゴースト)をキャンセルする高度な制御機能も持っており、スピードの追求と造形物の品質維持を同時にこなすことができる。
これまでの常識を知っていれば知っているほど俄かには信じがたいかもしれないが、現実に顕著な実績を残している。
例えば、KINGROON KP3Sで100mm/sが実用域に入る。
KINGROON KP3S + Klipper
— moyashi (@hitoriblog) March 30, 2021
150mm/s acc 1000 pic.twitter.com/btou8ZphSg
3Dプリンターの性能のボトルネックは、ファームウェアにもあったと気づかされる。
従って、KINGROON KP3Sの造形速度の向上や造形品質の向上を願うなら使わない手はない。
動いているのを感じさせないほどの高度な加速度制御をする高層ビルのエレベーターや、上手な運転手のスムーズな運転に感心した経験はないだろうか? それを3DプリンターでやろうというのがKlipperだ。
アニメーションの知識があれば、Ease-In、Ease-Outを引き合いに出すとピンとくるかもしれない。
ただし、それには高度な計算能力が必要なため、3Dプリンターの外に、計算を担当するコンピューターを必要とする。
3Dプリンター自体にインストールするファームウェアKlipperに加え、それをコントロールするRaspberry Piなどにインストールするソフトウェア、Mainsailを組み合わせて一つのソリューションを構成する。
KINGROON KP3SにはKlipperのファームウェアをインストール。
Raspberry PiにはMainsailをインストールし、Raspberry PiとKINGROON KP3SをUSBケーブルで接続して動かすというのが典型的なパターン。
MainsailはWeb UIを持ち、パソコンからWebブラウザを使って操作をすることができる。
KlipperはKP3Sの液晶に対応していないため、KP3Sの液晶には何も映らない。Raspberry Pi側に液晶をつながない限り、操作はWeb UI頼みとなる。
しかし、普段からOctoPrint経由でしか操作をしない筆者的にはあまり困っていない。
ちょうど、KINGROON KP3Sに接続するRaspberry PiにOctoPrintをインストールして動かしたときと物理的な接続は同じで、中身のソフトウェアが異なるだけだ。
WiFi機能を搭載したRaspberry Piにインストールすることになるので、OctoPrint同様、KINGROON KP3SをWiFi経由で動かすこともできるようになる。
Klipper環境にOctoPrintを共存させて、つまりRaspberryPi側にMainsailとOctoPrintをいっしょにインストールして動かすこともできる。
もっとも、Web経由で操作できるMainsailはOctoPrint同様の基本機能を備えるので、特定の目的がなければOctoPrintをインストールする必要性を感じないかもしれないが。
必要なもの
balenaEtcher
ディスクイメージをMicro SDに書き込むソフトウェア。macOS版、Windows版がある。
Raspberry Pi
言わずと知れた小さなコンピューターRaspberry Pi。
筆者はRaspberry Pi 3 Model A+とRaspberry Pi Zero WHを使っている。
Raspberry Pi Zero WHはスペックが低く、Web UIが沈黙するなど非推奨。最低Raspberry Pi 3 Model A+はあった方がいい。Raspberry Pi 4なら間違いない。
Micro SDカード
Raspberry Piで使うMicro SDカード。ここにMainsailOSをインストールする。
KINGROON KP3Sの扱うデータはそれほど大きくないので、8GBもあれば十分。
sMicro USB OTGケーブル
Raspberry Pi Zero WHを使う場合、Micro USB端子しか付いていないので、KINGROON KP3Sをつなぐ際に必要になる。
Raspberry Pi 3 Model A+、Raspberry Pi 4の場合は不要。
HDMI-HDMI mini変換アダプタ
IPアドレスを調べるのに手っ取り早いので、モニターに画面を出した方がいい。
Raspberry Pi Zero WHをセットアップする際にはHDMIアダプタがあった方がいい。
Raspberry Pi 3 Model A+の場合は標準サイズのHDMI端子が付いているので不要。
HDMI-マイクロHDMI変換アダプタ
Raspberry Pi 4はMicro HDMI端子なので、モニターを接続する場合はHDMI-マイクロHDMI変換アダプタが必要。
加速度センサーADXL345(SPIインターフェース対応)
input shaperによるリンギング除去のための共振周波数を割り出すのに加速度センサーを使う場合は必要。加速度センサーなら何でもいいわけではなく、SPI接続できるADXL345だけがKlipper/Mainsailにサポートされている。
ADXL345なしでもinput shaperの共振周波数を調べることはできるが、効果の絶大さを知ると精度を求めて買わずにはおれなくなるはずだ。
ADXL345モジュールをRaspberry PiのGPIOに接続するのに必要。必要なのは、input shaperの共振周波数を割り出すまでで、終わればADXL345モジュールは取り外すことができるために仮設で構わない。
KlipperのKINGROON KP3Sでの利用方法
KINGROON KP3SでのKlipperの利用方法は、基本的には、以下の三つの記事を読めば分かる。
最後の一つは何とKINGROON公式サイトの解説だ。
本記事はそれをなぞって解説しているだけだ。
Mainsailは、Raspberry Piで使えるディスクイメージであるMainsailOSを利用すると簡単に導入できる。
記事執筆時点では、MainsailOSは0.5.0が最新版。
ダウンロードしたzipを解凍して得たディスクイメージファイルmainsailos-raspios-lite-latest.imgを、balenaEtcherなどでMicro SDカードに書き込む。
書き込みが終了したら、いったんMicro SDカードを抜いた後、またパソコンに挿入すると「boot」というボリュームがマウントされる。
この中にある「mainsailos-wpa-supplicant.txt」をテキストエディタで編集して、Raspberry PiがWiFiアクセスポイントにつながるように設定する。
「mainsailos-wpa-supplicant.txt」の中に以下のような部分がある。
|
|
「network={」以降3行の行頭の「#」を消し、WiFiアクセスポイントのSSIDとパスフレーズを記入する。
|
|
これは要するに家のWiFiルータに接続するための設定だ。
「ssid=“XXXXXXXXXXXX”」のところに「XXXXXXXXXXXX」を置き換える形で自宅の2.4GHz帯のWiFiルータのSSIDを。
「psk=“XXXXXXXXXXX”」のところに「XXXXXXXXXXXX」を置き換える形で自宅のWiFiルータのパスフレーズ(パスワード)を。
ここまで終わったら「mainsailos-wpa-supplicant.txt」の編集内容を保存。
Raspberry PiにHDMIケーブルでモニターを接続。MainsailOSを書き込んだMicro SDカードを挿入して、起動する。
モニターにIPアドレスが表示されるので、WiFiルータのDHCPリース情報からIPアドレスを参照し、IPアドレスを手動割当に変更、つまりRaspberry PiのIPアドレスを固定にする。
ターミナルからRaspberry Piにsshでログインする場合、ユーザー名とパスワードはRaspbianと同じだ。
ユーザー名 | pi |
---|---|
パスワード | raspberry |
▼Raspberry PiにSSHでログイン(IPアドレスは各々の環境に合わせ適宜読み換える)
|
|
Update Managerでアップデートできるものはアップデート
固定したIPアドレスにWebブラウザでアクセス。
Web UIにアクセスしたら、左上のハンバーガーメニューをクリック。
「MACHINE」をクリック。
「Update Manager」でアップデートできるものはすべてアップデート。
ログイン
WindowsならPuTTY、macOSならTerminalなどを使ってMainsailOSをインストールしたRaspberry PiにSSHでログインする。
▼Raspberry PiにSSHでログイン(IPアドレスは各々の環境に合わせ適宜読み換える)
|
|
KIAUHのインストール
KIAUHのgitリポジトリを以下のコマンドでクローンする。
▼SSH経由で実行
|
|
クローン作成が完了したら、kiauhフォルダに移動。
▼SSH経由で実行
|
|
kiauh.sh、scriptsフォルダ内のすべてのファイルに実行権を付与。
▼SSH経由で実行
|
|
kiauh.shスクリプトを起動。
▼SSH経由で実行
|
|
KIAUH GUIが表示され、様々なパッケージやサービスのインストールを選択することができる。キーボードを使用して選択内容を入力できる。
ファームウェアのビルド
メインメニューで4を入力し、しかる後にリターンキーでAdvancedメニューを選択する。
次に3を入力して、ファームウェアをビルドする。
Klipperファームウェアの設定画面が表示される。矢印キーを使ってメニューを移動し、以下の設定を再現する。GPIOピンを適宜追加することを忘れないこと。
MPUが旧来からあるSTM32F103の場合の設定は以下のようになる。
|
|
MPUにSTM32F407が搭載されている新しいKINGROON KP3Sの場合、そのものズバリでSTM32F407の選択肢があるが、bootloaderのサイズがSTM32F103と同様28KiBかどうか分からない。筆者の手元にはないため、動作確認ができない。しくじると起動不能になるため、事例待ちをした方がいいだろう。
MPUにGD32F303が搭載されている新しいKINGROON KP3Sの場合、STM32F103を選んだ上で「Disable SWD at startup (for GigaDevice stm32f103 clones) (NEW)」にチェックマークを入れるとよさそうだ。しかし、こちらも筆者の手元にはないため、動作確認はできていない。
GD32F303、STM32F407を対象にしたKlipper用のファームウェアのビルド方法については、KINGROONの公式サイトに追って掲載すると書いてあるので、それを待つのがいいだろう。
もし動作確認が取れたらお知らせいただきたい。
終了したら、Q、Yの順に押して設定を保存する。すると、ファームウェアのビルドが始まる。
終了したらCtrl+CでKIAUH GUIを抜け、次のように実行。
▼SSH経由で実行
|
|
続けてこう。
▼SSH経由で実行
|
|
これで「/home/pi/klipper/out/Robin_nano.bin」にファームウェアができた。
これをMicro SDカードのルートディレクトリにコピーしたいのだが、まずはRaspberry PiからPCにRobin_nano.binを持ってこなくてはならない。
いろいろなやり方があると思うが、Raspberry Piの/bootディレクトリにコピーし、Raspberry Piをいったんシャットダウン。Micro SDカードをPCに挿し直して取り出す方法を紹介する。
Robin_nano.binを/bootにコピー。
▼SSH経由で実行
|
|
Raspberry Piをシャットダウン。
▼SSH経由で実行
|
|
Micro SDカードをRaspberry Piから抜いてPCに挿し直すと、ルートディレクトリにRobin_nano.binがあるはずだ。
これを分かるところに保存しておく。
KINGROON KP3Sのファームウェアを書き換え
KINGROON KP3S用のKlipperのファームウェアをインストール。
Micro SDカードのルートディレクトリに取っておいたRobin_nano.binをコピーして、KINGROON KP3SのMicro SDカードスロットに挿入。
しかる後にKINGROON KP3Sの電源をオン。
アップデート処理の後に自動的に再起動しKlipperが動き始めるが、液晶には何も映らない。何も映らないのが正常だ。
公式ファームウェア、Marlinなどへはいつでも戻せる。 通常通り、書き換えの手順を踏むだけだ。
MainsailにKINGROON KP3S用のprinter.cfgを登録
MainsailのWeb UIにWebブラウザでアクセスし、メニュー「ハンバーガーメニュー>SETTINGS」を選択。
「Config Files」にあるアップロードボタンをクリック。
以下からダウンロードし、解凍して得たprinter.cfgをアップロードする。
MK8エクストルーダー用なので、Titanエクストルーダー搭載のKP3S 3.0用として使うとフローが足りなくなり、スカスカになるので注意してほしい。
これは筆者が使っているprinter.cfgそのものだ。
筆者のKlipperをインストールしたKP3Sの現況は以下の通り。
- MK8エクストルーダー版
- 3D Touch装備
- 3D Touchのノズルとの相対位置: X-31 Y0
- Safe Homing有効
ホットエンドは改造済みで以下のようになっている。
3D Touchの取り付け位置が違う場合は、printer.cfgの以下の部分を変更する。
|
|
Mainsailのメニュー「ハンバーガーメニュー>SETTINGS」のConfig Filesのリスト上アップロードしたprinter.cfgが見える。
これをクリックすると、その場で編集できる。
編集を終了させたら、右上にある「SAVE & RESTART」を押すとprinter.cfgの変更が保存され、ファームウェアがリスタートし、変更が反映される。
なお、z_offsetはMarlin、公式ファームウェアでは通常マイナスの値を設定するが、Klipperではプラスの数値になるので注意が必要だ。
mesh_min、mesh_maxも3D Touch取り付け位置に依存している。
純正の3D Touchブラケットを使った場合のX27.5の場合は「mesh_min: 27.5,5」「mesh_max: 170,170」となるか?未確認。
|
|
3D Touchの取り付け位置はsafe_z_homeのhome_xy_positionにも影響する。
ベッドの中央は90,90だが筆者の3D Touch取り付け位置はX-31なので90+31でXを121にした。
純正の3D Touchブラケットを使った場合は、90-27.5で62.5,90になるはずだ。
|
|
リンギング消しのためのinput_shaperはキャリブレーションしないといけないので、行頭に「#」を置いてコメントアウトしておいた方がいい。
|
|
↓
|
|
input_shaperのキャリブレーションについては後半に書いた。
エクストルーダー毎の設定
筆者はMK8エクストルーダー用に設定をしたが、KP3S 3.0のTitanエクストルーダーではrotation_distanceが7.67になるはずだ。
766 ÷ 185 = 4.14
(↓KlipperでのMK8のrotation_distanceを4.14で割ってTitanのrotation_distanceを算出)
31.776 ÷ 4.14 = 7.67
nehilo氏の設定例では7.940になっていたので、その辺りで調整してほしい。
|
|
printer.cfgのサンプル
Titanエクストルーダーなどの設定はこちらを参考にするといいだろう。
KP3SとRaspberry Piの接続
KP3SのファームウェアをKlipperに書き換え、Mainsailの方にprinter.cfgを登録したらKP3SとRaspberry PiをUSBケーブルで接続。
Mainsailの、「FIRMWARE RESTART」ボタンをクリックすると、両者の接続が完了するはずだ。
接続がうまくいかなければ、「RESTART」の方も押してみる。
3D Touchとマザーボードとの接続
筆者のprinter.cfgの3D Touch(BLTouch)の設定は、マザーボードのZ+(Z-Max)に3D Touchを接続することを前提としている。頭の^(ハット)は論理反転、NOTの意味だ。オン、オフを逆転させたいときに使う。
|
|
これは、KINGROON公式の3D Touch対応ファームウェア同梱のインストラクションの記述に準拠したものだ。
ちなみに、Z-(Z-Min)に接続してある場合は恐らく下記のような設定になるはずだ。
|
|
3D Touchによる自動ベッドレベリング(オートレベリング)
ノズルの温度を現在セットしているフィラメントの使用温度までMainsailのWeb UIを使って上げる。
MainsailのConsoleから、まず以下のように実行してノズルの先端と3D Touchのプローブの反応位置との高さの差を調べる。ベッドの上にコピー用紙を敷いて、ノズルの先端とベッドの間隔が、擦る感覚はあるが、コピー用紙が動かせないほどではないところまでノズルを下げていく。
「TESTZ Z=-1」というコマンドをSENDするとノズルが1mm下がる。「TESTZ Z=-0.1」とすれば-0.1mmだ。つまり、3.のコマンドをノズルの先端とベッドの間隔が適切になるまで繰り返し実行していくことになる。
過去に実行したコマンドはカーソルの上で呼び出せるので、いちいち打ち直す必要はない。
- G28
- PROBE_CALIBRATE
- TESTZ Z=-1
- ACCEPT
- SAVE_CONFIG
間隔が適切になったと感じたら、4.を実行すると、「bltouch: z_offset: 3.000」といった感じのオフセットの設定が表示され、5.を実行するか?と聞かれるので実行。
すると、その設定がprinter.cfgの最後のSAVE_CONFIGセクションに保存される。
公式ファームウェアやMarlinのように3DプリンターのEEPROMは使わず、printer.cfgで一元管理するようになっているので分かりやすい。
オートレベリングはMainsailのConsoleから以下を実行したり、スライサーのスタートコードに以下のように追記すると開始できる。
|
|
自動ベッドレベリングの結果できるメッシュデータもまた、「SAVE_CONFIG」を実行するとprinter.cfgのSAVE_CONFIGセクションに保存される。MarlinでいうM500のようなものだ。
プリントテストをしてみて、ベッドとノズルの間隔が適切でなければ、printer.cfgのSAVE_CONFIGセクションにある「bltouch: z_offset: 3.000」を調節する。
前述の通り、公式ファームウェア、Marlinとは補正値のプラス、マイナスが逆な点に注意。
現象 | 対処 |
---|---|
現在の状態 | bltouch: z_offset: 3.000 |
ノズルとベッドの間隔が広すぎる | bltouch: z_offset: 3.100 (数字を増やす) |
ノズルとベッドの間隔が狭すぎる | bltouch: z_offset: 2.900 (数字を減らす) |
なお、KlipperにはG29がなく、printer.cfgで定義したマクロによって実装している。
G29がないという表現では語弊があるか。BED_MESH_CALIBRATEという名前で存在するので、互換性を保つために別名を付けたわけだ。
|
|
リンギング緩和のためのinput shaperの共振周波数の割り出しと設定
3Dプリンターで高速プリントを実行すると、ヘッドの振動が造形物に影響を与え、リンギング(ゴースト)という造形不良を起こしてしまう。
これは超高速域に限らず、ヘッドが急激に角度を変えて動く場所では常識的なプリント速度でも起きる。
通常はリンギングを緩和する場合はプリント速度を落とすが、Klipperではあらかじめリンギングが起きることを予想して、それを打ち消すようステッピングモーターを制御するという凄いことをやってしまう。
ノイズキャンセリングヘッドホンの原理と似たところがある。
ヘッドの構造やベルトのテンションが同じなら共振周波数は変わらないので、わざとリンギングを起こし、できたリンギングの様子から共振周波数を割り出してprinter.cfgのinput_shaperに設定するということをやる。
加速度センサーを使ってやる方法もあるが、ここでは加速度センサーを使わずに原始的な方法で共振周波数を割り出す方法を紹介する。
公式サイトの解説ページは以下だ。
Google翻訳経由:
リンギングを故意に発生させるテストプリント
以下からringing_tower.stlをダウンロードする。
これをUltimaker Curaでスライスする。
ダウンロードしたringing_tower.stlをUltimaker Curaに読み込み、花瓶モードに設定する。
具体的には、設定の最後の方にある「Special Modes」の中にある以下の2項目を設定変更する。
- 「Spiralize Outer Contour」の✔︎をオン
- 「Surface Mode」を「Surface」に
読み込んだモデルは回転させない。そのままプリントする。
そのほか、設定するパラメーターは以下のような感じだ。
- レイヤーは0.2mmもしくは0.25 mm
- Speedは100mm/s
- Wall Speedも100mm/sにして減速しない
- Initial Layer Speedは20mm/s程度に下げて定着はきちんとやる
- Brimを付けて定着を促進する
これでG-codeを書き出す。
Mainsailに読み込むとすぐプリントが始まってしまうので、Mainsailに持っていくのは後だ。
Mainsail側で、まずprinter.cfgを編集する。
- max_accel と max_accel_to_decel を7000に変更
- square_corner_velocity が5.0であることを確認
「SAVE & RESTART」ボタンを押してファームウェアの再起動をかける。
MainsailのConsoleから次のように実行する。
|
|
ringing_tower.stlから書き出したG-codeを「UPLOAD & PRINT」ボタンからMainsailに読み込んでプリントを開始する。
結果の計測
プリントしたモデルのリンギングの部分を観察する。
ピッチの安定した周期的な波になっている、しかも視認しやすい範囲を見つけ、その両端の波の出っ張りの頂上にマークを付ける。
そのマークからマークへの長さを測る。
筆者の場合はX軸が12.08mm、Y軸が10.28mmだった。
また、マークをした範囲に存在する波の谷間の数を数える。この画像の場合、Xが5つ。
Yが3つとなった。
共振周波数の算出
この結果から、input_shaperに設定する共振周波数を算出する。
- X軸: 100 × 5 ÷ 12.08 = 41.39072848 ≒ 41.4
- Y軸: 100 × 3 ÷ 10.28 = 29.18287938 ≒ 29.2
さきほど「#」でコメントアウトしたところをまた書き換える。
|
|
shaper_typeはいくつかのタイプから選択できるが、とりあえずmzvを適用して様子を見る。
編集を終えたら「SAVE & RESTART」で変更を反映させる。
input_shaper適用結果の確認
input_shaperの適用のほかはそのままの条件で、もう一度ringing_tower.stlをプリントして効果を測定する。
MainsailのConsoleから今度は以下を実行し、しかる後にプリントを開始する。
|
|
printer.cfgで設定したinput_shaperの効果を打ち消さないように、以下は実行しない違いがある点に注意だ。
|
|
input_shaperのありなしの比較が以下となる。複数の周波数で振動しているため、input_shaperでターゲットとした振動しか消えていないが、効果は顕著だ。
実用スピードの模索
実用スピードをどこに持っていくかに関しては、ringing_tower.stlが参考になる。
テストプリントではmax_accel、max_accel_to_decelを1250から始めて徐々に増やしていっているが、あるところから0.1mmの間隔を保つべきところが、加速に耐えられず隙間が大きくなってしまっている。こうならないギリギリのところを狙っていくわけだ。
筆者は100mm/sをターゲットにmax_accel、max_accel_to_decelが1250なら問題ないだろうということで、安易にその辺りに決めてしまった。
|
|
これを150mm/sにすると、max_accel、max_accel_to_decelが1250だと隙間が大きくなってしまうので、下げる必要があった。
いろいろ試行錯誤してみてほしい。
より良い結果を出したければ公式サイトを参照しながら試行錯誤をする。
Google翻訳経由:
KP3S本体側の改良
ベルトテンショナーでベルトのテンションを上げると、高速プリントへの耐性が上がる。
テンションを上げるだけでinput_shaperで消えない造形物表面の縞が消えることもある。
ただし、やり過ぎるとステッピングモーターの軸が曲がるので注意。
テンションを変えると共振周波数が変わるので、共振周波数の測定がやり直しになる点に注意が必要だ。
ヘッドの軽量化も当然ながら効果がある。パンケーキステッパーとコンビのTitanエクストルーダーは期待値が高い。
X軸用ベルトテンショナー
Y軸用ベルトテンショナー
加速度センサーADXL345を使った共振周波数の測定
ADXL345を使った共振周波数の測定については、以下のページに書いた。
OctoPrint互換APIの有効化
printer.cfgと同じ方法でmoonraker.cfgというWebAPIの設定ファイルを編集する。
末尾に以下を追記して「SAVE & RESTART」ボタンを押すと、OctoPrint互換APIが有効化される。
|
|
セクションの宣言だけのように見えるが、これでいい。
Ultimaker Curaとの連携
Ultimaker Curaとの連携は以下の記事が参考になるはずだ。
ただし、本家と異なりBonjourによるオートディスカバリーは効かないので、手動で「Add」する。
「Instance Name」は自分で決める。
また、でたらめでいいのでAPI Keyを何でもいいので入力すること。
Simplify3Dとの連携
macOSの場合、Simplify3Dの「スクリプト」に以下のように設定すると、G-codeの書き出しと同時にMainsailにアップロードが開始され、WebブラウザでMainsailが表示される。
Windowsの場合は、「open」を「explorer」ないしブラウザの実行ファイルにする。
IPアドレスは筆者環境の192.168.1.50としているが、各自で実態に合わせて設定すべき部分だ。
|
|
なお、“print=false” というフラグを付けているのでプリントは開始されない。
アップロード=プリント開始という使い方をしたいなら"print=true"とすればいい。
スマートプラグによる電源管理
Klipper環境のWeb APIを司るMoonrakerは、TP-Linkのスマートプラグによる電源管理に対応している。[power]の項を参照。
HS105はN極が長いので普通のコンセントに刺さらない。これも必要。
参考情報
https://www.klipper3d.org/Features.html
https://www.klipper3d.org/Bed_Level.html
https://www.klipper3d.org/Resonance_Compensation.html
https://github.com/nehilo/klipper_KP3S
https://github.com/eriroh/KP3S-Klipper
https://github.com/asosnoviy/klipper_KP3S
https://www.kevink.org/calibrate-z-offset-with-klipper/
https://3dprintbeginner.com/how-to-install-klipper-on-kingroon-kp3s/
https://3dprintbeginner.com/how-to-install-mainsailos-on-raspberry-pi/
Web API
https://moonraker.readthedocs.io/en/latest/web_api/#file-uploads
https://github.com/Arksine/moonraker/blob/master/docs/web_api.md
https://github.com/Arksine/moonraker/blob/master/docs/configuration.md