Add initial Klipper with Moonraker setup. Untested.

This commit is contained in:
Fredrik Baberg 2024-02-05 00:44:55 +01:00
parent 19fa0eea41
commit 6e02571291
27 changed files with 352 additions and 0 deletions

View File

@ -0,0 +1,2 @@
## 2024.02.0
* Initial version

View File

@ -0,0 +1 @@
# Startup

View File

@ -0,0 +1,38 @@
ARG BUILD_FROM="ghcr.io/home-assistant/amd64-base"
FROM ${BUILD_FROM}
# 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 SIMULAVR_PATH=/data/simulavr
# Preparations for Klipper
RUN apk add -U \
caddy \
git \
py3-virtualenv \
python3-dev \
gcc \
g++ \
libffi-dev \
make \
dbus \
# For building for different platforms
# AVR chip installation and building
avrdude gcc-avr binutils-avr avr-libc \
# ARM chip installation and building
stm32flash newlib-arm-none-eabi \
gcc-arm-none-eabi binutils-arm-none-eabi libusb pkgconf \
# Simulavr
cmake swig \
# For Moonraker
patch \
libsodium-dev \
iproute2 \
screen
# Copy root filesystem
COPY rootfs /

View File

@ -0,0 +1,3 @@
# 3DPrinter-Klipper
Provides Klipper as an addon to Home Assistant.

View File

@ -0,0 +1,27 @@
name: "3DPrinter-Klipper"
version: "2024.2.0"
slug: "3dprinter-klipper"
description: "Klipper with Moonraker as an addon, bring your own frontend."
arch:
- armv7
- amd64
- armhf
- aarch64
url: "https://github.com/fredrikbaberg/ha-3dprinter-addons/tree/main/3dprinter-klipper"
ingress: true
webui: http://[HOST]:[PORT:7125]
ports:
7125/tcp: null
ports_description:
7125/tcp: Moonraker
map:
- addon_config:rw
usb: true
options:
simulavr: false
schema:
simulavr: "bool?"
panel_icon: mdi:printer-3d
panel_title: 3DPrinter-Klipper
init: false
realtime: true

BIN
3dprinter-klipper/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

BIN
3dprinter-klipper/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

View File

