From 3a1224ff29b9d989b4c0a92fdc660026d0f1e620 Mon Sep 17 00:00:00 2001 From: Lukas Endigo Date: Tue, 29 Oct 2024 09:28:22 +0500 Subject: [PATCH] first commit --- .github/workflows/docker-image.yml | 26 ++++ .github/workflows/publish.yml | 16 +++ .gitignore | 5 + Dockerfile | 30 +++++ README.md | 186 +++++++++++++++++++++++++++++ compile.sh | 134 +++++++++++++++++++++ entrypoint.sh | 14 +++ init_pio_tasmota/platformio.ini | 6 + init_pio_tasmota/src/main.cpp | 3 + le_compile.sh | 161 +++++++++++++++++++++++++ le_compile.sh2 | 139 +++++++++++++++++++++ user_config_override_example.h | 50 ++++++++ 12 files changed, 770 insertions(+) create mode 100644 .github/workflows/docker-image.yml create mode 100644 .github/workflows/publish.yml create mode 100644 .gitignore create mode 100644 Dockerfile create mode 100644 README.md create mode 100755 compile.sh create mode 100644 entrypoint.sh create mode 100644 init_pio_tasmota/platformio.ini create mode 100644 init_pio_tasmota/src/main.cpp create mode 100755 le_compile.sh create mode 100755 le_compile.sh2 create mode 100644 user_config_override_example.h diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml new file mode 100644 index 0000000..5c6444e --- /dev/null +++ b/.github/workflows/docker-image.yml @@ -0,0 +1,26 @@ +name: Tasmota Docker test + +on: + push: + workflow_dispatch: # Manually start a workflow + +jobs: + build: + strategy: + fail-fast: true + matrix: + os: [ubuntu-22.04, ubuntu-20.04] + python-version: ["3.10", "3.11"] + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v4 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + - name: Docker container + run: docker build -t docker-tasmota . + - name: Clone Tasmota repo + run: git clone https://github.com/arendst/Tasmota.git + - name: Build a firmware + run: bash ./compile.sh tasmota tasmota32 diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000..e37278e --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,16 @@ +name: Publish Docker +on: [push] +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + - name: Publish to Registry + uses: elgohr/Publish-Docker-Github-Action@v5 + with: + name: blakadder/docker-tasmota + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + platforms: linux/amd64,linux/arm64 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..db853a8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +Tasmota/ +*.log +user_config_override.h +*.bin +*.bin.gz \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..d65d84e --- /dev/null +++ b/Dockerfile @@ -0,0 +1,30 @@ +FROM python:latest + +LABEL description="Docker Container with a complete build environment for Tasmota using PlatformIO" \ + version="13.0" \ + maintainer="blakadder_" \ + organization="https://github.com/tasmota" + +# Install platformio. +RUN pip install --upgrade pip &&\ + pip install --upgrade platformio + +# Init project +COPY init_pio_tasmota /init_pio_tasmota + +# Install project dependencies using a init project. +RUN cd /init_pio_tasmota &&\ + platformio upgrade &&\ + pio pkg update &&\ + pio run &&\ + cd ../ &&\ + rm -fr init_pio_tasmota &&\ + cp -r /root/.platformio / &&\ + mkdir /.cache /.local &&\ + chmod -R 777 /.platformio /usr/local/lib /.cache /.local + + +COPY entrypoint.sh /entrypoint.sh + +ENTRYPOINT ["/bin/bash", "/entrypoint.sh"] + diff --git a/README.md b/README.md new file mode 100644 index 0000000..754f1e6 --- /dev/null +++ b/README.md @@ -0,0 +1,186 @@ +# Docker-Tasmota + +Быстрая настройка среды для сборки [Tasmota](https://github.com/arendst/Tasmota) с использованием Docker. + +## le_compile.sh и compile.sh + +Этот скрипт на bash облегчает процесс компиляции, избавляя от необходимости вводить длинные команды каждый раз. + +le_compile.sh и compile.sh предназначен для запуска на Linux-системе с установленными Docker и Git. Если каких-то из них не хватает, скрипт выдаст предупреждение с инструкциями по установке. + +При первом запуске скрипт загрузит последний контейнер blakadder/docker-tasmota (можно изменить скрипт для использования собственного контейнера), клонирует последнюю ветку разработки Tasmota (для клонирования последней стабильной версии установите `USE_STABLE=1` *?(работает только когда используете скрипт compile.sh) ) и скопирует файлы platformio_override.ini и user_config_override.h в папку Tasmota. + +Запуск скрипта с указанием одного или нескольких имен сборок (как указано в platformio_tasmota_env.ini) в качестве параметров скомпилирует только эти сборки, независимо от платформы, указанной в platformio.ini или platformio_override.ini. + +Новый вариант скрипта: +`./le_compile.sh -stable=1 -tasmota=v14.2.0 -bins=tasmota-ir` + +компилирует tasmota-sensors.bin и португальскую версию Tasmota: +`./compile.sh tasmota-sensors tasmota-PT` + +Если у вас есть файлы `user_config_override.h` или `platformio_override.ini` с пользовательскими настройками, поместите их в папку скрипта, и они будут использованы при следующем запуске. + +Скрипт будет обновлять папку репозитория до актуальной версии при каждом запуске. + +Чтобы проверить логи компиляции, используйте `tail -f docker-tasmota.log` или `cat docker-tasmota.log`. + +## Вариант 1: Настройка готового Docker-контейнера с использованием le_compile.sh + +1. Клонируйте этот репозиторий и перейдите в каталог, где он был клонирован (оригинальая версия: https://github.com/tasmota/docker-tasmota): + ``` + git clone https://mygit.lkaz.ru/lukas91/docker-Tasmota-platformio-esp8266-esp32 + cd docker-tasmota + ``` +2. Обновите файлы `user_config_override.h` и/или `platformio_override.ini` с вашими настройками сборки. +3. Запустите le_compile.sh с нужным именем сборки, например: + ``` + ./le_compile.sh -bins=tasmota + ``` + или + ``` + ./compile.sh tasmota + ``` + При необходимости скрипт `le_compile.sh` установит контейнер и репозиторий Tasmota, если вы введете «yes», когда будет предложено. + +5. По завершении компиляции скомпилированные бинарные файлы и архивы будут находиться в `Tasmota/build_output/firmware`, и их можно будет прошить на устройства. + +Примечание: Чтобы обновить ранее установленный образ Docker с помощью скрипта `compile.sh`, выполните: +``` +docker pull blakadder/docker-tasmota +``` + +## Вариант 2: Настройка Docker-контейнера с нуля + +1. Клонируйте этот репозиторий и перейдите в каталог, где он был клонирован (оригинальая версия: https://github.com/tasmota/docker-tasmota): + ``` + git clone https://mygit.lkaz.ru/lukas91/docker-Tasmota-platformio-esp8266-esp32 + cd docker-tasmota + ``` + +2. Запустите следующую команду для сборки Docker-контейнера: + `docker build -t docker-tasmota .` + +3. Перейдите в директорию, куда вы хотите клонировать репозиторий Tasmota: + ``` + git clone https://github.com/arendst/Tasmota.git + ``` +Если у вас есть файлы `user_config_override.h` или `platformio_override.ini` с пользовательскими настройками, поместите их в папку `Tasmota/tasmota`. + +4. Из той же директории выполните команду для компиляции нужной сборки: + `docker run -ti --rm -v $(pwd)/Tasmota:/tasmota -u $UID:$GID docker-tasmota -e tasmota-PT` + +> `-e `, где может быть любой из [сборок, указанных в platformio.ini](https://github.com/arendst/Tasmota/blob/063611314777d4dd9dc8c25905f19f8b25f510aa/platformio.ini#L18). Если сборка не указана, будет скомпилирована ***каждая***. + +5. По завершении компиляции скомпилированные бинарные файлы и архивы будут находиться в `Tasmota/build_output/firmware` для прошивки на устройства. + +## Переход на ветку, отличную от development + +`cd Tasmota` + +Просмотрите доступные ветки с помощью `git branch -a`. + +Перейдите на ветку release с командой: + +`git checkout release` + +Соберите и запустите: +```docker +docker run -ti --rm \ +-v $(pwd)/Tasmota:/tasmota \ +-u $UID:$GID docker-tasmota +``` + + +# ENG: + +# Docker-Tasmota + +Quick setup for building [Tasmota](https://github.com/arendst/Tasmota) using Docker. + +## le_compile.sh and compile.sh + +This bash script simplifies the compilation process, avoiding the need to type long commands every time. + +le_compile.sh and compile.sh are designed to run on a Linux system with Docker and Git installed. If any are missing, the script will show a warning with installation instructions. + +When run for the first time, the script will pull the latest blakadder/docker-tasmota container (you can modify the script to use your own container), clone the latest Tasmota development branch (for cloning the latest stable version, set `USE_STABLE=1` *?(only works when using the compile.sh script) ), and copy the platformio_override.ini and user_config_override.h files into the Tasmota folder. + +Running the script with one or more build names (as listed in platformio_tasmota_env.ini) as parameters will compile only those builds, regardless of platformio.ini or platformio_override.ini. + +New script variant: +`./le_compile.sh -stable=1 -tasmota=v14.2.0 -bins=tasmota-ir` + +compiles the tasmota-sensors.bin and Portuguese version of Tasmota: +`./compile.sh tasmota-sensors tasmota-PT` + +If you have `user_config_override.h` or `platformio_override.ini` files with custom settings, place them in the script folder, and they will be used on the next run. + +The script will update the repository folder with the latest version every time it runs. + +To check compilation logs, use `tail -f docker-tasmota.log` or `cat docker-tasmota.log`. + +## Option 1: Setup the prebuilt Docker container using le_compile.sh + +1. Clone this repository and go to the directory where it was cloned (original version: https://github.com/tasmota/docker-tasmota): + ``` + git clone https://mygit.lkaz.ru/lukas91/docker-Tasmota-platformio-esp8266-esp32 + cd docker-tasmota + ``` +2. Update the `user_config_override.h` and/or `platformio_override.ini` files with your custom build settings. +3. Run le_compile.sh with the desired build name, for example: + ``` + ./le_compile.sh -bins=tasmota + ``` + or + ``` + ./compile.sh tasmota + ``` + If necessary, the `le_compile.sh` script will install the container and Tasmota repository if you type "yes" when prompted. + +5. When compilation finishes, the compiled binaries and gzipped files will be in `Tasmota/build_output/firmware` and can be flashed to your devices. + +Note: To update a previously installed Docker image with the `compile.sh` script, run: +``` +docker pull blakadder/docker-tasmota +``` + +## Option 2: Setting up a Docker container from scratch + +1. Clone this repository and go to the directory where it was cloned (original version: https://github.com/tasmota/docker-tasmota): + ``` + git clone https://mygit.lkaz.ru/lukas91/docker-Tasmota-platformio-esp8266-esp32 + cd docker-tasmota + ``` + +2. Run the following command to build the Docker container: + `docker build -t docker-tasmota .` + +3. Go to the directory where you want to clone the Tasmota repository: + ``` + git clone https://github.com/arendst/Tasmota.git + ``` +If you have `user_config_override.h` or `platformio_override.ini` files with custom settings, place them under `Tasmota/tasmota`. + +4. From the same directory, run the command to compile the desired build: + `docker run -ti --rm -v $(pwd)/Tasmota:/tasmota -u $UID:$GID docker-tasmota -e tasmota-PT` + +> `-e `, where can be any of the [builds listed in platformio.ini](https://github.com/arendst/Tasmota/blob/063611314777d4dd9dc8c25905f19f8b25f510aa/platformio.ini#L18). If no build is specified, ***every*** build will be compiled. + +5. When compilation finishes, the compiled binaries and gzipped files will be in `Tasmota/build_output/firmware` for flashing to devices. + +## Switching to a branch other than development + +`cd Tasmota` + +View available branches with `git branch -a`. + +Switch to the release branch with: + +`git checkout release` + +Build it and run: +```docker +docker run -ti --rm \ +-v $(pwd)/Tasmota:/tasmota \ +-u $UID:$GID docker-tasmota +``` \ No newline at end of file diff --git a/compile.sh b/compile.sh new file mode 100755 index 0000000..d488478 --- /dev/null +++ b/compile.sh @@ -0,0 +1,134 @@ +#!/bin/bash + +# Copy this bash script to a directory below /Tasmota and run from there + +CHECK_MARK="\033[0;32m\xE2\x9C\x94\033[0m" +rundir=$(dirname $(readlink -f $0)) + +# use default docker-tasmota image from hub.docker.com +DOCKER_IMAGE=${DOCKER_IMAGE:="blakadder/docker-tasmota"} +# uncomment and change if you want to run a locally built image +# or set DOCKER_IMAGE as environment variable before starting this script +#DOCKER_IMAGE=docker-tasmota + +# Set to `1=true` to use latest stable release tag +# Set to `0=false` to use `development` branch (default) +# USE_STABLE=${USE_STABLE:="0"} +USE_STABLE=1 +TASMOTA_BRANCH="v14.2.0" + +USE_VOLUME=${USE_VOLUME:="`pwd`/Tasmota"} + +## Check whether Tasmota/ exists and fetch newest Tasmota version from development branch +if test -d "`pwd`/Tasmota"; then + cd Tasmota + git fetch https://github.com/arendst/Tasmota.git development + git fetch --all --tags + if [ "$USE_STABLE" = "1" ]; then + if [ -z "${TASMOTA_BRANCH}" ]; then + echo -e "Checking Tasmota GitHub for the most recent release version" + TASMOTA_BRANCH=$(wget -qO - https://api.github.com/repos/arendst/Tasmota/releases/latest | grep -oP 'tag_name"\s*:\s*"\K[^"]+') + else + echo -e "getting version \"${TASMOTA_BRANCH}\" from GitHub" + fi + git checkout --force $TASMOTA_BRANCH >/dev/null 2>&1 + else + echo -e "Checking Tasmota GitHub for the most recent development version" + TASMOTA_BRANCH=development + git reset --hard origin/$TASMOTA_BRANCH > /dev/null 2>&1 + git pull origin $TASMOTA_BRANCH > /dev/null 2>&1 + fi + + if [ -z "$TASMOTA_BRANCH" ]; then + echo -e "Failed to fetch/set Tasmota branch! Check internet connection and try again." + exit 1 + fi + + cd $rundir + echo -e "\nRunning Docker Tasmota on Tasmota version $TASMOTA_BRANCH\n" + # Check if docker installed + if [[ "$(type -t docker)" == "file" ]] ; then + ## Display builds + if [ $# -eq 0 ]; then + ## Check script dir for platformio_override.ini + if test -e "platformio_override.ini"; then + echo -e "Compiling builds defined in platformio_override.ini. Default file is overwritten.\n" + cp platformio_override.ini Tasmota/platformio_override.ini + else + echo -e "\e[31mCompiling ALL BUILDS!!!!\n\n\e[7mIf you wish to quit use ctrl+C\e[0m" + sleep 4 + fi + else + ## Display chosen builds + echo -e "Compiling builds:" + for build in "$@" + do + echo -e "$build" + sleep 1 + done + echo -e "\n" + fi + ## Check script dir for custom user_config_override.h + if test -e "user_config_override.h"; then + ## new Tasmota builds have this enabled as default + ## sed -i 's/^; *-DUSE_CONFIG_OVERRIDE/ -DUSE_CONFIG_OVERRIDE/' Tasmota/platformio.ini + cp user_config_override.h Tasmota/tasmota/user_config_override.h + echo -e "Using your user_config_override.h and overwriting the existing file\n" + fi + ## Run container with provided arguments + echo -n "Compiling..." + test -t 1 && DOCKER_TTY="-it" + if [ $# -ne 0 ]; then + if [[ $@ == "tasmota"* ]]; then + if [ "${USE_TEE}" = "1" ]; then + docker run ${DOCKER_TTY} --rm -v "${USE_VOLUME}":/tasmota -u $UID:$GID $DOCKER_IMAGE $(printf ' -e %s' $@) 2>&1 | tee ${TEE_PARAMETER} docker-tasmota.log + else + docker run ${DOCKER_TTY} --rm -v "${USE_VOLUME}":/tasmota -u $UID:$GID $DOCKER_IMAGE $(printf ' -e %s' $@) 2>&1 > docker-tasmota.log + fi + echo -e "\\r${CHECK_MARK} Finished! \tCompilation log in docker-tasmota.log\n" + else + echo -e "\\r\e[31mNot a valid build environment." + exit 1 + fi + else + if [ "${USE_TEE}" = "1" ]; then + docker run ${DOCKER_TTY} --rm -v "${USE_VOLUME}":/tasmota -u $UID:$GID $DOCKER_IMAGE 2>&1 | tee ${TEE_PARAMETER} docker-tasmota.log + else + docker run ${DOCKER_TTY} --rm -v "${USE_VOLUME}":/tasmota -u $UID:$GID $DOCKER_IMAGE 2>&1 > docker-tasmota.log + fi + echo -e "\\r${CHECK_MARK} Finished! \tCompilation log in docker-tasmota.log\n" + echo -e "Find your builds in $rundir/Tasmota/build_output/firmware\n" + fi + ## After docker is completed copy firmware to script dir and rename to buildname + for build in "$@" + do + cp "$rundir"/Tasmota/build_output/firmware/"$build"* "$rundir"/ + if test -e "$build".bin; then + echo -e "Completed! Your firmware is in $rundir/$build.bin\n" + else + echo -e "\e[31m\e[5mWARNING:\e[0m" + echo -e "Something went wrong while compiling $build. Check compilation log\n" + fi + done + else + echo -e "\nNo Docker detected. Please install docker:\n\n\tcurl -fsSL https://get.docker.com -o get-docker.sh\n\tsh get-docker.sh\n" + # fi + fi +else + if [[ "$(type -t git)" == "file" ]] ; then + echo -e "\nNo Tasmota Git repository found in directory.\nDo you wish to clone Tasmota GitHub repository to current directory?" + read -p "Enter to exit, "yes" to proceed: " answer + case ${answer:0:1} in + y|yes ) + git clone https://github.com/arendst/Tasmota.git --branch development + bash $(basename $0) && exit + ;; + * ) + exit 1 + ;; + esac + else + echo -e "\nPlease install "git" to proceed:\n\n\tDebian/Ubuntu/Mint:\tsudo apt-get install git\n\tFedora:\t\t\tsu -c 'yum install git'\n\topenSUSE:\t\tsudo zypper in git\n" + exit 1 + fi +fi diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100644 index 0000000..59df0f3 --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,14 @@ +# Оригинальный entrypoint.sh +#!/bin/bash +TASMOTA_VOLUME='/tasmota' + +if [ -d $TASMOTA_VOLUME ]; then + cd $TASMOTA_VOLUME + echo "Compiling Tasmota ..." + echo "Arguments received by entrypoint: $@" + pio run "$@" + echo "All done! Find your builds in Tasmota/build_output/firmware/" +else + echo ">>> NO TASMOTA VOLUME MOUNTED --> EXITING" + exit 0 +fi diff --git a/init_pio_tasmota/platformio.ini b/init_pio_tasmota/platformio.ini new file mode 100644 index 0000000..0c4d7a3 --- /dev/null +++ b/init_pio_tasmota/platformio.ini @@ -0,0 +1,6 @@ +; env used ONLY to install core dependencies on container build + +[env:esp8266] +platform=https://github.com/tasmota/platform-espressif8266/releases/download/2024.01.01/platform-espressif8266.zip +board=esp01_1m +framework=arduino diff --git a/init_pio_tasmota/src/main.cpp b/init_pio_tasmota/src/main.cpp new file mode 100644 index 0000000..27f3768 --- /dev/null +++ b/init_pio_tasmota/src/main.cpp @@ -0,0 +1,3 @@ +#include +void setup() {} +void loop() {} diff --git a/le_compile.sh b/le_compile.sh new file mode 100755 index 0000000..fe5401f --- /dev/null +++ b/le_compile.sh @@ -0,0 +1,161 @@ +#!/bin/bash + +# Начальные переменные +CHECK_MARK="\033[0;32m\xE2\x9C\x94\033[0m" +rundir=$(dirname $(readlink -f $0)) + +DOCKER_IMAGE=${DOCKER_IMAGE:="blakadder/docker-tasmota"} +USE_STABLE=0 # По умолчанию development +TASMOTA_BRANCH="development" # По умолчанию ветка разработки +USE_VOLUME=${USE_VOLUME:="`pwd`/Tasmota"} + +# Функция завершения, вызываемая при прерывании +cleanup() { + echo -e "\nСкрипт был прерван пользователем. Завершение..." + exit 1 +} + +# Перехват сигнала SIGINT для обработки прерывания +trap cleanup SIGINT + +# Парсинг аргументов командной строки +for arg in "$@" +do + case $arg in + -stable=*) + USE_STABLE="${arg#*=}" + shift + ;; + -tasmota=*) + TASMOTA_BRANCH="${arg#*=}" + shift + ;; + -bins=*) + BIN_FILES="${arg#*=}" + shift + ;; + *) + echo "Неизвестный параметр: $arg" + exit 1 + ;; + esac +done + +## Проверка наличия каталога Tasmota и обновление +if test -d "`pwd`/Tasmota"; then + cd Tasmota + git fetch https://github.com/arendst/Tasmota.git development + git fetch --all --tags + + # Проверка на стабильную версию или ветку разработки + if [ "$USE_STABLE" = "1" ]; then + if [ -z "${TASMOTA_BRANCH}" ]; then + echo -e "Проверка последней стабильной версии на GitHub" + TASMOTA_BRANCH=$(wget -qO - https://api.github.com/repos/arendst/Tasmota/releases/latest | grep -oP 'tag_name"\s*:\s*"\K[^"]+') + else + echo -e "Используется версия \"${TASMOTA_BRANCH}\"" + fi + git checkout --force $TASMOTA_BRANCH >/dev/null 2>&1 + else + echo -e "Используется версия разработки" + TASMOTA_BRANCH="development" + git reset --hard origin/$TASMOTA_BRANCH > /dev/null 2>&1 + git pull origin $TASMOTA_BRANCH > /dev/null 2>&1 + fi + + if [ -z "$TASMOTA_BRANCH" ]; then + echo -e "Ошибка при получении ветки Tasmota. Проверьте подключение к интернету и повторите попытку." + exit 1 + fi + + cd $rundir + echo -e "\nЗапуск Docker Tasmota на версии $TASMOTA_BRANCH\n" + + # Проверка наличия Docker + if [[ "$(type -t docker)" == "file" ]] ; then + ## Проверка и копирование platformio_override.ini + if test -e "platformio_override.ini"; then + echo -e "Используется platformio_override.ini для определения сборок." + cp platformio_override.ini Tasmota/platformio_override.ini + fi + + ## Проверка и копирование user_config_override.h + if test -e "user_config_override.h"; then + echo -e "Используется пользовательская конфигурация user_config_override.h." + cp user_config_override.h Tasmota/tasmota/user_config_override.h + fi + + ## Компиляция указанных сборок + if [ -n "$BIN_FILES" ]; then + IFS=',' read -r -a builds <<< "$BIN_FILES" + echo -e "Компиляция следующих сборок:" + for build in "${builds[@]}" + do + echo -e "$build" + sleep 1 + done + echo -e "\n" + else + # Если сборки не указаны, по умолчанию компилируем все + echo -e "\e[31mКомпиляция ВСЕХ СБОРОК!!!!\n\n\e[7mДля выхода используйте ctrl+C\e[0m" + sleep 4 + fi + + ## Запуск контейнера Docker с компиляцией + echo -n "Компиляция..." + test -t 1 && DOCKER_TTY="-it" + if [ -n "$BIN_FILES" ]; then + if [[ "${builds[0]}" == "tasmota"* ]]; then + if [ "${USE_TEE}" = "1" ]; then + docker run ${DOCKER_TTY} --rm -v "${USE_VOLUME}":/tasmota -u $UID:$GID $DOCKER_IMAGE $(printf ' -e %s' "${builds[@]}") 2>&1 | tee ${TEE_PARAMETER} docker-tasmota.log + else + docker run ${DOCKER_TTY} --rm -v "${USE_VOLUME}":/tasmota -u $UID:$GID $DOCKER_IMAGE $(printf ' -e %s' "${builds[@]}") 2>&1 > docker-tasmota.log + fi + echo -e "\\r${CHECK_MARK} Готово! Лог компиляции записан в docker-tasmota.log\n" + else + echo -e "\\r\e[31mНедействительная сборочная среда." + exit 1 + fi + else + if [ "${USE_TEE}" = "1" ]; then + docker run ${DOCKER_TTY} --rm -v "${USE_VOLUME}":/tasmota -u $UID:$GID $DOCKER_IMAGE 2>&1 | tee ${TEE_PARAMETER} docker-tasmota.log + else + docker run ${DOCKER_TTY} --rm -v "${USE_VOLUME}":/tasmota -u $UID:$GID $DOCKER_IMAGE 2>&1 > docker-tasmota.log + fi + echo -e "\\r${CHECK_MARK} Готово! Лог компиляции записан в docker-tasmota.log\n" + echo -e "Сборки находятся в $rundir/Tasmota/build_output/firmware\n" + fi + + ## Копирование прошивки после завершения Docker + for build in "${builds[@]}" + do + cp "$rundir"/Tasmota/build_output/firmware/"$build"* "$rundir"/ + if test -e "$build".bin; then + echo -e "Завершено! Прошивка доступна в $rundir/$build.bin\n" + else + echo -e "\e[31m\e[5mПРЕДУПРЕЖДЕНИЕ:\e[0m" + echo -e "Произошла ошибка при компиляции $build. Проверьте лог компиляции\n" + fi + done + else + echo -e "\nDocker не найден. Установите его с помощью:\n\n\tcurl -fsSL https://get.docker.com -o get-docker.sh\n\tsh get-docker.sh\n" + fi +else + # Клонирование репозитория Tasmota, если каталог отсутствует + if [[ "$(type -t git)" == "file" ]] ; then + echo -e "\nРепозиторий Tasmota не найден в текущем каталоге.\nКлонировать его с GitHub в текущий каталог?" + read -p "Нажмите Enter для выхода или \"yes\" для продолжения: " answer + case ${answer:0:1} in + y|Y ) + git clone https://github.com/arendst/Tasmota.git --branch development + bash $(basename $0) && exit + ;; + * ) + exit 1 + ;; + esac + else + echo -e "\nУстановите \"git\" для продолжения:\n\n\tDebian/Ubuntu/Mint:\tsudo apt-get install git\n\tFedora:\t\t\tsu -c 'yum install git'\n\topenSUSE:\t\tsudo zypper in git\n" + exit 1 + fi +fi diff --git a/le_compile.sh2 b/le_compile.sh2 new file mode 100755 index 0000000..27089bd --- /dev/null +++ b/le_compile.sh2 @@ -0,0 +1,139 @@ +#!/bin/bash + +# Начальные переменные +CHECK_MARK="\033[0;32m\xE2\x9C\x94\033[0m" +rundir=$(dirname $(readlink -f $0)) + +DOCKER_IMAGE=${DOCKER_IMAGE:="blakadder/docker-tasmota"} +USE_STABLE=0 # По умолчанию development +TASMOTA_BRANCH="development" # По умолчанию ветка разработки +USE_VOLUME=${USE_VOLUME:="`pwd`/Tasmota"} + +# Парсинг аргументов командной строки +for arg in "$@" +do + case $arg in + -stable=*) + USE_STABLE="${arg#*=}" + shift + ;; + -tasmota=*) + TASMOTA_BRANCH="${arg#*=}" + shift + ;; + -bins=*) + BIN_FILES="${arg#*=}" + shift + ;; + *) + echo "Неизвестный параметр: $arg" + exit 1 + ;; + esac +done + +## Проверка наличия каталога Tasmota и обновление +if test -d "`pwd`/Tasmota"; then + cd Tasmota + git fetch https://github.com/arendst/Tasmota.git development + git fetch --all --tags + + # Проверка на стабильную версию или ветку разработки + if [ "$USE_STABLE" = "1" ]; then + if [ -z "${TASMOTA_BRANCH}" ]; then + echo -e "Проверка последней стабильной версии на GitHub" + TASMOTA_BRANCH=$(wget -qO - https://api.github.com/repos/arendst/Tasmota/releases/latest | grep -oP 'tag_name"\s*:\s*"\K[^"]+') + else + echo -e "Используется версия \"${TASMOTA_BRANCH}\"" + fi + git checkout --force $TASMOTA_BRANCH >/dev/null 2>&1 + else + echo -e "Используется версия разработки" + TASMOTA_BRANCH="development" + git reset --hard origin/$TASMOTA_BRANCH > /dev/null 2>&1 + git pull origin $TASMOTA_BRANCH > /dev/null 2>&1 + fi + + if [ -z "$TASMOTA_BRANCH" ]; then + echo -e "Ошибка при получении ветки Tasmota. Проверьте подключение к интернету и повторите попытку." + exit 1 + fi + + cd $rundir + echo -e "\nЗапуск Docker Tasmota на версии $TASMOTA_BRANCH\n" + # Проверка наличия Docker + if [[ "$(type -t docker)" == "file" ]] ; then + ## Компиляция указанных сборок + if [ -n "$BIN_FILES" ]; then + IFS=',' read -r -a builds <<< "$BIN_FILES" + echo -e "Компиляция следующих сборок:" + for build in "${builds[@]}" + do + echo -e "$build" + sleep 1 + done + echo -e "\n" + else + # Если сборки не указаны, по умолчанию компилируем все + echo -e "\e[31mКомпиляция ВСЕХ СБОРОК!!!!\n\n\e[7mДля выхода используйте ctrl+C\e[0m" + sleep 4 + fi + + ## Запуск контейнера Docker с компиляцией + echo -n "Компиляция..." + test -t 1 && DOCKER_TTY="-it" + if [ -n "$BIN_FILES" ]; then + if [[ "${builds[0]}" == "tasmota"* ]]; then + if [ "${USE_TEE}" = "1" ]; then + docker run ${DOCKER_TTY} --rm -v "${USE_VOLUME}":/tasmota -u $UID:$GID $DOCKER_IMAGE $(printf ' -e %s' "${builds[@]}") 2>&1 | tee ${TEE_PARAMETER} docker-tasmota.log + else + docker run ${DOCKER_TTY} --rm -v "${USE_VOLUME}":/tasmota -u $UID:$GID $DOCKER_IMAGE $(printf ' -e %s' "${builds[@]}") 2>&1 > docker-tasmota.log + fi + echo -e "\\r${CHECK_MARK} Готово! Лог компиляции записан в docker-tasmota.log\n" + else + echo -e "\\r\e[31mНедействительная сборочная среда." + exit 1 + fi + else + if [ "${USE_TEE}" = "1" ]; then + docker run ${DOCKER_TTY} --rm -v "${USE_VOLUME}":/tasmota -u $UID:$GID $DOCKER_IMAGE 2>&1 | tee ${TEE_PARAMETER} docker-tasmota.log + else + docker run ${DOCKER_TTY} --rm -v "${USE_VOLUME}":/tasmota -u $UID:$GID $DOCKER_IMAGE 2>&1 > docker-tasmota.log + fi + echo -e "\\r${CHECK_MARK} Готово! Лог компиляции записан в docker-tasmota.log\n" + echo -e "Сборки находятся в $rundir/Tasmota/build_output/firmware\n" + fi + + ## Копирование прошивки после завершения Docker + for build in "${builds[@]}" + do + cp "$rundir"/Tasmota/build_output/firmware/"$build"* "$rundir"/ + if test -e "$build".bin; then + echo -e "Завершено! Прошивка доступна в $rundir/$build.bin\n" + else + echo -e "\e[31m\e[5mПРЕДУПРЕЖДЕНИЕ:\e[0m" + echo -e "Произошла ошибка при компиляции $build. Проверьте лог компиляции\n" + fi + done + else + echo -e "\nDocker не найден. Установите его с помощью:\n\n\tcurl -fsSL https://get.docker.com -o get-docker.sh\n\tsh get-docker.sh\n" + fi +else + # Клонирование репозитория Tasmota, если каталог отсутствует + if [[ "$(type -t git)" == "file" ]] ; then + echo -e "\nРепозиторий Tasmota не найден в текущем каталоге.\nКлонировать его с GitHub в текущий каталог?" + read -p "Нажмите Enter для выхода или \"yes\" для продолжения: " answer + case ${answer:0:1} in + y|Y ) + git clone https://github.com/arendst/Tasmota.git --branch development + bash $(basename $0) && exit + ;; + * ) + exit 1 + ;; + esac + else + echo -e "\nУстановите \"git\" для продолжения:\n\n\tDebian/Ubuntu/Mint:\tsudo apt-get install git\n\tFedora:\t\t\tsu -c 'yum install git'\n\topenSUSE:\t\tsudo zypper in git\n" + exit 1 + fi +fi diff --git a/user_config_override_example.h b/user_config_override_example.h new file mode 100644 index 0000000..c2017da --- /dev/null +++ b/user_config_override_example.h @@ -0,0 +1,50 @@ +#ifndef _USER_CONFIG_OVERRIDE_H_ +#define _USER_CONFIG_OVERRIDE_H_ + +#define USE_IR_RECEIVE // Включает функциональность для приема ИК-сигнала +#define USE_IR_REMOTE // Включает функциональность ИК-пульта +#define USE_IR_REMOTE_FULL +#define USE_IR_SEND_BANG_OLUFSEN // Включает отправку ИК-сигналов для устройств Bang & Olufsen (аудио- и видеотехника) +#define USE_IR_SEND_BOILER // Включает отправку ИК-сигналов для котлов отопления и обогревателей, использующих ИК-управление +#define USE_IR_SEND_CARRIER // Включает отправку ИК-сигналов для кондиционеров Carrier +#define USE_IR_SEND_CONVOTHERM // Включает отправку ИК-сигналов для устройств Convotherm (используется в профессиональной кухонной технике) +#define USE_IR_SEND_COOLIX // Включает отправку ИК-сигналов в формате Coolix (используется в кондиционерах, часто китайского производства) +#define USE_IR_SEND_DAIKIN // Включает отправку ИК-сигналов для кондиционеров Daikin +#define USE_IR_SEND_DAIKIN2 // Включает отправку ИК-сигналов для кондиционеров Daikin (альтернативный формат) +#define USE_IR_SEND_DENON // Включает отправку ИК-сигналов в формате Denon (для устройств Denon, часто в аудиооборудовании) +#define USE_IR_SEND_DISH // Включает отправку ИК-сигналов для устройств Dish Network +#define USE_IR_SEND_ELECTROLUX // Включает отправку ИК-сигналов для кондиционеров и устройств Electrolux +#define USE_IR_SEND_FUJITSU // Включает отправку ИК-сигналов для кондиционеров Fujitsu +#define USE_IR_SEND_GREE // Включает отправку ИК-сигналов для кондиционеров Gree +#define USE_IR_SEND_HAIER // Включает отправку ИК-сигналов для кондиционеров Haier +#define USE_IR_SEND_HITACHI // Включает отправку ИК-сигналов для кондиционеров Hitachi +#define USE_IR_SEND_HITACHI_AC // Включает отправку ИК-сигналов в специфичном формате для кондиционеров Hitachi +#define USE_IR_SEND_KELVINATOR // Включает отправку ИК-сигналов для кондиционеров Kelvinator +#define USE_IR_SEND_LG // Включает отправку ИК-сигналов в формате LG (используется в устройствах LG) +#define USE_IR_SEND_METZ // Включает отправку ИК-сигналов для устройств Metz (телевизоры) +#define USE_IR_SEND_MIDEA // Включает отправку ИК-сигналов для кондиционеров Midea +#define USE_IR_SEND_MITSUBISHI // Включает отправку ИК-сигналов для устройств Mitsubishi (в основном для кондиционеров) +#define USE_IR_SEND_NEC // Включает отправку ИК-сигналов в формате NEC (используется в устройствах LG, Samsung, Apple и других) +#define USE_IR_SEND_NIKAI // Включает отправку ИК-сигналов для устройств Nikai (в основном бытовая техника) +#define USE_IR_SEND_ONIDA // Включает отправку ИК-сигналов для устройств Onida (телевизоры) +#define USE_IR_SEND_PANASONIC // Включает отправку ИК-сигналов в формате Panasonic (используется в устройствах Panasonic) +#define USE_IR_SEND_RC5 // Включает отправку ИК-сигналов в формате RC5 (используется в устройствах Philips) +#define USE_IR_SEND_RC6 // Включает отправку ИК-сигналов в формате RC6 (также используется Philips, улучшенная версия RC5) +#define USE_IR_SEND_RCA // Включает отправку ИК-сигналов для устройств RCA (в основном телевизоры) +#define USE_IR_SEND_RENEWTABLE // Включает отправку ИК-сигналов для восстановления или обновления таблиц пультов +#define USE_IR_SEND_SAMSUNG // Включает отправку ИК-сигналов в формате Samsung (используется в устройствах Samsung) +#define USE_IR_SEND_SAMSUNG_AC // Включает отправку ИК-сигналов в специфичном формате для кондиционеров Samsung +#define USE_IR_SEND_SANYO // Включает отправку ИК-сигналов для кондиционеров и устройств Sanyo +#define USE_IR_SEND_SHARP // Включает отправку ИК-сигналов в формате Sharp (используется в устройствах Sharp) +#define USE_IR_SEND_SHARP_AC // Включает отправку ИК-сигналов для кондиционеров Sharp +#define USE_IR_SEND_SHERWOOD // Включает отправку ИК-сигналов в формате Sherwood (используется в аудиоустройствах Sherwood) +#define USE_IR_SEND_SKYWORTH // Включает отправку ИК-сигналов для устройств Skyworth (телевизоры и аудиооборудование) +#define USE_IR_SEND_SONY // Включает отправку ИК-сигналов в формате Sony SIRC (используется в устройствах Sony) +#define USE_IR_SEND_TCL // Включает отправку ИК-сигналов для устройств TCL (в основном кондиционеры) +#define USE_IR_SEND_TECO // Включает отправку ИК-сигналов для кондиционеров Teco +#define USE_IR_SEND_TOSHIBA // Включает отправку ИК-сигналов для кондиционеров Toshiba +#define USE_IR_SEND_UNIVERSAL // Включает отправку универсальных ИК-сигналов для различных совместимых устройств +#define USE_IR_SEND_VESTEL // Включает отправку ИК-сигналов для устройств Vestel (в основном телевизоры) +#define USE_IR_SEND_WHYNTER // Включает отправку ИК-сигналов для кондиционеров Whynter + +#endif