Klipper でOS起動時に oneshot gcode を実行する。
Klipper はなるべく早く起動して、ディプレイに起動してますよというアピールをしてほしい。しかしいろいろ設定した printer.cfg だと、なるはやで起動というのが難しいことがある。例えば 1-wire のデバイスを設定していると、1-wire のデバイスが OS に認識されるまで klipper を起動できなくなってしまう (さもなくばエラーになる)
ということで、最小限の cfg を作って最小限の gcode を実行してすぐ終了するようなことを OS 起動初期にやりたい。
Klipper batch モード
klippy.py に -i で gcode 入力ファイルを渡すとそのファイルだけ実行して終了してくれる。これをバッチモードという。
mcu のファームウェアを make したときにできる out/klipper.dict が必要になる。これは形式的にはJSONファイルで、mcu との通信プロトコルの規約が入っている。
以下のように cfg と gcode と dict を渡すと gcode の実行をして終了する。
/home/pi/klippy-env/bin/python /home/pi/klipper/klippy/klippy.py /home/pi/klipper_config/bootstrap.cfg -i /home/pi/klipper_config/bootstrap.gcode -d /home/pi/klipper/out/mcu_klipper.dict
systemd のサービス化
以下のようにする。なるはやで起動してさっさと終了してほしい意図がある。もっといい方法があるかもだけどとりあえずうまくいっている。
$ cat /etc/systemd/system/klipper_bootstrap.service #Systemd Klipper Service [Unit] Description=Bootstrap klipper Before=klipper.service Wants=udev.target [Install] WantedBy=multi-user.target [Service] Type=oneshot User=pi RemainAfterExit=yes ExecStart= /home/pi/klippy-env/bin/python /home/pi/klipper/klippy/klippy.py /home/pi/klipper_config/bootstrap.cfg -i /home/pi/klipper_config/bootstrap.gcode -d /home/pi/klipper/out/mcu_klipper.dict
systemctl enable klipper_bootstrap.service
備考
shutdown 時も同様のことをしたいが、batch モードではない klipper が終了するときに mcu を shutdown 状態 (estop) にしてしまいうまくいかない。batch モードではこの shutdown 状態を解除する方法がおそらくない (FIRMWARE_RESTART する前にエラーで死んでしまう)
良い方法
一番良いのは Klipper を経由せずに (Rapsberry Pi の GPIO で) 起動状態を示す LED などを外出しすること。
関連エントリー
- Klipper 用の raspiberry pi のカスタマイズ Raspberry Pi の負荷が高くなると mcu との通信に支障がおこり、最悪プリンタが止まる。なので cron をできるだけ止める a...
- Voron 2.4 に温度センサーを追加 DS18B20 デジタル温度センサが便利。1-wire で複数のデバイスを同時に扱える。Klipper も対応している。 Raspberry...
- Raspberry Pi から HDMI-CEC コントロール サイネージ HDMI CEC 連携 カレンダーを表示するおうちサイネージ というのを作っていたがモニタの置き場がなくなってしまったので、テレ...
- Prometheus から VictoriaMetrics への移行(Ubuntu, systemd) 自宅ラズパイのメトリクスとかセンサー類を VPS 上の prometheus に溜めているけど、1年分で12GBぐらいと、用途の割にかなり大...
- Ubuntu 16.4 LTS クリーンインストールして引越 カスタムOSインストールガイド - Ubuntu 16.04 – さくらのサポート情報 を見ながらインストールまでやる。 旧サーバと同じホス...