@ -0,0 +1,10 @@
{
# debug
log {
format console
output file /var/log/caddy/caddy.log
}
auto_https disable_redirects
}
import sites-enabled/*.caddy

View File

@ -0,0 +1,2 @@
XDG_CONFIG_HOME="/data/config"
XDG_DATA_HOME="/data/config"

View File

@ -0,0 +1,33 @@
#!/usr/bin/with-contenv bashio
# Install Klipper
if [ ! -d "$KLIPPER_PATH" ]; then
echo "Get Klipper source"
git clone https://github.com/Klipper3d/klipper "$KLIPPER_PATH" --depth 1
else
echo "Klipper already installed"
fi
if [ ! -d "$KLIPPER_VENV_PATH" ]; then
echo "Prepare Klippy-env"
virtualenv "$KLIPPER_VENV_PATH"
"$KLIPPER_VENV_PATH"/bin/python -m pip install --upgrade pip
"$KLIPPER_VENV_PATH"/bin/pip install -r "$KLIPPER_PATH"/scripts/klippy-requirements.txt
else
echo "Klippy env already installed"
fi
# Add host simulator process
if [ ! -f "$ADDON_CONFIG_PATH"/bin/klipper_mcu_sim ]; then
mkdir -p "$ADDON_CONFIG_PATH"/bin/
cp /etc/klipper/config_host_simulator /data/klipper/.config
cd /data/klipper || exit
make
./scripts/flash-linux.sh
cp /usr/local/bin/klipper_mcu "$ADDON_CONFIG_PATH"/bin/klipper_mcu_sim
fi
# Make sure config file exists.
if [ ! -f "$ADDON_CONFIG_PATH"/moonraker/config/printer.cfg ]; then
mkdir -p "$ADDON_CONFIG_PATH"/moonraker/config
cp /etc/klipper/printer.cfg "$ADDON_CONFIG_PATH"/moonraker/config/printer.cfg
fi

View File

@ -0,0 +1,20 @@
#!/usr/bin/with-contenv bashio
# Install Moonraker
if [ ! -d "$MOONRAKER_PATH" ]; then
echo "Get Moonraker source"
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.
if [ ! -f "$ADDON_CONFIG_PATH"/moonraker/config/moonraker.conf ]; then
mkdir -p "$ADDON_CONFIG_PATH"/moonraker/config
cp /etc/klipper/moonraker.conf "$ADDON_CONFIG_PATH"/moonraker/config/moonraker.conf
fi

View File

@ -0,0 +1,19 @@
#!/usr/bin/with-contenv bashio
# ==============================================================================
# Add-on: 3dprinter-octoprint
# Configures proxy
# ==============================================================================
# Generate proxy configuration
bashio::var.json \
addon_hostname "$(bashio::addon.hostname)" \
addon_ip "$(bashio::addon.ip_address)" \
trusted_proxies "$(bashio::config 'trusted_proxies')" \
camera_url "$(bashio::config 'camera_url')" \
ingress_port "^$(bashio::addon.ingress_port)" \
| tempio \
-template /usr/share/tempio/caddy/Caddyfile.gtpl \
-out /etc/caddy/sites-enabled/moonraker.caddy
# Make sure config is correctly formatted.
caddy fmt --overwrite /etc/caddy/Caddyfile

View File

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

View File

@ -0,0 +1,32 @@
# CONFIG_LOW_LEVEL_OPTIONS is not set
# CONFIG_MACH_AVR is not set
# CONFIG_MACH_ATSAM is not set
# CONFIG_MACH_ATSAMD is not set
# CONFIG_MACH_LPC176X is not set
# CONFIG_MACH_STM32 is not set
# CONFIG_MACH_HC32F460 is not set
# CONFIG_MACH_RP2040 is not set
# CONFIG_MACH_PRU is not set
# CONFIG_MACH_AR100 is not set
# CONFIG_MACH_LINUX is not set
CONFIG_MACH_SIMU=y
CONFIG_BOARD_DIRECTORY="simulator"
CONFIG_CLOCK_FREQ=20000000
CONFIG_SERIAL=y
CONFIG_SIMULATOR_SELECT=y
CONFIG_SERIAL_BAUD=250000
CONFIG_USB_VENDOR_ID=0x1d50
CONFIG_USB_DEVICE_ID=0x614e
CONFIG_USB_SERIAL_NUMBER="12345"
CONFIG_WANT_GPIO_BITBANGING=y
CONFIG_WANT_DISPLAYS=y
CONFIG_WANT_SENSORS=y
CONFIG_WANT_LIS2DW=y
CONFIG_WANT_SOFTWARE_SPI=y
CONFIG_NEED_SENSOR_BULK=y
CONFIG_CANBUS_FREQUENCY=1000000
CONFIG_HAVE_GPIO=y
CONFIG_HAVE_GPIO_ADC=y
CONFIG_HAVE_GPIO_SPI=y
CONFIG_HAVE_GPIO_HARD_PWM=y
CONFIG_INLINE_STEPPER_HACK=y

View File

@ -0,0 +1,58 @@
CONFIG_LOW_LEVEL_OPTIONS=y
CONFIG_MACH_AVR=y
# CONFIG_MACH_ATSAM is not set
# CONFIG_MACH_ATSAMD is not set
# CONFIG_MACH_LPC176X is not set
# CONFIG_MACH_STM32 is not set
# CONFIG_MACH_HC32F460 is not set
# CONFIG_MACH_RP2040 is not set
# CONFIG_MACH_PRU is not set
# CONFIG_MACH_AR100 is not set
# CONFIG_MACH_LINUX is not set
# CONFIG_MACH_SIMU is not set
CONFIG_AVR_SELECT=y
CONFIG_BOARD_DIRECTORY="avr"
# CONFIG_MACH_atmega2560 is not set
# CONFIG_MACH_atmega1280 is not set
# CONFIG_MACH_at90usb1286 is not set
# CONFIG_MACH_at90usb646 is not set
# CONFIG_MACH_atmega32u4 is not set
# CONFIG_MACH_atmega1284p is not set
CONFIG_MACH_atmega644p=y
# CONFIG_MACH_atmega328p is not set
# CONFIG_MACH_atmega328 is not set
# CONFIG_MACH_atmega168 is not set
CONFIG_MCU="atmega644p"
CONFIG_AVRDUDE_PROTOCOL="arduino"
CONFIG_AVR_FREQ_16000000=y
# CONFIG_AVR_FREQ_20000000 is not set
# CONFIG_AVR_FREQ_8000000 is not set
CONFIG_CLOCK_FREQ=16000000
CONFIG_AVR_CLKPR=-1
CONFIG_AVR_STACK_SIZE=256
CONFIG_AVR_WATCHDOG=y
CONFIG_SERIAL=y
CONFIG_AVR_SERIAL_UART0=y
# CONFIG_AVR_SERIAL_UART1 is not set
CONFIG_SERIAL_PORT=0
CONFIG_SIMULAVR=y
CONFIG_SERIAL_BAUD=250000
CONFIG_USB_VENDOR_ID=0x1d50
CONFIG_USB_DEVICE_ID=0x614e
CONFIG_USB_SERIAL_NUMBER="12345"
CONFIG_WANT_GPIO_BITBANGING=y
CONFIG_WANT_DISPLAYS=y
CONFIG_WANT_SENSORS=y
CONFIG_WANT_LIS2DW=y
CONFIG_WANT_SOFTWARE_I2C=y
CONFIG_WANT_SOFTWARE_SPI=y
CONFIG_NEED_SENSOR_BULK=y
CONFIG_CANBUS_FREQUENCY=1000000
CONFIG_INITIAL_PINS=""
CONFIG_HAVE_GPIO=y
CONFIG_HAVE_GPIO_ADC=y
CONFIG_HAVE_GPIO_SPI=y
CONFIG_HAVE_GPIO_I2C=y
CONFIG_HAVE_GPIO_HARD_PWM=y
CONFIG_HAVE_STRICT_TIMING=y
CONFIG_INLINE_STEPPER_HACK=y

View File

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

View File

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

View File

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

View File

@ -0,0 +1,10 @@
#!/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

@ -0,0 +1,10 @@
#!/usr/bin/with-contenv bashio
# ==============================================================================
# Add-on: 3dprinter-Klipper
# Runs Klippy
# ==============================================================================
bashio::log.info "Starting Klippy..."
## 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

View File

@ -0,0 +1,10 @@
#!/usr/bin/with-contenv bashio
# ==============================================================================
# Add-on: 3dprinter-Klipper
# Runs Moonraker
# ==============================================================================
bashio::log.info "Starting Moonraker..."
## Run your program
exec "$MOONRAKER_VENV_PATH"/bin/python "$MOONRAKER_PATH"/moonraker/moonraker.py -d "$ADDON_CONFIG_PATH"/moonraker

View File

@ -0,0 +1,9 @@
#!/usr/bin/with-contenv bashio
# ==============================================================================
# Add-on: 3dprinter-octoprint
# Runs the reverse proxy.
# ==============================================================================
bashio::log.info "Starting proxy..."
exec caddy run --config /etc/caddy/Caddyfile --envfile /etc/caddy/env

View File

@ -0,0 +1,11 @@
#!/usr/bin/with-contenv bashio
# ==============================================================================
# Add-on: 3dprinter-Klipper
# Runs Host SimulAVR MCU
# ==============================================================================
bashio::log.info "Starting SimulAVR MCU..."
## Run your program
export PYTHONPATH="$SIMULAVR_PATH"/build/pysimulavr/
exec "$KLIPPER_PATH"/scripts/avrsim.py "$ADDON_CONFIG_PATH"/bin/klipper_mcu_simulavr.elf

View File

@ -0,0 +1,9 @@
# Will be exposed by default.
# :7125 {
# reverse_proxy http://127.0.0.1:7125
# }
# Ingress
:8099 {
reverse_proxy http://127.0.0.1:7125
}