Update Klipper with Fluidd.

This commit is contained in:
Fredrik Baberg 2024-02-08 22:22:14 +01:00
parent 2155218870
commit eba75db654
24 changed files with 286 additions and 108 deletions

View File

@ -1 +0,0 @@
# Startup

View File

@ -2,37 +2,37 @@ ARG BUILD_FROM="ghcr.io/home-assistant/amd64-base"
FROM ${BUILD_FROM} FROM ${BUILD_FROM}
# Setup path for persistent install of Python packages # Setup path for persistent install of Python packages
ENV KLIPPER_PATH=/data/klipper
ENV KLIPPER_VENV_PATH=/data/python/klipper
ENV MOONRAKER_PATH=/data/moonraker
ENV MOONRAKER_VENV_PATH=/data/python/moonraker
ENV ADDON_CONFIG_PATH=/config ENV ADDON_CONFIG_PATH=/config
ENV SIMULAVR_PATH=/data/simulavr ENV ADDON_SRC_PATH=/config/src
ENV ADDON_VENV_PATH=/config/python
# Preparations for Klipper
# Install required packages
RUN apk add -U \ RUN apk add -U \
# Proxy
caddy \ caddy \
# Common
git \ git \
py3-virtualenv \ py3-virtualenv \
python3-dev \ iproute2 \
# Klipper
libffi-dev \
gcc \ gcc \
g++ \ g++ \
libffi-dev \ python3-dev \
make \ make \
dbus \
# For building for different platforms
# AVR chip installation and building # AVR chip installation and building
avrdude gcc-avr binutils-avr avr-libc \ avrdude gcc-avr binutils-avr avr-libc \
# ARM chip installation and building # ARM chip installation and building
stm32flash newlib-arm-none-eabi \ gcc-arm-none-eabi binutils-arm-none-eabi newlib-arm-none-eabi \
gcc-arm-none-eabi binutils-arm-none-eabi libusb pkgconf \ stm32flash \
# Moonraker
libsodium-dev \
patch \
# Simulavr # Simulavr
cmake swig \ cmake swig \
# For Moonraker # Fluidd
patch \ wget unzip
libsodium-dev \
iproute2 \
screen
# Copy root filesystem # Copy root filesystem
COPY rootfs / COPY rootfs /

View File

@ -1,7 +1,7 @@
name: "3DPrinter-Klipper" name: "3DPrinter-Klipper"
version: "2024.2.0" version: "2024.2.0"
slug: "3dprinter-klipper" slug: "3dprinter-klipper"
description: "Klipper with Moonraker as an addon, bring your own frontend." description: "Klipper with Moonraker and frontend(s) as an addon."
arch: arch:
- armv7 - armv7
- amd64 - amd64
@ -12,14 +12,20 @@ ingress: true
webui: http://[HOST]:[PORT:7125] webui: http://[HOST]:[PORT:7125]
ports: ports:
7125/tcp: null 7125/tcp: null
7130/tcp: null
ports_description: ports_description:
7125/tcp: Moonraker 7125/tcp: Moonraker
7130/tcp: Fluidd
map: map:
- addon_config:rw - addon_config:rw
gpio: true
usb: true usb: true
uart: true
options: options:
host_mcu: false
simulavr: false simulavr: false
schema: schema:
host_mcu: "bool?"
simulavr: "bool?" simulavr: "bool?"
panel_icon: mdi:printer-3d panel_icon: mdi:printer-3d
panel_title: 3DPrinter-Klipper panel_title: 3DPrinter-Klipper

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

View File

@ -0,0 +1,17 @@
#!/usr/bin/with-contenv bashio
# ==============================================================================
# Add-on: 3dprinter-klipper
# Configures Fluidd
# ==============================================================================
SRC_PATH=$ADDON_SRC_PATH/fluidd
if [ ! -d "$SRC_PATH" ]; then
bashio::log "Get Fluidd source"
mkdir -p "$SRC_PATH" && cd "$SRC_PATH" || exit
wget -q -O fluidd.zip https://github.com/fluidd-core/fluidd/releases/download/v1.27.1/fluidd.zip
unzip fluidd.zip
rm fluidd.zip
else
bashio::log "Fluidd already installed"
fi

View File

