diff --git a/.github/workflows/CI_github_ESP32.yml b/.github/workflows/CI_github_ESP32.yml
index 0c2b75709..e3d26ef19 100644
--- a/.github/workflows/CI_github_ESP32.yml
+++ b/.github/workflows/CI_github_ESP32.yml
@@ -84,6 +84,26 @@ jobs:
name: firmware
path: ./build_output
+ tasmota32-bluetooth:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v1
+ - name: Set up Python
+ uses: actions/setup-python@v1
+ - name: Install dependencies
+ run: |
+ python -m pip install --upgrade pip
+ pip install -U platformio
+ platformio upgrade --dev
+ platformio update
+ - name: Run PlatformIO
+ run: |
+ platformio run -e tasmota32-bluetooth
+ - uses: actions/upload-artifact@v2
+ with:
+ name: firmware
+ path: ./build_output
+
tasmota32-minimal:
runs-on: ubuntu-latest
steps:
diff --git a/.github/workflows/Tasmota_build.yml b/.github/workflows/Tasmota_build.yml
index f1647d203..a01f26253 100644
--- a/.github/workflows/Tasmota_build.yml
+++ b/.github/workflows/Tasmota_build.yml
@@ -824,6 +824,26 @@ jobs:
path: ./build_output
+ tasmota32-bluetooth:
+ needs: tasmota_pull
+ runs-on: ubuntu-latest
+ continue-on-error: true
+ steps:
+ - uses: actions/checkout@v1
+ - 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-knx:
needs: tasmota_pull
runs-on: ubuntu-latest
@@ -1442,6 +1462,7 @@ jobs:
[ ! -f ./mv_firmware/firmware/tasmota32-web*.* ] || mv ./mv_firmware/firmware/tasmota32-web*.* ./firmware/tasmota32/
[ ! -f ./mv_firmware/firmware/tasmota32-odroidgo.* ] || mv ./mv_firmware/firmware/tasmota32-odroidgo.* ./firmware/tasmota32/
[ ! -f ./mv_firmware/firmware/tasmota32-core2.* ] || mv ./mv_firmware/firmware/tasmota32-core2.* ./firmware/tasmota32/
+ [ ! -f ./mv_firmware/firmware/tasmota32-bluetooth.* ] || mv ./mv_firmware/firmware/tasmota32-bluetooth.* ./firmware/tasmota32/
[ ! -f ./mv_firmware/firmware/tasmota32-knx.* ] || mv ./mv_firmware/firmware/tasmota32-knx.* ./firmware/tasmota32/
[ ! -f ./mv_firmware/firmware/tasmota32* ] || mv ./mv_firmware/firmware/tasmota32* ./firmware/tasmota32/languages/
[ ! -f ./mv_firmware/firmware/* ] || mv ./mv_firmware/firmware/* ./firmware/tasmota/languages/
diff --git a/.github/workflows/Tasmota_build_master.yml b/.github/workflows/Tasmota_build_master.yml
index 87e48168f..7102cd5eb 100644
--- a/.github/workflows/Tasmota_build_master.yml
+++ b/.github/workflows/Tasmota_build_master.yml
@@ -824,6 +824,26 @@ jobs:
path: ./build_output
+ tasmota32-bluetooth:
+ needs: tasmota_pull
+ runs-on: ubuntu-latest
+ continue-on-error: true
+ steps:
+ - uses: actions/checkout@v1
+ - 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-knx:
needs: tasmota_pull
runs-on: ubuntu-latest
@@ -1442,6 +1462,7 @@ jobs:
[ ! -f ./mv_firmware/firmware/tasmota32-web*.* ] || mv ./mv_firmware/firmware/tasmota32-web*.* ./firmware/tasmota32/
[ ! -f ./mv_firmware/firmware/tasmota32-odroidgo.* ] || mv ./mv_firmware/firmware/tasmota32-odroidgo.* ./firmware/tasmota32/
[ ! -f ./mv_firmware/firmware/tasmota32-core2.* ] || mv ./mv_firmware/firmware/tasmota32-core2.* ./firmware/tasmota32/
+ [ ! -f ./mv_firmware/firmware/tasmota32-bluetooth.* ] || mv ./mv_firmware/firmware/tasmota32-bluetooth.* ./firmware/tasmota32/
[ ! -f ./mv_firmware/firmware/tasmota32-knx.* ] || mv ./mv_firmware/firmware/tasmota32-knx.* ./firmware/tasmota32/
[ ! -f ./mv_firmware/firmware/tasmota32* ] || mv ./mv_firmware/firmware/tasmota32* ./firmware/tasmota32/languages/
[ ! -f ./mv_firmware/firmware/* ] || mv ./mv_firmware/firmware/* ./firmware/tasmota/languages/
diff --git a/lib/lib_display/Display_Renderer-gemu-1.0/src/font24_7seg.c b/lib/lib_display/Display_Renderer-gemu-1.0/src/font24_7seg.c
new file mode 100644
index 000000000..1844fc6cf
--- /dev/null
+++ b/lib/lib_display/Display_Renderer-gemu-1.0/src/font24_7seg.c
@@ -0,0 +1,754 @@
+/**
+ ******************************************************************************
+ * @file font24.c
+ * @author MCD Application Team
+ * @version V1.0.0
+ * @date 18-February-2014
+ * @brief This file provides text font24 for STM32xx-EVAL's LCD driver.
+ ******************************************************************************
+ * @attention
+ *
+ *
© COPYRIGHT(c) 2014 STMicroelectronics
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. Neither the name of STMicroelectronics nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ******************************************************************************
+ */
+
+/* Includes ------------------------------------------------------------------*/
+#include "fonts.h"
+#include
+
+const uint8_t Font24_Table_7seg [] PROGMEM =
+{
+ // @0 ' ' (17 pixels wide)
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+
+ // @72 '!' (17 pixels wide)
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x03,0x80,0x00, // ###
+ 0x03,0x80,0x00, // ###
+ 0x03,0x80,0x00, // ###
+ 0x03,0x80,0x00, // ###
+ 0x03,0x80,0x00, // ###
+ 0x03,0x80,0x00, // ###
+ 0x03,0x80,0x00, // ###
+ 0x03,0x80,0x00, // ###
+ 0x03,0x80,0x00, // ###
+ 0x01,0x00,0x00, // #
+ 0x01,0x00,0x00, // #
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x03,0x80,0x00, // ###
+ 0x03,0x80,0x00, // ###
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+
+ // @144 '"' (17 pixels wide)
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x0e,0x70,0x00, // ### ###
+ 0x0e,0x70,0x00, // ### ###
+ 0x0e,0x70,0x00, // ### ###
+ 0x04,0x20,0x00, // # #
+ 0x04,0x20,0x00, // # #
+ 0x04,0x20,0x00, // # #
+ 0x04,0x20,0x00, // # #
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+
+ // @216 '#' (17 pixels wide)
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x06,0x60,0x00, // ## ##
+ 0x06,0x60,0x00, // ## ##
+ 0x06,0x60,0x00, // ## ##
+ 0x06,0x60,0x00, // ## ##
+ 0x06,0x60,0x00, // ## ##
+ 0x3f,0xf8,0x00, // ###########
+ 0x3f,0xf8,0x00, // ###########
+ 0x06,0x60,0x00, // ## ##
+ 0x0c,0xc0,0x00, // ## ##
+ 0x3f,0xf8,0x00, // ###########
+ 0x3f,0xf8,0x00, // ###########
+ 0x0c,0xc0,0x00, // ## ##
+ 0x0c,0xc0,0x00, // ## ##
+ 0x0c,0xc0,0x00, // ## ##
+ 0x0c,0xc0,0x00, // ## ##
+ 0x0c,0xc0,0x00, // ## ##
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+
+ // @288 '$' (17 pixels wide)
+ 0x00,0x00,0x00, //
+ 0x01,0x80,0x00, // ##
+ 0x01,0x80,0x00, // ##
+ 0x07,0xb0,0x00, // #### ##
+ 0x0f,0xf0,0x00, // ########
+ 0x18,0x70,0x00, // ## ###
+ 0x18,0x70,0x00, // ## ###
+ 0x1c,0x00,0x00, // ###
+ 0x0f,0x80,0x00, // #####
+ 0x07,0xe0,0x00, // ######
+ 0x00,0xf0,0x00, // ####
+ 0x18,0x30,0x00, // ## ##
+ 0x1c,0x30,0x00, // ### ##
+ 0x1c,0x70,0x00, // ### ###
+ 0x1f,0xe0,0x00, // ########
+ 0x1b,0xc0,0x00, // ## ####
+ 0x01,0x80,0x00, // ##
+ 0x01,0x80,0x00, // ##
+ 0x01,0x80,0x00, // ##
+ 0x01,0x80,0x00, // ##
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+
+ // @360 '%' (17 pixels wide)
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x07,0x80,0x00, // ####
+ 0x0f,0xc0,0x00, // ######
+ 0x1c,0xe0,0x00, // ### ###
+ 0x18,0x60,0x00, // ## ##
+ 0x18,0x60,0x00, // ## ##
+ 0x1c,0xe0,0x00, // ### ###
+ 0x0f,0xf8,0x00, // #########
+ 0x07,0xe0,0x00, // ######
+ 0x1f,0xf0,0x00, // #########
+ 0x07,0x38,0x00, // ### ###
+ 0x06,0x18,0x00, // ## ##
+ 0x06,0x18,0x00, // ## ##
+ 0x07,0x38,0x00, // ### ###
+ 0x03,0xf0,0x00, // ######
+ 0x01,0xe0,0x00, // ####
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+
+ // @432 '&' (17 pixels wide)
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x03,0xf0,0x00, // ######
+ 0x07,0xf0,0x00, // #######
+ 0x0c,0x60,0x00, // ## ##
+ 0x0c,0x00,0x00, // ##
+ 0x0c,0x00,0x00, // ##
+ 0x06,0x00,0x00, // ##
+ 0x07,0x00,0x00, // ###
+ 0x0f,0x9c,0x00, // ##### ###
+ 0x1d,0xfc,0x00, // ### #######
+ 0x18,0xf0,0x00, // ## ####
+ 0x18,0x70,0x00, // ## ###
+ 0x0f,0xfc,0x00, // ##########
+ 0x07,0xdc,0x00, // ##### ###
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+
+ // @504 ''' (17 pixels wide)
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x03,0x80,0x00, // ###
+ 0x03,0x80,0x00, // ###
+ 0x03,0x80,0x00, // ###
+ 0x01,0x00,0x00, // #
+ 0x01,0x00,0x00, // #
+ 0x01,0x00,0x00, // #
+ 0x01,0x00,0x00, // #
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+
+ // @576 '(' (17 pixels wide)
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x18,0x00, // ##
+ 0x00,0x38,0x00, // ###
+ 0x00,0x70,0x00, // ###
+ 0x00,0xf0,0x00, // ####
+ 0x00,0xe0,0x00, // ###
+ 0x00,0xe0,0x00, // ###
+ 0x01,0xc0,0x00, // ###
+ 0x01,0xc0,0x00, // ###
+ 0x01,0xc0,0x00, // ###
+ 0x01,0xc0,0x00, // ###
+ 0x01,0xc0,0x00, // ###
+ 0x01,0xc0,0x00, // ###
+ 0x00,0xe0,0x00, // ###
+ 0x00,0xe0,0x00, // ###
+ 0x00,0x70,0x00, // ###
+ 0x00,0x70,0x00, // ###
+ 0x00,0x38,0x00, // ###
+ 0x00,0x18,0x00, // ##
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+
+ // @648 ')' (17 pixels wide)
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x18,0x00,0x00, // ##
+ 0x1c,0x00,0x00, // ###
+ 0x0e,0x00,0x00, // ###
+ 0x0e,0x00,0x00, // ###
+ 0x07,0x00,0x00, // ###
+ 0x07,0x00,0x00, // ###
+ 0x03,0x80,0x00, // ###
+ 0x03,0x80,0x00, // ###
+ 0x03,0x80,0x00, // ###
+ 0x03,0x80,0x00, // ###
+ 0x03,0x80,0x00, // ###
+ 0x03,0x80,0x00, // ###
+ 0x07,0x00,0x00, // ###
+ 0x07,0x00,0x00, // ###
+ 0x0f,0x00,0x00, // ####
+ 0x0e,0x00,0x00, // ###
+ 0x1c,0x00,0x00, // ###
+ 0x18,0x00,0x00, // ##
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+
+ // @720 '*' (17 pixels wide)
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x01,0x80,0x00, // ##
+ 0x01,0x80,0x00, // ##
+ 0x01,0x80,0x00, // ##
+ 0x1d,0xb8,0x00, // ### ## ###
+ 0x1f,0xf8,0x00, // ##########
+ 0x07,0xe0,0x00, // ######
+ 0x03,0xc0,0x00, // ####
+ 0x03,0xc0,0x00, // ####
+ 0x06,0x60,0x00, // ## ##
+ 0x06,0x60,0x00, // ## ##
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+
+ // @792 '+' (17 pixels wide)
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x01,0x80,0x00, // ##
+ 0x01,0x80,0x00, // ##
+ 0x01,0x80,0x00, // ##
+ 0x01,0x80,0x00, // ##
+ 0x01,0x80,0x00, // ##
+ 0x3f,0xfc,0x00, // ############
+ 0x3f,0xfc,0x00, // ############
+ 0x01,0x80,0x00, // ##
+ 0x01,0x80,0x00, // ##
+ 0x01,0x80,0x00, // ##
+ 0x01,0x80,0x00, // ##
+ 0x01,0x80,0x00, // ##
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+
+ // @864 ',' (17 pixels wide)
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0xe0,0x00, // ###
+ 0x00,0xc0,0x00, // ##
+ 0x01,0xc0,0x00, // ###
+ 0x01,0x80,0x00, // ##
+ 0x01,0x80,0x00, // ##
+ 0x03,0x00,0x00, // ##
+ 0x03,0x00,0x00, // ##
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+
+ // @936 '-' (17 pixels wide)
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x1f,0xf8,0x00, // ##########
+ 0x1f,0xf8,0x00, // ##########
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+
+ // @1008 '.' (17 pixels wide)
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x03,0xc0,0x00, // ####
+ 0x03,0xc0,0x00, // ####
+ 0x03,0xc0,0x00, // ####
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+
+ // @1080 '/' (17 pixels wide)
+ 0x00,0x18,0x00, // ##
+ 0x00,0x18,0x00, // ##
+ 0x00,0x38,0x00, // ###
+ 0x00,0x30,0x00, // ##
+ 0x00,0x70,0x00, // ###
+ 0x00,0x60,0x00, // ##
+ 0x00,0x60,0x00, // ##
+ 0x00,0xc0,0x00, // ##
+ 0x00,0xc0,0x00, // ##
+ 0x01,0x80,0x00, // ##
+ 0x01,0x80,0x00, // ##
+ 0x03,0x00,0x00, // ##
+ 0x03,0x00,0x00, // ##
+ 0x06,0x00,0x00, // ##
+ 0x06,0x00,0x00, // ##
+ 0x0e,0x00,0x00, // ###
+ 0x0c,0x00,0x00, // ##
+ 0x1c,0x00,0x00, // ###
+ 0x18,0x00,0x00, // ##
+ 0x18,0x00,0x00, // ##
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+
+ // @0 ' ' (17 pixels wide)
+ 0x00,0x00,0x00, //
+ 0x07,0xfc,0x00, // #########
+ 0x07,0xfc,0x00, // #########
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x07,0xfc,0x00, // #########
+ 0x07,0xfc,0x00, // #########
+ 0x00,0x00,0x00, //
+
+ // @0 ' ' (17 pixels wide)
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+
+ // @0 ' ' (17 pixels wide)
+ 0x00,0x00,0x00, //
+ 0x07,0xfc,0x00, // #########
+ 0x07,0xfc,0x00, // #########
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x07,0xfc,0x00, // #########
+ 0x07,0xfc,0x00, // #########
+ 0x18,0x00,0x00, // ##
+ 0x18,0x00,0x00, // ##
+ 0x18,0x00,0x00, // ##
+ 0x18,0x00,0x00, // ##
+ 0x18,0x00,0x00, // ##
+ 0x18,0x00,0x00, // ##
+ 0x18,0x00,0x00, // ##
+ 0x18,0x00,0x00, // ##
+ 0x07,0xfc,0x00, // #########
+ 0x07,0xfc,0x00, // #########
+ 0x00,0x00,0x00, //
+
+ // @0 ' ' (17 pixels wide)
+ 0x00,0x00,0x00, //
+ 0x07,0xfc,0x00, // #########
+ 0x07,0xfc,0x00, // #########
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x07,0xfc,0x00, // #########
+ 0x07,0xfc,0x00, // #########
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x07,0xfc,0x00, // #########
+ 0x07,0xfc,0x00, // #########
+ 0x00,0x00,0x00, //
+
+ // @0 ' ' (17 pixels wide)
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x07,0xfc,0x00, // #########
+ 0x07,0xfc,0x00, // #########
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+
+ // @0 ' ' (17 pixels wide)
+ 0x00,0x00,0x00, //
+ 0x07,0xfc,0x00, // #########
+ 0x07,0xfc,0x00, // #########
+ 0x18,0x00,0x00, // ##
+ 0x18,0x00,0x00, // ##
+ 0x18,0x00,0x00, // ##
+ 0x18,0x00,0x00, // ##
+ 0x18,0x00,0x00, // ##
+ 0x18,0x00,0x00, // ##
+ 0x18,0x00,0x00, // ##
+ 0x18,0x00,0x00, // ##
+ 0x07,0xfc,0x00, // #########
+ 0x07,0xfc,0x00, // #########
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x07,0xfc,0x00, // #########
+ 0x07,0xfc,0x00, // #########
+ 0x00,0x00,0x00, //
+
+ // @0 ' ' (17 pixels wide)
+ 0x00,0x00,0x00, //
+ 0x07,0xfc,0x00, // #########
+ 0x07,0xfc,0x00, // #########
+ 0x18,0x00,0x00, // ##
+ 0x18,0x00,0x00, // ##
+ 0x18,0x00,0x00, // ##
+ 0x18,0x00,0x00, // ##
+ 0x18,0x00,0x00, // ##
+ 0x18,0x00,0x00, // ##
+ 0x18,0x00,0x00, // ##
+ 0x18,0x00,0x00, // ##
+ 0x07,0xfc,0x00, // #########
+ 0x07,0xfc,0x00, // #########
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x0f,0xfc,0x00, // ##########
+ 0x0f,0xfc,0x00, // ##########
+ 0x00,0x00,0x00, //
+
+ // @0 ' ' (17 pixels wide)
+ 0x00,0x00,0x00, //
+ 0x0f,0xfc,0x00, // ##########
+ 0x0f,0xfc,0x00, // ##########
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+
+ // @0 ' ' (17 pixels wide)
+ 0x00,0x00,0x00, //
+ 0x07,0xfc,0x00, // #########
+ 0x07,0xfc,0x00, // #########
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x07,0xfc,0x00, // #########
+ 0x07,0xfc,0x00, // #########
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x07,0xfc,0x00, // #########
+ 0x07,0xfc,0x00, // #########
+ 0x00,0x00,0x00, //
+
+ // @0 ' ' (17 pixels wide)
+ 0x00,0x00,0x00, //
+ 0x07,0xfc,0x00, // #########
+ 0x07,0xfc,0x00, // #########
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x18,0x03,0x00, // ## ##
+ 0x07,0xfc,0x00, // #########
+ 0x07,0xfc,0x00, // #########
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x03,0x00, // ##
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+
+ // @1872 ':' (17 pixels wide)
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0xf0,0x00, // ####
+ 0x00,0xf0,0x00, // ####
+ 0x00,0xf0,0x00, // ####
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0xf0,0x00, // ####
+ 0x00,0xf0,0x00, // ####
+ 0x00,0xf0,0x00, // ####
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00, //
+ 0x00,0x00,0x00 //
+};
+
+sFONT Font24_7seg = {
+ Font24_Table_7seg,
+ 17, /* Width */
+ 24, /* Height */
+};
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+
diff --git a/lib/lib_display/Display_Renderer-gemu-1.0/src/fonts.h b/lib/lib_display/Display_Renderer-gemu-1.0/src/fonts.h
index a19c1bedc..e7a709b74 100644
--- a/lib/lib_display/Display_Renderer-gemu-1.0/src/fonts.h
+++ b/lib/lib_display/Display_Renderer-gemu-1.0/src/fonts.h
@@ -51,8 +51,6 @@
/* Includes ------------------------------------------------------------------*/
#include
-#define USE_TINY_FONT
-
typedef struct _tFont
{
const uint8_t *table;
@@ -66,6 +64,7 @@ extern sFONT Font20;
extern sFONT Font16;
extern sFONT Font12;
extern sFONT Font8;
+extern sFONT Font24_7seg;
#ifdef __cplusplus
}
diff --git a/lib/lib_display/Display_Renderer-gemu-1.0/src/renderer.cpp b/lib/lib_display/Display_Renderer-gemu-1.0/src/renderer.cpp
index 31b62f1e2..c05faee13 100644
--- a/lib/lib_display/Display_Renderer-gemu-1.0/src/renderer.cpp
+++ b/lib/lib_display/Display_Renderer-gemu-1.0/src/renderer.cpp
@@ -31,10 +31,7 @@
//#define USE_ALL_EPD_FONTS
//#define USE_GFX_FONTS
#define USE_TINY_FONT
-
-#ifdef ESP32
-#define USE_ICON_FONT
-#endif
+#define USE_7SEG_FONT
uint8_t wr_redir=0;
@@ -247,6 +244,11 @@ void Renderer::setTextFont(uint8_t f) {
selected_font = &Font24;
#endif
break;
+ case 4:
+#ifdef USE_7SEG_FONT
+ selected_font = &Font24_7seg;
+ break;
+#endif
default:
selected_font = &Font12;
break;
diff --git a/platformio_override_sample.ini b/platformio_override_sample.ini
index 32a57fbdf..9b7ddfa53 100644
--- a/platformio_override_sample.ini
+++ b/platformio_override_sample.ini
@@ -27,6 +27,7 @@ default_envs =
; tasmota-zbbridge
; tasmota-ir
; tasmota32
+; tasmota32-bluetooth
; tasmota32-webcam
; tasmota32-minimal
; tasmota32-lite
diff --git a/platformio_tasmota_env32.ini b/platformio_tasmota_env32.ini
index 786b8c6cb..d0b4e97c3 100644
--- a/platformio_tasmota_env32.ini
+++ b/platformio_tasmota_env32.ini
@@ -58,6 +58,11 @@ board_build.partitions = esp32_partition_app1984k_spiffs12M.csv
build_flags = ${common32.build_flags} -DBOARD_HAS_PSRAM -mfix-esp32-psram-cache-issue -DFIRMWARE_M5STACK_CORE2
lib_extra_dirs = lib/libesp32, lib/lib_basic, lib/lib_i2c, lib/lib_rf, lib/lib_div, lib/lib_ssl, lib/lib_display, lib/lib_audio
+[env:tasmota32-bluetooth]
+extends = env:tasmota32
+build_flags = ${common32.build_flags} -DFIRMWARE_BLUETOOTH
+lib_extra_dirs = lib/libesp32, lib/lib_basic, lib/lib_i2c, lib/lib_ssl
+
[env:tasmota32-minimal]
extends = env:tasmota32
build_flags = ${common32.build_flags} -DFIRMWARE_MINIMAL
diff --git a/tasmota/tasmota_configurations_ESP32.h b/tasmota/tasmota_configurations_ESP32.h
index 431b3381f..951d63e41 100644
--- a/tasmota/tasmota_configurations_ESP32.h
+++ b/tasmota/tasmota_configurations_ESP32.h
@@ -117,6 +117,29 @@
#endif // USE_SCRIPT
#endif // FIRMWARE_M5STACK_CORE2
+/*********************************************************************************************\
+ * [tasmota32-bluetooth.bin]
+ * Provide an image with BLE support
+\*********************************************************************************************/
+
+#ifdef FIRMWARE_BLUETOOTH
+
+#undef CODE_IMAGE_STR
+#define CODE_IMAGE_STR "bluetooth"
+
+#undef MODULE
+#define MODULE WEMOS // [Module] Select default module from tasmota_template.h
+#undef FALLBACK_MODULE
+#define FALLBACK_MODULE WEMOS // [Module2] Select default module on fast reboot where USER_MODULE is user template
+
+#define USE_UFILESYS
+#define USE_SDCARD
+ #define GUI_TRASH_FILE
+#define USE_ADC
+#define USE_BLE_ESP32 // Enable new BLE driver
+#define USE_MI_ESP32 // (ESP32 only) Add support for ESP32 as a BLE-bridge (+9k2 mem, +292k flash)
+#endif // FIRMWARE_BLUETOOTH
+
#endif // ESP32
#endif // _TASMOTA_CONFIGURATIONS_ESP32_H_
diff --git a/tasmota/tasmota_template.h b/tasmota/tasmota_template.h
index 98567ca42..7b4fc3ae3 100644
--- a/tasmota/tasmota_template.h
+++ b/tasmota/tasmota_template.h
@@ -2379,6 +2379,7 @@ const uint8_t kModuleNiceList[] PROGMEM = {
#endif // USE_M5STACK_CORE2
};
+// !!! Update this list in the same order as kModuleNiceList !!!
const char kModuleNames[] PROGMEM =
"ESP32-DevKit|"
#ifdef USE_WEBCAM
@@ -2401,6 +2402,7 @@ const char kModuleNames[] PROGMEM =
#endif // USE_M5STACK_CORE2
;
+// !!! Update this list in the same order as SupportedModules !!!
const mytmplt kModules[] PROGMEM = {
{ // WEMOS - Espressif ESP32-DevKitC - Any ESP32 device like WeMos and NodeMCU hardware (ESP32)
AGPIO(GPIO_USER), // 0 (I)O GPIO0, ADC2_CH1, TOUCH1, RTC_GPIO11, CLK_OUT1, EMAC_TX_CLK
diff --git a/tasmota/xdrv_04_light.ino b/tasmota/xdrv_04_light.ino
index 2d8c2ec5b..395fae4b5 100644
--- a/tasmota/xdrv_04_light.ino
+++ b/tasmota/xdrv_04_light.ino
@@ -2828,58 +2828,62 @@ void CmndRgbwwTable(void)
void CmndFade(void)
{
- // Fade - Show current Fade state
- // Fade 0 - Turn Fade Off
- // Fade On - Turn Fade On
- // Fade Toggle - Toggle Fade state
- switch (XdrvMailbox.payload) {
- case 0: // Off
- case 1: // On
- Settings.light_fade = XdrvMailbox.payload;
- break;
- case 2: // Toggle
- Settings.light_fade ^= 1;
- break;
+ if (2 == XdrvMailbox.index) {
+ // Home Assistant backwards compatibility, can be removed mid 2021
+ } else {
+ // Fade - Show current Fade state
+ // Fade 0 - Turn Fade Off
+ // Fade On - Turn Fade On
+ // Fade Toggle - Toggle Fade state
+ switch (XdrvMailbox.payload) {
+ case 0: // Off
+ case 1: // On
+ Settings.light_fade = XdrvMailbox.payload;
+ break;
+ case 2: // Toggle
+ Settings.light_fade ^= 1;
+ break;
+ }
+ #ifdef USE_DEVICE_GROUPS
+ if (XdrvMailbox.payload >= 0 && XdrvMailbox.payload <= 2) SendDeviceGroupMessage(Light.device, DGR_MSGTYP_UPDATE, DGR_ITEM_LIGHT_FADE, Settings.light_fade);
+ #endif // USE_DEVICE_GROUPS
+ if (!Settings.light_fade) { Light.fade_running = false; }
}
-#ifdef USE_DEVICE_GROUPS
- if (XdrvMailbox.payload >= 0 && XdrvMailbox.payload <= 2) SendDeviceGroupMessage(Light.device, DGR_MSGTYP_UPDATE, DGR_ITEM_LIGHT_FADE, Settings.light_fade);
-#endif // USE_DEVICE_GROUPS
- if (!Settings.light_fade) { Light.fade_running = false; }
ResponseCmndStateText(Settings.light_fade);
}
void CmndSpeed(void)
{
- if (XdrvMailbox.index == 2) {
+ if (2 == XdrvMailbox.index) {
if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload <= 40)) {
Light.fade_once_enabled = true;
- Light.fade_once_value = XdrvMailbox.payload > 0;
+ Light.fade_once_value = (XdrvMailbox.payload > 0);
Light.speed_once_enabled = true;
Light.speed_once_value = XdrvMailbox.payload;
if (!Light.fade_once_value) { Light.fade_running = false; }
}
- return;
- }
-
- // Speed 1 - Fast
- // Speed 40 - Very slow
- // Speed + - Increment Speed
- // Speed - - Decrement Speed
- if (1 == XdrvMailbox.data_len) {
- if (('+' == XdrvMailbox.data[0]) && (Settings.light_speed > 1)) {
- XdrvMailbox.payload = Settings.light_speed - 1;
+ ResponseCmndNumber(Light.speed_once_value);
+ } else {
+ // Speed 1 - Fast
+ // Speed 40 - Very slow
+ // Speed + - Increment Speed
+ // Speed - - Decrement Speed
+ if (1 == XdrvMailbox.data_len) {
+ if (('+' == XdrvMailbox.data[0]) && (Settings.light_speed > 1)) {
+ XdrvMailbox.payload = Settings.light_speed - 1;
+ }
+ else if (('-' == XdrvMailbox.data[0]) && (Settings.light_speed < 40)) {
+ XdrvMailbox.payload = Settings.light_speed + 1;
+ }
}
- else if (('-' == XdrvMailbox.data[0]) && (Settings.light_speed < 40)) {
- XdrvMailbox.payload = Settings.light_speed + 1;
- }
- }
- if ((XdrvMailbox.payload > 0) && (XdrvMailbox.payload <= 40)) {
- Settings.light_speed = XdrvMailbox.payload;
+ if ((XdrvMailbox.payload > 0) && (XdrvMailbox.payload <= 40)) {
+ Settings.light_speed = XdrvMailbox.payload;
#ifdef USE_DEVICE_GROUPS
- SendDeviceGroupMessage(Light.device, DGR_MSGTYP_UPDATE, DGR_ITEM_LIGHT_SPEED, Settings.light_speed);
+ SendDeviceGroupMessage(Light.device, DGR_MSGTYP_UPDATE, DGR_ITEM_LIGHT_SPEED, Settings.light_speed);
#endif // USE_DEVICE_GROUPS
+ }
+ ResponseCmndNumber(Settings.light_speed);
}
- ResponseCmndNumber(Settings.light_speed);
}
void CmndWakeupDuration(void)
diff --git a/tasmota/xdrv_10_scripter.ino b/tasmota/xdrv_10_scripter.ino
index dc5f74b50..3022bfb20 100755
--- a/tasmota/xdrv_10_scripter.ino
+++ b/tasmota/xdrv_10_scripter.ino
@@ -4317,6 +4317,23 @@ int16_t Run_script_sub(const char *type, int8_t tlen, struct GVARS *gv) {
WSContentFlush();
goto next_line;
}
+ else if (!strncmp(lp, "rapp", 3)) {
+ lp+=4;
+ // skip one space after cmd
+ char tmp[256];
+ Replace_Cmd_Vars(lp ,1 , tmp, sizeof(tmp));
+ ResponseAppend_P(PSTR("%s"), tmp);
+ goto next_line;
+ }
+#ifdef USE_SENDMAIL
+ else if (!strncmp(lp, "sm", 2)) {
+ lp+=3;
+ char tmp[256];
+ Replace_Cmd_Vars(lp ,1 , tmp, sizeof(tmp));
+ SendMail(tmp);
+ goto next_line;
+ }
+#endif
else if (!strncmp(lp,"=>",2) || !strncmp(lp,"->",2) || !strncmp(lp,"+>",2) || !strncmp(lp,"print",5)) {
// execute cmd
uint8_t sflag = 0,pflg = 0,svmqtt,swll;
@@ -7192,8 +7209,13 @@ void ScriptJsonAppend(void) {
}
if (*lp!=';') {
// send this line to mqtt
- Replace_Cmd_Vars(lp, 1, tmp, sizeof(tmp));
- ResponseAppend_P(PSTR("%s"), tmp);
+ if (!strncmp(lp, "%=#", 3)) {
+ // subroutine
+ lp = scripter_sub(lp + 1, 0);
+ } else {
+ Replace_Cmd_Vars(lp, 1, tmp, sizeof(tmp));
+ ResponseAppend_P(PSTR("%s"), tmp);
+ }
}
if (*lp==SCRIPT_EOL) {
lp++;
diff --git a/tasmota/xdrv_16_tuyamcu.ino b/tasmota/xdrv_16_tuyamcu.ino
index 5f94e576d..8f4d8e8d8 100644
--- a/tasmota/xdrv_16_tuyamcu.ino
+++ b/tasmota/xdrv_16_tuyamcu.ino
@@ -318,6 +318,24 @@ int StrCmpNoCase(char const *Str1, char const *Str2) // Compare case sensistive
}
}
+float TuyaAdjustedTemperature(uint16_t packetValue, uint8_t res)
+{
+ switch (res)
+ {
+ case 1:
+ return (float)packetValue / 10.0;
+ break;
+ case 2:
+ return (float)packetValue / 100.0;
+ break;
+ case 3:
+ return (float)packetValue / 1000.0;
+ break;
+ default:
+ return (float)packetValue;
+ break;
+ }
+}
/*********************************************************************************************\
* Internal Functions
\*********************************************************************************************/
@@ -732,7 +750,7 @@ void TuyaProcessStatePacket(void) {
} else { res = Settings.flag2.temperature_resolution; }
GetTextIndexed(sname, sizeof(sname), (fnId-71), kTuyaSensors);
ResponseClear(); // Clear retained message
- Response_P(PSTR("{\"TuyaSNS\":{\"%s\":%s}}"), sname, dtostrfd(packetValue, res, tempval)); // sensor update is just on change
+ Response_P(PSTR("{\"TuyaSNS\":{\"%s\":%s}}"), sname, dtostrfd(TuyaAdjustedTemperature(packetValue, res), res, tempval)); // sensor update is just on change
MqttPublishPrefixTopicRulesProcess_P(TELE, PSTR(D_CMND_SENSOR));
}
}
@@ -1295,7 +1313,7 @@ void TuyaSensorsShow(bool json)
GetTextIndexed(sname, sizeof(sname), (sensor-71), kTuyaSensors);
ResponseAppend_P(PSTR("\"%s\":%s"), sname,
- (Tuya.SensorsValid[sensor-71] ? dtostrfd(Tuya.Sensors[sensor-71], res, tempval) : PSTR("null")));
+ (Tuya.SensorsValid[sensor-71] ? dtostrfd(TuyaAdjustedTemperature(Tuya.Sensors[sensor-71], res), res, tempval) : PSTR("null")));
added = true;
}
#ifdef USE_WEBSERVER
@@ -1303,11 +1321,11 @@ void TuyaSensorsShow(bool json)
if (TuyaGetDpId(sensor) != 0) {
switch (sensor) {
case 71:
- WSContentSend_Temp("", Tuya.Sensors[0]);
+ WSContentSend_Temp("", TuyaAdjustedTemperature(Tuya.Sensors[0], Settings.flag2.temperature_resolution));
break;
case 72:
WSContentSend_PD(PSTR("{s}" D_TEMPERATURE " Set{m}%s " D_UNIT_DEGREE "%c{e}"),
- dtostrfd(Tuya.Sensors[1], Settings.flag2.temperature_resolution, tempval), TempUnit());
+ dtostrfd(TuyaAdjustedTemperature(Tuya.Sensors[1], Settings.flag2.temperature_resolution), Settings.flag2.temperature_resolution, tempval), TempUnit());
break;
case 73:
WSContentSend_PD(HTTP_SNS_HUM, "", dtostrfd(Tuya.Sensors[2], Settings.flag2.temperature_resolution, tempval));
diff --git a/tasmota/xsns_53_sml.ino b/tasmota/xsns_53_sml.ino
index 84b7643fa..878001ed4 100755
--- a/tasmota/xsns_53_sml.ino
+++ b/tasmota/xsns_53_sml.ino
@@ -1419,9 +1419,8 @@ void SML_Decode(uint8_t index) {
}
} else {
// compare value
- uint8_t found=1, use_uval = 1;
- uint32_t ebus_uval=99;
- float ebus_dval;
+ uint8_t found=1;
+ double ebus_dval=99;
float mbus_dval=99;
while (*mp!='@') {
if (meter_desc_p[mindex].type=='o' || meter_desc_p[mindex].type=='c') {
@@ -1445,19 +1444,18 @@ void SML_Decode(uint8_t index) {
cp++;
} else if (!strncmp(mp,"UUuuUUuu",8)) {
uint32_t val= (cp[0]<<24)|(cp[1]<<16)|(cp[2]<<8)|(cp[3]<<0);
- ebus_uval=val;
+ ebus_dval=val;
mbus_dval=val;
mp+=8;
cp+=4;
} else if (*mp=='U' && *(mp+1)=='U' && *(mp+2)=='u' && *(mp+3)=='u'){
uint16_t val = cp[1]|(cp[0]<<8);
mbus_dval=val;
- ebus_uval=val;
+ ebus_dval=val;
mp+=4;
cp+=2;
} else if (!strncmp(mp,"SSssSSss",8)) {
int32_t val= (cp[0]<<24)|(cp[1]<<16)|(cp[2]<<8)|(cp[3]<<0);
- use_uval = 0;
ebus_dval=val;
mbus_dval=val;
mp+=8;
@@ -1465,25 +1463,23 @@ void SML_Decode(uint8_t index) {
} else if (*mp=='u' && *(mp+1)=='u' && *(mp+2)=='U' && *(mp+3)=='U'){
uint16_t val = cp[0]|(cp[1]<<8);
mbus_dval=val;
- ebus_uval=val;
+ ebus_dval=val;
mp+=4;
cp+=2;
} else if (*mp=='u' && *(mp+1)=='u') {
uint8_t val = *cp++;
mbus_dval=val;
- ebus_uval=val;
+ ebus_dval=val;
mp+=2;
} else if (*mp=='s' && *(mp+1)=='s' && *(mp+2)=='S' && *(mp+3)=='S') {
int16_t val = *cp|(*(cp+1)<<8);
mbus_dval=val;
- use_uval = 0;
ebus_dval=val;
mp+=4;
cp+=2;
} else if (*mp=='S' && *(mp+1)=='S' && *(mp+2)=='s' && *(mp+3)=='s') {
int16_t val = cp[1]|(cp[0]<<8);
mbus_dval=val;
- use_uval = 0;
ebus_dval=val;
mp+=4;
cp+=2;
@@ -1491,14 +1487,12 @@ void SML_Decode(uint8_t index) {
else if (*mp=='s' && *(mp+1)=='s') {
int8_t val = *cp++;
mbus_dval=val;
- use_uval = 0;
ebus_dval=val;
mp+=2;
}
else if (!strncmp(mp,"ffffffff",8)) {
uint32_t val= (cp[0]<<24)|(cp[1]<<16)|(cp[2]<<8)|(cp[3]<<0);
float *fp=(float*)&val;
- use_uval = 0;
ebus_dval=*fp;
mbus_dval=*fp;
mp+=8;
@@ -1508,7 +1502,6 @@ void SML_Decode(uint8_t index) {
// reverse word float
uint32_t val= (cp[1]<<0)|(cp[0]<<8)|(cp[3]<<16)|(cp[2]<<24);
float *fp=(float*)&val;
- use_uval = 0;
ebus_dval=*fp;
mbus_dval=*fp;
mp+=8;
@@ -1588,9 +1581,9 @@ void SML_Decode(uint8_t index) {
// ebus pzem or mbus or raw
if (*mp=='b') {
mp++;
- uint8_t shift=*mp&7;
- ebus_uval>>=shift;
- ebus_uval&=1;
+ uint8_t shift = *mp&7;
+ ebus_dval = (uint32_t)ebus_dval>>shift;
+ ebus_dval = (uint32_t)ebus_dval&1;
mp+=2;
}
if (*mp=='i') {
@@ -1613,8 +1606,6 @@ void SML_Decode(uint8_t index) {
uint8_t crc = SML_PzemCrc(&smltbuf[mindex][0],6);
if (crc!=smltbuf[mindex][6]) goto nextsect;
dval=mbus_dval;
- } else if (use_uval) {
- dval=ebus_uval;
} else {
dval=ebus_dval;
}
diff --git a/tasmota/xsns_78_ezo.ino b/tasmota/xsns_78_ezo.ino
index a33ad9cdc..d1e27fc01 100644
--- a/tasmota/xsns_78_ezo.ino
+++ b/tasmota/xsns_78_ezo.ino
@@ -53,7 +53,7 @@ struct EZOStruct {
{
// Transmit our command verbatim
Wire.beginTransmission(addr);
- Wire.write(cmd, len);
+ Wire.write((uint8_t*)cmd, len);
if (Wire.endTransmission() != 0) {
return;
}