diff --git a/.github/workflows/Tasmota_build_devel.yml b/.github/workflows/Tasmota_build_devel.yml index 8cb8a140e..549aa5d7a 100644 --- a/.github/workflows/Tasmota_build_devel.yml +++ b/.github/workflows/Tasmota_build_devel.yml @@ -33,7 +33,6 @@ jobs: - tasmota32 - tasmota32-webcam - tasmota32-bluetooth - - tasmota32-core2 - tasmota32-display - tasmota32-ir - tasmota32-lvgl diff --git a/.github/workflows/Tasmota_build_master.yml b/.github/workflows/Tasmota_build_master.yml index ff9cf6a70..9dcecdeb0 100644 --- a/.github/workflows/Tasmota_build_master.yml +++ b/.github/workflows/Tasmota_build_master.yml @@ -5,1320 +5,81 @@ on: branches: master paths-ignore: - '.github/**' # Ignore changes towards the .github directory + - '**.md' # Do no build if *.md files changes + +# Ensures that only one deploy task per branch/environment will run at a time. +concurrency: + group: environment-${{ github.ref }} + cancel-in-progress: true jobs: - - tasmota: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota-minimal: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota-minimal - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota-lite: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota-lite - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota-knx: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota-knx - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota-sensors: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota-sensors - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota-display: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota-display - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota-ir: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota-ir - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota-zbbridge: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota-zbbridge - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota-zigbee: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota-zigbee - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota-AF: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota-AF - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota-BG: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota-BG - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota-BR: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota-BR - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota-CN: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota-CN - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota-CZ: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota-CZ - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota-DE: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota-DE - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota-ES: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota-ES - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota-FR: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota-FR - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota-FY: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota-FY - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota-GR: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota-GR - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota-HE: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota-HE - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota-HU: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota-HU - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota-IT: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota-IT - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota-KO: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota-KO - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota-NL: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota-NL - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota-PL: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota-PL - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota-PT: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota-PT - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota-RO: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota-RO - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota-RU: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota-RU - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota-SE: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota-SE - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota-SK: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota-SK - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota-TR: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota-TR - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota-TW: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota-TW - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota-UK: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota-UK - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota-VN: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota-VN - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota32: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota32 - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota32solo1: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota32solo1 - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota32-webcam: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota32-webcam - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota32-odroidgo: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota32-odroidgo - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota32-core2: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota32-core2 - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota32-bluetooth: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota32-bluetooth - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota32-display: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota32-display - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota32-lvgl: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota32-lvgl - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota32-ir: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota32-ir - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - tasmota32c3: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota32c3 - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - tasmota32-AF: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota32-AF - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota32-BG: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota32-BG - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota32-BR: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota32-BR - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota32-CN: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota32-CN - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota32-CZ: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota32-CZ - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota32-DE: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota32-DE - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota32-ES: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota32-ES - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota32-FR: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota32-FR - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota32-FY: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota32-FY - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota32-GR: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota32-GR - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota32-HE: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota32-HE - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota32-HU: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota32-HU - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota32-IT: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota32-IT - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota32-KO: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota32-KO - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota32-NL: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota32-NL - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota32-PL: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota32-PL - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota32-PT: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota32-PT - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota32-RO: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota32-RO - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota32-RU: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota32-RU - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota32-SE: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota32-SE - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota32-SK: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota32-SK - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota32-TR: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota32-TR - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota32-TW: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota32-TW - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota32-UK: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota32-UK - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - - tasmota32-VN: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota32-VN - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - + base-images: + runs-on: ubuntu-latest + if: github.repository == 'arendst/Tasmota' + continue-on-error: true + strategy: + matrix: + variant: + - tasmota + - tasmota-minimal + - tasmota-display + - tasmota-ir + - tasmota-knx + - tasmota-lite + - tasmota-sensors + - tasmota-zbbridge + - tasmota-zigbee + - tasmota32 + - tasmota32-webcam + - tasmota32-bluetooth + - tasmota32-display + - tasmota32-ir + - tasmota32-lvgl + - tasmota32-odroidgo + - tasmota32c3 + - tasmota32solo1 + steps: + - uses: actions/checkout@v2 + with: + ref: master + - name: Set up Python + uses: actions/setup-python@v1 + - name: Install dependencies + run: | + pip install -U platformio + - name: Run PlatformIO + run: platformio run -e ${{ matrix.variant }} + - uses: actions/upload-artifact@v2 + with: + name: firmware + path: ./build_output + + language-images: + runs-on: ubuntu-latest + if: github.repository == 'arendst/Tasmota' + continue-on-error: true + strategy: + matrix: + variant: [ tasmota, tasmota32 ] + language: [ AF, BG, BR, CN, CZ, DE, ES, FR, FY, GR, HE, HU, IT, KO, NL, PL, PT, RO, RU, SE, SK, TR, TW, UK, VN ] + steps: + - uses: actions/checkout@v2 + with: + ref: master + - name: Set up Python + uses: actions/setup-python@v1 + - name: Install dependencies + run: | + pip install -U platformio + - name: Run PlatformIO + run: platformio run -e ${{ matrix.variant }}-${{ matrix.language }} + - uses: actions/upload-artifact@v2 + with: + name: firmware + path: ./build_output Upload: - needs: [tasmota-VN, tasmota32-VN, tasmota32-TW, tasmota32-TR] + needs: [base-images, language-images] runs-on: ubuntu-latest continue-on-error: true steps: @@ -1346,7 +107,7 @@ jobs: [ ! -f ./mv_firmware/map/* ] || mv ./mv_firmware/map/* ./release-firmware/map/ [ ! -f ./mv_firmware/firmware/tasmota.* ] || mv ./mv_firmware/firmware/tasmota.* ./release-firmware/tasmota/ [ ! -f ./mv_firmware/firmware/tasmota-sensors.* ] || mv ./mv_firmware/firmware/tasmota-sensors.* ./release-firmware/tasmota/ - [ ! -f ./mv_firmware/firmware/tasmota-minimal.* ] || mv ./mv_firmware/firmware/tasmota-minimal.* ./release-firmware/tasmota/ + [ ! -f ./mv_firmware/firmware/tasmota-minimal.bin.gz ] || mv ./mv_firmware/firmware/tasmota-minimal.bin.gz ./release-firmware/tasmota/ [ ! -f ./mv_firmware/firmware/tasmota-lite.* ] || mv ./mv_firmware/firmware/tasmota-lite.* ./release-firmware/tasmota/ [ ! -f ./mv_firmware/firmware/tasmota-ir*.* ] || mv ./mv_firmware/firmware/tasmota-ir*.* ./release-firmware/tasmota/ [ ! -f ./mv_firmware/firmware/tasmota-display.* ] || mv ./mv_firmware/firmware/tasmota-display.* ./release-firmware/tasmota/ diff --git a/lib/libesp32/CORE2_Library/AXP192.cpp b/lib/libesp32/CORE2_Library/AXP192.cpp deleted file mode 100755 index 6e68245ab..000000000 --- a/lib/libesp32/CORE2_Library/AXP192.cpp +++ /dev/null @@ -1,614 +0,0 @@ -#include "AXP192.h" - -//#define AXP192_DEBUG - -AXP192::AXP192() -{ -} - -void AXP192::begin(void) -{ - - Wire1.begin(21, 22); - Wire1.setClock(400000); - - //AXP192 30H - Write1Byte(0x30, (Read8bit(0x30) & 0x04) | 0X02); -#ifdef AXP192_DEBUG - Serial.printf("axp: vbus limit off\n"); -#endif - - //AXP192 GPIO1:OD OUTPUT - Write1Byte(0x92, Read8bit(0x92) & 0xf8); -#ifdef AXP192_DEBUG - Serial.printf("axp: gpio1 init\n"); -#endif - //AXP192 GPIO2:OD OUTPUT - Write1Byte(0x93, Read8bit(0x93) & 0xf8); -#ifdef AXP192_DEBUG - Serial.printf("axp: gpio2 init\n"); -#endif - //AXP192 RTC CHG - Write1Byte(0x35, (Read8bit(0x35) & 0x1c) | 0xa2); -#ifdef AXP192_DEBUG - Serial.printf("axp: rtc battery charging enabled\n"); -#endif - SetESPVoltage(3350); -#ifdef AXP192_DEBUG - Serial.printf("axp: esp32 power voltage was set to 3.35v\n"); -#endif - SetLcdVoltage(2800); -#ifdef AXP192_DEBUG - Serial.printf("axp: lcd backlight voltage was set to 2.80v\n"); -#endif - SetLDOVoltage(2, 3300); //Periph power voltage preset (LCD_logic, SD card) -#ifdef AXP192_DEBUG - Serial.printf("axp: lcd logic and sdcard voltage preset to 3.3v\n"); -#endif - SetLDOVoltage(3, 2000); //Vibrator power voltage preset -#ifdef AXP192_DEBUG - Serial.printf("axp: vibrator voltage preset to 2v\n"); -#endif - - SetLDOEnable(2, true); - SetDCDC3(true); // LCD backlight - SetLed(true); - - SetCHGCurrent(kCHG_100mA); - //SetAxpPriphPower(1); - //Serial.printf("axp: lcd_logic and sdcard power enabled\n\n"); - - //pinMode(39, INPUT_PULLUP); - - //AXP192 GPIO4 - Write1Byte(0X95, (Read8bit(0x95) & 0x72) | 0X84); - - Write1Byte(0X36, 0X4C); - - Write1Byte(0x82,0xff); - - SetLCDRSet(0); - delay(100); - SetLCDRSet(1); - delay(100); - // I2C_WriteByteDataAt(0X15,0XFE,0XFF); - - // bus power mode_output - SetBusPowerMode(0); -} - -void AXP192::Write1Byte(uint8_t Addr, uint8_t Data) -{ - Wire1.beginTransmission(0x34); - Wire1.write(Addr); - Wire1.write(Data); - Wire1.endTransmission(); -} - -uint8_t AXP192::Read8bit(uint8_t Addr) -{ - Wire1.beginTransmission(0x34); - Wire1.write(Addr); - Wire1.endTransmission(); - Wire1.requestFrom(0x34, 1); - return Wire1.read(); -} - -uint16_t AXP192::Read12Bit(uint8_t Addr) -{ - uint16_t Data = 0; - uint8_t buf[2]; - ReadBuff(Addr, 2, buf); - Data = ((buf[0] << 4) + buf[1]); // - return Data; -} - -uint16_t AXP192::Read13Bit(uint8_t Addr) -{ - uint16_t Data = 0; - uint8_t buf[2]; - ReadBuff(Addr, 2, buf); - Data = ((buf[0] << 5) + buf[1]); // - return Data; -} - -uint16_t AXP192::Read16bit(uint8_t Addr) -{ - uint16_t ReData = 0; - Wire1.beginTransmission(0x34); - Wire1.write(Addr); - Wire1.endTransmission(); - Wire1.requestFrom(0x34, 2); - for (int i = 0; i < 2; i++) - { - ReData <<= 8; - ReData |= Wire1.read(); - } - return ReData; -} - -uint32_t AXP192::Read24bit(uint8_t Addr) -{ - uint32_t ReData = 0; - Wire1.beginTransmission(0x34); - Wire1.write(Addr); - Wire1.endTransmission(); - Wire1.requestFrom(0x34, 3); - for (int i = 0; i < 3; i++) - { - ReData <<= 8; - ReData |= Wire1.read(); - } - return ReData; -} - -uint32_t AXP192::Read32bit(uint8_t Addr) -{ - uint32_t ReData = 0; - Wire1.beginTransmission(0x34); - Wire1.write(Addr); - Wire1.endTransmission(); - Wire1.requestFrom(0x34, 2); - for (int i = 0; i < 4; i++) - { - ReData <<= 8; - ReData |= Wire1.read(); - } - return ReData; -} - -void AXP192::ReadBuff(uint8_t Addr, uint8_t Size, uint8_t *Buff) -{ - Wire1.beginTransmission(0x34); - Wire1.write(Addr); - Wire1.endTransmission(); - Wire1.requestFrom(0x34, (int)Size); - for (int i = 0; i < Size; i++) - { - *(Buff + i) = Wire1.read(); - } -} - -void AXP192::ScreenBreath(uint8_t brightness) -{ - if (brightness > 12) - { - brightness = 12; - } - uint8_t buf = Read8bit(0x28); - Write1Byte(0x28, ((buf & 0x0f) | (brightness << 4))); -} - -bool AXP192::GetBatState() -{ - if (Read8bit(0x01) | 0x20) - return true; - else - return false; -} -//---------coulombcounter_from_here--------- -//enable: void EnableCoulombcounter(void); -//disable: void DisableCOulombcounter(void); -//stop: void StopCoulombcounter(void); -//clear: void ClearCoulombcounter(void); -//get charge data: uint32_t GetCoulombchargeData(void); -//get discharge data: uint32_t GetCoulombdischargeData(void); -//get coulomb val affter calculation: float GetCoulombData(void); -//------------------------------------------ -void AXP192::EnableCoulombcounter(void) -{ - Write1Byte(0xB8, 0x80); -} - -void AXP192::DisableCoulombcounter(void) -{ - Write1Byte(0xB8, 0x00); -} - -void AXP192::StopCoulombcounter(void) -{ - Write1Byte(0xB8, 0xC0); -} - -void AXP192::ClearCoulombcounter(void) -{ - Write1Byte(0xB8, 0xA0); -} - -uint32_t AXP192::GetCoulombchargeData(void) -{ - return Read32bit(0xB0); -} - -uint32_t AXP192::GetCoulombdischargeData(void) -{ - return Read32bit(0xB4); -} - -float AXP192::GetCoulombData(void) -{ - - uint32_t coin = 0; - uint32_t coout = 0; - - coin = GetCoulombchargeData(); - coout = GetCoulombdischargeData(); - - //c = 65536 * current_LSB * (coin - coout) / 3600 / ADC rate - //Adc rate can be read from 84H ,change this variable if you change the ADC reate - float ccc = 65536 * 0.5 * (coin - coout) / 3600.0 / 25.0; - return ccc; -} - -// Cut all power, except for LDO1 (RTC) -void AXP192::PowerOff(void) -{ - Write1Byte(0x32, Read8bit(0x32) | 0b10000000); -} - -void AXP192::SetAdcState(bool state) -{ - // Enable / Disable all ADCs - Write1Byte(0x82, state ? 0xff : 0x00); -} - -void AXP192::PrepareToSleep(void) -{ - // Disable ADCs - SetAdcState(false); - - // Turn LED off - SetLed(false); - - // Turn LCD backlight off - SetDCDC3(false); -} - -void AXP192::RestoreFromLightSleep(void) -{ - // Turn LCD backlight on - SetDCDC3(true); - - // Turn LED on - SetLed(true); - - // Enable ADCs - SetAdcState(true); -} - -uint8_t AXP192::GetWarningLeve(void) -{ - Wire1.beginTransmission(0x34); - Wire1.write(0x47); - Wire1.endTransmission(); - Wire1.requestFrom(0x34, 1); - uint8_t buf = Wire1.read(); - return (buf & 0x01); -} - -// -- sleep -void AXP192::DeepSleep(uint64_t time_in_us) -{ - PrepareToSleep(); - - if (time_in_us > 0) - { - esp_sleep_enable_timer_wakeup(time_in_us); - } - else - { - esp_sleep_disable_wakeup_source(ESP_SLEEP_WAKEUP_TIMER); - } - (time_in_us == 0) ? esp_deep_sleep_start() : esp_deep_sleep(time_in_us); - - // Never reached - after deep sleep ESP32 restarts -} - -void AXP192::LightSleep(uint64_t time_in_us) -{ - PrepareToSleep(); - - if (time_in_us > 0) - { - esp_sleep_enable_timer_wakeup(time_in_us); - } - else - { - esp_sleep_disable_wakeup_source(ESP_SLEEP_WAKEUP_TIMER); - } - esp_light_sleep_start(); - - RestoreFromLightSleep(); -} - -uint8_t AXP192::GetWarningLevel(void) -{ - return Read8bit(0x47) & 0x01; -} - -float AXP192::GetBatVoltage() -{ - float ADCLSB = 1.1 / 1000.0; - uint16_t ReData = Read12Bit(0x78); - return ReData * ADCLSB; -} - -float AXP192::GetBatCurrent() -{ - float ADCLSB = 0.5; - uint16_t CurrentIn = Read13Bit(0x7A); - uint16_t CurrentOut = Read13Bit(0x7C); - return (CurrentIn - CurrentOut) * ADCLSB; -} - -float AXP192::GetVinVoltage() -{ - float ADCLSB = 1.7 / 1000.0; - uint16_t ReData = Read12Bit(0x56); - return ReData * ADCLSB; -} - -float AXP192::GetVinCurrent() -{ - float ADCLSB = 0.625; - uint16_t ReData = Read12Bit(0x58); - return ReData * ADCLSB; -} - -float AXP192::GetVBusVoltage() -{ - float ADCLSB = 1.7 / 1000.0; - uint16_t ReData = Read12Bit(0x5A); - return ReData * ADCLSB; -} - -float AXP192::GetVBusCurrent() -{ - float ADCLSB = 0.375; - uint16_t ReData = Read12Bit(0x5C); - return ReData * ADCLSB; -} - -float AXP192::GetTempInAXP192() -{ - float ADCLSB = 0.1; - const float OFFSET_DEG_C = -144.7; - uint16_t ReData = Read12Bit(0x5E); - return OFFSET_DEG_C + ReData * ADCLSB; -} - -float AXP192::GetBatPower() -{ - float VoltageLSB = 1.1; - float CurrentLCS = 0.5; - uint32_t ReData = Read24bit(0x70); - return VoltageLSB * CurrentLCS * ReData / 1000.0; -} - -float AXP192::GetBatChargeCurrent() -{ - float ADCLSB = 0.5; - uint16_t ReData = Read12Bit(0x7A); - return ReData * ADCLSB; -} -float AXP192::GetAPSVoltage() -{ - float ADCLSB = 1.4 / 1000.0; - uint16_t ReData = Read12Bit(0x7E); - return ReData * ADCLSB; -} - -float AXP192::GetBatCoulombInput() -{ - uint32_t ReData = Read32bit(0xB0); - return ReData * 65536 * 0.5 / 3600 / 25.0; -} - -float AXP192::GetBatCoulombOut() -{ - uint32_t ReData = Read32bit(0xB4); - return ReData * 65536 * 0.5 / 3600 / 25.0; -} - -void AXP192::SetCoulombClear() -{ - Write1Byte(0xB8, 0x20); -} - -void AXP192::SetLDO2(bool State) -{ - uint8_t buf = Read8bit(0x12); - if (State == true) - buf = (1 << 2) | buf; - else - buf = ~(1 << 2) & buf; - Write1Byte(0x12, buf); -} - -void AXP192::SetDCDC3(bool State) -{ - uint8_t buf = Read8bit(0x12); - if (State == true) - buf = (1 << 1) | buf; - else - buf = ~(1 << 1) & buf; - Write1Byte(0x12, buf); -} - -uint8_t AXP192::AXPInState() -{ - return Read8bit(0x00); -} -bool AXP192::isACIN() -{ - return ( Read8bit(0x00) & 0x80 ) ? true : false; -} -bool AXP192::isCharging() -{ - return ( Read8bit(0x00) & 0x04 ) ? true : false; -} -bool AXP192::isVBUS() -{ - return ( Read8bit(0x00) & 0x20 ) ? true : false; -} - -void AXP192::SetLDOVoltage(uint8_t number, uint16_t voltage) -{ - voltage = (voltage > 3300) ? 15 : (voltage / 100) - 18; - switch (number) - { - //uint8_t reg, data; - case 2: - Write1Byte(0x28, (Read8bit(0x28) & 0X0F) | (voltage << 4)); - break; - case 3: - Write1Byte(0x28, (Read8bit(0x28) & 0XF0) | voltage); - break; - } -} - -void AXP192::SetDCVoltage(uint8_t number, uint16_t voltage) -{ - uint8_t addr; - if (number > 2) - return; - voltage = (voltage < 700) ? 0 : (voltage - 700) / 25; - switch (number) - { - case 0: - addr = 0x26; - break; - case 1: - addr = 0x25; - break; - case 2: - addr = 0x27; - break; - } - Write1Byte(addr, (Read8bit(addr) & 0X80) | (voltage & 0X7F)); -} - -void AXP192::SetESPVoltage(uint16_t voltage) -{ - if (voltage >= 3000 && voltage <= 3400) - { - SetDCVoltage(0, voltage); - } -} -void AXP192::SetLcdVoltage(uint16_t voltage) -{ - if (voltage >= 2500 && voltage <= 3300) - { - SetDCVoltage(2, voltage); - } -} - -void AXP192::SetLDOEnable(uint8_t number, bool state) -{ - uint8_t mark = 0x01; - if ((number < 2) || (number > 3)) - return; - - mark <<= number; - if (state) - { - Write1Byte(0x12, (Read8bit(0x12) | mark)); - } - else - { - Write1Byte(0x12, (Read8bit(0x12) & (~mark))); - } -} - -void AXP192::SetLCDRSet(bool state) -{ - uint8_t reg_addr = 0x96; - uint8_t gpio_bit = 0x02; - uint8_t data; - data = Read8bit(reg_addr); - - if (state) - { - data |= gpio_bit; - } - else - { - data &= ~gpio_bit; - } - - Write1Byte(reg_addr, data); -} - -void AXP192::SetBusPowerMode(uint8_t state) -{ - uint8_t data; - if (state == 0) - { - data = Read8bit(0x91); - Write1Byte(0x91, (data & 0X0F) | 0XF0); - - data = Read8bit(0x90); - Write1Byte(0x90, (data & 0XF8) | 0X02); //set GPIO0 to LDO OUTPUT , pullup N_VBUSEN to disable supply from BUS_5V - - data = Read8bit(0x91); - - data = Read8bit(0x12); //read reg 0x12 - Write1Byte(0x12, data | 0x40); //set EXTEN to enable 5v boost - } - else - { - data = Read8bit(0x12); //read reg 0x10 - Write1Byte(0x12, data & 0XBF); //set EXTEN to disable 5v boost - - //delay(2000); - - data = Read8bit(0x90); - Write1Byte(0x90, (data & 0xF8) | 0X01); //set GPIO0 to float , using enternal pulldown resistor to enable supply from BUS_5VS - } -} - -void AXP192::SetLed(uint8_t state) -{ - uint8_t reg_addr=0x94; - uint8_t data; - data=Read8bit(reg_addr); - - if(state) - { - data=data&0XFD; - } - else - { - data|=0X02; - } - - Write1Byte(reg_addr,data); -} - -//set led state(GPIO high active,set 1 to enable amplifier) -void AXP192::SetSpkEnable(uint8_t state) -{ - uint8_t reg_addr=0x94; - uint8_t gpio_bit=0x04; - uint8_t data; - data=Read8bit(reg_addr); - - if(state) - { - data|=gpio_bit; - } - else - { - data&=~gpio_bit; - } - - Write1Byte(reg_addr,data); -} - -void AXP192::SetCHGCurrent(uint8_t state) -{ - uint8_t data = Read8bit(0x33); - data &= 0xf0; - data = data | ( state & 0x0f ); - Write1Byte(0x33,data); -} diff --git a/lib/libesp32/CORE2_Library/AXP192.h b/lib/libesp32/CORE2_Library/AXP192.h deleted file mode 100755 index 662c37e8b..000000000 --- a/lib/libesp32/CORE2_Library/AXP192.h +++ /dev/null @@ -1,106 +0,0 @@ -#ifndef __AXP192_H__ -#define __AXP192_H__ - -#include -#include - -#define SLEEP_MSEC(us) (((uint64_t)us) * 1000L) -#define SLEEP_SEC(us) (((uint64_t)us) * 1000000L) -#define SLEEP_MIN(us) (((uint64_t)us) * 60L * 1000000L) -#define SLEEP_HR(us) (((uint64_t)us) * 60L * 60L * 1000000L) - -#define AXP_ADDR 0X34 - -#define PowerOff(x) SetSleep(x) - -class AXP192 { -public: - - enum CHGCurrent{ - kCHG_100mA = 0, - kCHG_190mA, - kCHG_280mA, - kCHG_360mA, - kCHG_450mA, - kCHG_550mA, - kCHG_630mA, - kCHG_700mA, - kCHG_780mA, - kCHG_880mA, - kCHG_960mA, - kCHG_1000mA, - kCHG_1080mA, - kCHG_1160mA, - kCHG_1240mA, - kCHG_1320mA, - }; - - AXP192(); - void begin(void); - void ScreenBreath(uint8_t brightness); - bool GetBatState(); - - void EnableCoulombcounter(void); - void DisableCoulombcounter(void); - void StopCoulombcounter(void); - void ClearCoulombcounter(void); - uint32_t GetCoulombchargeData(void); - uint32_t GetCoulombdischargeData(void); - float GetCoulombData(void); - void PowerOff(void); - void SetAdcState(bool state); - // -- sleep - void PrepareToSleep(void); - void RestoreFromLightSleep(void); - void DeepSleep(uint64_t time_in_us = 0); - void LightSleep(uint64_t time_in_us = 0); - uint8_t GetWarningLeve(void); - -public: - // void SetChargeVoltage( uint8_t ); - // void SetChargeCurrent( uint8_t ); - float GetBatVoltage(); - float GetBatCurrent(); - float GetVinVoltage(); - float GetVinCurrent(); - float GetVBusVoltage(); - float GetVBusCurrent(); - float GetTempInAXP192(); - float GetBatPower(); - float GetBatChargeCurrent(); - float GetAPSVoltage(); - float GetBatCoulombInput(); - float GetBatCoulombOut(); - uint8_t GetWarningLevel(void); - void SetCoulombClear(); - void SetLDO2( bool State ); - void SetDCDC3( bool State ); - - uint8_t AXPInState(); - bool isACIN(); - bool isCharging(); - bool isVBUS(); - - void SetLDOVoltage(uint8_t number , uint16_t voltage); - void SetDCVoltage(uint8_t number , uint16_t voltage); - void SetESPVoltage(uint16_t voltage); - void SetLcdVoltage(uint16_t voltage); - void SetLDOEnable( uint8_t number ,bool state ); - void SetLCDRSet( bool state ); - void SetBusPowerMode( uint8_t state ); - void SetLed(uint8_t state); - void SetSpkEnable(uint8_t state); - void SetCHGCurrent(uint8_t state); - -private: - void Write1Byte( uint8_t Addr , uint8_t Data ); - uint8_t Read8bit( uint8_t Addr ); - uint16_t Read12Bit( uint8_t Addr); - uint16_t Read13Bit( uint8_t Addr); - uint16_t Read16bit( uint8_t Addr ); - uint32_t Read24bit( uint8_t Addr ); - uint32_t Read32bit( uint8_t Addr ); - void ReadBuff( uint8_t Addr , uint8_t Size , uint8_t *Buff ); -}; - -#endif diff --git a/lib/libesp32/CORE2_Library/BM8563_RTC.cpp b/lib/libesp32/CORE2_Library/BM8563_RTC.cpp deleted file mode 100755 index f17262d29..000000000 --- a/lib/libesp32/CORE2_Library/BM8563_RTC.cpp +++ /dev/null @@ -1,353 +0,0 @@ -#include "BM8563_RTC.h" - -BM8563_RTC::BM8563_RTC() -{ -} - -void BM8563_RTC::begin(void) -{ - Wire1.begin(21, 22); - WriteReg(0x00,0x00); - WriteReg(0x01,0x00); - WriteReg(0x0D,0x00); -} - -void BM8563_RTC::WriteReg(uint8_t reg, uint8_t data) -{ - Wire1.beginTransmission(RTC_ADRESS); - Wire1.write(reg); - Wire1.write(data); - Wire1.endTransmission(); -} - -uint8_t BM8563_RTC::ReadReg(uint8_t reg) -{ - Wire1.beginTransmission(0x51); - Wire1.write(reg); - Wire1.endTransmission(); - Wire1.requestFrom(0x51, 1); - return Wire1.read(); -} - -void BM8563_RTC::GetBm8563Time(void) -{ - Wire1.beginTransmission(0x51); - Wire1.write(0x02); - Wire1.endTransmission(); - Wire1.requestFrom(0x51, 7); - while (Wire1.available()) - { - - trdata[0] = Wire1.read(); - trdata[1] = Wire1.read(); - trdata[2] = Wire1.read(); - trdata[3] = Wire1.read(); - trdata[4] = Wire1.read(); - trdata[5] = Wire1.read(); - trdata[6] = Wire1.read(); - } - - DataMask(); - Bcd2asc(); - Str2Time(); -} - -void BM8563_RTC::Str2Time(void) -{ - - Second = (asc[0] - 0x30) * 10 + asc[1] - 0x30; - Minute = (asc[2] - 0x30) * 10 + asc[3] - 0x30; - Hour = (asc[4] - 0x30) * 10 + asc[5] - 0x30; - /* - uint8_t Hour; - uint8_t Week; - uint8_t Day; - uint8_t Month; - uint8_t Year; - */ -} - -void BM8563_RTC::DataMask() -{ - - trdata[0] = trdata[0] & 0x7f; //秒 - trdata[1] = trdata[1] & 0x7f; //分 - trdata[2] = trdata[2] & 0x3f; //时 - - trdata[3] = trdata[3] & 0x3f; //日 - trdata[4] = trdata[4] & 0x07; //星期 - trdata[5] = trdata[5] & 0x1f; //月 - - trdata[6] = trdata[6] & 0xff; //年 -} -/******************************************************************** -函 数 名: void Bcd2asc(void) -功 能: bcd 码转换成 asc 码,供Lcd显示用 -说 明: -调 用: -入口参数: -返 回 值:无 -***********************************************************************/ -void BM8563_RTC::Bcd2asc(void) -{ - uint8_t i, j; - for (j = 0, i = 0; i < 7; i++) - { - asc[j++] = (trdata[i] & 0xf0) >> 4 | 0x30; /*格式为: 秒 分 时 日 月 星期 年 */ - asc[j++] = (trdata[i] & 0x0f) | 0x30; - } -} - -uint8_t BM8563_RTC::Bcd2ToByte(uint8_t Value) -{ - uint8_t tmp = 0; - tmp = ((uint8_t)(Value & (uint8_t)0xF0) >> (uint8_t)0x4) * 10; - return (tmp + (Value & (uint8_t)0x0F)); -} - -uint8_t BM8563_RTC::ByteToBcd2(uint8_t Value) -{ - uint8_t bcdhigh = 0; - - while (Value >= 10) - { - bcdhigh++; - Value -= 10; - } - - return ((uint8_t)(bcdhigh << 4) | Value); -} - -void BM8563_RTC::GetTime(RTC_TimeTypeDef *RTC_TimeStruct) -{ - - //if() - uint8_t buf[3] = {0}; - - Wire1.beginTransmission(0x51); - Wire1.write(0x02); - Wire1.endTransmission(); - Wire1.requestFrom(0x51, 3); - - while (Wire1.available()) - { - - buf[0] = Wire1.read(); - buf[1] = Wire1.read(); - buf[2] = Wire1.read(); - } - - RTC_TimeStruct->Seconds = Bcd2ToByte(buf[0] & 0x7f); //秒 - RTC_TimeStruct->Minutes = Bcd2ToByte(buf[1] & 0x7f); //分 - RTC_TimeStruct->Hours = Bcd2ToByte(buf[2] & 0x3f); //时 -} - -void BM8563_RTC::SetTime(RTC_TimeTypeDef *RTC_TimeStruct) -{ - - if (RTC_TimeStruct == NULL) - return; - - Wire1.beginTransmission(0x51); - Wire1.write(0x02); - Wire1.write(ByteToBcd2(RTC_TimeStruct->Seconds)); - Wire1.write(ByteToBcd2(RTC_TimeStruct->Minutes)); - Wire1.write(ByteToBcd2(RTC_TimeStruct->Hours)); - Wire1.endTransmission(); -} - -void BM8563_RTC::GetDate(RTC_DateTypeDef *RTC_DateStruct) -{ - - uint8_t buf[4] = {0}; - - Wire1.beginTransmission(0x51); - Wire1.write(0x05); - Wire1.endTransmission(); - Wire1.requestFrom(0x51, 4); - - while (Wire1.available()) - { - - buf[0] = Wire1.read(); - buf[1] = Wire1.read(); - buf[2] = Wire1.read(); - buf[3] = Wire1.read(); - } - - RTC_DateStruct->Date = Bcd2ToByte(buf[0] & 0x3f); - RTC_DateStruct->WeekDay = Bcd2ToByte(buf[1] & 0x07); - RTC_DateStruct->Month = Bcd2ToByte(buf[2] & 0x1f); - - if (buf[2] & 0x80) - { - RTC_DateStruct->Year = 1900 + Bcd2ToByte(buf[3] & 0xff); - } - else - { - RTC_DateStruct->Year = 2000 + Bcd2ToByte(buf[3] & 0xff); - } -} - -void BM8563_RTC::SetDate(RTC_DateTypeDef *RTC_DateStruct) -{ - - if (RTC_DateStruct == NULL) - return; - Wire1.beginTransmission(0x51); - Wire1.write(0x05); - Wire1.write(ByteToBcd2(RTC_DateStruct->Date)); - Wire1.write(ByteToBcd2(RTC_DateStruct->WeekDay)); - - if (RTC_DateStruct->Year < 2000) - { - - Wire1.write(ByteToBcd2(RTC_DateStruct->Month) | 0x80); - Wire1.write(ByteToBcd2((uint8_t)(RTC_DateStruct->Year % 100))); - } - else - { - /* code */ - Wire1.write(ByteToBcd2(RTC_DateStruct->Month) | 0x00); - Wire1.write(ByteToBcd2((uint8_t)(RTC_DateStruct->Year % 100))); - } - - Wire1.endTransmission(); -} - -int BM8563_RTC::SetAlarmIRQ(int afterSeconds) -{ - uint8_t reg_value = 0; - reg_value = ReadReg(0x01); - - if (afterSeconds < 0) - { - reg_value &= ~(1 << 0); - WriteReg(0x01, reg_value); - reg_value = 0x03; - WriteReg(0x0E, reg_value); - return -1; - } - - uint8_t type_value = 2; - uint8_t div = 1; - if (afterSeconds > 255) - { - div = 60; - type_value = 0x83; - } - else - { - type_value = 0x82; - } - - afterSeconds = (afterSeconds / div) & 0xFF; - WriteReg(0x0F, afterSeconds); - WriteReg(0x0E, type_value); - - reg_value |= (1 << 0); - reg_value &= ~(1 << 7); - WriteReg(0x01, reg_value); - return afterSeconds * div; -} - -int BM8563_RTC::SetAlarmIRQ(const RTC_TimeTypeDef &RTC_TimeStruct) -{ - uint8_t irq_enable = false; - uint8_t out_buf[4] = {0x80, 0x80, 0x80, 0x80}; - - if (RTC_TimeStruct.Minutes >= 0) - { - irq_enable = true; - out_buf[0] = ByteToBcd2(RTC_TimeStruct.Minutes) & 0x7f; - } - - if (RTC_TimeStruct.Hours >= 0) - { - irq_enable = true; - out_buf[1] = ByteToBcd2(RTC_TimeStruct.Hours) & 0x3f; - } - - //out_buf[2] = 0x00; - //out_buf[3] = 0x00; - - uint8_t reg_value = ReadReg(0x01); - - if (irq_enable) - { - reg_value |= (1 << 1); - } - else - { - reg_value &= ~(1 << 1); - } - - for (int i = 0; i < 4; i++) - { - WriteReg(0x09 + i, out_buf[i]); - } - WriteReg(0x01, reg_value); - - return irq_enable ? 1 : 0; -} - -int BM8563_RTC::SetAlarmIRQ(const RTC_DateTypeDef &RTC_DateStruct, const RTC_TimeTypeDef &RTC_TimeStruct) -{ - uint8_t irq_enable = false; - uint8_t out_buf[4] = {0x80, 0x80, 0x80, 0x80}; - - if (RTC_TimeStruct.Minutes >= 0) - { - irq_enable = true; - out_buf[0] = ByteToBcd2(RTC_TimeStruct.Minutes) & 0x7f; - } - - if (RTC_TimeStruct.Hours >= 0) - { - irq_enable = true; - out_buf[1] = ByteToBcd2(RTC_TimeStruct.Hours) & 0x3f; - } - - if (RTC_DateStruct.Date >= 0) - { - irq_enable = true; - out_buf[2] = ByteToBcd2(RTC_DateStruct.Date) & 0x3f; - } - - if (RTC_DateStruct.WeekDay >= 0) - { - irq_enable = true; - out_buf[3] = ByteToBcd2(RTC_DateStruct.WeekDay) & 0x07; - } - - uint8_t reg_value = ReadReg(0x01); - - if (irq_enable) - { - reg_value |= (1 << 1); - } - else - { - reg_value &= ~(1 << 1); - } - - for (int i = 0; i < 4; i++) - { - WriteReg(0x09 + i, out_buf[i]); - } - WriteReg(0x01, reg_value); - - return irq_enable ? 1 : 0; -} - -void BM8563_RTC::clearIRQ() -{ - uint8_t data = ReadReg(0x01); - WriteReg(0x01, data & 0xf3); -} -void BM8563_RTC::disableIRQ() -{ - clearIRQ(); - uint8_t data = ReadReg(0x01); - WriteReg(0x01, data & 0xfC); -} diff --git a/lib/libesp32/CORE2_Library/BM8563_RTC.h b/lib/libesp32/CORE2_Library/BM8563_RTC.h deleted file mode 100755 index 84c6e0b37..000000000 --- a/lib/libesp32/CORE2_Library/BM8563_RTC.h +++ /dev/null @@ -1,76 +0,0 @@ -#ifndef __RTC_H__ -#define __RTC_H__ - -#include - -#define RTC_ADRESS 0x51 - -typedef struct -{ - uint8_t Hours; - uint8_t Minutes; - uint8_t Seconds; -}RTC_TimeTypeDef; - - -typedef struct -{ - uint8_t WeekDay; - uint8_t Month; - uint8_t Date; - uint16_t Year; -}RTC_DateTypeDef; - -class BM8563_RTC { -public: - BM8563_RTC(); - - void begin(void); - void GetBm8563Time(void); - - void SetTime(RTC_TimeTypeDef* RTC_TimeStruct); - void SetDate(RTC_DateTypeDef* RTC_DateStruct); - - void GetTime(RTC_TimeTypeDef* RTC_TimeStruct); - void GetDate(RTC_DateTypeDef* RTC_DateStruct); - - int SetAlarmIRQ(int afterSeconds); - int SetAlarmIRQ( const RTC_TimeTypeDef &RTC_TimeStruct); - int SetAlarmIRQ( const RTC_DateTypeDef &RTC_DateStruct, const RTC_TimeTypeDef &RTC_TimeStruct); - - void clearIRQ(); - void disableIRQ(); - -public: - uint8_t Second; - uint8_t Minute; - uint8_t Hour; - uint8_t Week; - uint8_t Day; - uint8_t Month; - uint8_t Year; - uint8_t DateString[9]; - uint8_t TimeString[9]; - - uint8_t asc[14]; - - -private: - void Bcd2asc(void); - void DataMask(); - void Str2Time(void); - void WriteReg(uint8_t reg, uint8_t data); - uint8_t ReadReg(uint8_t reg); - uint8_t Bcd2ToByte(uint8_t Value); - uint8_t ByteToBcd2(uint8_t Value); - -private: - - /*定义数组用来存储读取的时间数据 */ - uint8_t trdata[7]; - /*定义数组用来存储转换的 asc 码时间数据*/ - //uint8_t asc[14]; - -}; - -#endif diff --git a/lib/libesp32/CORE2_Library/library.json b/lib/libesp32/CORE2_Library/library.json deleted file mode 100644 index e3ac982c5..000000000 --- a/lib/libesp32/CORE2_Library/library.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "M5 Stack Core2 library", - "keywords": "esp32, sensor, mqtt, m2m, iot", - "description": "M5 Stack Core2 library", - "version": "1.0", - "frameworks": "arduino", - "platforms": "espressif32" -} diff --git a/lib/libesp32/CORE2_Library/library.properties b/lib/libesp32/CORE2_Library/library.properties deleted file mode 100644 index e3b36fc67..000000000 --- a/lib/libesp32/CORE2_Library/library.properties +++ /dev/null @@ -1,9 +0,0 @@ -name=M5 Stack Core2 library -version=1.0 -author=Gerhard Mutz -maintainer=Gerhard Mutz -sentence=Allows Tasmota to use Core2 -paragraph=Allows Tasmota to Core2 for esp32 -category=ESP32 -url= -architectures=esp32 diff --git a/lib/libesp32/berry/generate/be_const_strtab.h b/lib/libesp32/berry/generate/be_const_strtab.h index fd2e06607..42529fa92 100644 --- a/lib/libesp32/berry/generate/be_const_strtab.h +++ b/lib/libesp32/berry/generate/be_const_strtab.h @@ -12,6 +12,7 @@ extern const bcstring be_const_str_AudioOutputI2S; extern const bcstring be_const_str_Auto_X2Dconfiguration; extern const bcstring be_const_str_BRY_X3A_X20ERROR_X2C_X20bad_X20json_X3A_X20; extern const bcstring be_const_str_BRY_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s; +extern const bcstring be_const_str_BRY_X3A_X20argument_X20must_X20be_X20a_X20function; extern const bcstring be_const_str_BRY_X3A_X20could_X20not_X20save_X20compiled_X20file_X20_X25s_X20_X28_X25s_X29; extern const bcstring be_const_str_BRY_X3A_X20failed_X20to_X20load_X20_persist_X2Ejson; extern const bcstring be_const_str_BRY_X3A_X20method_X20not_X20allowed_X2C_X20use_X20a_X20closure_X20like_X20_X27_X2F_X20args_X20_X2D_X3E_X20obj_X2Efunc_X28args_X29_X27; @@ -123,6 +124,7 @@ extern const bcstring be_const_str__X26lt_X3BNone_X26gt_X3B; extern const bcstring be_const_str__X28_X29; extern const bcstring be_const_str__X2B; extern const bcstring be_const_str__X2C; +extern const bcstring be_const_str__X2C_X22AXP192_X22_X3A_X7B_X22VBusVoltage_X22_X3A_X25_X2E3f_X2C_X22VBusCurrent_X22_X3A_X25_X2E1f_X2C_X22BattVoltage_X22_X3A_X25_X2E3f_X2C_X22BattCurrent_X22_X3A_X25_X2E1f_X2C_X22Temperature_X22_X3A_X25_X2E1f_X7D; extern const bcstring be_const_str__X2D_X2D_X3A_X2D_X2D; extern const bcstring be_const_str__X2E; extern const bcstring be_const_str__X2E_X2E; @@ -745,6 +747,7 @@ extern const bcstring be_const_str_tomap; extern const bcstring be_const_str_top; extern const bcstring be_const_str_toptr; extern const bcstring be_const_str_tostring; +extern const bcstring be_const_str_touch_update; extern const bcstring be_const_str_toupper; extern const bcstring be_const_str_tr; extern const bcstring be_const_str_traceback; diff --git a/lib/libesp32/berry/generate/be_const_strtab_def.h b/lib/libesp32/berry/generate/be_const_strtab_def.h index 3cac86202..f0712889a 100644 --- a/lib/libesp32/berry/generate/be_const_strtab_def.h +++ b/lib/libesp32/berry/generate/be_const_strtab_def.h @@ -1,788 +1,791 @@ -be_define_const_str(, "", 2166136261u, 0, 0, &be_const_str__def); -be_define_const_str(_X0A, "\n", 252472541u, 0, 1, NULL); -be_define_const_str(_X20, " ", 621580159u, 0, 1, &be_const_str_SERIAL_6E1); -be_define_const_str(_X21_X3D, "!=", 2428715011u, 0, 2, &be_const_str__X26lt_X3BNone_X26gt_X3B); -be_define_const_str(_X21_X3D_X3D, "!==", 559817114u, 0, 3, NULL); -be_define_const_str(_X23, "#", 638357778u, 0, 1, &be_const_str_bus); -be_define_const_str(_X23autoexec_X2Ebat, "#autoexec.bat", 3382890497u, 0, 13, NULL); -be_define_const_str(_X23autoexec_X2Ebe, "#autoexec.be", 1181757091u, 0, 12, &be_const_str_remote_port); -be_define_const_str(_X23display_X2Eini, "#display.ini", 182218220u, 0, 12, &be_const_str_deg); -be_define_const_str(_X23init_X2Ebat, "#init.bat", 3297595077u, 0, 9, &be_const_str_concat); -be_define_const_str(_X23preinit_X2Ebe, "#preinit.be", 687035716u, 0, 11, &be_const_str_bytes); -be_define_const_str(_X2502d_X25s_X2502d, "%02d%s%02d", 1587999717u, 0, 10, &be_const_str__X3C_X2Fselect_X3E_X3Cp_X3E_X3C_X2Fp_X3E); -be_define_const_str(_X2504d_X2D_X2502d_X2D_X2502dT_X2502d_X3A_X2502d_X3A_X2502d, "%04d-%02d-%02dT%02d:%02d:%02d", 3425528601u, 0, 29, &be_const_str_BRY_X3A_X20method_X20not_X20allowed_X2C_X20use_X20a_X20closure_X20like_X20_X27_X2F_X20args_X20_X2D_X3E_X20obj_X2Efunc_X28args_X29_X27); -be_define_const_str(_X2508x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2D_X2504x_X2508x, "%08x-%04x-%04x-%04x-%04x%08x", 1670063141u, 0, 28, &be_const_str_GET); -be_define_const_str(_X25s_X2Eautoconf, "%s.autoconf", 3560383524u, 0, 11, &be_const_str_dac_voltage); -be_define_const_str(_X26lt_X3BError_X3A_X20apply_X20new_X20or_X20remove_X26gt_X3B, "<Error: apply new or remove>", 2855507949u, 0, 34, &be_const_str_instance_size); -be_define_const_str(_X26lt_X3BNone_X26gt_X3B, "<None>", 2602165498u, 0, 12, &be_const_str_display_X2Eini); -be_define_const_str(_X28_X29, "()", 685372826u, 0, 2, &be_const_str_Restart_X201); -be_define_const_str(_X2B, "+", 772578730u, 0, 1, &be_const_str_AudioGeneratorMP3); -be_define_const_str(_X2C, ",", 688690635u, 0, 1, &be_const_str_SERIAL_8E1); -be_define_const_str(_X2D_X2D_X3A_X2D_X2D, "--:--", 1370615441u, 0, 5, &be_const_str__X3C); -be_define_const_str(_X2E, ".", 722245873u, 0, 1, &be_const_str__X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E); -be_define_const_str(_X2E_X2E, "..", 2748622605u, 0, 2, &be_const_str_cmd); -be_define_const_str(_X2Eautoconf, ".autoconf", 2524679088u, 0, 9, &be_const_str_scan); -be_define_const_str(_X2Ebe, ".be", 1325797348u, 0, 3, &be_const_str_class_init_obj); -be_define_const_str(_X2Ebec, ".bec", 3985273221u, 0, 4, &be_const_str_strftime); -be_define_const_str(_X2Elen, ".len", 850842136u, 0, 4, &be_const_str_widget_event_cb); -be_define_const_str(_X2Ep, ".p", 1171526419u, 0, 2, &be_const_str__X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E); -be_define_const_str(_X2Ep1, ".p1", 249175686u, 0, 3, &be_const_str_SERIAL_6N1); -be_define_const_str(_X2Ep2, ".p2", 232398067u, 0, 3, &be_const_str_decompress); -be_define_const_str(_X2Esize, ".size", 1965188224u, 0, 5, &be_const_str_STATE_DEFAULT); -be_define_const_str(_X2Etapp, ".tapp", 1363391594u, 0, 5, NULL); -be_define_const_str(_X2Ew, ".w", 1255414514u, 0, 2, &be_const_str__); -be_define_const_str(_X2F, "/", 705468254u, 0, 1, NULL); -be_define_const_str(_X2F_X2Eautoconf, "/.autoconf", 2212074393u, 0, 10, &be_const_str_CFG_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s); -be_define_const_str(_X2F_X3Frst_X3D, "/?rst=", 580074707u, 0, 6, &be_const_str_widget_cb); -be_define_const_str(_X2Fac, "/ac", 3904651978u, 0, 3, &be_const_str_Tasmota); -be_define_const_str(_X3A, ":", 1057798253u, 0, 1, &be_const_str_I2C_X3A); -be_define_const_str(_X3C, "<", 957132539u, 0, 1, &be_const_str_Unknown_X20command); -be_define_const_str(_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 3546571739u, 0, 11, &be_const_str_continue); -be_define_const_str(_X3C_X2Fselect_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 1863865923u, 0, 16, &be_const_str__global_def); -be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str_files); -be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str_ins_ramp); -be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, &be_const_str_get_bri); -be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "
", 842307168u, 0, 77, NULL); -be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "Choose a device configuration:
", 1336654704u, 0, 49, &be_const_str_get_warning_level); -be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, &be_const_str_byte); -be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Current auto-configuration", 4212500780u, 0, 82, &be_const_str_last_modified); -be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Select new auto-configuration", 1926223891u, 0, 80, &be_const_str__request_from); -be_define_const_str(_X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, "", 510303524u, 0, 30, NULL); -be_define_const_str(_X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, "", 3994619755u, 0, 54, &be_const_str_create_segment); -be_define_const_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, "