@ -1,33 +1,46 @@
#!/usr/bin/with-contenv bashio #!/usr/bin/with-contenv bashio
# Install Klipper SRC_PATH=$ADDON_SRC_PATH/klipper
if [ ! -d "$KLIPPER_PATH" ]; then VENV_PATH=$ADDON_VENV_PATH/klipper
echo "Get Klipper source" CONFIG_PATH=$ADDON_CONFIG_PATH/moonraker/config
git clone https://github.com/Klipper3d/klipper "$KLIPPER_PATH" --depth 1
# Get Klipper source.
if [ ! -d "$SRC_PATH" ]; then
bashio::log "Get Klipper source"
git clone https://github.com/Klipper3d/klipper "$SRC_PATH"
else else
echo "Klipper already installed" echo "Klipper already installed"
fi fi
if [ ! -d "$KLIPPER_VENV_PATH" ]; then # Install Klipper in virtual environment.
echo "Prepare Klippy-env" if [ ! -d "$VENV_PATH" ]; then
virtualenv "$KLIPPER_VENV_PATH" bashio::log "Prepare Klippy-env"
"$KLIPPER_VENV_PATH"/bin/python -m pip install --upgrade pip virtualenv "$VENV_PATH"
"$KLIPPER_VENV_PATH"/bin/pip install -r "$KLIPPER_PATH"/scripts/klippy-requirements.txt "$VENV_PATH"/bin/python -m pip install --upgrade pip
"$VENV_PATH"/bin/pip install -r "$SRC_PATH"/scripts/klippy-requirements.txt
else else
echo "Klippy env already installed" bashio::log "Klippy env already installed"
fi
# Make sure config file(s) exists.
if [ ! -d "$CONFIG_PATH" ]; then
mkdir -p "$CONFIG_PATH"
cp -R /etc/klipper/config/* "$CONFIG_PATH"
## Create log folder and file
mkdir -p $ADDON_CONFIG_PATH/moonraker/logs
touch $ADDON_CONFIG_PATH/moonraker/logs/klippy.log
fi fi
# Add host simulator process # Build and add host process, if set.
if [ ! -f "$ADDON_CONFIG_PATH"/bin/klipper_mcu_sim ]; then if bashio::config.true 'host_mcu'; then
mkdir -p "$ADDON_CONFIG_PATH"/bin/ bashio::log "Enable host process."
cp /etc/klipper/config_host_simulator /data/klipper/.config BIN_PATH=$ADDON_CONFIG_PATH/bin
cd /data/klipper || exit if [ ! -f "$BIN_PATH"/klipper_mcu_host ]; then
make mkdir -p "$BIN_PATH"
./scripts/flash-linux.sh cp /etc/klipper/config_host_mcu "$SRC_PATH"/.config
cp /usr/local/bin/klipper_mcu "$ADDON_CONFIG_PATH"/bin/klipper_mcu_sim cd "$SRC_PATH" || exit
fi make
cp out/klipper.elf "$BIN_PATH"/klipper_mcu_host
# Make sure config file exists. fi
if [ ! -f "$ADDON_CONFIG_PATH"/moonraker/config/printer.cfg ]; then rm -f /etc/services.d/klipper_host/down
mkdir -p "$ADDON_CONFIG_PATH"/moonraker/config else
cp /etc/klipper/printer.cfg "$ADDON_CONFIG_PATH"/moonraker/config/printer.cfg touch /etc/services.d/klipper_host/down
fi fi

View File

@ -1,20 +1,29 @@
#!/usr/bin/with-contenv bashio #!/usr/bin/with-contenv bashio
# Install Moonraker SRC_PATH=$ADDON_SRC_PATH/moonraker
if [ ! -d "$MOONRAKER_PATH" ]; then VENV_PATH=$ADDON_VENV_PATH/moonraker
echo "Get Moonraker source" CONFIG_PATH=$ADDON_CONFIG_PATH/moonraker/config
git clone https://github.com/Arksine/moonraker.git "$MOONRAKER_PATH" --depth 1
fi
if [ ! -d "$MOONRAKER_VENV_PATH" ]; then
echo "Prepare Moonraker-env"
virtualenv "$MOONRAKER_VENV_PATH"
"$MOONRAKER_VENV_PATH"/bin/python -m pip install --upgrade pip
"$MOONRAKER_VENV_PATH"/bin/pip install -r "$MOONRAKER_PATH"/scripts/moonraker-requirements.txt
"$MOONRAKER_VENV_PATH"/bin/pip install msgspec uvloop
fi
# Make sure config exists. # Get Moonraker source.
if [ ! -f "$ADDON_CONFIG_PATH"/moonraker/config/moonraker.conf ]; then if [ ! -d "$SRC_PATH" ]; then
mkdir -p "$ADDON_CONFIG_PATH"/moonraker/config bashio::log "Get Moonraker source"
cp /etc/klipper/moonraker.conf "$ADDON_CONFIG_PATH"/moonraker/config/moonraker.conf git clone https://github.com/Arksine/moonraker.git "$SRC_PATH"
fi
# Install Moonraker in virtual environment.
if [ ! -d "$VENV_PATH" ]; then
bashio::log "Prepare Moonraker-env"
virtualenv "$VENV_PATH"
"$VENV_PATH"/bin/python -m pip install --upgrade pip
"$VENV_PATH"/bin/pip install -r "$SRC_PATH"/scripts/moonraker-requirements.txt
"$VENV_PATH"/bin/pip install msgspec uvloop
else
bashio::log "Moonraker env already installed"
fi
# Make sure config exists.
if [ ! -f "$CONFIG_PATH"/moonraker.conf ]; then
mkdir -p "$CONFIG_PATH"
cp /etc/klipper/config/moonraker.conf "$CONFIG_PATH"/moonraker.conf
## Create log folder and file
mkdir -p $ADDON_CONFIG_PATH/moonraker/logs
touch $ADDON_CONFIG_PATH/moonraker/logs/moonraker.log
fi fi

View File

@ -11,6 +11,8 @@ bashio::var.json \
trusted_proxies "$(bashio::config 'trusted_proxies')" \ trusted_proxies "$(bashio::config 'trusted_proxies')" \
camera_url "$(bashio::config 'camera_url')" \ camera_url "$(bashio::config 'camera_url')" \
ingress_port "^$(bashio::addon.ingress_port)" \ ingress_port "^$(bashio::addon.ingress_port)" \
fluidd_src "$ADDON_SRC_PATH/fluidd" \
mainsail_src "$ADDON_SRC_PATH/mainsail" \
| tempio \ | tempio \
-template /usr/share/tempio/caddy/Caddyfile.gtpl \ -template /usr/share/tempio/caddy/Caddyfile.gtpl \
-out /etc/caddy/sites-enabled/moonraker.caddy -out /etc/caddy/sites-enabled/moonraker.caddy

View File

@ -1,25 +1,30 @@
#!/usr/bin/with-contenv bashio #!/usr/bin/with-contenv bashio
SRC_PATH=$ADDON_SRC_PATH/simulavr
if bashio::config.false 'simulavr'; then if bashio::config.false 'simulavr'; then
bashio::log "Disable Simulavr" bashio::log "Keep Simulavr disabled."
touch /etc/services.d/simulavr/down touch /etc/services.d/simulavr/down
return return
else
rm -f /etc/services.d/simulavr/down
fi fi
# Install Simuavr # Install Simuavr
if [ ! -d "$SIMULAVR_PATH" ]; then if [ ! -d "$SRC_PATH" ]; then
echo "Get SimulAVR source" echo "Get SimulAVR source"
git clone git://git.savannah.nongnu.org/simulavr.git "$SIMULAVR_PATH" git clone git://git.savannah.nongnu.org/simulavr.git "$SRC_PATH"
cd "$SIMULAVR_PATH" || exit cd "$SRC_PATH" || exit
make python make python
make build make build
fi fi
# Add simulavr process # Add simulavr process
if [ ! -f "$ADDON_CONFIG_PATH"/bin/klipper_mcu_simulavr ]; then BIN_PATH=$ADDON_CONFIG_PATH/bin
mkdir -p "$ADDON_CONFIG_PATH"/bin/ if [ ! -f "$BIN_PATH"/klipper_mcu_simulavr ]; then
cp /etc/klipper/config_simulavr /data/klipper/.config mkdir -p "$BIN_PATH"
cd /data/klipper || exit cp /etc/klipper/config_simulavr "$ADDON_SRC_PATH"/klipper/.config
cd "$ADDON_SRC_PATH"/klipper || exit
make make
cp out/klipper.elf "$ADDON_CONFIG_PATH"/bin/klipper_mcu_simulavr.elf cp out/klipper.elf "$BIN_PATH"/klipper_mcu_simulavr.elf
fi fi

View File

@ -0,0 +1,28 @@
[server]
host: 0.0.0.0
port: 7125
[authorization]
# force_logins: false
cors_domains:
*
trusted_clients:
10.0.0.0/8
127.0.0.0/8
169.254.0.0/16
172.16.0.0/12
192.168.0.0/16
FE80::/10
::1/128
[machine]
provider: none
validate_service: False
[update_manager]
enable_system_updates: False
[update_manager fluidd]
type: web
repo: fluidd-core/fluidd
path: /config/src/fluidd

View File

@ -0,0 +1,3 @@
[include templates/fluidd.cfg]
# [include templates/host_mcu.cfg]
# [include templates/generic_simulavr.cfg]

View File

@ -0,0 +1,13 @@
[virtual_sdcard]
path: /config/moonraker/gcodes
[pause_resume]
[display_status]
[gcode_macro CANCEL_PRINT]
description: Cancel the actual running print
rename_existing: CANCEL_PRINT_BASE
gcode:
TURN_OFF_HEATERS
CANCEL_PRINT_BASE

View File

@ -0,0 +1,84 @@
# This file contains example pin mappings for testing with the
# "simulavr" program. To use this config, compile the firmware for an
# AVR atmega644p, enable "low-level configuration options", and enable
# "simulavr software emulation". Further details are in
# docs/Debugging.md.
# See docs/Config_Reference.md for a description of parameters.
[stepper_x]
# Pins: PA5, PA4, PA1
step_pin: PA5
dir_pin: PA4
enable_pin: PA1
microsteps: 16
rotation_distance: 40
endstop_pin: ^PB0
position_min: -0.25
position_endstop: 0
position_max: 200
[stepper_y]
# Pins: PA3, PA2
step_pin: PA3
dir_pin: PA2
enable_pin: PA1
microsteps: 16
rotation_distance: 40
endstop_pin: ^PB1
position_min: -0.25
position_endstop: 0
position_max: 200
[stepper_z]
# Pins: PC7, PC6
step_pin: PC7
dir_pin: PC6
enable_pin: PA1
microsteps: 16
rotation_distance: 8
endstop_pin: ^PB2
position_min: 0.1
position_endstop: 0.5
position_max: 200
[extruder]
# Pins: PC3, PC2
step_pin: PC3
dir_pin: PC2
enable_pin: PA1
microsteps: 16
rotation_distance: 33.500
nozzle_diameter: 0.500
filament_diameter: 3.500
heater_pin: PB4
sensor_type: EPCOS 100K B57560G104F
sensor_pin: PA7
control: pid
pid_Kp: 22.2
pid_Ki: 1.08
pid_Kd: 114
min_temp: 0
min_extrude_temp: 0
max_temp: 210
[heater_bed]
heater_pin: PB3
sensor_type: EPCOS 100K B57560G104F
sensor_pin: PA0
control: watermark
min_temp: 0
max_temp: 110
[fan]
pin: PD6
[mcu]
serial: /tmp/pseudoserial
[printer]
kinematics: cartesian
max_velocity: 500
max_accel: 3000
max_z_velocity: 250
max_z_accel: 30

View File

@ -0,0 +1,2 @@
[mcu host]
serial: /tmp/klipper_host_mcu

View File

@ -8,13 +8,11 @@
# CONFIG_MACH_RP2040 is not set # CONFIG_MACH_RP2040 is not set
# CONFIG_MACH_PRU is not set # CONFIG_MACH_PRU is not set
# CONFIG_MACH_AR100 is not set # CONFIG_MACH_AR100 is not set
# CONFIG_MACH_LINUX is not set CONFIG_MACH_LINUX=y
CONFIG_MACH_SIMU=y # CONFIG_MACH_SIMU is not set
CONFIG_BOARD_DIRECTORY="simulator" CONFIG_BOARD_DIRECTORY="linux"
CONFIG_CLOCK_FREQ=20000000 CONFIG_CLOCK_FREQ=50000000
CONFIG_SERIAL=y CONFIG_LINUX_SELECT=y
CONFIG_SIMULATOR_SELECT=y
CONFIG_SERIAL_BAUD=250000
CONFIG_USB_VENDOR_ID=0x1d50 CONFIG_USB_VENDOR_ID=0x1d50
CONFIG_USB_DEVICE_ID=0x614e CONFIG_USB_DEVICE_ID=0x614e
CONFIG_USB_SERIAL_NUMBER="12345" CONFIG_USB_SERIAL_NUMBER="12345"
@ -22,11 +20,13 @@ CONFIG_WANT_GPIO_BITBANGING=y
CONFIG_WANT_DISPLAYS=y CONFIG_WANT_DISPLAYS=y
CONFIG_WANT_SENSORS=y CONFIG_WANT_SENSORS=y
CONFIG_WANT_LIS2DW=y CONFIG_WANT_LIS2DW=y
CONFIG_WANT_SOFTWARE_I2C=y
CONFIG_WANT_SOFTWARE_SPI=y CONFIG_WANT_SOFTWARE_SPI=y
CONFIG_NEED_SENSOR_BULK=y CONFIG_NEED_SENSOR_BULK=y
CONFIG_CANBUS_FREQUENCY=1000000 CONFIG_CANBUS_FREQUENCY=1000000
CONFIG_HAVE_GPIO=y CONFIG_HAVE_GPIO=y
CONFIG_HAVE_GPIO_ADC=y CONFIG_HAVE_GPIO_ADC=y
CONFIG_HAVE_GPIO_SPI=y CONFIG_HAVE_GPIO_SPI=y
CONFIG_HAVE_GPIO_I2C=y
CONFIG_HAVE_GPIO_HARD_PWM=y CONFIG_HAVE_GPIO_HARD_PWM=y
CONFIG_INLINE_STEPPER_HACK=y CONFIG_INLINE_STEPPER_HACK=y

View File

@ -1,10 +0,0 @@
[machine]
provider: none
validate_service: False
[update_manager]
enable_system_updates: False
[server]
host: 127.0.0.1
port: 7125

View File

@ -1,3 +0,0 @@
[mcu]
serial: /tmp/klipper_mcu_sim

View File

@ -1,10 +0,0 @@
#!/usr/bin/with-contenv bashio
# ==============================================================================
# Add-on: 3dprinter-Klipper
# Runs Host Sim MCU
# ==============================================================================
bashio::log.info "Starting Host Sim MCU..."
## Run your program
exec "$ADDON_CONFIG_PATH"/bin/klipper_mcu_sim

View File

@ -6,5 +6,14 @@
bashio::log.info "Starting Klippy..." bashio::log.info "Starting Klippy..."
if bashio::config.true 'host_mcu'; then
while [ ! -e /tmp/klipper_host_mcu ]
do
bashio::log "Wait for klipper_host_mcu"
sleep 5
done
fi
## Run your program ## Run your program
exec "$KLIPPER_VENV_PATH"/bin/python "$KLIPPER_PATH"/klippy/klippy.py "$ADDON_CONFIG_PATH"/moonraker/config/printer.cfg -a /tmp/klippy_uds -l "$ADDON_CONFIG_PATH"/moonraker/logs/klippy.log exec "$ADDON_VENV_PATH"/klipper/bin/python "$ADDON_SRC_PATH"/klipper/klippy/klippy.py "$ADDON_CONFIG_PATH"/moonraker/config/printer.cfg -a /tmp/klippy_uds -l "$ADDON_CONFIG_PATH"/moonraker/logs/klippy.log

View File

@ -6,5 +6,9 @@
bashio::log.info "Starting Moonraker..." bashio::log.info "Starting Moonraker..."
## Preparations, create log folder and file
mkdir -p "$ADDON_CONFIG_PATH"/moonraker/logs
touch "$ADDON_CONFIG_PATH"/moonraker/logs/moonraker.log
## Run your program ## Run your program
exec "$MOONRAKER_VENV_PATH"/bin/python "$MOONRAKER_PATH"/moonraker/moonraker.py -d "$ADDON_CONFIG_PATH"/moonraker exec "$ADDON_VENV_PATH"/moonraker/bin/python "$ADDON_SRC_PATH"/moonraker/moonraker/moonraker.py -d "$ADDON_CONFIG_PATH"/moonraker -v

View File

@ -7,5 +7,5 @@
bashio::log.info "Starting SimulAVR MCU..." bashio::log.info "Starting SimulAVR MCU..."
## Run your program ## Run your program
export PYTHONPATH="$SIMULAVR_PATH"/build/pysimulavr/ export PYTHONPATH=$ADDON_SRC_PATH/simulavr/build/pysimulavr
exec "$KLIPPER_PATH"/scripts/avrsim.py "$ADDON_CONFIG_PATH"/bin/klipper_mcu_simulavr.elf exec "$ADDON_SRC_PATH"/klipper/scripts/avrsim.py "$ADDON_CONFIG_PATH"/bin/klipper_mcu_simulavr.elf

View File

@ -1,9 +1,16 @@
# Will be exposed by default. (fluidd) {
# :7125 { root * {{ .fluidd_src }}
# reverse_proxy http://127.0.0.1:7125 file_server
# } }
# Ingress # Ingress
:8099 { :8099 {
reverse_proxy http://127.0.0.1:7125 handle /websocket* {
reverse_proxy http://127.0.0.1:7125
}
import fluidd
}
# Fluidd
:7130 {
import fluidd
} }