diff --git a/3dprinter-klipper/CHANGELOG.md b/3dprinter-klipper/CHANGELOG.md new file mode 100644 index 0000000..01c2ef3 --- /dev/null +++ b/3dprinter-klipper/CHANGELOG.md @@ -0,0 +1,2 @@ +## 2024.02.0 + * Initial version diff --git a/3dprinter-klipper/DOCS.md b/3dprinter-klipper/DOCS.md new file mode 100644 index 0000000..28db2b6 --- /dev/null +++ b/3dprinter-klipper/DOCS.md @@ -0,0 +1 @@ +# Startup diff --git a/3dprinter-klipper/Dockerfile b/3dprinter-klipper/Dockerfile new file mode 100644 index 0000000..a3b3ad3 --- /dev/null +++ b/3dprinter-klipper/Dockerfile @@ -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 / diff --git a/3dprinter-klipper/README.md b/3dprinter-klipper/README.md new file mode 100644 index 0000000..cd7fd35 --- /dev/null +++ b/3dprinter-klipper/README.md @@ -0,0 +1,3 @@ +# 3DPrinter-Klipper + +Provides Klipper as an addon to Home Assistant. diff --git a/3dprinter-klipper/config.yaml b/3dprinter-klipper/config.yaml new file mode 100644 index 0000000..2566ed8 --- /dev/null +++ b/3dprinter-klipper/config.yaml @@ -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 diff --git a/3dprinter-klipper/icon.png b/3dprinter-klipper/icon.png new file mode 100644 index 0000000..537eaa5 Binary files /dev/null and b/3dprinter-klipper/icon.png differ diff --git a/3dprinter-klipper/logo.png b/3dprinter-klipper/logo.png new file mode 100644 index 0000000..8b49f71 Binary files /dev/null and b/3dprinter-klipper/logo.png differ diff --git a/3dprinter-klipper/rootfs/etc/caddy/Caddyfile b/3dprinter-klipper/rootfs/etc/caddy/Caddyfile new file mode 100644 index 0000000..deaf315 --- /dev/null +++ b/3dprinter-klipper/rootfs/etc/caddy/Caddyfile @@ -0,0 +1,10 @@ +{ + # debug + log { + format console + output file /var/log/caddy/caddy.log + } + auto_https disable_redirects +} + +import sites-enabled/*.caddy diff --git a/3dprinter-klipper/rootfs/etc/caddy/env b/3dprinter-klipper/rootfs/etc/caddy/env new file mode 100644 index 0000000..49daa0e --- /dev/null +++ b/3dprinter-klipper/rootfs/etc/caddy/env @@ -0,0 +1,2 @@ +XDG_CONFIG_HOME="/data/config" +XDG_DATA_HOME="/data/config" diff --git a/3dprinter-klipper/rootfs/etc/caddy/sites-enabled/.gitignore b/3dprinter-klipper/rootfs/etc/caddy/sites-enabled/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/3dprinter-klipper/rootfs/etc/cont-init.d/klippy.sh b/3dprinter-klipper/rootfs/etc/cont-init.d/klippy.sh new file mode 100644 index 0000000..07ba8c2 --- /dev/null +++ b/3dprinter-klipper/rootfs/etc/cont-init.d/klippy.sh @@ -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 diff --git a/3dprinter-klipper/rootfs/etc/cont-init.d/moonraker.sh b/3dprinter-klipper/rootfs/etc/cont-init.d/moonraker.sh new file mode 100644 index 0000000..14ce12d --- /dev/null +++ b/3dprinter-klipper/rootfs/etc/cont-init.d/moonraker.sh @@ -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 diff --git a/3dprinter-klipper/rootfs/etc/cont-init.d/proxy.sh b/3dprinter-klipper/rootfs/etc/cont-init.d/proxy.sh new file mode 100644 index 0000000..4aa82f1 --- /dev/null +++ b/3dprinter-klipper/rootfs/etc/cont-init.d/proxy.sh @@ -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 diff --git a/3dprinter-klipper/rootfs/etc/cont-init.d/simuavr.sh b/3dprinter-klipper/rootfs/etc/cont-init.d/simuavr.sh new file mode 100644 index 0000000..41e8fcd --- /dev/null +++ b/3dprinter-klipper/rootfs/etc/cont-init.d/simuavr.sh @@ -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 diff --git a/3dprinter-klipper/rootfs/etc/klipper/config_host_simulator b/3dprinter-klipper/rootfs/etc/klipper/config_host_simulator new file mode 100644 index 0000000..ffcb92b --- /dev/null +++ b/3dprinter-klipper/rootfs/etc/klipper/config_host_simulator @@ -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 \ No newline at end of file diff --git a/3dprinter-klipper/rootfs/etc/klipper/config_simulavr b/3dprinter-klipper/rootfs/etc/klipper/config_simulavr new file mode 100644 index 0000000..23ade85 --- /dev/null +++ b/3dprinter-klipper/rootfs/etc/klipper/config_simulavr @@ -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 diff --git a/3dprinter-klipper/rootfs/etc/klipper/moonraker.conf b/3dprinter-klipper/rootfs/etc/klipper/moonraker.conf new file mode 100644 index 0000000..f03ee5b --- /dev/null +++ b/3dprinter-klipper/rootfs/etc/klipper/moonraker.conf @@ -0,0 +1,10 @@ +[machine] +provider: none +validate_service: False + +[update_manager] +enable_system_updates: False + +[server] +host: 127.0.0.1 +port: 7125 diff --git a/3dprinter-klipper/rootfs/etc/klipper/printer.cfg b/3dprinter-klipper/rootfs/etc/klipper/printer.cfg new file mode 100644 index 0000000..07c8f8c --- /dev/null +++ b/3dprinter-klipper/rootfs/etc/klipper/printer.cfg @@ -0,0 +1,3 @@ +[mcu] +serial: /tmp/klipper_mcu_sim + diff --git a/3dprinter-klipper/rootfs/etc/services.d/klipper_host/down b/3dprinter-klipper/rootfs/etc/services.d/klipper_host/down new file mode 100644 index 0000000..e69de29 diff --git a/3dprinter-klipper/rootfs/etc/services.d/klipper_host/run b/3dprinter-klipper/rootfs/etc/services.d/klipper_host/run new file mode 100644 index 0000000..e86d562 --- /dev/null +++ b/3dprinter-klipper/rootfs/etc/services.d/klipper_host/run @@ -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 diff --git a/3dprinter-klipper/rootfs/etc/services.d/klipper_sim/down b/3dprinter-klipper/rootfs/etc/services.d/klipper_sim/down new file mode 100644 index 0000000..e69de29 diff --git a/3dprinter-klipper/rootfs/etc/services.d/klipper_sim/run b/3dprinter-klipper/rootfs/etc/services.d/klipper_sim/run new file mode 100644 index 0000000..f3eaf9b --- /dev/null +++ b/3dprinter-klipper/rootfs/etc/services.d/klipper_sim/run @@ -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 diff --git a/3dprinter-klipper/rootfs/etc/services.d/klippy/run b/3dprinter-klipper/rootfs/etc/services.d/klippy/run new file mode 100644 index 0000000..03cabef --- /dev/null +++ b/3dprinter-klipper/rootfs/etc/services.d/klippy/run @@ -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 diff --git a/3dprinter-klipper/rootfs/etc/services.d/moonraker/run b/3dprinter-klipper/rootfs/etc/services.d/moonraker/run new file mode 100644 index 0000000..59af285 --- /dev/null +++ b/3dprinter-klipper/rootfs/etc/services.d/moonraker/run @@ -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 diff --git a/3dprinter-klipper/rootfs/etc/services.d/proxy/run b/3dprinter-klipper/rootfs/etc/services.d/proxy/run new file mode 100644 index 0000000..eb858f3 --- /dev/null +++ b/3dprinter-klipper/rootfs/etc/services.d/proxy/run @@ -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 diff --git a/3dprinter-klipper/rootfs/etc/services.d/simulavr/run b/3dprinter-klipper/rootfs/etc/services.d/simulavr/run new file mode 100644 index 0000000..2fcfa74 --- /dev/null +++ b/3dprinter-klipper/rootfs/etc/services.d/simulavr/run @@ -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 diff --git a/3dprinter-klipper/rootfs/usr/share/tempio/caddy/Caddyfile.gtpl b/3dprinter-klipper/rootfs/usr/share/tempio/caddy/Caddyfile.gtpl new file mode 100644 index 0000000..3a783c3 --- /dev/null +++ b/3dprinter-klipper/rootfs/usr/share/tempio/caddy/Caddyfile.gtpl @@ -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 +}