Exception:
'%s'
%s

", 4252565082u, 0, 59, &be_const_str_json_fdump_any); -be_define_const_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 2052843416u, 0, 25, &be_const_str_lv_event_cb); -be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 2058443583u, 0, 110, &be_const_str_OPTION_A); -be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, "

 (This feature requires an internet connection)

", 2719266486u, 0, 74, &be_const_str_connection_error); -be_define_const_str(_X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, "

Current configuration:

%s

", 4115655761u, 0, 46, &be_const_str_get_pixel_color); -be_define_const_str(_X3Cselect_X20name_X3D_X27zip_X27_X3E, "

", 1863865923u, 0, 16, &be_const_str_AudioOutput); +be_define_const_str(_X3C_X3D, "<=", 2499223986u, 0, 2, &be_const_str__X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E); +be_define_const_str(_X3Cbutton_X20name_X3D_X27reapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3ERe_X2Dapply_X20current_X20configuration_X3C_X2Fbutton_X3E, "", 3147934216u, 0, 82, &be_const_str_b); +be_define_const_str(_X3Cbutton_X20name_X3D_X27zipapply_X27_X20class_X3D_X27button_X20bgrn_X27_X3EApply_X20configuration_X3C_X2Fbutton_X3E, "", 1205771629u, 0, 72, &be_const_str_gpio); +be_define_const_str(_X3Cfieldset_X3E_X3Cstyle_X3E_X2Ebdis_X7Bbackground_X3A_X23888_X3B_X7D_X2Ebdis_X3Ahover_X7Bbackground_X3A_X23888_X3B_X7D_X3C_X2Fstyle_X3E, "
", 842307168u, 0, 77, &be_const_str__begin_transmission); +be_define_const_str(_X3Cinstance_X3A_X20_X25s_X28_X25s_X2C_X20_X25s_X2C_X20_X25s_X29, "Choose a device configuration:
", 1336654704u, 0, 49, &be_const_str_lv); +be_define_const_str(_X3Clambda_X3E, "", 607256038u, 0, 8, &be_const_str_energy_struct); +be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27Autoconfiguration_X27_X3E_X26nbsp_X3BCurrent_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Current auto-configuration", 4212500780u, 0, 82, &be_const_str_set_rate); +be_define_const_str(_X3Clegend_X3E_X3Cb_X20title_X3D_X27New_X20autoconf_X27_X3E_X26nbsp_X3BSelect_X20new_X20auto_X2Dconfiguration_X3C_X2Fb_X3E_X3C_X2Flegend_X3E, " Select new auto-configuration", 1926223891u, 0, 80, &be_const_str_get_percentage); +be_define_const_str(_X3Coption_X20value_X3D_X27_X25s_X27_X3E_X25s_X3C_X2Foption_X3E, "", 510303524u, 0, 30, &be_const_str_false); +be_define_const_str(_X3Coption_X20value_X3D_X27reset_X27_X3E_X26lt_X3BRemove_X20autoconf_X26gt_X3B_X3C_X2Foption_X3E, "", 3994619755u, 0, 54, &be_const_str_set_timer); +be_define_const_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E, "

Exception:
'%s'
%s

", 4252565082u, 0, 59, &be_const_str_remove_driver); +be_define_const_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E, "

", 2052843416u, 0, 25, NULL); +be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dac_X20action_X3D_X27ac_X27_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EAuto_X2Dconfiguration_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3C_X2Fp_X3E, "

", 2058443583u, 0, 110, &be_const_str_HTTP_GET); +be_define_const_str(_X3Cp_X3E_X3Cform_X20id_X3Dreapply_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27_X2Fac_X27_X20method_X3D_X27post_X27_X20, "

 (This feature requires an internet connection)

", 2719266486u, 0, 74, &be_const_str_get_object_from_ptr); +be_define_const_str(_X3Cp_X3ECurrent_X20configuration_X3A_X20_X3C_X2Fp_X3E_X3Cp_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X3C_X2Fp_X3E, "

Current configuration:

%s

", 4115655761u, 0, 46, &be_const_str_None); +be_define_const_str(_X3Cselect_X20name_X3D_X27zip_X27_X3E, "