Merged changes
|
@ -67,6 +67,7 @@
|
||||||
| USE_PZEM_AC | - | - | x | x | x | - | - |
|
| USE_PZEM_AC | - | - | x | x | x | - | - |
|
||||||
| USE_PZEM_DC | - | - | x | x | x | - | - |
|
| USE_PZEM_DC | - | - | x | x | x | - | - |
|
||||||
| USE_MCP39F501 | - | x | x | x | x | - | - |
|
| USE_MCP39F501 | - | x | x | x | x | - | - |
|
||||||
|
| USE_SDM72 | - | - | - | - | x | - | - |
|
||||||
| USE_SDM120 | - | - | - | - | x | - | - |
|
| USE_SDM120 | - | - | - | - | x | - | - |
|
||||||
| USE_SDM630 | - | - | - | - | x | - | - |
|
| USE_SDM630 | - | - | - | - | x | - | - |
|
||||||
| USE_DDS2382 | - | - | - | - | x | - | - |
|
| USE_DDS2382 | - | - | - | - | x | - | - |
|
||||||
|
|
13
CHANGELOG.md
|
@ -3,9 +3,18 @@ All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
## [Unreleased] - Development
|
## [Unreleased] - Development
|
||||||
|
|
||||||
## [9.2.0.6]
|
## [9.2.0.7]
|
||||||
|
### Added
|
||||||
|
- Support for Device Groups Device Map (#10898)
|
||||||
|
- Support for Eastron SDM72D-M three phase 100A Modbus energy meter (#10862)
|
||||||
|
- Support for Frysk language translations by Christiaan Heerze
|
||||||
|
- ESP8266 Fallback to ``*.bin.gz`` binary when OTA upload of ``*.bin`` binary fails
|
||||||
|
- Berry language improved Tasmota integration
|
||||||
|
- IRremoteESP8266 library from v2.7.14 to v2.7.15
|
||||||
|
|
||||||
|
## [9.2.0.6] 20210210
|
||||||
### Changed
|
### Changed
|
||||||
- Removed migration support for versions before v8.1.0 (Doris)
|
- Remove support for direct migration from versions before v8.1.0 (Doris)
|
||||||
- ESP32 Increase number of switch GPIOs from 8 to 28
|
- ESP32 Increase number of switch GPIOs from 8 to 28
|
||||||
- ESP32 Increase number of interlock groups from 4 to 14
|
- ESP32 Increase number of interlock groups from 4 to 14
|
||||||
- Increase number of button GPIOs from 4 to 8
|
- Increase number of button GPIOs from 4 to 8
|
||||||
|
|
|
@ -4,6 +4,8 @@
|
||||||
|
|
||||||
## Migration Information
|
## Migration Information
|
||||||
|
|
||||||
|
**This version removes support for direct migration from versions before v8.1.0 (Doris)**
|
||||||
|
|
||||||
See [migration path](https://tasmota.github.io/docs/Upgrading#migration-path) for instructions how to migrate to a major version. Pay attention to the following version breaks due to dynamic settings updates:
|
See [migration path](https://tasmota.github.io/docs/Upgrading#migration-path) for instructions how to migrate to a major version. Pay attention to the following version breaks due to dynamic settings updates:
|
||||||
|
|
||||||
1. Migrate to **Sonoff-Tasmota 3.9.x**
|
1. Migrate to **Sonoff-Tasmota 3.9.x**
|
||||||
|
@ -38,6 +40,7 @@ For initial configuration this release supports Webserver based **WifiManager**
|
||||||
|
|
||||||
## Provided Binary Downloads
|
## Provided Binary Downloads
|
||||||
|
|
||||||
|
### ESP8266 or ESP8285 based
|
||||||
The following binary downloads have been compiled with ESP8266/Arduino library core version **2.7.4.9**.
|
The following binary downloads have been compiled with ESP8266/Arduino library core version **2.7.4.9**.
|
||||||
|
|
||||||
- **tasmota.bin** = The Tasmota version with most drivers. **RECOMMENDED RELEASE BINARY**
|
- **tasmota.bin** = The Tasmota version with most drivers. **RECOMMENDED RELEASE BINARY**
|
||||||
|
@ -45,18 +48,37 @@ The following binary downloads have been compiled with ESP8266/Arduino library c
|
||||||
- **tasmota-lite.bin** = The Lite version without most drivers and sensors.
|
- **tasmota-lite.bin** = The Lite version without most drivers and sensors.
|
||||||
- **tasmota-knx.bin** = The Knx version without some features but adds KNX support.
|
- **tasmota-knx.bin** = The Knx version without some features but adds KNX support.
|
||||||
- **tasmota-sensors.bin** = The Sensors version adds more useful sensors.
|
- **tasmota-sensors.bin** = The Sensors version adds more useful sensors.
|
||||||
- **tasmota-ir** = The InfraRed Receiver and transmitter version allowing all available protocols provided by library IRremoteESP8266 but without most other features.
|
- **tasmota-ir.bin** = The InfraRed Receiver and transmitter version allowing all available protocols provided by library IRremoteESP8266 but without most other features.
|
||||||
- **tasmota-display.bin** = The Display version without Energy Monitoring but adds display support.
|
- **tasmota-display.bin** = The Display version without Energy Monitoring but adds display support.
|
||||||
- **tasmota-zbbridge.bin** = The dedicated Sonoff Zigbee Bridge version.
|
- **tasmota-zbbridge.bin** = The dedicated Sonoff Zigbee Bridge version.
|
||||||
- **tasmota-minimal.bin** = The Minimal version allows intermediate OTA uploads to support larger versions and does NOT change any persistent parameter. This version **should NOT be used for initial installation**.
|
- **tasmota-minimal.bin** = The Minimal version allows intermediate OTA uploads to support larger versions and does NOT change any persistent parameter. This version **should NOT be used for initial installation**.
|
||||||
|
|
||||||
The attached binaries can also be downloaded from http://ota.tasmota.com/tasmota/release for ESP8266 or http://ota.tasmota.com/tasmota32/release for ESP32. The links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmota.com/tasmota/release/tasmota.bin.gz``
|
Above binaries are also available as gzipped version allowing faster uploads.
|
||||||
|
|
||||||
|
The attached binaries can also be downloaded from http://ota.tasmota.com/tasmota/release. The links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmota.com/tasmota/release/tasmota.bin.gz``
|
||||||
|
|
||||||
|
### ESP32 based
|
||||||
|
The following binary downloads have been compiled with ESP32/Arduino library core version **1.0.5-rc6**.
|
||||||
|
|
||||||
|
- **tasmota32.bin** = The Tasmota version with most drivers. **RECOMMENDED RELEASE BINARY**
|
||||||
|
- **tasmota32-BG.bin** to **tasmota32-TW.bin** = The Tasmota version in different languages.
|
||||||
|
- **tasmota32-lite.bin** = The Lite version without most drivers and sensors.
|
||||||
|
- **tasmota32-knx.bin** = The Knx version without some features but adds KNX support.
|
||||||
|
- **tasmota32-sensors.bin** = The Sensors version adds more useful sensors.
|
||||||
|
- **tasmota32-ir.bin** = The InfraRed Receiver and transmitter version allowing all available protocols provided by library IRremoteESP8266 but without most other features.
|
||||||
|
- **tasmota32-display.bin** = The Display version without Energy Monitoring but adds display support.
|
||||||
|
- **tasmota32-webcam.bin** = The Webcam version adds webcam support.
|
||||||
|
- **tasmota32-bluetooth.bin** = The Bluetooth version adds BLE support.
|
||||||
|
- **tasmota32-odroidgo.bin** = The Odroid-Go version is specifically tailored to Odroid_go hardware.
|
||||||
|
- **tasmota32-core2.bin** = The Core2 version is specifically tailored to M5Stack Core2 hardware.
|
||||||
|
|
||||||
|
The attached binaries can also be downloaded from http://ota.tasmota.com/tasmota32/release. The links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmota.com/tasmota32/release/tasmota32.bin``
|
||||||
|
|
||||||
[List](MODULES.md) of embedded modules.
|
[List](MODULES.md) of embedded modules.
|
||||||
|
|
||||||
[Complete list](BUILDS.md) of available feature and sensors.
|
[Complete list](BUILDS.md) of available feature and sensors.
|
||||||
|
|
||||||
## Changelog v9.2.0.6
|
## Changelog v9.2.0.7
|
||||||
### Added
|
### Added
|
||||||
- Command ``CTRange`` to specify the visible CT range the bulb is capable of [#10311](https://github.com/arendst/Tasmota/issues/10311)
|
- Command ``CTRange`` to specify the visible CT range the bulb is capable of [#10311](https://github.com/arendst/Tasmota/issues/10311)
|
||||||
- Command ``L1MusicSync <0|Off>|<1|On>|<2|Toggle>, 1..10, 1..100>`` to control Sonoff L1 Music Sync mode sensitivity and speed [#10722](https://github.com/arendst/Tasmota/issues/10722)
|
- Command ``L1MusicSync <0|Off>|<1|On>|<2|Toggle>, 1..10, 1..100>`` to control Sonoff L1 Music Sync mode sensitivity and speed [#10722](https://github.com/arendst/Tasmota/issues/10722)
|
||||||
|
@ -64,7 +86,7 @@ The attached binaries can also be downloaded from http://ota.tasmota.com/tasmota
|
||||||
- Command ``Speed2`` to control a once off fade [#10741](https://github.com/arendst/Tasmota/issues/10741)
|
- Command ``Speed2`` to control a once off fade [#10741](https://github.com/arendst/Tasmota/issues/10741)
|
||||||
- Command ``VirtualCT`` to simulate or fine tune CT bulbs with 3,4,5 channels [#10311](https://github.com/arendst/Tasmota/issues/10311)
|
- Command ``VirtualCT`` to simulate or fine tune CT bulbs with 3,4,5 channels [#10311](https://github.com/arendst/Tasmota/issues/10311)
|
||||||
- Command ``SetOption40 0..250`` to disable button functionality if activated for over 0.1 second re-introduced
|
- Command ``SetOption40 0..250`` to disable button functionality if activated for over 0.1 second re-introduced
|
||||||
- Command ``SetOption43 1..255`` to control Rotary step (#10407)
|
- Command ``SetOption43 1..255`` to control Rotary step [#10407](https://github.com/arendst/Tasmota/issues/10407)
|
||||||
- Command ``SetOption118 1`` to move ZbReceived from JSON message and into the subtopic replacing "SENSOR" default [#10353](https://github.com/arendst/Tasmota/issues/10353)
|
- Command ``SetOption118 1`` to move ZbReceived from JSON message and into the subtopic replacing "SENSOR" default [#10353](https://github.com/arendst/Tasmota/issues/10353)
|
||||||
- Command ``SetOption119 1`` to remove the device addr from json payload, can be used with zb_topic_fname where the addr is already known from the topic [#10355](https://github.com/arendst/Tasmota/issues/10355)
|
- Command ``SetOption119 1`` to remove the device addr from json payload, can be used with zb_topic_fname where the addr is already known from the topic [#10355](https://github.com/arendst/Tasmota/issues/10355)
|
||||||
- Zigbee command ``SetOption120 1`` or ``ZbEndpointTopic 1`` to add the zigbee endpoint as suffix in topic when using ``SetOption89 1``
|
- Zigbee command ``SetOption120 1`` or ``ZbEndpointTopic 1`` to add the zigbee endpoint as suffix in topic when using ``SetOption89 1``
|
||||||
|
@ -84,6 +106,7 @@ The attached binaries can also be downloaded from http://ota.tasmota.com/tasmota
|
||||||
- Support for up to 4 I2C SEESAW_SOIL Capacitance & Temperature sensors by Peter Franck [#10481](https://github.com/arendst/Tasmota/issues/10481)
|
- Support for up to 4 I2C SEESAW_SOIL Capacitance & Temperature sensors by Peter Franck [#10481](https://github.com/arendst/Tasmota/issues/10481)
|
||||||
- Support for TOF10120 time of flight sensor by Cyril Pawelko [#10190](https://github.com/arendst/Tasmota/issues/10190)
|
- Support for TOF10120 time of flight sensor by Cyril Pawelko [#10190](https://github.com/arendst/Tasmota/issues/10190)
|
||||||
- Support for Afrikaans language translations by Christiaan Heerze
|
- Support for Afrikaans language translations by Christiaan Heerze
|
||||||
|
- Support for Frysk language translations by Christiaan Heerze
|
||||||
- Support for IR inverted leds using ``#define IR_SEND_INVERTED true`` [#10301](https://github.com/arendst/Tasmota/issues/10301)
|
- Support for IR inverted leds using ``#define IR_SEND_INVERTED true`` [#10301](https://github.com/arendst/Tasmota/issues/10301)
|
||||||
- Support for disabling 38kHz IR modulation using ``#define IR_SEND_USE_MODULATION false`` [#10301](https://github.com/arendst/Tasmota/issues/10301)
|
- Support for disabling 38kHz IR modulation using ``#define IR_SEND_USE_MODULATION false`` [#10301](https://github.com/arendst/Tasmota/issues/10301)
|
||||||
- Support for SPI display driver for ST7789 TFT by Gerhard Mutz [#9037](https://github.com/arendst/Tasmota/issues/9037)
|
- Support for SPI display driver for ST7789 TFT by Gerhard Mutz [#9037](https://github.com/arendst/Tasmota/issues/9037)
|
||||||
|
@ -91,6 +114,8 @@ The attached binaries can also be downloaded from http://ota.tasmota.com/tasmota
|
||||||
- Support for 24/26/32/34 bit RFID Wiegand interface (D0/D1) by Sigurd Leuther [#3647](https://github.com/arendst/Tasmota/issues/3647)
|
- Support for 24/26/32/34 bit RFID Wiegand interface (D0/D1) by Sigurd Leuther [#3647](https://github.com/arendst/Tasmota/issues/3647)
|
||||||
- Support for SM2135 current selection using GPIO ``SM2135 DAT`` index [#10634](https://github.com/arendst/Tasmota/issues/10634)
|
- Support for SM2135 current selection using GPIO ``SM2135 DAT`` index [#10634](https://github.com/arendst/Tasmota/issues/10634)
|
||||||
- Support for Sugar Valley NeoPool Controller by Norbert Richter [#10637](https://github.com/arendst/Tasmota/issues/10637)
|
- Support for Sugar Valley NeoPool Controller by Norbert Richter [#10637](https://github.com/arendst/Tasmota/issues/10637)
|
||||||
|
- Support for Device Groups Device Map [#10898](https://github.com/arendst/Tasmota/issues/10898)
|
||||||
|
- Support for Eastron SDM72D-M three phase 100A Modbus energy meter [#10862](https://github.com/arendst/Tasmota/issues/10862)
|
||||||
- Support for ESP32 ``Module 3`` Odroid Go 16MB binary tasmota32-odroidgo.bin [#8630](https://github.com/arendst/Tasmota/issues/8630)
|
- Support for ESP32 ``Module 3`` Odroid Go 16MB binary tasmota32-odroidgo.bin [#8630](https://github.com/arendst/Tasmota/issues/8630)
|
||||||
- Support for ESP32 ``Module 5`` Wireless Tag Eth01 [#9496](https://github.com/arendst/Tasmota/issues/9496)
|
- Support for ESP32 ``Module 5`` Wireless Tag Eth01 [#9496](https://github.com/arendst/Tasmota/issues/9496)
|
||||||
- Support for ESP32 ``Module 7`` M5stack core2 16MB binary tasmota32-core2.bin [#10635](https://github.com/arendst/Tasmota/issues/10635)
|
- Support for ESP32 ``Module 7`` M5stack core2 16MB binary tasmota32-core2.bin [#10635](https://github.com/arendst/Tasmota/issues/10635)
|
||||||
|
@ -100,6 +125,7 @@ The attached binaries can also be downloaded from http://ota.tasmota.com/tasmota
|
||||||
- Rule trigger string comparisons for EndsWith ``$>``, StartsWith ``$<`` and Contains ``$|`` [#10538](https://github.com/arendst/Tasmota/issues/10538)
|
- Rule trigger string comparisons for EndsWith ``$>``, StartsWith ``$<`` and Contains ``$|`` [#10538](https://github.com/arendst/Tasmota/issues/10538)
|
||||||
- SPI display driver SSD1331 Color oled by Jeroen Vermeulen [#10376](https://github.com/arendst/Tasmota/issues/10376)
|
- SPI display driver SSD1331 Color oled by Jeroen Vermeulen [#10376](https://github.com/arendst/Tasmota/issues/10376)
|
||||||
- Compile time option ``USE_MQTT_TLS_DROP_OLD_FINGERPRINT`` to drop old (less secure) TLS fingerprint
|
- Compile time option ``USE_MQTT_TLS_DROP_OLD_FINGERPRINT`` to drop old (less secure) TLS fingerprint
|
||||||
|
- ESP8266 Fallback to ``*.bin.gz`` binary when OTA upload of ``*.bin`` binary fails
|
||||||
|
|
||||||
### Breaking Changed
|
### Breaking Changed
|
||||||
- ESP32 switch from default SPIFFS to default LittleFS file system loosing current (zigbee) files
|
- ESP32 switch from default SPIFFS to default LittleFS file system loosing current (zigbee) files
|
||||||
|
@ -114,7 +140,7 @@ The attached binaries can also be downloaded from http://ota.tasmota.com/tasmota
|
||||||
- Replaced RA8876 GPIO selection from ``SPI CS`` by ``RA8876 CS``
|
- Replaced RA8876 GPIO selection from ``SPI CS`` by ``RA8876 CS``
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
- Removed migration support for versions before v8.1.0 (Doris)
|
- Remove support for direct migration from versions before v8.1.0 (Doris)
|
||||||
- Command ``Sleep 0`` removes any sleep from wifi modem except when ESP32 BLE is active
|
- Command ``Sleep 0`` removes any sleep from wifi modem except when ESP32 BLE is active
|
||||||
- Logging from heap to stack freeing 700 bytes RAM
|
- Logging from heap to stack freeing 700 bytes RAM
|
||||||
- Disabled ``USE_LIGHT`` light support for ZBBridge saving 17.6kB [#10374](https://github.com/arendst/Tasmota/issues/10374)
|
- Disabled ``USE_LIGHT`` light support for ZBBridge saving 17.6kB [#10374](https://github.com/arendst/Tasmota/issues/10374)
|
||||||
|
|
|
@ -31,6 +31,8 @@
|
||||||
* This will allow to modify it in place and call back printf with altered arguments
|
* This will allow to modify it in place and call back printf with altered arguments
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
|
#if defined(__XTENSA__) // this works only for xtensa, other platforms needs va_list to be adapted
|
||||||
|
|
||||||
// This code is heavily inspired by the gcc implementation of va_list
|
// This code is heavily inspired by the gcc implementation of va_list
|
||||||
// https://github.com/gcc-mirror/gcc/blob/master/gcc/config/xtensa/xtensa.c
|
// https://github.com/gcc-mirror/gcc/blob/master/gcc/config/xtensa/xtensa.c
|
||||||
|
|
||||||
|
@ -124,6 +126,18 @@ void * __va_cur_ptr4(va_list &va) {
|
||||||
// >>> Reading a_ptr=0x3FFFFD70 *a_ptr=6
|
// >>> Reading a_ptr=0x3FFFFD70 *a_ptr=6
|
||||||
// >>> Reading a_ptr=0x3FFFFD74 *a_ptr=7
|
// >>> Reading a_ptr=0x3FFFFD74 *a_ptr=7
|
||||||
// >>> Reading a_ptr=0x3FFFFD78 *a_ptr=8
|
// >>> Reading a_ptr=0x3FFFFD78 *a_ptr=8
|
||||||
|
#elif defined(__RISC_V__)
|
||||||
|
// #define __va_argsiz_tas(t) (((sizeof(t) + sizeof(int) - 1) / sizeof(int)) * sizeof(int))
|
||||||
|
#define va_cur_ptr4(va,T) ( (T*) __va_cur_ptr4(va) )
|
||||||
|
void * __va_cur_ptr4(va_list &va) {
|
||||||
|
uintptr_t * va_ptr = (uintptr_t*) &va;
|
||||||
|
void * cur_ptr = (void*) *va_ptr;
|
||||||
|
*va_ptr += 4;
|
||||||
|
return cur_ptr;
|
||||||
|
}
|
||||||
|
#else // __XTENSA__, __RISCV__
|
||||||
|
#error "ext_printf is not suppoerted on this platform"
|
||||||
|
#endif // __XTENSA__, __RISCV__
|
||||||
|
|
||||||
/*********************************************************************************************\
|
/*********************************************************************************************\
|
||||||
* Genral function to convert u64 to hex
|
* Genral function to convert u64 to hex
|
||||||
|
@ -202,7 +216,6 @@ int32_t ext_vsnprintf_P(char * buf, size_t buf_len, const char * fmt_P, va_list
|
||||||
va_list va_cpy;
|
va_list va_cpy;
|
||||||
va_copy(va_cpy, va);
|
va_copy(va_cpy, va);
|
||||||
|
|
||||||
#if defined(ESP8266) || defined(ESP32) // this works only for xtensa, other platforms needs va_list to be adapted
|
|
||||||
// iterate on fmt to extract arguments and patch them in place
|
// iterate on fmt to extract arguments and patch them in place
|
||||||
char * fmt_cpy = copyStr(fmt_P);
|
char * fmt_cpy = copyStr(fmt_P);
|
||||||
if (fmt_cpy == nullptr) { return 0; }
|
if (fmt_cpy == nullptr) { return 0; }
|
||||||
|
@ -362,9 +375,6 @@ int32_t ext_vsnprintf_P(char * buf, size_t buf_len, const char * fmt_P, va_list
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else // defined(ESP8266) || defined(ESP32)
|
|
||||||
#error "ext_printf is not suppoerted on this platform"
|
|
||||||
#endif // defined(ESP8266) || defined(ESP32)
|
|
||||||
// Serial.printf("> format_final=%s\n", fmt_cpy); Serial.flush();
|
// Serial.printf("> format_final=%s\n", fmt_cpy); Serial.flush();
|
||||||
int32_t ret = vsnprintf_P(buf, buf_len, fmt_cpy, va_cpy);
|
int32_t ret = vsnprintf_P(buf, buf_len, fmt_cpy, va_cpy);
|
||||||
|
|
||||||
|
|
Before Width: | Height: | Size: 407 KiB After Width: | Height: | Size: 407 KiB |
Before Width: | Height: | Size: 623 KiB After Width: | Height: | Size: 623 KiB |
Before Width: | Height: | Size: 455 KiB After Width: | Height: | Size: 455 KiB |
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
|
@ -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
|
||||||
|
*
|
||||||
|
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
|
||||||
|
*
|
||||||
|
* 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 <pgmspace.h>
|
||||||
|
|
||||||
|
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****/
|
||||||
|
|
|
@ -559,6 +559,96 @@ void VButton::xdrawButton(bool inverted) {
|
||||||
wr_redir=0;
|
wr_redir=0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean VButton::didhit(int16_t x, int16_t y) {
|
||||||
|
return ((x >= spars.xp) && (x < (int16_t) (spars.xp + spars.xs)) &&
|
||||||
|
(y >= spars.yp) && (y < (int16_t) (spars.yp + spars.ys)));
|
||||||
|
}
|
||||||
|
|
||||||
|
void VButton::SliderInit(Renderer *renderer, uint16_t xp, uint16_t yp, uint16_t xs, uint16_t ys, uint16_t nelem, uint16_t bgcol, uint16_t frcol, uint16_t barcol) {
|
||||||
|
spars.xp = xp;
|
||||||
|
spars.yp = yp;
|
||||||
|
spars.xs = xs;
|
||||||
|
spars.ys = ys;
|
||||||
|
spars.nelem = nelem;
|
||||||
|
spars.bgcol = bgcol;
|
||||||
|
spars.frcol = frcol;
|
||||||
|
spars.barcol = barcol;
|
||||||
|
rend = renderer;
|
||||||
|
|
||||||
|
rend->fillRect(spars.xp, spars.yp, spars.xs, spars.ys, spars.bgcol);
|
||||||
|
|
||||||
|
if (xs < ys) {
|
||||||
|
float bxs = spars.xs - 6;
|
||||||
|
float bys = (float)(spars.ys - 6) / (float)nelem;
|
||||||
|
float bxp = xp + 3;
|
||||||
|
float byp = yp + 3;
|
||||||
|
for (uint32_t count = 0; count < spars.nelem; count++) {
|
||||||
|
rend->fillRect(bxp, byp, bxs, bys - 3, spars.barcol);
|
||||||
|
rend->drawRect(bxp, byp, bxs, bys - 3, spars.frcol);
|
||||||
|
byp += bys;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
float bys = spars.ys - 6;
|
||||||
|
float bxs = (float)(spars.xs - 6) / (float)nelem;
|
||||||
|
float byp = yp + 3;
|
||||||
|
float bxp = xp + 3;
|
||||||
|
for (uint32_t count = 0; count < spars.nelem; count++) {
|
||||||
|
rend->fillRect(bxp, byp, bxs - 3 , bys, spars.barcol);
|
||||||
|
rend->drawRect(bxp, byp, bxs - 3, bys, spars.frcol);
|
||||||
|
bxp += bxs;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t VButton::UpdateSlider(int16_t x, int16_t y) {
|
||||||
|
uint16_t elems = spars.nelem + 1;
|
||||||
|
|
||||||
|
if (x < 0) {
|
||||||
|
x = spars.xp + (-x * spars.xs) / 100;
|
||||||
|
y = spars.yp + (spars.ys - (-y * spars.ys) / 100);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (spars.xs < spars.ys) {
|
||||||
|
uint16_t dy = spars.ys - (y - spars.yp);
|
||||||
|
uint16_t limit = elems - ((float)dy /(float)spars.ys * elems);
|
||||||
|
float bxs = spars.xs - 6;
|
||||||
|
float bys = (float)(spars.ys - 6) / (float)spars.nelem;
|
||||||
|
float bxp = spars.xp + 3;
|
||||||
|
float byp = spars.yp + 3;
|
||||||
|
uint16_t col;
|
||||||
|
for (uint32_t count = 0; count < spars.nelem; count++) {
|
||||||
|
if (count >= limit) {
|
||||||
|
col = spars.barcol;
|
||||||
|
} else {
|
||||||
|
col = spars.bgcol;
|
||||||
|
}
|
||||||
|
rend->fillRect(bxp, byp, bxs, bys - 3, col);
|
||||||
|
rend->drawRect(bxp, byp, bxs, bys - 3, spars.frcol);
|
||||||
|
byp += bys;
|
||||||
|
}
|
||||||
|
return 100 - (float(y - spars.yp) / (float)spars.ys) * 100.0;
|
||||||
|
} else {
|
||||||
|
uint16_t limit = (x - spars.xp) * elems / spars.xs;
|
||||||
|
float bys = spars.ys - 6;
|
||||||
|
float bxs = (float)(spars.xs - 6) / (float)spars.nelem;
|
||||||
|
float byp = spars.yp + 3;
|
||||||
|
float bxp = spars.xp + 3;
|
||||||
|
uint16_t col;
|
||||||
|
for (uint32_t count = 0; count < spars.nelem; count++) {
|
||||||
|
if (count < limit) {
|
||||||
|
col = spars.barcol;
|
||||||
|
} else {
|
||||||
|
col = spars.bgcol;
|
||||||
|
}
|
||||||
|
rend->fillRect(bxp, byp, bxs - 3, bys, col);
|
||||||
|
rend->drawRect(bxp, byp, bxs - 3 , bys, spars.frcol);
|
||||||
|
bxp += bxs;
|
||||||
|
}
|
||||||
|
return (float(x - spars.xp) / (float)spars.xs) * 100.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -57,7 +57,7 @@ typedef union {
|
||||||
uint8_t spare0 : 1;
|
uint8_t spare0 : 1;
|
||||||
uint8_t spare1 : 1;
|
uint8_t spare1 : 1;
|
||||||
uint8_t spare2 : 1;
|
uint8_t spare2 : 1;
|
||||||
uint8_t spare3 : 1;
|
uint8_t slider : 1;
|
||||||
uint8_t disable : 1;
|
uint8_t disable : 1;
|
||||||
uint8_t on_off : 1;
|
uint8_t on_off : 1;
|
||||||
uint8_t is_pushbutton : 1;
|
uint8_t is_pushbutton : 1;
|
||||||
|
@ -65,10 +65,27 @@ typedef union {
|
||||||
};
|
};
|
||||||
} TButton_State;
|
} TButton_State;
|
||||||
|
|
||||||
|
|
||||||
|
struct Slider {
|
||||||
|
uint16_t xp;
|
||||||
|
uint16_t yp;
|
||||||
|
uint16_t xs;
|
||||||
|
uint16_t ys;
|
||||||
|
uint16_t nelem;
|
||||||
|
uint16_t bgcol;
|
||||||
|
uint16_t frcol;
|
||||||
|
uint16_t barcol;
|
||||||
|
};
|
||||||
|
|
||||||
class VButton : public Adafruit_GFX_Button {
|
class VButton : public Adafruit_GFX_Button {
|
||||||
public:
|
public:
|
||||||
TButton_State vpower;
|
TButton_State vpower;
|
||||||
|
struct Slider spars;
|
||||||
|
Renderer *rend;
|
||||||
void xdrawButton(bool inverted);
|
void xdrawButton(bool inverted);
|
||||||
|
boolean didhit(int16_t x, int16_t y);
|
||||||
|
uint16_t UpdateSlider(int16_t x, int16_t y);
|
||||||
|
void SliderInit(Renderer *rend, uint16_t xp, uint16_t yp, uint16_t xs, uint16_t ys, uint16_t nelem, uint16_t bgcol, uint16_t frcol, uint16_t barcol);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,9 @@ if env["PIOPLATFORM"] != "espressif32":
|
||||||
ORG_FIRMWARE_SIZE = os.stat(bin_file).st_size
|
ORG_FIRMWARE_SIZE = os.stat(bin_file).st_size
|
||||||
GZ_FIRMWARE_SIZE = os.stat(gzip_file).st_size
|
GZ_FIRMWARE_SIZE = os.stat(gzip_file).st_size
|
||||||
|
|
||||||
print("Compression reduced firmware size by {:.0f}% (was {} bytes, now {} bytes)".format((GZ_FIRMWARE_SIZE / ORG_FIRMWARE_SIZE) * 100, ORG_FIRMWARE_SIZE, GZ_FIRMWARE_SIZE))
|
if ORG_FIRMWARE_SIZE > 995326:
|
||||||
|
print("\u001b[31;1m!!! Tasmota firmware size is too big with {} bytes. Max size is 995326 bytes !!! \u001b[0m".format(ORG_FIRMWARE_SIZE))
|
||||||
|
else:
|
||||||
|
print("Compression reduced firmware size by {:.0f}% (was {} bytes, now {} bytes)".format((GZ_FIRMWARE_SIZE / ORG_FIRMWARE_SIZE) * 100, ORG_FIRMWARE_SIZE, GZ_FIRMWARE_SIZE))
|
||||||
|
|
||||||
env.AddPostAction("$BUILD_DIR/${PROGNAME}.bin", [bin_gzip])
|
env.AddPostAction("$BUILD_DIR/${PROGNAME}.bin", [bin_gzip])
|
||||||
|
|
|
@ -80,12 +80,12 @@ build_flags = ${core.build_flags}
|
||||||
|
|
||||||
board_build.f_cpu = 80000000L
|
board_build.f_cpu = 80000000L
|
||||||
board_build.f_flash = 40000000L
|
board_build.f_flash = 40000000L
|
||||||
monitor_speed = 115200
|
monitor_speed = 74880
|
||||||
monitor_port = /dev/ttyUSB0
|
monitor_port = COM5
|
||||||
upload_speed = 115200
|
upload_speed = 115200
|
||||||
; *** Upload Serial reset method for Wemos and NodeMCU
|
; *** Upload Serial reset method for Wemos and NodeMCU
|
||||||
upload_resetmethod = nodemcu
|
upload_resetmethod = nodemcu
|
||||||
upload_port = /dev/ttyUSB0
|
upload_port = COM5
|
||||||
extra_scripts = ${scripts_defaults.extra_scripts}
|
extra_scripts = ${scripts_defaults.extra_scripts}
|
||||||
lib_ldf_mode = chain+
|
lib_ldf_mode = chain+
|
||||||
shared_libdeps_dir = lib
|
shared_libdeps_dir = lib
|
||||||
|
|
|
@ -73,6 +73,7 @@
|
||||||
#define D_JSON_EXPORT "Export"
|
#define D_JSON_EXPORT "Export"
|
||||||
#define D_JSON_EXPORT_ACTIVE "ExportActive"
|
#define D_JSON_EXPORT_ACTIVE "ExportActive"
|
||||||
#define D_JSON_EXPORT_REACTIVE "ExportReactive"
|
#define D_JSON_EXPORT_REACTIVE "ExportReactive"
|
||||||
|
#define D_JSON_EXPORT_POWER "ExportPower"
|
||||||
#define D_JSON_FAILED "Failed"
|
#define D_JSON_FAILED "Failed"
|
||||||
#define D_JSON_FALLBACKTOPIC "FallbackTopic"
|
#define D_JSON_FALLBACKTOPIC "FallbackTopic"
|
||||||
#define D_JSON_FEATURES "Features"
|
#define D_JSON_FEATURES "Features"
|
||||||
|
@ -99,6 +100,7 @@
|
||||||
#define D_JSON_ID "Id"
|
#define D_JSON_ID "Id"
|
||||||
#define D_JSON_ILLUMINANCE "Illuminance"
|
#define D_JSON_ILLUMINANCE "Illuminance"
|
||||||
#define D_JSON_IMPORT_ACTIVE "ImportActive"
|
#define D_JSON_IMPORT_ACTIVE "ImportActive"
|
||||||
|
#define D_JSON_IMPORT_POWER "ImportPower"
|
||||||
#define D_JSON_IMPORT_REACTIVE "ImportReactive"
|
#define D_JSON_IMPORT_REACTIVE "ImportReactive"
|
||||||
#define D_JSON_INFRARED "Infrared"
|
#define D_JSON_INFRARED "Infrared"
|
||||||
#define D_JSON_UNKNOWN "Unknown"
|
#define D_JSON_UNKNOWN "Unknown"
|
||||||
|
@ -328,6 +330,7 @@
|
||||||
#define D_CMND_DEVGROUP_SEND "DevGroupSend"
|
#define D_CMND_DEVGROUP_SEND "DevGroupSend"
|
||||||
#define D_CMND_DEVGROUP_SHARE "DevGroupShare"
|
#define D_CMND_DEVGROUP_SHARE "DevGroupShare"
|
||||||
#define D_CMND_DEVGROUPSTATUS "DevGroupStatus"
|
#define D_CMND_DEVGROUPSTATUS "DevGroupStatus"
|
||||||
|
#define D_CMND_DEVGROUP_DEVICE "DevGroupTie"
|
||||||
#define D_CMND_SERIALSEND "SerialSend"
|
#define D_CMND_SERIALSEND "SerialSend"
|
||||||
#define D_CMND_SERIALDELIMITER "SerialDelimiter"
|
#define D_CMND_SERIALDELIMITER "SerialDelimiter"
|
||||||
#define D_CMND_BAUDRATE "Baudrate"
|
#define D_CMND_BAUDRATE "Baudrate"
|
||||||
|
|
|
@ -630,6 +630,8 @@
|
||||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||||
|
#define D_SENSOR_SDM72_TX "SDM72 Tx"
|
||||||
|
#define D_SENSOR_SDM72_RX "SDM72 Rx"
|
||||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||||
|
@ -782,8 +784,6 @@
|
||||||
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
||||||
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
||||||
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
||||||
#define D_SENSOR_TM1637_CLK "TM1637 CLK"
|
|
||||||
#define D_SENSOR_TM1637_DIO "TM1637 DIO"
|
|
||||||
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
||||||
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
||||||
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
||||||
|
@ -836,7 +836,9 @@
|
||||||
#define D_UNIT_WATTHOUR "Wh"
|
#define D_UNIT_WATTHOUR "Wh"
|
||||||
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
||||||
|
|
||||||
//SDM220, SDM120, LE01MR
|
//SDM220, SDM120, SDM72, LE01MR
|
||||||
|
#define D_EXPORT_POWER "Uitvoer krag"
|
||||||
|
#define D_IMPORT_POWER "Invoer krag"
|
||||||
#define D_PHASE_ANGLE "Fasehoek"
|
#define D_PHASE_ANGLE "Fasehoek"
|
||||||
#define D_IMPORT_ACTIVE "Invoer aktief"
|
#define D_IMPORT_ACTIVE "Invoer aktief"
|
||||||
#define D_EXPORT_ACTIVE "Uitvoer aktief"
|
#define D_EXPORT_ACTIVE "Uitvoer aktief"
|
||||||
|
|
|
@ -629,6 +629,8 @@
|
||||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||||
|
#define D_SENSOR_SDM72_TX "SDM72 Tx"
|
||||||
|
#define D_SENSOR_SDM72_RX "SDM72 Rx"
|
||||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||||
|
@ -781,8 +783,6 @@
|
||||||
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
||||||
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
||||||
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
||||||
#define D_SENSOR_TM1637_CLK "TM1637 CLK"
|
|
||||||
#define D_SENSOR_TM1637_DIO "TM1637 DIO"
|
|
||||||
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
||||||
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
||||||
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
||||||
|
@ -835,7 +835,9 @@
|
||||||
#define D_UNIT_WATTHOUR "Wh"
|
#define D_UNIT_WATTHOUR "Wh"
|
||||||
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
||||||
|
|
||||||
//SDM220, SDM120, LE01MR
|
//SDM220, SDM120, SDM72, LE01MR
|
||||||
|
#define D_EXPORT_POWER "Export Power"
|
||||||
|
#define D_IMPORT_POWER "Import Power"
|
||||||
#define D_PHASE_ANGLE "Фазов ъгъл"
|
#define D_PHASE_ANGLE "Фазов ъгъл"
|
||||||
#define D_IMPORT_ACTIVE "Входна активна мощност"
|
#define D_IMPORT_ACTIVE "Входна активна мощност"
|
||||||
#define D_EXPORT_ACTIVE "Изходна активна мощност"
|
#define D_EXPORT_ACTIVE "Изходна активна мощност"
|
||||||
|
|
|
@ -630,6 +630,8 @@
|
||||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||||
|
#define D_SENSOR_SDM72_TX "SDM72 Tx"
|
||||||
|
#define D_SENSOR_SDM72_RX "SDM72 Rx"
|
||||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||||
|
@ -782,8 +784,6 @@
|
||||||
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
||||||
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
||||||
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
||||||
#define D_SENSOR_TM1637_CLK "TM1637 CLK"
|
|
||||||
#define D_SENSOR_TM1637_DIO "TM1637 DIO"
|
|
||||||
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
||||||
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
||||||
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
||||||
|
@ -836,7 +836,9 @@
|
||||||
#define D_UNIT_WATTHOUR "Wh"
|
#define D_UNIT_WATTHOUR "Wh"
|
||||||
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
||||||
|
|
||||||
//SDM220, SDM120, LE01MR
|
//SDM220, SDM120, SDM72, LE01MR
|
||||||
|
#define D_EXPORT_POWER "Export Power"
|
||||||
|
#define D_IMPORT_POWER "Import Power"
|
||||||
#define D_PHASE_ANGLE "Phase Angle"
|
#define D_PHASE_ANGLE "Phase Angle"
|
||||||
#define D_IMPORT_ACTIVE "Import Active"
|
#define D_IMPORT_ACTIVE "Import Active"
|
||||||
#define D_EXPORT_ACTIVE "Export Active"
|
#define D_EXPORT_ACTIVE "Export Active"
|
||||||
|
|
|
@ -630,6 +630,8 @@
|
||||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||||
|
#define D_SENSOR_SDM72_TX "SDM72 Tx"
|
||||||
|
#define D_SENSOR_SDM72_RX "SDM72 Rx"
|
||||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||||
|
@ -782,8 +784,6 @@
|
||||||
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
||||||
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
||||||
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
||||||
#define D_SENSOR_TM1637_CLK "TM1637 CLK"
|
|
||||||
#define D_SENSOR_TM1637_DIO "TM1637 DIO"
|
|
||||||
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
||||||
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
||||||
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
||||||
|
@ -836,7 +836,9 @@
|
||||||
#define D_UNIT_WATTHOUR "Wh"
|
#define D_UNIT_WATTHOUR "Wh"
|
||||||
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
||||||
|
|
||||||
//SDM220, SDM120, LE01MR
|
//SDM220, SDM120, SDM72, LE01MR
|
||||||
|
#define D_EXPORT_POWER "Exportiere Leistung"
|
||||||
|
#define D_IMPORT_POWER "Importiere Leistung"
|
||||||
#define D_PHASE_ANGLE "Phasenwinkel"
|
#define D_PHASE_ANGLE "Phasenwinkel"
|
||||||
#define D_IMPORT_ACTIVE "Importiere Wirk"
|
#define D_IMPORT_ACTIVE "Importiere Wirk"
|
||||||
#define D_EXPORT_ACTIVE "Exportiere Wirk"
|
#define D_EXPORT_ACTIVE "Exportiere Wirk"
|
||||||
|
|
|
@ -630,6 +630,8 @@
|
||||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||||
|
#define D_SENSOR_SDM72_TX "SDM72 Tx"
|
||||||
|
#define D_SENSOR_SDM72_RX "SDM72 Rx"
|
||||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||||
|
@ -782,8 +784,6 @@
|
||||||
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
||||||
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
||||||
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
||||||
#define D_SENSOR_TM1637_CLK "TM1637 CLK"
|
|
||||||
#define D_SENSOR_TM1637_DIO "TM1637 DIO"
|
|
||||||
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
||||||
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
||||||
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
||||||
|
@ -836,7 +836,9 @@
|
||||||
#define D_UNIT_WATTHOUR "Wh"
|
#define D_UNIT_WATTHOUR "Wh"
|
||||||
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
||||||
|
|
||||||
//SDM220, SDM120, LE01MR
|
//SDM220, SDM120, SDM72, LE01MR
|
||||||
|
#define D_EXPORT_POWER "Export Power"
|
||||||
|
#define D_IMPORT_POWER "Import Power"
|
||||||
#define D_PHASE_ANGLE "Phase Angle"
|
#define D_PHASE_ANGLE "Phase Angle"
|
||||||
#define D_IMPORT_ACTIVE "Import Active"
|
#define D_IMPORT_ACTIVE "Import Active"
|
||||||
#define D_EXPORT_ACTIVE "Export Active"
|
#define D_EXPORT_ACTIVE "Export Active"
|
||||||
|
|
|
@ -630,6 +630,8 @@
|
||||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||||
|
#define D_SENSOR_SDM72_TX "SDM72 Tx"
|
||||||
|
#define D_SENSOR_SDM72_RX "SDM72 Rx"
|
||||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||||
|
@ -782,8 +784,6 @@
|
||||||
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
||||||
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
||||||
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
||||||
#define D_SENSOR_TM1637_CLK "TM1637 CLK"
|
|
||||||
#define D_SENSOR_TM1637_DIO "TM1637 DIO"
|
|
||||||
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
||||||
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
||||||
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
||||||
|
@ -836,7 +836,9 @@
|
||||||
#define D_UNIT_WATTHOUR "Wh"
|
#define D_UNIT_WATTHOUR "Wh"
|
||||||
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
||||||
|
|
||||||
//SDM220, SDM120, LE01MR
|
//SDM220, SDM120, SDM72, LE01MR
|
||||||
|
#define D_EXPORT_POWER "Export Power"
|
||||||
|
#define D_IMPORT_POWER "Import Power"
|
||||||
#define D_PHASE_ANGLE "Phase Angle"
|
#define D_PHASE_ANGLE "Phase Angle"
|
||||||
#define D_IMPORT_ACTIVE "Import Active"
|
#define D_IMPORT_ACTIVE "Import Active"
|
||||||
#define D_EXPORT_ACTIVE "Export Active"
|
#define D_EXPORT_ACTIVE "Export Active"
|
||||||
|
|
|
@ -630,6 +630,8 @@
|
||||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||||
|
#define D_SENSOR_SDM72_TX "SDM72 Tx"
|
||||||
|
#define D_SENSOR_SDM72_RX "SDM72 Rx"
|
||||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||||
|
@ -782,8 +784,6 @@
|
||||||
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
||||||
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
||||||
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
||||||
#define D_SENSOR_TM1637_CLK "TM1637 CLK"
|
|
||||||
#define D_SENSOR_TM1637_DIO "TM1637 DIO"
|
|
||||||
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
||||||
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
||||||
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
||||||
|
@ -836,7 +836,9 @@
|
||||||
#define D_UNIT_WATTHOUR "Wh"
|
#define D_UNIT_WATTHOUR "Wh"
|
||||||
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
||||||
|
|
||||||
//SDM220, SDM120, LE01MR
|
//SDM220, SDM120, SDM72, LE01MR
|
||||||
|
#define D_EXPORT_POWER "Export Power"
|
||||||
|
#define D_IMPORT_POWER "Import Power"
|
||||||
#define D_PHASE_ANGLE "Ángulo de Fase"
|
#define D_PHASE_ANGLE "Ángulo de Fase"
|
||||||
#define D_IMPORT_ACTIVE "P. Activa Entrante"
|
#define D_IMPORT_ACTIVE "P. Activa Entrante"
|
||||||
#define D_EXPORT_ACTIVE "P. Activa Saliente"
|
#define D_EXPORT_ACTIVE "P. Activa Saliente"
|
||||||
|
|
|
@ -626,6 +626,8 @@
|
||||||
#define D_SENSOR_SBR_TX "SerBr TX"
|
#define D_SENSOR_SBR_TX "SerBr TX"
|
||||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||||
|
#define D_SENSOR_SDM72_TX "SDM72 Tx"
|
||||||
|
#define D_SENSOR_SDM72_RX "SDM72 Rx"
|
||||||
#define D_SENSOR_SDM120_TX "SDMx20 TX"
|
#define D_SENSOR_SDM120_TX "SDMx20 TX"
|
||||||
#define D_SENSOR_SDM120_RX "SDMx20 RX"
|
#define D_SENSOR_SDM120_RX "SDMx20 RX"
|
||||||
#define D_SENSOR_SDM630_TX "SDM630 TX"
|
#define D_SENSOR_SDM630_TX "SDM630 TX"
|
||||||
|
@ -778,8 +780,6 @@
|
||||||
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
||||||
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
||||||
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
||||||
#define D_SENSOR_TM1637_CLK "TM1637 CLK"
|
|
||||||
#define D_SENSOR_TM1637_DIO "TM1637 DIO"
|
|
||||||
#define D_SENSOR_SDCARD_CS "CarteSD CS"
|
#define D_SENSOR_SDCARD_CS "CarteSD CS"
|
||||||
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
||||||
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
||||||
|
@ -831,7 +831,9 @@
|
||||||
#define D_UNIT_WATT "W"
|
#define D_UNIT_WATT "W"
|
||||||
#define D_UNIT_WATTHOUR "Wh"
|
#define D_UNIT_WATTHOUR "Wh"
|
||||||
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
||||||
//SDM220, SDM120, LE01MR
|
//SDM220, SDM120, SDM72, LE01MR
|
||||||
|
#define D_EXPORT_POWER "Export Power"
|
||||||
|
#define D_IMPORT_POWER "Import Power"
|
||||||
#define D_PHASE_ANGLE "Angle de phase"
|
#define D_PHASE_ANGLE "Angle de phase"
|
||||||
#define D_IMPORT_ACTIVE "Énergie act conso"
|
#define D_IMPORT_ACTIVE "Énergie act conso"
|
||||||
#define D_EXPORT_ACTIVE "Énergie act fournie"
|
#define D_EXPORT_ACTIVE "Énergie act fournie"
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
fy-NL.h - localization for Frysk - Nederland for Tasmota
|
fy-NL.h - localization for Frysk - Nederland for Tasmota
|
||||||
|
|
||||||
Copyright (C) 2021 Christiaan Heerze
|
Copyright (C) 2021 Christiaan Heerze
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -630,6 +630,8 @@
|
||||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||||
|
#define D_SENSOR_SDM72_TX "SDM72 Tx"
|
||||||
|
#define D_SENSOR_SDM72_RX "SDM72 Rx"
|
||||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||||
|
@ -782,8 +784,6 @@
|
||||||
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
||||||
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
||||||
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
||||||
#define D_SENSOR_TM1637_CLK "TM1637 CLK"
|
|
||||||
#define D_SENSOR_TM1637_DIO "TM1637 DIO"
|
|
||||||
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
||||||
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
||||||
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
||||||
|
@ -836,7 +836,9 @@
|
||||||
#define D_UNIT_WATTHOUR "Wh"
|
#define D_UNIT_WATTHOUR "Wh"
|
||||||
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
||||||
|
|
||||||
//SDM220, SDM120, LE01MR
|
//SDM220, SDM120, SDM72, LE01MR
|
||||||
|
#define D_EXPORT_POWER "Eksportearje krêft"
|
||||||
|
#define D_IMPORT_POWER "Ymportearje krêft"
|
||||||
#define D_PHASE_ANGLE "Faze hoeke"
|
#define D_PHASE_ANGLE "Faze hoeke"
|
||||||
#define D_IMPORT_ACTIVE "Ymportearje echt"
|
#define D_IMPORT_ACTIVE "Ymportearje echt"
|
||||||
#define D_EXPORT_ACTIVE "Eksportearje echt"
|
#define D_EXPORT_ACTIVE "Eksportearje echt"
|
||||||
|
|
|
@ -630,6 +630,8 @@
|
||||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||||
|
#define D_SENSOR_SDM72_TX "SDM72 Tx"
|
||||||
|
#define D_SENSOR_SDM72_RX "SDM72 Rx"
|
||||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||||
|
@ -782,8 +784,6 @@
|
||||||
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
||||||
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
||||||
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
||||||
#define D_SENSOR_TM1637_CLK "TM1637 CLK"
|
|
||||||
#define D_SENSOR_TM1637_DIO "TM1637 DIO"
|
|
||||||
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
||||||
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
||||||
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
||||||
|
@ -836,7 +836,9 @@
|
||||||
#define D_UNIT_WATTHOUR "Wh"
|
#define D_UNIT_WATTHOUR "Wh"
|
||||||
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
||||||
|
|
||||||
//SDM220, SDM120, LE01MR
|
//SDM220, SDM120, SDM72, LE01MR
|
||||||
|
#define D_EXPORT_POWER "Export Power"
|
||||||
|
#define D_IMPORT_POWER "Import Power"
|
||||||
#define D_PHASE_ANGLE "Phase Angle"
|
#define D_PHASE_ANGLE "Phase Angle"
|
||||||
#define D_IMPORT_ACTIVE "Import Active"
|
#define D_IMPORT_ACTIVE "Import Active"
|
||||||
#define D_EXPORT_ACTIVE "Export Active"
|
#define D_EXPORT_ACTIVE "Export Active"
|
||||||
|
|
|
@ -630,6 +630,8 @@
|
||||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||||
|
#define D_SENSOR_SDM72_TX "SDM72 Tx"
|
||||||
|
#define D_SENSOR_SDM72_RX "SDM72 Rx"
|
||||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||||
|
@ -782,8 +784,6 @@
|
||||||
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
||||||
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
||||||
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
||||||
#define D_SENSOR_TM1637_CLK "TM1637 CLK"
|
|
||||||
#define D_SENSOR_TM1637_DIO "TM1637 DIO"
|
|
||||||
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
||||||
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
||||||
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
||||||
|
@ -836,7 +836,9 @@
|
||||||
#define D_UNIT_WATTHOUR "Wh"
|
#define D_UNIT_WATTHOUR "Wh"
|
||||||
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
||||||
|
|
||||||
//SDM220, SDM120, LE01MR
|
//SDM220, SDM120, SDM72, LE01MR
|
||||||
|
#define D_EXPORT_POWER "Export Power"
|
||||||
|
#define D_IMPORT_POWER "Import Power"
|
||||||
#define D_PHASE_ANGLE "Fázisszög"
|
#define D_PHASE_ANGLE "Fázisszög"
|
||||||
#define D_IMPORT_ACTIVE "Bejövő aktív"
|
#define D_IMPORT_ACTIVE "Bejövő aktív"
|
||||||
#define D_EXPORT_ACTIVE "Kimenő aktív"
|
#define D_EXPORT_ACTIVE "Kimenő aktív"
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
it-IT.h - localization for Italian - Italy for Tasmota
|
it-IT.h - localization for Italian - Italy for Tasmota
|
||||||
|
|
||||||
Copyright (C) 2021 Gennaro Tortone - some mods by Antonio Fragola - Updated by bovirus - rev. 04.02.2021
|
Copyright (C) 2021 Gennaro Tortone - some mods by Antonio Fragola - Updated by bovirus - rev. 12.02.2021
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -630,6 +630,8 @@
|
||||||
#define D_SENSOR_SBR_TX "SerBr - TX"
|
#define D_SENSOR_SBR_TX "SerBr - TX"
|
||||||
#define D_SENSOR_SR04_TRIG "SR04 Tri - TX"
|
#define D_SENSOR_SR04_TRIG "SR04 Tri - TX"
|
||||||
#define D_SENSOR_SR04_ECHO "SR04 Ech - RX"
|
#define D_SENSOR_SR04_ECHO "SR04 Ech - RX"
|
||||||
|
#define D_SENSOR_SDM72_TX "SDM72 - TX"
|
||||||
|
#define D_SENSOR_SDM72_RX "SDM72 - RX"
|
||||||
#define D_SENSOR_SDM120_TX "SDMx20 - TX"
|
#define D_SENSOR_SDM120_TX "SDMx20 - TX"
|
||||||
#define D_SENSOR_SDM120_RX "SDMx20 - RX"
|
#define D_SENSOR_SDM120_RX "SDMx20 - RX"
|
||||||
#define D_SENSOR_SDM630_TX "SDM630 - TX"
|
#define D_SENSOR_SDM630_TX "SDM630 - TX"
|
||||||
|
@ -782,8 +784,6 @@
|
||||||
#define D_SENSOR_ST7789_DC "ST7789 - DC"
|
#define D_SENSOR_ST7789_DC "ST7789 - DC"
|
||||||
#define D_SENSOR_SSD1331_CS "SSD1331 - CS"
|
#define D_SENSOR_SSD1331_CS "SSD1331 - CS"
|
||||||
#define D_SENSOR_SSD1331_DC "SSD1331 - DC"
|
#define D_SENSOR_SSD1331_DC "SSD1331 - DC"
|
||||||
#define D_SENSOR_TM1637_CLK "TM1637 - CLK"
|
|
||||||
#define D_SENSOR_TM1637_DIO "TM1637 - DIO"
|
|
||||||
#define D_SENSOR_SDCARD_CS "Scheda SD - CS"
|
#define D_SENSOR_SDCARD_CS "Scheda SD - CS"
|
||||||
#define D_SENSOR_WIEGAND_D0 "Wiegand - D0"
|
#define D_SENSOR_WIEGAND_D0 "Wiegand - D0"
|
||||||
#define D_SENSOR_WIEGAND_D1 "Wiegand - D1"
|
#define D_SENSOR_WIEGAND_D1 "Wiegand - D1"
|
||||||
|
@ -835,8 +835,10 @@
|
||||||
#define D_UNIT_WATTHOUR "Wh"
|
#define D_UNIT_WATTHOUR "Wh"
|
||||||
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
||||||
|
|
||||||
//SDM220, SDM120, LE01MR
|
//SDM220, SDM120, SDM72, LE01MR
|
||||||
#define D_PHASE_ANGLE "Angolo Fase"
|
#define D_EXPORT_POWER "Potenza esportata"
|
||||||
|
#define D_IMPORT_POWER "Potenza importata"
|
||||||
|
#define D_PHASE_ANGLE "Angolo fase"
|
||||||
#define D_IMPORT_ACTIVE "Potenza attiva importata"
|
#define D_IMPORT_ACTIVE "Potenza attiva importata"
|
||||||
#define D_EXPORT_ACTIVE "Potenza attiva esportata"
|
#define D_EXPORT_ACTIVE "Potenza attiva esportata"
|
||||||
#define D_IMPORT_REACTIVE "Potenza reattiva importata"
|
#define D_IMPORT_REACTIVE "Potenza reattiva importata"
|
||||||
|
|
|
@ -630,6 +630,8 @@
|
||||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||||
|
#define D_SENSOR_SDM72_TX "SDM72 Tx"
|
||||||
|
#define D_SENSOR_SDM72_RX "SDM72 Rx"
|
||||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||||
|
@ -782,8 +784,6 @@
|
||||||
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
||||||
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
||||||
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
||||||
#define D_SENSOR_TM1637_CLK "TM1637 CLK"
|
|
||||||
#define D_SENSOR_TM1637_DIO "TM1637 DIO"
|
|
||||||
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
||||||
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
||||||
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
||||||
|
@ -836,7 +836,9 @@
|
||||||
#define D_UNIT_WATTHOUR "Wh"
|
#define D_UNIT_WATTHOUR "Wh"
|
||||||
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
||||||
|
|
||||||
//SDM220, SDM120, LE01MR
|
//SDM220, SDM120, SDM72, LE01MR
|
||||||
|
#define D_EXPORT_POWER "Export Power"
|
||||||
|
#define D_IMPORT_POWER "Import Power"
|
||||||
#define D_PHASE_ANGLE "Phase Angle"
|
#define D_PHASE_ANGLE "Phase Angle"
|
||||||
#define D_IMPORT_ACTIVE "Import Active"
|
#define D_IMPORT_ACTIVE "Import Active"
|
||||||
#define D_EXPORT_ACTIVE "Export Active"
|
#define D_EXPORT_ACTIVE "Export Active"
|
||||||
|
|
|
@ -630,6 +630,8 @@
|
||||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||||
|
#define D_SENSOR_SDM72_TX "SDM72 Tx"
|
||||||
|
#define D_SENSOR_SDM72_RX "SDM72 Rx"
|
||||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||||
|
@ -782,8 +784,6 @@
|
||||||
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
||||||
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
||||||
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
||||||
#define D_SENSOR_TM1637_CLK "TM1637 CLK"
|
|
||||||
#define D_SENSOR_TM1637_DIO "TM1637 DIO"
|
|
||||||
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
||||||
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
||||||
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
||||||
|
@ -836,7 +836,9 @@
|
||||||
#define D_UNIT_WATTHOUR "Wh"
|
#define D_UNIT_WATTHOUR "Wh"
|
||||||
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
||||||
|
|
||||||
//SDM220, SDM120, LE01MR
|
//SDM220, SDM120, SDM72, LE01MR
|
||||||
|
#define D_EXPORT_POWER "Export vermogen"
|
||||||
|
#define D_IMPORT_POWER "Import vermogen"
|
||||||
#define D_PHASE_ANGLE "Fase hoek"
|
#define D_PHASE_ANGLE "Fase hoek"
|
||||||
#define D_IMPORT_ACTIVE "Import werkelijk"
|
#define D_IMPORT_ACTIVE "Import werkelijk"
|
||||||
#define D_EXPORT_ACTIVE "Export werkelijk"
|
#define D_EXPORT_ACTIVE "Export werkelijk"
|
||||||
|
|
|
@ -630,6 +630,8 @@
|
||||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||||
|
#define D_SENSOR_SDM72_TX "SDM72 Tx"
|
||||||
|
#define D_SENSOR_SDM72_RX "SDM72 Rx"
|
||||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||||
|
@ -782,8 +784,6 @@
|
||||||
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
||||||
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
||||||
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
||||||
#define D_SENSOR_TM1637_CLK "TM1637 CLK"
|
|
||||||
#define D_SENSOR_TM1637_DIO "TM1637 DIO"
|
|
||||||
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
||||||
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
||||||
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
||||||
|
@ -836,7 +836,9 @@
|
||||||
#define D_UNIT_WATTHOUR "Wh"
|
#define D_UNIT_WATTHOUR "Wh"
|
||||||
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
||||||
|
|
||||||
//SDM220, SDM120, LE01MR
|
//SDM220, SDM120, SDM72, LE01MR
|
||||||
|
#define D_EXPORT_POWER "Export Power"
|
||||||
|
#define D_IMPORT_POWER "Import Power"
|
||||||
#define D_PHASE_ANGLE "Przesunięcie faz"
|
#define D_PHASE_ANGLE "Przesunięcie faz"
|
||||||
#define D_IMPORT_ACTIVE "Czynna pobrana"
|
#define D_IMPORT_ACTIVE "Czynna pobrana"
|
||||||
#define D_EXPORT_ACTIVE "Czynna oddana"
|
#define D_EXPORT_ACTIVE "Czynna oddana"
|
||||||
|
|
|
@ -630,6 +630,8 @@
|
||||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||||
|
#define D_SENSOR_SDM72_TX "SDM72 Tx"
|
||||||
|
#define D_SENSOR_SDM72_RX "SDM72 Rx"
|
||||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||||
|
@ -782,8 +784,6 @@
|
||||||
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
||||||
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
||||||
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
||||||
#define D_SENSOR_TM1637_CLK "TM1637 CLK"
|
|
||||||
#define D_SENSOR_TM1637_DIO "TM1637 DIO"
|
|
||||||
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
||||||
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
||||||
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
||||||
|
@ -836,7 +836,9 @@
|
||||||
#define D_UNIT_WATTHOUR "W/h"
|
#define D_UNIT_WATTHOUR "W/h"
|
||||||
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
||||||
|
|
||||||
//SDM220, SDM120, LE01MR
|
//SDM220, SDM120, SDM72, LE01MR
|
||||||
|
#define D_EXPORT_POWER "Export Power"
|
||||||
|
#define D_IMPORT_POWER "Import Power"
|
||||||
#define D_PHASE_ANGLE "Ângulo de Fase"
|
#define D_PHASE_ANGLE "Ângulo de Fase"
|
||||||
#define D_IMPORT_ACTIVE "Importar Ativo"
|
#define D_IMPORT_ACTIVE "Importar Ativo"
|
||||||
#define D_EXPORT_ACTIVE "Exportar Ativo"
|
#define D_EXPORT_ACTIVE "Exportar Ativo"
|
||||||
|
|
|
@ -630,6 +630,8 @@
|
||||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||||
|
#define D_SENSOR_SDM72_TX "SDM72 Tx"
|
||||||
|
#define D_SENSOR_SDM72_RX "SDM72 Rx"
|
||||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||||
|
@ -782,8 +784,6 @@
|
||||||
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
||||||
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
||||||
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
||||||
#define D_SENSOR_TM1637_CLK "TM1637 CLK"
|
|
||||||
#define D_SENSOR_TM1637_DIO "TM1637 DIO"
|
|
||||||
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
||||||
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
||||||
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
||||||
|
@ -836,7 +836,9 @@
|
||||||
#define D_UNIT_WATTHOUR "Wh"
|
#define D_UNIT_WATTHOUR "Wh"
|
||||||
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
||||||
|
|
||||||
//SDM220, SDM120, LE01MR
|
//SDM220, SDM120, SDM72, LE01MR
|
||||||
|
#define D_EXPORT_POWER "Export Power"
|
||||||
|
#define D_IMPORT_POWER "Import Power"
|
||||||
#define D_PHASE_ANGLE "Ângulo de fase"
|
#define D_PHASE_ANGLE "Ângulo de fase"
|
||||||
#define D_IMPORT_ACTIVE "Ativo importado"
|
#define D_IMPORT_ACTIVE "Ativo importado"
|
||||||
#define D_EXPORT_ACTIVE "Ativo exportado"
|
#define D_EXPORT_ACTIVE "Ativo exportado"
|
||||||
|
|
|
@ -630,6 +630,8 @@
|
||||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||||
|
#define D_SENSOR_SDM72_TX "SDM72 Tx"
|
||||||
|
#define D_SENSOR_SDM72_RX "SDM72 Rx"
|
||||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||||
|
@ -782,8 +784,6 @@
|
||||||
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
||||||
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
||||||
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
||||||
#define D_SENSOR_TM1637_CLK "TM1637 CLK"
|
|
||||||
#define D_SENSOR_TM1637_DIO "TM1637 DIO"
|
|
||||||
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
||||||
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
||||||
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
||||||
|
@ -836,7 +836,9 @@
|
||||||
#define D_UNIT_WATTHOUR "Wh"
|
#define D_UNIT_WATTHOUR "Wh"
|
||||||
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
||||||
|
|
||||||
//SDM220, SDM120, LE01MR
|
//SDM220, SDM120, SDM72, LE01MR
|
||||||
|
#define D_EXPORT_POWER "Export Power"
|
||||||
|
#define D_IMPORT_POWER "Import Power"
|
||||||
#define D_PHASE_ANGLE "Unghi de fază"
|
#define D_PHASE_ANGLE "Unghi de fază"
|
||||||
#define D_IMPORT_ACTIVE "Import Activ"
|
#define D_IMPORT_ACTIVE "Import Activ"
|
||||||
#define D_EXPORT_ACTIVE "Export Activ"
|
#define D_EXPORT_ACTIVE "Export Activ"
|
||||||
|
|
|
@ -630,6 +630,8 @@
|
||||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||||
|
#define D_SENSOR_SDM72_TX "SDM72 Tx"
|
||||||
|
#define D_SENSOR_SDM72_RX "SDM72 Rx"
|
||||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||||
|
@ -782,8 +784,6 @@
|
||||||
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
||||||
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
||||||
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
||||||
#define D_SENSOR_TM1637_CLK "TM1637 CLK"
|
|
||||||
#define D_SENSOR_TM1637_DIO "TM1637 DIO"
|
|
||||||
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
||||||
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
||||||
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
||||||
|
@ -836,7 +836,9 @@
|
||||||
#define D_UNIT_WATTHOUR "ВтЧ"
|
#define D_UNIT_WATTHOUR "ВтЧ"
|
||||||
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
||||||
|
|
||||||
//SDM220, SDM120, LE01MR
|
//SDM220, SDM120, SDM72, LE01MR
|
||||||
|
#define D_EXPORT_POWER "Export Power"
|
||||||
|
#define D_IMPORT_POWER "Import Power"
|
||||||
#define D_PHASE_ANGLE "Угол фазы"
|
#define D_PHASE_ANGLE "Угол фазы"
|
||||||
#define D_IMPORT_ACTIVE "Импорт активной мощности"
|
#define D_IMPORT_ACTIVE "Импорт активной мощности"
|
||||||
#define D_EXPORT_ACTIVE "Экспорт активной мощности"
|
#define D_EXPORT_ACTIVE "Экспорт активной мощности"
|
||||||
|
|
|
@ -630,6 +630,8 @@
|
||||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||||
|
#define D_SENSOR_SDM72_TX "SDM72 Tx"
|
||||||
|
#define D_SENSOR_SDM72_RX "SDM72 Rx"
|
||||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||||
|
@ -782,8 +784,6 @@
|
||||||
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
||||||
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
||||||
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
||||||
#define D_SENSOR_TM1637_CLK "TM1637 CLK"
|
|
||||||
#define D_SENSOR_TM1637_DIO "TM1637 DIO"
|
|
||||||
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
||||||
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
||||||
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
||||||
|
@ -836,7 +836,9 @@
|
||||||
#define D_UNIT_WATTHOUR "Wh"
|
#define D_UNIT_WATTHOUR "Wh"
|
||||||
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
||||||
|
|
||||||
//SDM220, SDM120, LE01MR
|
//SDM220, SDM120, SDM72, LE01MR
|
||||||
|
#define D_EXPORT_POWER "Export Power"
|
||||||
|
#define D_IMPORT_POWER "Import Power"
|
||||||
#define D_PHASE_ANGLE "Phase Angle"
|
#define D_PHASE_ANGLE "Phase Angle"
|
||||||
#define D_IMPORT_ACTIVE "Import Active"
|
#define D_IMPORT_ACTIVE "Import Active"
|
||||||
#define D_EXPORT_ACTIVE "Export Active"
|
#define D_EXPORT_ACTIVE "Export Active"
|
||||||
|
|
|
@ -630,6 +630,8 @@
|
||||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||||
|
#define D_SENSOR_SDM72_TX "SDM72 Tx"
|
||||||
|
#define D_SENSOR_SDM72_RX "SDM72 Rx"
|
||||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||||
|
@ -782,8 +784,6 @@
|
||||||
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
||||||
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
||||||
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
||||||
#define D_SENSOR_TM1637_CLK "TM1637 CLK"
|
|
||||||
#define D_SENSOR_TM1637_DIO "TM1637 DIO"
|
|
||||||
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
||||||
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
||||||
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
||||||
|
@ -836,7 +836,9 @@
|
||||||
#define D_UNIT_WATTHOUR "Wh"
|
#define D_UNIT_WATTHOUR "Wh"
|
||||||
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
||||||
|
|
||||||
//SDM220, SDM120, LE01MR
|
//SDM220, SDM120, SDM72, LE01MR
|
||||||
|
#define D_EXPORT_POWER "Export Power"
|
||||||
|
#define D_IMPORT_POWER "Import Power"
|
||||||
#define D_PHASE_ANGLE "Fasvinkel"
|
#define D_PHASE_ANGLE "Fasvinkel"
|
||||||
#define D_IMPORT_ACTIVE "Import aktiv"
|
#define D_IMPORT_ACTIVE "Import aktiv"
|
||||||
#define D_EXPORT_ACTIVE "Export aktiv"
|
#define D_EXPORT_ACTIVE "Export aktiv"
|
||||||
|
|
|
@ -630,6 +630,8 @@
|
||||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||||
|
#define D_SENSOR_SDM72_TX "SDM72 Tx"
|
||||||
|
#define D_SENSOR_SDM72_RX "SDM72 Rx"
|
||||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||||
|
@ -782,8 +784,6 @@
|
||||||
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
||||||
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
||||||
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
||||||
#define D_SENSOR_TM1637_CLK "TM1637 CLK"
|
|
||||||
#define D_SENSOR_TM1637_DIO "TM1637 DIO"
|
|
||||||
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
||||||
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
||||||
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
||||||
|
@ -836,7 +836,9 @@
|
||||||
#define D_UNIT_WATTHOUR "Wh"
|
#define D_UNIT_WATTHOUR "Wh"
|
||||||
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
||||||
|
|
||||||
//SDM220, SDM120, LE01MR
|
//SDM220, SDM120, SDM72, LE01MR
|
||||||
|
#define D_EXPORT_POWER "Export Power"
|
||||||
|
#define D_IMPORT_POWER "Import Power"
|
||||||
#define D_PHASE_ANGLE "Phase Angle"
|
#define D_PHASE_ANGLE "Phase Angle"
|
||||||
#define D_IMPORT_ACTIVE "Import Active"
|
#define D_IMPORT_ACTIVE "Import Active"
|
||||||
#define D_EXPORT_ACTIVE "Export Active"
|
#define D_EXPORT_ACTIVE "Export Active"
|
||||||
|
|
|
@ -630,6 +630,8 @@
|
||||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||||
|
#define D_SENSOR_SDM72_TX "SDM72 Tx"
|
||||||
|
#define D_SENSOR_SDM72_RX "SDM72 Rx"
|
||||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||||
|
@ -782,8 +784,6 @@
|
||||||
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
||||||
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
||||||
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
||||||
#define D_SENSOR_TM1637_CLK "TM1637 CLK"
|
|
||||||
#define D_SENSOR_TM1637_DIO "TM1637 DIO"
|
|
||||||
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
||||||
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
||||||
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
||||||
|
@ -836,7 +836,9 @@
|
||||||
#define D_UNIT_WATTHOUR "Вт/г"
|
#define D_UNIT_WATTHOUR "Вт/г"
|
||||||
#define D_UNIT_WATT_METER_QUADRAT "Вт/м²"
|
#define D_UNIT_WATT_METER_QUADRAT "Вт/м²"
|
||||||
|
|
||||||
//SDM220, SDM120, LE01MR
|
//SDM220, SDM120, SDM72, LE01MR
|
||||||
|
#define D_EXPORT_POWER "Export Power"
|
||||||
|
#define D_IMPORT_POWER "Import Power"
|
||||||
#define D_PHASE_ANGLE "Кут фази"
|
#define D_PHASE_ANGLE "Кут фази"
|
||||||
#define D_IMPORT_ACTIVE "Активна вхід"
|
#define D_IMPORT_ACTIVE "Активна вхід"
|
||||||
#define D_EXPORT_ACTIVE "Активна вихід"
|
#define D_EXPORT_ACTIVE "Активна вихід"
|
||||||
|
|
|
@ -630,6 +630,8 @@
|
||||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||||
|
#define D_SENSOR_SDM72_TX "SDM72 Tx"
|
||||||
|
#define D_SENSOR_SDM72_RX "SDM72 Rx"
|
||||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||||
|
@ -782,8 +784,6 @@
|
||||||
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
||||||
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
||||||
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
||||||
#define D_SENSOR_TM1637_CLK "TM1637 CLK"
|
|
||||||
#define D_SENSOR_TM1637_DIO "TM1637 DIO"
|
|
||||||
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
||||||
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
||||||
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
||||||
|
@ -836,7 +836,9 @@
|
||||||
#define D_UNIT_WATTHOUR "Wh"
|
#define D_UNIT_WATTHOUR "Wh"
|
||||||
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
||||||
|
|
||||||
//SDM220, SDM120, LE01MR
|
//SDM220, SDM120, SDM72, LE01MR
|
||||||
|
#define D_EXPORT_POWER "Export Power"
|
||||||
|
#define D_IMPORT_POWER "Import Power"
|
||||||
#define D_PHASE_ANGLE "Góc pha"
|
#define D_PHASE_ANGLE "Góc pha"
|
||||||
#define D_IMPORT_ACTIVE "Import Active"
|
#define D_IMPORT_ACTIVE "Import Active"
|
||||||
#define D_EXPORT_ACTIVE "Export Active"
|
#define D_EXPORT_ACTIVE "Export Active"
|
||||||
|
|
|
@ -630,6 +630,8 @@
|
||||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||||
|
#define D_SENSOR_SDM72_TX "SDM72 Tx"
|
||||||
|
#define D_SENSOR_SDM72_RX "SDM72 Rx"
|
||||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||||
|
@ -782,8 +784,6 @@
|
||||||
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
||||||
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
||||||
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
||||||
#define D_SENSOR_TM1637_CLK "TM1637 CLK"
|
|
||||||
#define D_SENSOR_TM1637_DIO "TM1637 DIO"
|
|
||||||
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
||||||
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
||||||
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
||||||
|
@ -836,7 +836,9 @@
|
||||||
#define D_UNIT_WATTHOUR "瓦时"
|
#define D_UNIT_WATTHOUR "瓦时"
|
||||||
#define D_UNIT_WATT_METER_QUADRAT "瓦/平米"
|
#define D_UNIT_WATT_METER_QUADRAT "瓦/平米"
|
||||||
|
|
||||||
//SDM220, SDM120, LE01MR
|
//SDM220, SDM120, SDM72, LE01MR
|
||||||
|
#define D_EXPORT_POWER "Export Power"
|
||||||
|
#define D_IMPORT_POWER "Import Power"
|
||||||
#define D_PHASE_ANGLE "相位角"
|
#define D_PHASE_ANGLE "相位角"
|
||||||
#define D_IMPORT_ACTIVE "有功输入"
|
#define D_IMPORT_ACTIVE "有功输入"
|
||||||
#define D_EXPORT_ACTIVE "有功输出"
|
#define D_EXPORT_ACTIVE "有功输出"
|
||||||
|
|
|
@ -630,6 +630,8 @@
|
||||||
#define D_SENSOR_SBR_TX "SerBr Tx"
|
#define D_SENSOR_SBR_TX "SerBr Tx"
|
||||||
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
#define D_SENSOR_SR04_TRIG "SR04 Tri/TX"
|
||||||
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
#define D_SENSOR_SR04_ECHO "SR04 Ech/RX"
|
||||||
|
#define D_SENSOR_SDM72_TX "SDM72 Tx"
|
||||||
|
#define D_SENSOR_SDM72_RX "SDM72 Rx"
|
||||||
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
#define D_SENSOR_SDM120_TX "SDMx20 Tx"
|
||||||
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
#define D_SENSOR_SDM120_RX "SDMx20 Rx"
|
||||||
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
#define D_SENSOR_SDM630_TX "SDM630 Tx"
|
||||||
|
@ -782,8 +784,6 @@
|
||||||
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
#define D_SENSOR_ST7789_DC "ST7789 DC"
|
||||||
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
#define D_SENSOR_SSD1331_CS "SSD1331 CS"
|
||||||
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
#define D_SENSOR_SSD1331_DC "SSD1331 DC"
|
||||||
#define D_SENSOR_TM1637_CLK "TM1637 CLK"
|
|
||||||
#define D_SENSOR_TM1637_DIO "TM1637 DIO"
|
|
||||||
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
#define D_SENSOR_SDCARD_CS "SDCard CS"
|
||||||
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
#define D_SENSOR_WIEGAND_D0 "Wiegand D0"
|
||||||
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
#define D_SENSOR_WIEGAND_D1 "Wiegand D1"
|
||||||
|
@ -836,7 +836,9 @@
|
||||||
#define D_UNIT_WATTHOUR "瓦小時"
|
#define D_UNIT_WATTHOUR "瓦小時"
|
||||||
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
#define D_UNIT_WATT_METER_QUADRAT "W/m²"
|
||||||
|
|
||||||
//SDM220、 SDM120、 LE01MR
|
//SDM220, SDM120, SDM72, LE01MR
|
||||||
|
#define D_EXPORT_POWER "Export Power"
|
||||||
|
#define D_IMPORT_POWER "Import Power"
|
||||||
#define D_PHASE_ANGLE "相量(Phase Angle)"
|
#define D_PHASE_ANGLE "相量(Phase Angle)"
|
||||||
#define D_IMPORT_ACTIVE "Import Active"
|
#define D_IMPORT_ACTIVE "Import Active"
|
||||||
#define D_EXPORT_ACTIVE "Export Active"
|
#define D_EXPORT_ACTIVE "Export Active"
|
||||||
|
|
|
@ -631,7 +631,7 @@ struct {
|
||||||
// Only 32 bit boundary variables below
|
// Only 32 bit boundary variables below
|
||||||
|
|
||||||
uint64_t rf_protocol_mask; // FA8
|
uint64_t rf_protocol_mask; // FA8
|
||||||
uint32_t device_group_maps; // FB0
|
uint8_t device_group_tie[4]; // FB0
|
||||||
SysBitfield5 flag5; // FB4
|
SysBitfield5 flag5; // FB4
|
||||||
uint16_t pulse_counter_debounce_low; // FB8
|
uint16_t pulse_counter_debounce_low; // FB8
|
||||||
uint16_t pulse_counter_debounce_high; // FBA
|
uint16_t pulse_counter_debounce_high; // FBA
|
||||||
|
|
|
@ -1232,6 +1232,9 @@ void SettingsDelta(void) {
|
||||||
Settings.interlock[i] = (i < 4) ? Settings.ex_interlock[i] : 0;
|
Settings.interlock[i] = (i < 4) ? Settings.ex_interlock[i] : 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (Settings.version < 0x09020007) {
|
||||||
|
*(uint32_t *)&Settings.device_group_tie = 0x04030201;
|
||||||
|
}
|
||||||
|
|
||||||
Settings.version = VERSION;
|
Settings.version = VERSION;
|
||||||
SettingsSave(1);
|
SettingsSave(1);
|
||||||
|
|
|
@ -36,7 +36,7 @@ const char kTasmotaCommands[] PROGMEM = "|" // No prefix
|
||||||
#ifdef USE_DEVICE_GROUPS_SEND
|
#ifdef USE_DEVICE_GROUPS_SEND
|
||||||
D_CMND_DEVGROUP_SEND "|"
|
D_CMND_DEVGROUP_SEND "|"
|
||||||
#endif // USE_DEVICE_GROUPS_SEND
|
#endif // USE_DEVICE_GROUPS_SEND
|
||||||
D_CMND_DEVGROUP_SHARE "|" D_CMND_DEVGROUPSTATUS "|"
|
D_CMND_DEVGROUP_SHARE "|" D_CMND_DEVGROUPSTATUS "|" D_CMND_DEVGROUP_DEVICE "|"
|
||||||
#endif // USE_DEVICE_GROUPS
|
#endif // USE_DEVICE_GROUPS
|
||||||
D_CMND_SENSOR "|" D_CMND_DRIVER
|
D_CMND_SENSOR "|" D_CMND_DRIVER
|
||||||
#ifdef ESP32
|
#ifdef ESP32
|
||||||
|
@ -63,7 +63,7 @@ void (* const TasmotaCommand[])(void) PROGMEM = {
|
||||||
#ifdef USE_DEVICE_GROUPS_SEND
|
#ifdef USE_DEVICE_GROUPS_SEND
|
||||||
&CmndDevGroupSend,
|
&CmndDevGroupSend,
|
||||||
#endif // USE_DEVICE_GROUPS_SEND
|
#endif // USE_DEVICE_GROUPS_SEND
|
||||||
&CmndDevGroupShare, &CmndDevGroupStatus,
|
&CmndDevGroupShare, &CmndDevGroupStatus, &CmndDevGroupTie,
|
||||||
#endif // USE_DEVICE_GROUPS
|
#endif // USE_DEVICE_GROUPS
|
||||||
&CmndSensor, &CmndDriver
|
&CmndSensor, &CmndDriver
|
||||||
#ifdef ESP32
|
#ifdef ESP32
|
||||||
|
@ -2104,7 +2104,7 @@ void CmndDevGroupSend(void)
|
||||||
{
|
{
|
||||||
uint8_t device_group_index = (XdrvMailbox.usridx ? XdrvMailbox.index - 1 : 0);
|
uint8_t device_group_index = (XdrvMailbox.usridx ? XdrvMailbox.index - 1 : 0);
|
||||||
if (device_group_index < device_group_count) {
|
if (device_group_index < device_group_count) {
|
||||||
if (!_SendDeviceGroupMessage(device_group_index, (DevGroupMessageType)(DGR_MSGTYPE_UPDATE_COMMAND + DGR_MSGTYPFLAG_WITH_LOCAL))) {
|
if (!_SendDeviceGroupMessage(-device_group_index, (DevGroupMessageType)(DGR_MSGTYPE_UPDATE_COMMAND + DGR_MSGTYPFLAG_WITH_LOCAL))) {
|
||||||
ResponseCmndChar(XdrvMailbox.data);
|
ResponseCmndChar(XdrvMailbox.data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2124,6 +2124,16 @@ void CmndDevGroupStatus(void)
|
||||||
{
|
{
|
||||||
DeviceGroupStatus((XdrvMailbox.usridx ? XdrvMailbox.index - 1 : 0));
|
DeviceGroupStatus((XdrvMailbox.usridx ? XdrvMailbox.index - 1 : 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CmndDevGroupTie(void)
|
||||||
|
{
|
||||||
|
if ((XdrvMailbox.index > 0) && (XdrvMailbox.index <= MAX_DEV_GROUP_NAMES)) {
|
||||||
|
if (XdrvMailbox.data_len > 0) {
|
||||||
|
Settings.device_group_tie[XdrvMailbox.index - 1] = XdrvMailbox.payload;
|
||||||
|
}
|
||||||
|
ResponseCmndIdxNumber(Settings.device_group_tie[XdrvMailbox.index - 1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif // USE_DEVICE_GROUPS
|
#endif // USE_DEVICE_GROUPS
|
||||||
|
|
||||||
void CmndSensor(void)
|
void CmndSensor(void)
|
||||||
|
|
|
@ -42,6 +42,7 @@ struct device_group {
|
||||||
uint32_t next_announcement_time;
|
uint32_t next_announcement_time;
|
||||||
uint32_t next_ack_check_time;
|
uint32_t next_ack_check_time;
|
||||||
uint32_t member_timeout_time;
|
uint32_t member_timeout_time;
|
||||||
|
uint32_t no_status_share;
|
||||||
uint16_t outgoing_sequence;
|
uint16_t outgoing_sequence;
|
||||||
uint16_t last_full_status_sequence;
|
uint16_t last_full_status_sequence;
|
||||||
uint16_t message_length;
|
uint16_t message_length;
|
||||||
|
@ -84,10 +85,9 @@ uint8_t * BeginDeviceGroupMessage(struct device_group * device_group, uint16_t f
|
||||||
return message_ptr;
|
return message_ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return true if we're configured to share the specified item.
|
uint32_t DeviceGroupSharedMask(uint8_t item)
|
||||||
bool DeviceGroupItemShared(bool incoming, uint8_t item)
|
|
||||||
{
|
{
|
||||||
uint32_t mask;
|
uint32_t mask = 0;
|
||||||
if (item == DGR_ITEM_LIGHT_BRI || item == DGR_ITEM_BRI_POWER_ON)
|
if (item == DGR_ITEM_LIGHT_BRI || item == DGR_ITEM_BRI_POWER_ON)
|
||||||
mask = DGR_SHARE_LIGHT_BRI;
|
mask = DGR_SHARE_LIGHT_BRI;
|
||||||
else if (item == DGR_ITEM_POWER)
|
else if (item == DGR_ITEM_POWER)
|
||||||
|
@ -102,9 +102,7 @@ bool DeviceGroupItemShared(bool incoming, uint8_t item)
|
||||||
mask = DGR_SHARE_DIMMER_SETTINGS;
|
mask = DGR_SHARE_DIMMER_SETTINGS;
|
||||||
else if (item == DGR_ITEM_EVENT)
|
else if (item == DGR_ITEM_EVENT)
|
||||||
mask = DGR_SHARE_EVENT;
|
mask = DGR_SHARE_EVENT;
|
||||||
else
|
return mask;
|
||||||
return true;
|
|
||||||
return mask & (incoming ? Settings.device_group_share_in : Settings.device_group_share_out);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeviceGroupsInit(void)
|
void DeviceGroupsInit(void)
|
||||||
|
@ -153,6 +151,7 @@ void DeviceGroupsInit(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
device_group->message_header_length = sprintf_P((char *)device_group->message, PSTR("%s%s"), kDeviceGroupMessage, device_group->group_name) + 1;
|
device_group->message_header_length = sprintf_P((char *)device_group->message, PSTR("%s%s"), kDeviceGroupMessage, device_group->group_name) + 1;
|
||||||
|
device_group->no_status_share = 0;
|
||||||
device_group->last_full_status_sequence = -1;
|
device_group->last_full_status_sequence = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -204,7 +203,6 @@ void DeviceGroupsStop()
|
||||||
|
|
||||||
void SendReceiveDeviceGroupMessage(struct device_group * device_group, struct device_group_member * device_group_member, uint8_t * message, int message_length, bool received)
|
void SendReceiveDeviceGroupMessage(struct device_group * device_group, struct device_group_member * device_group_member, uint8_t * message, int message_length, bool received)
|
||||||
{
|
{
|
||||||
char log_buffer[512];
|
|
||||||
bool item_processed = false;
|
bool item_processed = false;
|
||||||
uint16_t message_sequence;
|
uint16_t message_sequence;
|
||||||
uint16_t flags;
|
uint16_t flags;
|
||||||
|
@ -218,16 +216,17 @@ void SendReceiveDeviceGroupMessage(struct device_group * device_group, struct de
|
||||||
uint8_t * message_ptr = message + strlen((char *)message) + 1;
|
uint8_t * message_ptr = message + strlen((char *)message) + 1;
|
||||||
|
|
||||||
// Get the message sequence and flags.
|
// Get the message sequence and flags.
|
||||||
if (message_ptr + 4 > message_end_ptr) goto badmsg; // Malformed message - must be at least 16-bit sequence, 16-bit flags left
|
if (message_ptr + 4 > message_end_ptr) return; // Malformed message - must be at least 16-bit sequence, 16-bit flags left
|
||||||
message_sequence = *message_ptr++;
|
message_sequence = *message_ptr++;
|
||||||
message_sequence |= *message_ptr++ << 8;
|
message_sequence |= *message_ptr++ << 8;
|
||||||
flags = *message_ptr++;
|
flags = *message_ptr++;
|
||||||
flags |= *message_ptr++ << 8;
|
flags |= *message_ptr++ << 8;
|
||||||
|
|
||||||
// Initialize the log buffer.
|
// Initialize the log buffer.
|
||||||
|
char * log_buffer = (char *)malloc(512);
|
||||||
log_length = sprintf(log_buffer, PSTR("DGR: %s %s message %s %s: seq=%u, flags=%u"), (received ? PSTR("Received") : PSTR("Sending")), device_group->group_name, (received ? PSTR("from") : PSTR("to")), (device_group_member ? IPAddressToString(device_group_member->ip_address) : received ? PSTR("local") : PSTR("network")), message_sequence, flags);
|
log_length = sprintf(log_buffer, PSTR("DGR: %s %s message %s %s: seq=%u, flags=%u"), (received ? PSTR("Received") : PSTR("Sending")), device_group->group_name, (received ? PSTR("from") : PSTR("to")), (device_group_member ? IPAddressToString(device_group_member->ip_address) : received ? PSTR("local") : PSTR("network")), message_sequence, flags);
|
||||||
log_ptr = log_buffer + log_length;
|
log_ptr = log_buffer + log_length;
|
||||||
log_remaining = sizeof(log_buffer) - log_length;
|
log_remaining = 512 - log_length;
|
||||||
|
|
||||||
// If this is an announcement, just log it.
|
// If this is an announcement, just log it.
|
||||||
if (flags == DGR_FLAG_ANNOUNCEMENT) goto write_log;
|
if (flags == DGR_FLAG_ANNOUNCEMENT) goto write_log;
|
||||||
|
@ -303,7 +302,10 @@ void SendReceiveDeviceGroupMessage(struct device_group * device_group, struct de
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t item;
|
uint8_t item;
|
||||||
|
uint8_t item_flags;
|
||||||
int32_t value;
|
int32_t value;
|
||||||
|
uint32_t mask;
|
||||||
|
item_flags = 0;
|
||||||
for (;;) {
|
for (;;) {
|
||||||
if (message_ptr >= message_end_ptr) goto badmsg; // Malformed message
|
if (message_ptr >= message_end_ptr) goto badmsg; // Malformed message
|
||||||
item = *message_ptr++;
|
item = *message_ptr++;
|
||||||
|
@ -321,6 +323,7 @@ void SendReceiveDeviceGroupMessage(struct device_group * device_group, struct de
|
||||||
case DGR_ITEM_BRI_PRESET_HIGH:
|
case DGR_ITEM_BRI_PRESET_HIGH:
|
||||||
case DGR_ITEM_BRI_POWER_ON:
|
case DGR_ITEM_BRI_POWER_ON:
|
||||||
case DGR_ITEM_POWER:
|
case DGR_ITEM_POWER:
|
||||||
|
case DGR_ITEM_NO_STATUS_SHARE:
|
||||||
case DGR_ITEM_EVENT:
|
case DGR_ITEM_EVENT:
|
||||||
case DGR_ITEM_LIGHT_CHANNELS:
|
case DGR_ITEM_LIGHT_CHANNELS:
|
||||||
break;
|
break;
|
||||||
|
@ -376,45 +379,61 @@ void SendReceiveDeviceGroupMessage(struct device_group * device_group, struct de
|
||||||
log_ptr += log_length;
|
log_ptr += log_length;
|
||||||
log_remaining -= log_length;
|
log_remaining -= log_length;
|
||||||
|
|
||||||
if (received && DeviceGroupItemShared(true, item)) {
|
if (received) {
|
||||||
item_processed = true;
|
if (item == DGR_ITEM_FLAGS) {
|
||||||
XdrvMailbox.command_code = item;
|
item_flags = value;
|
||||||
XdrvMailbox.payload = value;
|
continue;
|
||||||
XdrvMailbox.data_len = value;
|
|
||||||
*log_ptr++ = '*';
|
|
||||||
log_remaining--;
|
|
||||||
switch (item) {
|
|
||||||
case DGR_ITEM_POWER:
|
|
||||||
if (Settings.flag4.multiple_device_groups) { // SetOption88 - Enable relays in separate device groups
|
|
||||||
if (device_group_index < TasmotaGlobal.devices_present) {
|
|
||||||
bool on = (value & 1);
|
|
||||||
if (on != (TasmotaGlobal.power & (1 << device_group_index))) ExecuteCommandPower(device_group_index + 1, (on ? POWER_ON : POWER_OFF), SRC_REMOTE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (XdrvMailbox.index & DGR_FLAG_LOCAL) {
|
|
||||||
uint8_t mask_devices = value >> 24;
|
|
||||||
if (mask_devices > TasmotaGlobal.devices_present) mask_devices = TasmotaGlobal.devices_present;
|
|
||||||
for (uint32_t i = 0; i < mask_devices; i++) {
|
|
||||||
uint32_t mask = 1 << i;
|
|
||||||
bool on = (value & mask);
|
|
||||||
if (on != (TasmotaGlobal.power & mask)) ExecuteCommandPower(i + 1, (on ? POWER_ON : POWER_OFF), SRC_REMOTE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
#ifdef USE_RULES
|
|
||||||
case DGR_ITEM_EVENT:
|
|
||||||
CmndEvent();
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
case DGR_ITEM_COMMAND:
|
|
||||||
ExecuteCommand(XdrvMailbox.data, SRC_REMOTE);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
XdrvCall(FUNC_DEVICE_GROUP_ITEM);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (received) {
|
mask = DeviceGroupSharedMask(item);
|
||||||
|
if (item_flags & DGR_ITEM_FLAG_NO_SHARE)
|
||||||
|
device_group->no_status_share |= mask;
|
||||||
|
else
|
||||||
|
device_group->no_status_share &= ~mask;
|
||||||
|
|
||||||
|
if ((!(device_group->no_status_share & mask) || device_group_member == nullptr) && (!mask || (mask & Settings.device_group_share_in))) {
|
||||||
|
item_processed = true;
|
||||||
|
XdrvMailbox.command_code = item;
|
||||||
|
XdrvMailbox.payload = value;
|
||||||
|
XdrvMailbox.data_len = value;
|
||||||
|
*log_ptr++ = '*';
|
||||||
|
log_remaining--;
|
||||||
|
switch (item) {
|
||||||
|
case DGR_ITEM_POWER:
|
||||||
|
if (Settings.flag4.multiple_device_groups) { // SetOption88 - Enable relays in separate device groups
|
||||||
|
uint32_t device = Settings.device_group_tie[device_group_index];
|
||||||
|
if (device) {
|
||||||
|
bool on = (value & 1);
|
||||||
|
if (on != ((TasmotaGlobal.power >> (device - 1)) & 1)) ExecuteCommandPower(device, (on ? POWER_ON : POWER_OFF), SRC_REMOTE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (XdrvMailbox.index & DGR_FLAG_LOCAL) {
|
||||||
|
uint8_t mask_devices = value >> 24;
|
||||||
|
if (mask_devices > TasmotaGlobal.devices_present) mask_devices = TasmotaGlobal.devices_present;
|
||||||
|
for (uint32_t i = 0; i < mask_devices; i++) {
|
||||||
|
uint32_t mask = 1 << i;
|
||||||
|
bool on = (value & mask);
|
||||||
|
if (on != (TasmotaGlobal.power & mask)) ExecuteCommandPower(i + 1, (on ? POWER_ON : POWER_OFF), SRC_REMOTE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case DGR_ITEM_NO_STATUS_SHARE:
|
||||||
|
device_group->no_status_share = value;
|
||||||
|
break;
|
||||||
|
#ifdef USE_RULES
|
||||||
|
case DGR_ITEM_EVENT:
|
||||||
|
CmndEvent();
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
case DGR_ITEM_COMMAND:
|
||||||
|
ExecuteCommand(XdrvMailbox.data, SRC_REMOTE);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
XdrvCall(FUNC_DEVICE_GROUP_ITEM);
|
||||||
|
}
|
||||||
|
item_flags = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (item_processed) {
|
if (item_processed) {
|
||||||
XdrvMailbox.command_code = DGR_ITEM_EOL;
|
XdrvMailbox.command_code = DGR_ITEM_EOL;
|
||||||
XdrvCall(FUNC_DEVICE_GROUP_ITEM);
|
XdrvCall(FUNC_DEVICE_GROUP_ITEM);
|
||||||
|
@ -430,7 +449,7 @@ write_log:
|
||||||
if (received) {
|
if (received) {
|
||||||
if ((flags & DGR_FLAG_STATUS_REQUEST)) {
|
if ((flags & DGR_FLAG_STATUS_REQUEST)) {
|
||||||
if ((flags & DGR_FLAG_RESET) || device_group_member->acked_sequence != device_group->last_full_status_sequence) {
|
if ((flags & DGR_FLAG_RESET) || device_group_member->acked_sequence != device_group->last_full_status_sequence) {
|
||||||
_SendDeviceGroupMessage(device_group_index, DGR_MSGTYP_FULL_STATUS);
|
_SendDeviceGroupMessage(-device_group_index, DGR_MSGTYP_FULL_STATUS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -454,20 +473,18 @@ badmsg:
|
||||||
AddLog(LOG_LEVEL_ERROR, PSTR("%s ** incorrect length"), log_buffer);
|
AddLog(LOG_LEVEL_ERROR, PSTR("%s ** incorrect length"), log_buffer);
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
|
free(log_buffer);
|
||||||
if (received) {
|
if (received) {
|
||||||
TasmotaGlobal.skip_light_fade = false;
|
TasmotaGlobal.skip_light_fade = false;
|
||||||
ignore_dgr_sends = false;
|
ignore_dgr_sends = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool _SendDeviceGroupMessage(uint8_t device_group_index, DevGroupMessageType message_type, ...)
|
bool _SendDeviceGroupMessage(uint32_t device, DevGroupMessageType message_type, ...)
|
||||||
{
|
{
|
||||||
// If device groups is not up, ignore this request.
|
// If device groups is not up, ignore this request.
|
||||||
if (!device_groups_up) return 1;
|
if (!device_groups_up) return 1;
|
||||||
|
|
||||||
// If the device group index is higher then the number of device groups, ignore this request.
|
|
||||||
if (device_group_index >= device_group_count) return 0;
|
|
||||||
|
|
||||||
// Extract the flags from the message type.
|
// Extract the flags from the message type.
|
||||||
bool with_local = ((message_type & DGR_MSGTYPFLAG_WITH_LOCAL) != 0);
|
bool with_local = ((message_type & DGR_MSGTYPFLAG_WITH_LOCAL) != 0);
|
||||||
message_type = (DevGroupMessageType)(message_type & 0x7F);
|
message_type = (DevGroupMessageType)(message_type & 0x7F);
|
||||||
|
@ -475,6 +492,19 @@ bool _SendDeviceGroupMessage(uint8_t device_group_index, DevGroupMessageType mes
|
||||||
// If we're currently processing a remote device message, ignore this request.
|
// If we're currently processing a remote device message, ignore this request.
|
||||||
if (ignore_dgr_sends && message_type != DGR_MSGTYPE_UPDATE_COMMAND) return 0;
|
if (ignore_dgr_sends && message_type != DGR_MSGTYPE_UPDATE_COMMAND) return 0;
|
||||||
|
|
||||||
|
// If device is < 0, the device group index is the device negated. If not, get the device group
|
||||||
|
// index for this device.
|
||||||
|
uint8_t device_group_index = -device;
|
||||||
|
if (device > 0) {
|
||||||
|
device_group_index = 0;
|
||||||
|
if (Settings.flag4.multiple_device_groups) { // SetOption88 - Enable relays in separate device groups
|
||||||
|
for (; device_group_index < device_group_count; device_group_index++) {
|
||||||
|
if (Settings.device_group_tie[device_group_index] == device) break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (device_group_index >= device_group_count) return 0;
|
||||||
|
|
||||||
// Get a pointer to the device information for this device.
|
// Get a pointer to the device information for this device.
|
||||||
struct device_group * device_group = &device_groups[device_group_index];
|
struct device_group * device_group = &device_groups[device_group_index];
|
||||||
|
|
||||||
|
@ -483,7 +513,7 @@ bool _SendDeviceGroupMessage(uint8_t device_group_index, DevGroupMessageType mes
|
||||||
|
|
||||||
// Load the message header, sequence and flags.
|
// Load the message header, sequence and flags.
|
||||||
#ifdef DEVICE_GROUPS_DEBUG
|
#ifdef DEVICE_GROUPS_DEBUG
|
||||||
AddLog(LOG_LEVEL_DEBUG, PSTR("DGR: Building %s %spacket"), device_group->group_name, (message_type == DGR_MSGTYP_FULL_STATUS ? PSTR("full status ") : PSTR("")));
|
AddLog(LOG_LEVEL_DEBUG, PSTR("DGR: Building %s %spacket"), device_group->group_name, (message_type == DGR_MSGTYP_FULL_STATUS ? PSTR("full status ") : PSTR("")));
|
||||||
#endif // DEVICE_GROUPS_DEBUG
|
#endif // DEVICE_GROUPS_DEBUG
|
||||||
uint16_t original_sequence = device_group->outgoing_sequence;
|
uint16_t original_sequence = device_group->outgoing_sequence;
|
||||||
uint16_t flags = 0;
|
uint16_t flags = 0;
|
||||||
|
@ -507,10 +537,9 @@ bool _SendDeviceGroupMessage(uint8_t device_group_index, DevGroupMessageType mes
|
||||||
// Call the drivers to build the status update.
|
// Call the drivers to build the status update.
|
||||||
power_t power = TasmotaGlobal.power;
|
power_t power = TasmotaGlobal.power;
|
||||||
if (Settings.flag4.multiple_device_groups) { // SetOption88 - Enable relays in separate device groups
|
if (Settings.flag4.multiple_device_groups) { // SetOption88 - Enable relays in separate device groups
|
||||||
power >>= device_group_index;
|
power = (power >> (Settings.device_group_tie[device_group_index] - 1)) & 1;
|
||||||
power &= 1;
|
|
||||||
}
|
}
|
||||||
SendDeviceGroupMessage(device_group_index, DGR_MSGTYP_PARTIAL_UPDATE, DGR_ITEM_POWER, power);
|
SendDeviceGroupMessage(-device_group_index, DGR_MSGTYP_PARTIAL_UPDATE, DGR_ITEM_NO_STATUS_SHARE, device_group->no_status_share, DGR_ITEM_POWER, power);
|
||||||
XdrvMailbox.index = 0;
|
XdrvMailbox.index = 0;
|
||||||
if (device_group_index == 0 && first_device_group_is_local) XdrvMailbox.index = DGR_FLAG_LOCAL;
|
if (device_group_index == 0 && first_device_group_is_local) XdrvMailbox.index = DGR_FLAG_LOCAL;
|
||||||
XdrvMailbox.command_code = DGR_ITEM_STATUS;
|
XdrvMailbox.command_code = DGR_ITEM_STATUS;
|
||||||
|
@ -539,11 +568,13 @@ bool _SendDeviceGroupMessage(uint8_t device_group_index, DevGroupMessageType mes
|
||||||
#endif // USE_DEVICE_GROUPS_SEND
|
#endif // USE_DEVICE_GROUPS_SEND
|
||||||
struct item {
|
struct item {
|
||||||
uint8_t item;
|
uint8_t item;
|
||||||
|
uint8_t flags;
|
||||||
uint32_t value;
|
uint32_t value;
|
||||||
void * value_ptr;
|
void * value_ptr;
|
||||||
} item_array[32];
|
} item_array[32];
|
||||||
bool shared;
|
bool shared;
|
||||||
uint8_t item;
|
uint8_t item;
|
||||||
|
uint32_t mask;
|
||||||
uint32_t value;
|
uint32_t value;
|
||||||
uint8_t * value_ptr;
|
uint8_t * value_ptr;
|
||||||
uint8_t * first_item_ptr = message_ptr;
|
uint8_t * first_item_ptr = message_ptr;
|
||||||
|
@ -559,16 +590,24 @@ bool _SendDeviceGroupMessage(uint8_t device_group_index, DevGroupMessageType mes
|
||||||
item_ptr->item = item;
|
item_ptr->item = item;
|
||||||
if (*value_ptr != '=') return 1;
|
if (*value_ptr != '=') return 1;
|
||||||
value_ptr++;
|
value_ptr++;
|
||||||
|
|
||||||
|
// If flags were specified for this item, save them.
|
||||||
|
item_ptr->flags = 0;
|
||||||
|
if (toupper(*value_ptr) == 'N') {
|
||||||
|
value_ptr++;
|
||||||
|
item_ptr->flags = DGR_ITEM_FLAG_NO_SHARE;
|
||||||
|
}
|
||||||
|
|
||||||
if (item <= DGR_ITEM_MAX_32BIT) {
|
if (item <= DGR_ITEM_MAX_32BIT) {
|
||||||
oper = 0;
|
oper = 0;
|
||||||
if (*value_ptr == '@') {
|
if (*value_ptr == '@') {
|
||||||
oper = value_ptr[1];
|
oper = value_ptr[1];
|
||||||
value_ptr += 2;
|
value_ptr += 2;
|
||||||
}
|
}
|
||||||
value = (isdigit(*value_ptr) ? strtoul((char *)value_ptr, (char **)&value_ptr, 0) : 1);
|
value = (isdigit(*value_ptr) ? strtoul((char *)value_ptr, (char **)&value_ptr, 0) : oper == '^' ? 0xffffffff : 1);
|
||||||
if (oper) {
|
if (oper) {
|
||||||
old_value = (item <= DGR_ITEM_MAX_8BIT ? device_group->values_8bit[item] : (item <= DGR_ITEM_MAX_16BIT ? device_group->values_16bit[item - DGR_ITEM_MAX_8BIT - 1] : device_group->values_32bit[item - DGR_ITEM_MAX_16BIT - 1]));
|
old_value = (item <= DGR_ITEM_MAX_8BIT ? device_group->values_8bit[item] : (item <= DGR_ITEM_MAX_16BIT ? device_group->values_16bit[item - DGR_ITEM_MAX_8BIT - 1] : device_group->values_32bit[item - DGR_ITEM_MAX_16BIT - 1]));
|
||||||
value = (oper == '+' ? old_value + value : (oper == '-' ? old_value - value : (oper == '^' ? old_value ^ (value ? value : 0xffffffff) : old_value)));
|
value = (oper == '+' ? old_value + value : oper == '-' ? old_value - value : oper == '^' ? old_value ^ value : oper == '|' ? old_value | value : old_value == '&' ? old_value & value : old_value);
|
||||||
}
|
}
|
||||||
item_ptr->value = value;
|
item_ptr->value = value;
|
||||||
}
|
}
|
||||||
|
@ -580,14 +619,35 @@ bool _SendDeviceGroupMessage(uint8_t device_group_index, DevGroupMessageType mes
|
||||||
if (chr == ' ' && !escaped) break;
|
if (chr == ' ' && !escaped) break;
|
||||||
if (!(escaped = (chr == '\\' && !escaped))) *out_ptr++ = chr;
|
if (!(escaped = (chr == '\\' && !escaped))) *out_ptr++ = chr;
|
||||||
}
|
}
|
||||||
*out_ptr = 0;
|
*out_ptr++ = 0;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
switch (item) {
|
switch (item) {
|
||||||
case DGR_ITEM_LIGHT_CHANNELS:
|
case DGR_ITEM_LIGHT_CHANNELS:
|
||||||
for (int i = 0; i < 6; i++) {
|
{
|
||||||
*out_ptr++ = strtoul((char *)value_ptr, (char **)&value_ptr, 0);
|
bool hex = false;
|
||||||
if (*value_ptr == ',') value_ptr++;
|
char * endptr;
|
||||||
|
if (*value_ptr == '#') {
|
||||||
|
value_ptr++;
|
||||||
|
hex = true;
|
||||||
|
}
|
||||||
|
for (int i = 0; i < 6; i++) {
|
||||||
|
*out_ptr = 0;
|
||||||
|
if (*value_ptr != ' ') {
|
||||||
|
if (hex) {
|
||||||
|
endptr = (char *)value_ptr + 2;
|
||||||
|
chr = *endptr;
|
||||||
|
*endptr = 0;
|
||||||
|
*out_ptr = strtoul((char *)value_ptr, (char **)&value_ptr, 16);
|
||||||
|
*endptr = chr;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
*out_ptr = strtoul((char *)value_ptr, (char **)&value_ptr, 10);
|
||||||
|
if (*value_ptr == ',') value_ptr++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
out_ptr++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -601,6 +661,7 @@ bool _SendDeviceGroupMessage(uint8_t device_group_index, DevGroupMessageType mes
|
||||||
va_start(ap, message_type);
|
va_start(ap, message_type);
|
||||||
while ((item = va_arg(ap, int))) {
|
while ((item = va_arg(ap, int))) {
|
||||||
item_ptr->item = item;
|
item_ptr->item = item;
|
||||||
|
item_ptr->flags = 0;
|
||||||
if (item <= DGR_ITEM_MAX_32BIT)
|
if (item <= DGR_ITEM_MAX_32BIT)
|
||||||
item_ptr->value = va_arg(ap, int);
|
item_ptr->value = va_arg(ap, int);
|
||||||
else if (item <= DGR_ITEM_MAX_STRING)
|
else if (item <= DGR_ITEM_MAX_STRING)
|
||||||
|
@ -621,6 +682,7 @@ bool _SendDeviceGroupMessage(uint8_t device_group_index, DevGroupMessageType mes
|
||||||
// previous update message to remove any items and their values that are included in this new
|
// previous update message to remove any items and their values that are included in this new
|
||||||
// update.
|
// update.
|
||||||
if (device_group->message_length) {
|
if (device_group->message_length) {
|
||||||
|
uint8_t item_flags = 0;
|
||||||
int kept_item_count = 0;
|
int kept_item_count = 0;
|
||||||
|
|
||||||
// Rebuild the previous update message, removing any items whose values are included in this
|
// Rebuild the previous update message, removing any items whose values are included in this
|
||||||
|
@ -628,31 +690,44 @@ bool _SendDeviceGroupMessage(uint8_t device_group_index, DevGroupMessageType mes
|
||||||
uint8_t * previous_message_ptr = message_ptr;
|
uint8_t * previous_message_ptr = message_ptr;
|
||||||
while (item = *previous_message_ptr++) {
|
while (item = *previous_message_ptr++) {
|
||||||
|
|
||||||
// Determine the length of this item's value.
|
// If this is the flags item, save the flags.
|
||||||
if (item <= DGR_ITEM_MAX_32BIT) {
|
if (item == DGR_ITEM_FLAGS) {
|
||||||
value = 1;
|
item_flags = *previous_message_ptr++;
|
||||||
if (item > DGR_ITEM_MAX_8BIT) {
|
}
|
||||||
value = 2;
|
|
||||||
if (item > DGR_ITEM_MAX_16BIT) {
|
// Otherwise, determine the length of this item's value.
|
||||||
value = 4;
|
else {
|
||||||
|
if (item <= DGR_ITEM_MAX_32BIT) {
|
||||||
|
value = 1;
|
||||||
|
if (item > DGR_ITEM_MAX_8BIT) {
|
||||||
|
value = 2;
|
||||||
|
if (item > DGR_ITEM_MAX_16BIT) {
|
||||||
|
value = 4;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
else {
|
||||||
else {
|
value = *previous_message_ptr + 1;
|
||||||
value = *previous_message_ptr + 1;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Search for this item in the new update.
|
// Search for this item in the new update.
|
||||||
for (item_ptr = item_array; item_ptr->item; item_ptr++) {
|
for (item_ptr = item_array; item_ptr->item; item_ptr++) {
|
||||||
if (item_ptr->item == item) break;
|
if (item_ptr->item == item) break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If this item was not found in the new update, copy it to the new update message.
|
// If this item was not found in the new update, copy it to the new update message. If the
|
||||||
if (!item_ptr->item) {
|
// item has flags, first copy the flags item to the new update message.
|
||||||
kept_item_count++;
|
if (!item_ptr->item) {
|
||||||
*message_ptr++ = item;
|
kept_item_count++;
|
||||||
memmove(message_ptr, previous_message_ptr, value);
|
if (item_flags) {
|
||||||
message_ptr += value;
|
*message_ptr++ = DGR_ITEM_FLAGS;
|
||||||
|
*message_ptr++ = item_flags;
|
||||||
|
}
|
||||||
|
*message_ptr++ = item;
|
||||||
|
memmove(message_ptr, previous_message_ptr, value);
|
||||||
|
message_ptr += value;
|
||||||
|
}
|
||||||
|
item_flags = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Advance past the item value.
|
// Advance past the item value.
|
||||||
|
@ -668,8 +743,20 @@ bool _SendDeviceGroupMessage(uint8_t device_group_index, DevGroupMessageType mes
|
||||||
|
|
||||||
// If this item is shared with the group add it to the message.
|
// If this item is shared with the group add it to the message.
|
||||||
shared = true;
|
shared = true;
|
||||||
if (!device_group_index && message_type != DGR_MSGTYPE_UPDATE_COMMAND) shared = DeviceGroupItemShared(false, item);
|
if ((mask = DeviceGroupSharedMask(item))) {
|
||||||
|
if (item_ptr->flags & DGR_ITEM_FLAG_NO_SHARE)
|
||||||
|
device_group->no_status_share |= mask;
|
||||||
|
else if (!building_status_message)
|
||||||
|
device_group->no_status_share &= ~mask;
|
||||||
|
if (message_type != DGR_MSGTYPE_UPDATE_COMMAND) {
|
||||||
|
shared = (!(mask & device_group->no_status_share) && (device_group_index || (mask & Settings.device_group_share_out)));
|
||||||
|
}
|
||||||
|
}
|
||||||
if (shared) {
|
if (shared) {
|
||||||
|
if (item_ptr->flags) {
|
||||||
|
*message_ptr++ = DGR_ITEM_FLAGS;
|
||||||
|
*message_ptr++ = item_ptr->flags;
|
||||||
|
}
|
||||||
*message_ptr++ = item;
|
*message_ptr++ = item;
|
||||||
|
|
||||||
// For integer items, add the value to the message.
|
// For integer items, add the value to the message.
|
||||||
|
@ -684,7 +771,7 @@ bool _SendDeviceGroupMessage(uint8_t device_group_index, DevGroupMessageType mes
|
||||||
*message_ptr++ = value & 0xff;
|
*message_ptr++ = value & 0xff;
|
||||||
value >>= 8;
|
value >>= 8;
|
||||||
// For the power item, the device count is overlayed onto the highest 8 bits.
|
// For the power item, the device count is overlayed onto the highest 8 bits.
|
||||||
if (item == DGR_ITEM_POWER && !value) value = (device_group_index == 0 && first_device_group_is_local ? TasmotaGlobal.devices_present : 1);
|
if (item == DGR_ITEM_POWER && !value) value = (!Settings.flag4.multiple_device_groups && device_group_index == 0 && first_device_group_is_local ? TasmotaGlobal.devices_present : 1);
|
||||||
*message_ptr++ = value;
|
*message_ptr++ = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -857,7 +944,7 @@ AddLog(LOG_LEVEL_DEBUG, PSTR("DGR: Checking next_check_time=%u, now=%u"), next_c
|
||||||
// If we've sent the initial status request message the set number of times, send our
|
// If we've sent the initial status request message the set number of times, send our
|
||||||
// status to all the members.
|
// status to all the members.
|
||||||
else {
|
else {
|
||||||
_SendDeviceGroupMessage(device_group_index, DGR_MSGTYP_FULL_STATUS);
|
_SendDeviceGroupMessage(-device_group_index, DGR_MSGTYP_FULL_STATUS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -712,10 +712,9 @@ void ResponseAppendFeatures(void)
|
||||||
#if defined(USE_I2C) && defined(USE_TOF10120)
|
#if defined(USE_I2C) && defined(USE_TOF10120)
|
||||||
feature7 |= 0x10000000; // xsns_84_tof10120
|
feature7 |= 0x10000000; // xsns_84_tof10120
|
||||||
#endif
|
#endif
|
||||||
#if defined(USE_DISPLAY) && defined(USE_DISPLAY_SEVENSEG) && defined(USE_TM1637)
|
#if defined(USE_ENERGY_SENSOR) && defined(USE_SDM72)
|
||||||
feature7 |= 0x20000000; // xdsp_15_tm1637.ino
|
feature7 |= 0x20000000; // xnrg_18_sdm72.ino
|
||||||
#endif
|
#endif
|
||||||
// feature7 |= 0x20000000;
|
|
||||||
// feature7 |= 0x40000000;
|
// feature7 |= 0x40000000;
|
||||||
// feature7 |= 0x80000000;
|
// feature7 |= 0x80000000;
|
||||||
}
|
}
|
||||||
|
|
|
@ -586,10 +586,11 @@ void ExecuteCommandPower(uint32_t device, uint32_t state, uint32_t source)
|
||||||
}
|
}
|
||||||
#ifdef USE_DEVICE_GROUPS
|
#ifdef USE_DEVICE_GROUPS
|
||||||
if (TasmotaGlobal.power != old_power && SRC_REMOTE != source && SRC_RETRY != source) {
|
if (TasmotaGlobal.power != old_power && SRC_REMOTE != source && SRC_RETRY != source) {
|
||||||
if (Settings.flag4.multiple_device_groups) // SetOption88 - Enable relays in separate device groups
|
power_t dgr_power = TasmotaGlobal.power;
|
||||||
SendDeviceGroupMessage(device - 1, DGR_MSGTYP_UPDATE, DGR_ITEM_POWER, (TasmotaGlobal.power >> (device - 1)) & 1 | 0x01000000); // Explicitly set number of relays to one
|
if (Settings.flag4.multiple_device_groups) { // SetOption88 - Enable relays in separate device groups
|
||||||
else
|
dgr_power = (dgr_power >> (device - 1)) & 1;
|
||||||
SendLocalDeviceGroupMessage(DGR_MSGTYP_UPDATE, DGR_ITEM_POWER, TasmotaGlobal.power);
|
}
|
||||||
|
SendDeviceGroupMessage(device, DGR_MSGTYP_UPDATE, DGR_ITEM_POWER, dgr_power);
|
||||||
}
|
}
|
||||||
#endif // USE_DEVICE_GROUPS
|
#endif // USE_DEVICE_GROUPS
|
||||||
SetDevicePower(TasmotaGlobal.power, source);
|
SetDevicePower(TasmotaGlobal.power, source);
|
||||||
|
@ -1664,7 +1665,6 @@ void GpioInit(void)
|
||||||
ValidSpiPinUsed(GPIO_ST7789_DC) || // ST7789 CS may be omitted so chk DC too
|
ValidSpiPinUsed(GPIO_ST7789_DC) || // ST7789 CS may be omitted so chk DC too
|
||||||
ValidSpiPinUsed(GPIO_ST7789_CS) ||
|
ValidSpiPinUsed(GPIO_ST7789_CS) ||
|
||||||
(ValidSpiPinUsed(GPIO_SSD1331_CS) && ValidSpiPinUsed(GPIO_SSD1331_DC)) ||
|
(ValidSpiPinUsed(GPIO_SSD1331_CS) && ValidSpiPinUsed(GPIO_SSD1331_DC)) ||
|
||||||
(ValidSpiPinUsed(GPIO_TM1637_CLK) && ValidSpiPinUsed(GPIO_TM1637_DIO)) ||
|
|
||||||
ValidSpiPinUsed(GPIO_SDCARD_CS)
|
ValidSpiPinUsed(GPIO_SDCARD_CS)
|
||||||
);
|
);
|
||||||
// If SPI_CS and/or SPI_DC is used they must be valid
|
// If SPI_CS and/or SPI_DC is used they must be valid
|
||||||
|
|
|
@ -126,7 +126,11 @@ const uint32_t PWM_RANGE = 1023; // 255..1023 needs to be devisible b
|
||||||
//const uint16_t PWM_FREQ = 1000; // 100..1000 Hz led refresh
|
//const uint16_t PWM_FREQ = 1000; // 100..1000 Hz led refresh
|
||||||
//const uint16_t PWM_FREQ = 910; // 100..1000 Hz led refresh (iTead value)
|
//const uint16_t PWM_FREQ = 910; // 100..1000 Hz led refresh (iTead value)
|
||||||
const uint16_t PWM_FREQ = 977; // 100..4000 Hz led refresh
|
const uint16_t PWM_FREQ = 977; // 100..4000 Hz led refresh
|
||||||
|
#ifdef ESP32
|
||||||
|
const uint16_t PWM_MAX = 50000; // [PWM_MAX] Maximum frequency for ESP32 - Default: 4000
|
||||||
|
#else
|
||||||
const uint16_t PWM_MAX = 4000; // [PWM_MAX] Maximum frequency - Default: 4000
|
const uint16_t PWM_MAX = 4000; // [PWM_MAX] Maximum frequency - Default: 4000
|
||||||
|
#endif
|
||||||
const uint16_t PWM_MIN = 40; // [PWM_MIN] Minimum frequency - Default: 40
|
const uint16_t PWM_MIN = 40; // [PWM_MIN] Minimum frequency - Default: 40
|
||||||
// For Dimmers use double of your mains AC frequecy (100 for 50Hz and 120 for 60Hz)
|
// For Dimmers use double of your mains AC frequecy (100 for 50Hz and 120 for 60Hz)
|
||||||
// For Controlling Servos use 50 and also set PWM_FREQ as 50 (DO NOT USE THESE VALUES FOR DIMMERS)
|
// For Controlling Servos use 50 and also set PWM_FREQ as 50 (DO NOT USE THESE VALUES FOR DIMMERS)
|
||||||
|
@ -351,7 +355,7 @@ enum DevGroupItem { DGR_ITEM_EOL, DGR_ITEM_STATUS, DGR_ITEM_FLAGS,
|
||||||
//DGR_ITEM_ANALOG1, DGR_ITEM_ANALOG2, DGR_ITEM_ANALOG3, DGR_ITEM_ANALOG4, DGR_ITEM_ANALOG5,
|
//DGR_ITEM_ANALOG1, DGR_ITEM_ANALOG2, DGR_ITEM_ANALOG3, DGR_ITEM_ANALOG4, DGR_ITEM_ANALOG5,
|
||||||
// Add new 16-bit items before this line
|
// Add new 16-bit items before this line
|
||||||
DGR_ITEM_LAST_16BIT, DGR_ITEM_MAX_16BIT = 127,
|
DGR_ITEM_LAST_16BIT, DGR_ITEM_MAX_16BIT = 127,
|
||||||
DGR_ITEM_POWER,
|
DGR_ITEM_POWER, DGR_ITEM_NO_STATUS_SHARE,
|
||||||
// Add new 32-bit items before this line
|
// Add new 32-bit items before this line
|
||||||
DGR_ITEM_LAST_32BIT, DGR_ITEM_MAX_32BIT = 191,
|
DGR_ITEM_LAST_32BIT, DGR_ITEM_MAX_32BIT = 191,
|
||||||
DGR_ITEM_EVENT, DGR_ITEM_COMMAND,
|
DGR_ITEM_EVENT, DGR_ITEM_COMMAND,
|
||||||
|
@ -359,6 +363,8 @@ enum DevGroupItem { DGR_ITEM_EOL, DGR_ITEM_STATUS, DGR_ITEM_FLAGS,
|
||||||
DGR_ITEM_LAST_STRING, DGR_ITEM_MAX_STRING = 223,
|
DGR_ITEM_LAST_STRING, DGR_ITEM_MAX_STRING = 223,
|
||||||
DGR_ITEM_LIGHT_CHANNELS };
|
DGR_ITEM_LIGHT_CHANNELS };
|
||||||
|
|
||||||
|
enum DevGroupItemFlag { DGR_ITEM_FLAG_NO_SHARE = 1 };
|
||||||
|
|
||||||
enum DevGroupShareItem { DGR_SHARE_POWER = 1, DGR_SHARE_LIGHT_BRI = 2, DGR_SHARE_LIGHT_FADE = 4, DGR_SHARE_LIGHT_SCHEME = 8,
|
enum DevGroupShareItem { DGR_SHARE_POWER = 1, DGR_SHARE_LIGHT_BRI = 2, DGR_SHARE_LIGHT_FADE = 4, DGR_SHARE_LIGHT_SCHEME = 8,
|
||||||
DGR_SHARE_LIGHT_COLOR = 16, DGR_SHARE_DIMMER_SETTINGS = 32, DGR_SHARE_EVENT = 64 };
|
DGR_SHARE_LIGHT_COLOR = 16, DGR_SHARE_DIMMER_SETTINGS = 32, DGR_SHARE_EVENT = 64 };
|
||||||
|
|
||||||
|
|
|
@ -59,8 +59,8 @@
|
||||||
#define USE_SPI
|
#define USE_SPI
|
||||||
#define USE_DISPLAY // Add SPI Display Support (+2k code)
|
#define USE_DISPLAY // Add SPI Display Support (+2k code)
|
||||||
#define USE_DISPLAY_ILI9341 // [DisplayModel 4] Enable ILI9341 Tft 480x320 display (+19k code)
|
#define USE_DISPLAY_ILI9341 // [DisplayModel 4] Enable ILI9341 Tft 480x320 display (+19k code)
|
||||||
#define USE_BLE_ESP32 // Enable new BLE driver
|
//#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)
|
//#define USE_MI_ESP32 // (ESP32 only) Add support for ESP32 as a BLE-bridge (+9k2 mem, +292k flash)
|
||||||
#endif // FIRMWARE_ODROID_GO
|
#endif // FIRMWARE_ODROID_GO
|
||||||
|
|
||||||
/*********************************************************************************************\
|
/*********************************************************************************************\
|
||||||
|
@ -79,8 +79,8 @@
|
||||||
#define FALLBACK_MODULE M5STACK_CORE2 // [Module2] Select default module on fast reboot where USER_MODULE is user template
|
#define FALLBACK_MODULE M5STACK_CORE2 // [Module2] Select default module on fast reboot where USER_MODULE is user template
|
||||||
|
|
||||||
#define USE_M5STACK_CORE2 // Add support for M5Stack Core2
|
#define USE_M5STACK_CORE2 // Add support for M5Stack Core2
|
||||||
#define SAY_TIME
|
#define USE_I2S_SAY_TIME
|
||||||
#define USE_WEBRADIO
|
#define USE_I2S_WEBRADIO
|
||||||
#define USE_MPU6886
|
#define USE_MPU6886
|
||||||
#define USE_UFILESYS
|
#define USE_UFILESYS
|
||||||
#define USE_SDCARD
|
#define USE_SDCARD
|
||||||
|
|
|
@ -473,7 +473,6 @@ const char kWebColors[] PROGMEM =
|
||||||
|
|
||||||
#ifdef USE_DEVICE_GROUPS
|
#ifdef USE_DEVICE_GROUPS
|
||||||
#define SendDeviceGroupMessage(DEVICE_INDEX, REQUEST_TYPE, ...) _SendDeviceGroupMessage(DEVICE_INDEX, REQUEST_TYPE, __VA_ARGS__, 0)
|
#define SendDeviceGroupMessage(DEVICE_INDEX, REQUEST_TYPE, ...) _SendDeviceGroupMessage(DEVICE_INDEX, REQUEST_TYPE, __VA_ARGS__, 0)
|
||||||
#define SendLocalDeviceGroupMessage(REQUEST_TYPE, ...) _SendDeviceGroupMessage(0, REQUEST_TYPE, __VA_ARGS__, 0)
|
|
||||||
uint8_t device_group_count = 0;
|
uint8_t device_group_count = 0;
|
||||||
bool first_device_group_is_local = true;
|
bool first_device_group_is_local = true;
|
||||||
#endif // USE_DEVICE_GROUPS
|
#endif // USE_DEVICE_GROUPS
|
||||||
|
|
|
@ -142,13 +142,13 @@ enum UserSelectablePins {
|
||||||
GPIO_RA8876_CS,
|
GPIO_RA8876_CS,
|
||||||
GPIO_ST7789_CS, GPIO_ST7789_DC,
|
GPIO_ST7789_CS, GPIO_ST7789_DC,
|
||||||
GPIO_SSD1331_CS, GPIO_SSD1331_DC,
|
GPIO_SSD1331_CS, GPIO_SSD1331_DC,
|
||||||
GPIO_TM1637_CLK, GPIO_TM1637_DIO,
|
|
||||||
GPIO_SDCARD_CS,
|
GPIO_SDCARD_CS,
|
||||||
GPIO_ROT1A_NP, GPIO_ROT1B_NP, // Rotary switch
|
GPIO_ROT1A_NP, GPIO_ROT1B_NP, // Rotary switch
|
||||||
GPIO_ADC_PH, // Analog PH Sensor
|
GPIO_ADC_PH, // Analog PH Sensor
|
||||||
GPIO_BS814_CLK, GPIO_BS814_DAT, // Holtek BS814A2 touch ctrlr
|
GPIO_BS814_CLK, GPIO_BS814_DAT, // Holtek BS814A2 touch ctrlr
|
||||||
GPIO_WIEGAND_D0, GPIO_WIEGAND_D1, // Wiegand Data lines
|
GPIO_WIEGAND_D0, GPIO_WIEGAND_D1, // Wiegand Data lines
|
||||||
GPIO_NEOPOOL_TX, GPIO_NEOPOOL_RX, // Sugar Valley RS485 interface
|
GPIO_NEOPOOL_TX, GPIO_NEOPOOL_RX, // Sugar Valley RS485 interface
|
||||||
|
GPIO_SDM72_TX, GPIO_SDM72_RX, // SDM72 Serial interface
|
||||||
GPIO_SENSOR_END };
|
GPIO_SENSOR_END };
|
||||||
|
|
||||||
enum ProgramSelectablePins {
|
enum ProgramSelectablePins {
|
||||||
|
@ -311,13 +311,13 @@ const char kSensorNames[] PROGMEM =
|
||||||
D_SENSOR_RA8876_CS "|"
|
D_SENSOR_RA8876_CS "|"
|
||||||
D_SENSOR_ST7789_CS "|" D_SENSOR_ST7789_DC "|"
|
D_SENSOR_ST7789_CS "|" D_SENSOR_ST7789_DC "|"
|
||||||
D_SENSOR_SSD1331_CS "|" D_SENSOR_SSD1331_DC "|"
|
D_SENSOR_SSD1331_CS "|" D_SENSOR_SSD1331_DC "|"
|
||||||
D_SENSOR_TM1637_CLK "|" D_SENSOR_TM1637_DIO "|"
|
|
||||||
D_SENSOR_SDCARD_CS "|"
|
D_SENSOR_SDCARD_CS "|"
|
||||||
D_SENSOR_ROTARY " A_n|" D_SENSOR_ROTARY " B_n|"
|
D_SENSOR_ROTARY " A_n|" D_SENSOR_ROTARY " B_n|"
|
||||||
D_SENSOR_ADC_PH "|"
|
D_SENSOR_ADC_PH "|"
|
||||||
D_SENSOR_BS814_CLK "|" D_SENSOR_BS814_DAT "|"
|
D_SENSOR_BS814_CLK "|" D_SENSOR_BS814_DAT "|"
|
||||||
D_SENSOR_WIEGAND_D0 "|" D_SENSOR_WIEGAND_D1 "|"
|
D_SENSOR_WIEGAND_D0 "|" D_SENSOR_WIEGAND_D1 "|"
|
||||||
D_SENSOR_NEOPOOL_TX "|" D_SENSOR_NEOPOOL_RX "|"
|
D_SENSOR_NEOPOOL_TX "|" D_SENSOR_NEOPOOL_RX "|"
|
||||||
|
D_SENSOR_SDM72_TX "|" D_SENSOR_SDM72_RX "|"
|
||||||
;
|
;
|
||||||
|
|
||||||
const char kSensorNamesFixed[] PROGMEM =
|
const char kSensorNamesFixed[] PROGMEM =
|
||||||
|
@ -431,10 +431,6 @@ const uint16_t kGpioNiceList[] PROGMEM = {
|
||||||
AGPIO(GPIO_SSD1331_CS),
|
AGPIO(GPIO_SSD1331_CS),
|
||||||
AGPIO(GPIO_SSD1331_DC),
|
AGPIO(GPIO_SSD1331_DC),
|
||||||
#endif // USE_DISPLAY_SSD1331
|
#endif // USE_DISPLAY_SSD1331
|
||||||
#ifdef USE_DISPLAY_TM1637
|
|
||||||
AGPIO(GPIO_TM1637_CLK),
|
|
||||||
AGPIO(GPIO_TM1637_DIO),
|
|
||||||
#endif // USE_DISPLAY_TM1637
|
|
||||||
AGPIO(GPIO_BACKLIGHT), // Display backlight control
|
AGPIO(GPIO_BACKLIGHT), // Display backlight control
|
||||||
AGPIO(GPIO_OLED_RESET), // OLED Display Reset
|
AGPIO(GPIO_OLED_RESET), // OLED Display Reset
|
||||||
#endif
|
#endif
|
||||||
|
@ -611,6 +607,10 @@ const uint16_t kGpioNiceList[] PROGMEM = {
|
||||||
AGPIO(GPIO_WE517_TX), // WE517 Serial interface
|
AGPIO(GPIO_WE517_TX), // WE517 Serial interface
|
||||||
AGPIO(GPIO_WE517_RX), // WE517 Serial interface
|
AGPIO(GPIO_WE517_RX), // WE517 Serial interface
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef USE_SDM72
|
||||||
|
AGPIO(GPIO_SDM72_TX), // SDM72 Serial interface
|
||||||
|
AGPIO(GPIO_SDM72_RX), // SDM72 Serial interface
|
||||||
|
#endif
|
||||||
#endif // USE_ENERGY_SENSOR
|
#endif // USE_ENERGY_SENSOR
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------------------------*\
|
/*-------------------------------------------------------------------------------------------*\
|
||||||
|
|
|
@ -20,6 +20,6 @@
|
||||||
#ifndef _TASMOTA_VERSION_H_
|
#ifndef _TASMOTA_VERSION_H_
|
||||||
#define _TASMOTA_VERSION_H_
|
#define _TASMOTA_VERSION_H_
|
||||||
|
|
||||||
const uint32_t VERSION = 0x09020006;
|
const uint32_t VERSION = 0x09020007;
|
||||||
|
|
||||||
#endif // _TASMOTA_VERSION_H_
|
#endif // _TASMOTA_VERSION_H_
|
||||||
|
|
|
@ -80,9 +80,9 @@ struct ENERGY {
|
||||||
float power_factor[3] = { NAN, NAN, NAN }; // 0.12
|
float power_factor[3] = { NAN, NAN, NAN }; // 0.12
|
||||||
float frequency[3] = { NAN, NAN, NAN }; // 123.1 Hz
|
float frequency[3] = { NAN, NAN, NAN }; // 123.1 Hz
|
||||||
|
|
||||||
#ifdef SDM630_IMPORT
|
#if defined(SDM630_IMPORT) || defined(SDM72_IMPEXP)
|
||||||
float import_active[3] = { NAN, NAN, NAN }; // 123.123 kWh
|
float import_active[3] = { NAN, NAN, NAN }; // 123.123 kWh
|
||||||
#endif // SDM630_IMPORT
|
#endif // SDM630_IMPORT || SDM72_IMPEXP
|
||||||
float export_active[3] = { NAN, NAN, NAN }; // 123.123 kWh
|
float export_active[3] = { NAN, NAN, NAN }; // 123.123 kWh
|
||||||
|
|
||||||
float start_energy = 0; // 12345.12345 kWh total previous
|
float start_energy = 0; // 12345.12345 kWh total previous
|
||||||
|
@ -919,10 +919,10 @@ const char HTTP_ENERGY_SNS2[] PROGMEM =
|
||||||
const char HTTP_ENERGY_SNS3[] PROGMEM =
|
const char HTTP_ENERGY_SNS3[] PROGMEM =
|
||||||
"{s}" D_EXPORT_ACTIVE "{m}%s " D_UNIT_KILOWATTHOUR "{e}";
|
"{s}" D_EXPORT_ACTIVE "{m}%s " D_UNIT_KILOWATTHOUR "{e}";
|
||||||
|
|
||||||
#ifdef SDM630_IMPORT
|
#if defined(SDM630_IMPORT) || defined(SDM72_IMPEXP)
|
||||||
const char HTTP_ENERGY_SNS4[] PROGMEM =
|
const char HTTP_ENERGY_SNS4[] PROGMEM =
|
||||||
"{s}" D_IMPORT_ACTIVE "{m}%s " D_UNIT_KILOWATTHOUR "{e}";
|
"{s}" D_IMPORT_ACTIVE "{m}%s " D_UNIT_KILOWATTHOUR "{e}";
|
||||||
#endif // SDM630_IMPORT
|
#endif // SDM630_IMPORT || SDM72_IMPEXP
|
||||||
#endif // USE_WEBSERVER
|
#endif // USE_WEBSERVER
|
||||||
|
|
||||||
void EnergyShow(bool json)
|
void EnergyShow(bool json)
|
||||||
|
@ -987,17 +987,17 @@ void EnergyShow(bool json)
|
||||||
char voltage_chr[Energy.phase_count][FLOATSZ];
|
char voltage_chr[Energy.phase_count][FLOATSZ];
|
||||||
char current_chr[Energy.phase_count][FLOATSZ];
|
char current_chr[Energy.phase_count][FLOATSZ];
|
||||||
char active_power_chr[Energy.phase_count][FLOATSZ];
|
char active_power_chr[Energy.phase_count][FLOATSZ];
|
||||||
#ifdef SDM630_IMPORT
|
#if defined(SDM630_IMPORT) || defined(SDM72_IMPEXP)
|
||||||
char import_active_chr[Energy.phase_count][FLOATSZ];
|
char import_active_chr[Energy.phase_count][FLOATSZ];
|
||||||
#endif // SDM630_IMPORT
|
#endif // SDM630_IMPORT || SDM72_IMPEXP
|
||||||
char export_active_chr[Energy.phase_count][FLOATSZ];
|
char export_active_chr[Energy.phase_count][FLOATSZ];
|
||||||
for (uint32_t i = 0; i < Energy.phase_count; i++) {
|
for (uint32_t i = 0; i < Energy.phase_count; i++) {
|
||||||
dtostrfd(Energy.voltage[i], Settings.flag2.voltage_resolution, voltage_chr[i]);
|
dtostrfd(Energy.voltage[i], Settings.flag2.voltage_resolution, voltage_chr[i]);
|
||||||
dtostrfd(Energy.current[i], Settings.flag2.current_resolution, current_chr[i]);
|
dtostrfd(Energy.current[i], Settings.flag2.current_resolution, current_chr[i]);
|
||||||
dtostrfd(Energy.active_power[i], Settings.flag2.wattage_resolution, active_power_chr[i]);
|
dtostrfd(Energy.active_power[i], Settings.flag2.wattage_resolution, active_power_chr[i]);
|
||||||
#ifdef SDM630_IMPORT
|
#if defined(SDM630_IMPORT) || defined(SDM72_IMPEXP)
|
||||||
dtostrfd(Energy.import_active[i], Settings.flag2.energy_resolution, import_active_chr[i]);
|
dtostrfd(Energy.import_active[i], Settings.flag2.energy_resolution, import_active_chr[i]);
|
||||||
#endif // SDM630_IMPORT
|
#endif // SDM630_IMPORT || SDM72_IMPEXP
|
||||||
dtostrfd(Energy.export_active[i], Settings.flag2.energy_resolution, export_active_chr[i]);
|
dtostrfd(Energy.export_active[i], Settings.flag2.energy_resolution, export_active_chr[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1040,7 +1040,7 @@ void EnergyShow(bool json)
|
||||||
energy_yesterday_chr,
|
energy_yesterday_chr,
|
||||||
energy_daily_chr);
|
energy_daily_chr);
|
||||||
|
|
||||||
#ifdef SDM630_IMPORT
|
#if defined(SDM630_IMPORT) || defined(SDM72_IMPEXP)
|
||||||
if (!isnan(Energy.import_active[0])) {
|
if (!isnan(Energy.import_active[0])) {
|
||||||
ResponseAppend_P(PSTR(",\"" D_JSON_IMPORT_ACTIVE "\":%s"),
|
ResponseAppend_P(PSTR(",\"" D_JSON_IMPORT_ACTIVE "\":%s"),
|
||||||
EnergyFormat(value_chr, import_active_chr[0], json));
|
EnergyFormat(value_chr, import_active_chr[0], json));
|
||||||
|
@ -1049,7 +1049,7 @@ void EnergyShow(bool json)
|
||||||
EnergyFormatIndex(value_chr, energy_return_chr[0], json, 2));
|
EnergyFormatIndex(value_chr, energy_return_chr[0], json, 2));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif // SDM630_IMPORT
|
#endif // SDM630_IMPORT || SDM72_IMPEXP
|
||||||
|
|
||||||
if (!isnan(Energy.export_active[0])) {
|
if (!isnan(Energy.export_active[0])) {
|
||||||
ResponseAppend_P(PSTR(",\"" D_JSON_EXPORT_ACTIVE "\":%s"),
|
ResponseAppend_P(PSTR(",\"" D_JSON_EXPORT_ACTIVE "\":%s"),
|
||||||
|
@ -1152,11 +1152,11 @@ void EnergyShow(bool json)
|
||||||
if (!isnan(Energy.export_active[0])) {
|
if (!isnan(Energy.export_active[0])) {
|
||||||
WSContentSend_PD(HTTP_ENERGY_SNS3, EnergyFormat(value_chr, export_active_chr[0], json));
|
WSContentSend_PD(HTTP_ENERGY_SNS3, EnergyFormat(value_chr, export_active_chr[0], json));
|
||||||
}
|
}
|
||||||
#ifdef SDM630_IMPORT
|
#if defined(SDM630_IMPORT) || defined(SDM72_IMPEXP)
|
||||||
if (!isnan(Energy.import_active[0])) {
|
if (!isnan(Energy.import_active[0])) {
|
||||||
WSContentSend_PD(HTTP_ENERGY_SNS4, EnergyFormat(value_chr, import_active_chr[0], json));
|
WSContentSend_PD(HTTP_ENERGY_SNS4, EnergyFormat(value_chr, import_active_chr[0], json));
|
||||||
}
|
}
|
||||||
#endif // SDM630_IMPORT
|
#endif // SDM630_IMPORT || SDM72_IMPEXP
|
||||||
|
|
||||||
XnrgCall(FUNC_WEB_SENSOR);
|
XnrgCall(FUNC_WEB_SENSOR);
|
||||||
#endif // USE_WEBSERVER
|
#endif // USE_WEBSERVER
|
||||||
|
|
|
@ -234,7 +234,6 @@ struct LIGHT {
|
||||||
bool fade_initialized = false; // dont't fade at startup
|
bool fade_initialized = false; // dont't fade at startup
|
||||||
bool fade_running = false;
|
bool fade_running = false;
|
||||||
#ifdef USE_DEVICE_GROUPS
|
#ifdef USE_DEVICE_GROUPS
|
||||||
uint8_t device_group_index;
|
|
||||||
uint8_t last_scheme = 0;
|
uint8_t last_scheme = 0;
|
||||||
bool devgrp_no_channels_out = false; // don't share channels with device group (e.g. if scheme set by other device)
|
bool devgrp_no_channels_out = false; // don't share channels with device group (e.g. if scheme set by other device)
|
||||||
#ifdef USE_DGR_LIGHT_SEQUENCE
|
#ifdef USE_DGR_LIGHT_SEQUENCE
|
||||||
|
@ -1118,12 +1117,6 @@ void LightInit(void)
|
||||||
Light.device--; // we take the last two devices as lights
|
Light.device--; // we take the last two devices as lights
|
||||||
}
|
}
|
||||||
LightCalcPWMRange();
|
LightCalcPWMRange();
|
||||||
#ifdef USE_DEVICE_GROUPS
|
|
||||||
Light.device_group_index = 0;
|
|
||||||
if (Settings.flag4.multiple_device_groups) { // SetOption88 - Enable relays in separate device groups
|
|
||||||
Light.device_group_index = Light.device - 1;
|
|
||||||
}
|
|
||||||
#endif // USE_DEVICE_GROUPS
|
|
||||||
#ifdef DEBUG_LIGHT
|
#ifdef DEBUG_LIGHT
|
||||||
AddLog_P(LOG_LEVEL_DEBUG_MORE, "LightInit Light.pwm_multi_channels=%d Light.subtype=%d Light.device=%d TasmotaGlobal.devices_present=%d",
|
AddLog_P(LOG_LEVEL_DEBUG_MORE, "LightInit Light.pwm_multi_channels=%d Light.subtype=%d Light.device=%d TasmotaGlobal.devices_present=%d",
|
||||||
Light.pwm_multi_channels, Light.subtype, Light.device, TasmotaGlobal.devices_present);
|
Light.pwm_multi_channels, Light.subtype, Light.device, TasmotaGlobal.devices_present);
|
||||||
|
@ -1708,7 +1701,7 @@ void LightAnimate(void)
|
||||||
#ifdef USE_DEVICE_GROUPS
|
#ifdef USE_DEVICE_GROUPS
|
||||||
if (Settings.light_scheme != Light.last_scheme) {
|
if (Settings.light_scheme != Light.last_scheme) {
|
||||||
Light.last_scheme = Settings.light_scheme;
|
Light.last_scheme = Settings.light_scheme;
|
||||||
SendDeviceGroupMessage(Light.device_group_index, DGR_MSGTYP_UPDATE, DGR_ITEM_LIGHT_SCHEME, Settings.light_scheme);
|
SendDeviceGroupMessage(Light.device, DGR_MSGTYP_UPDATE, DGR_ITEM_LIGHT_SCHEME, Settings.light_scheme);
|
||||||
Light.devgrp_no_channels_out = false;
|
Light.devgrp_no_channels_out = false;
|
||||||
}
|
}
|
||||||
#endif // USE_DEVICE_GROUPS
|
#endif // USE_DEVICE_GROUPS
|
||||||
|
@ -1730,7 +1723,7 @@ void LightAnimate(void)
|
||||||
}
|
}
|
||||||
if (Light.update) {
|
if (Light.update) {
|
||||||
#ifdef USE_DEVICE_GROUPS
|
#ifdef USE_DEVICE_GROUPS
|
||||||
if (Light.power && !Light.devgrp_no_channels_out) LightSendDeviceGroupStatus(false);
|
if (Light.power && !Light.devgrp_no_channels_out) LightSendDeviceGroupStatus();
|
||||||
#endif // USE_DEVICE_GROUPS
|
#endif // USE_DEVICE_GROUPS
|
||||||
|
|
||||||
uint16_t cur_col_10[LST_MAX]; // 10 bits resolution
|
uint16_t cur_col_10[LST_MAX]; // 10 bits resolution
|
||||||
|
@ -2172,25 +2165,28 @@ bool calcGammaBulbs(uint16_t cur_col_10[5]) {
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_DEVICE_GROUPS
|
#ifdef USE_DEVICE_GROUPS
|
||||||
void LightSendDeviceGroupStatus(bool status)
|
void LightSendDeviceGroupStatus()
|
||||||
{
|
{
|
||||||
static uint8_t last_bri;
|
static uint8_t last_bri;
|
||||||
uint8_t bri = light_state.getBri();
|
uint8_t bri = light_state.getBri();
|
||||||
bool send_bri_update = (status || bri != last_bri);
|
bool send_bri_update = (building_status_message || bri != last_bri);
|
||||||
if (Light.subtype > LST_SINGLE) {
|
if (Light.subtype > LST_SINGLE) {
|
||||||
static uint8_t channels[LST_MAX + 1] = { 0, 0, 0, 0, 0, 0 };
|
static uint8_t last_channels[LST_MAX + 1] = { 0, 0, 0, 0, 0, 0 };
|
||||||
if (status) {
|
uint8_t channels[LST_MAX];
|
||||||
light_state.getChannels(channels);
|
|
||||||
|
light_state.getChannelsRaw(channels);
|
||||||
|
uint8_t color_mode = light_state.getColorMode();
|
||||||
|
if (!(color_mode & LCM_RGB)) channels[0] = channels[1] = channels[2] = 0;
|
||||||
|
if (!(color_mode & LCM_CT)) channels[3] = channels[4] = 0;
|
||||||
|
if (building_status_message || memcmp(channels, last_channels, LST_MAX)) {
|
||||||
|
memcpy(last_channels, channels, LST_MAX);
|
||||||
|
last_channels[LST_MAX]++;
|
||||||
|
SendDeviceGroupMessage(Light.device, (send_bri_update ? DGR_MSGTYP_PARTIAL_UPDATE : DGR_MSGTYP_UPDATE), DGR_ITEM_LIGHT_CHANNELS, last_channels);
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
memcpy(channels, Light.new_color, LST_MAX);
|
|
||||||
channels[LST_MAX]++;
|
|
||||||
}
|
|
||||||
SendDeviceGroupMessage(Light.device_group_index, (send_bri_update ? DGR_MSGTYP_PARTIAL_UPDATE : DGR_MSGTYP_UPDATE), DGR_ITEM_LIGHT_CHANNELS, channels);
|
|
||||||
}
|
}
|
||||||
if (send_bri_update) {
|
if (send_bri_update) {
|
||||||
last_bri = bri;
|
last_bri = bri;
|
||||||
SendDeviceGroupMessage(Light.device_group_index, DGR_MSGTYP_UPDATE, DGR_ITEM_LIGHT_BRI, light_state.getBri());
|
SendDeviceGroupMessage(Light.device, DGR_MSGTYP_UPDATE, DGR_ITEM_LIGHT_BRI, light_state.getBri());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2199,10 +2195,7 @@ void LightHandleDevGroupItem(void)
|
||||||
static bool send_state = false;
|
static bool send_state = false;
|
||||||
static bool restore_power = false;
|
static bool restore_power = false;
|
||||||
|
|
||||||
//#ifdef USE_PWM_DIMMER_REMOTE
|
if (Settings.device_group_tie[*XdrvMailbox.topic] != Light.device) return;
|
||||||
// if (!(XdrvMailbox.index & DGR_FLAG_LOCAL)) return;
|
|
||||||
//#endif // USE_PWM_DIMMER_REMOTE
|
|
||||||
if (*XdrvMailbox.topic != Light.device_group_index) return;
|
|
||||||
bool more_to_come;
|
bool more_to_come;
|
||||||
uint32_t value = XdrvMailbox.payload;
|
uint32_t value = XdrvMailbox.payload;
|
||||||
switch (XdrvMailbox.command_code) {
|
switch (XdrvMailbox.command_code) {
|
||||||
|
@ -2218,7 +2211,7 @@ void LightHandleDevGroupItem(void)
|
||||||
|
|
||||||
LightAnimate();
|
LightAnimate();
|
||||||
|
|
||||||
TasmotaGlobal.skip_light_fade = true;
|
TasmotaGlobal.skip_light_fade = false;
|
||||||
if (send_state && !more_to_come) {
|
if (send_state && !more_to_come) {
|
||||||
light_controller.saveSettings();
|
light_controller.saveSettings();
|
||||||
if (Settings.flag3.hass_tele_on_power) { // SetOption59 - Send tele/%topic%/STATE in addition to stat/%topic%/RESULT
|
if (Settings.flag3.hass_tele_on_power) { // SetOption59 - Send tele/%topic%/STATE in addition to stat/%topic%/RESULT
|
||||||
|
@ -2242,8 +2235,9 @@ void LightHandleDevGroupItem(void)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case DGR_ITEM_LIGHT_CHANNELS:
|
case DGR_ITEM_LIGHT_CHANNELS:
|
||||||
#ifdef USE_DGR_LIGHT_SEQUENCE
|
|
||||||
{
|
{
|
||||||
|
uint8_t bri = light_state.getBri();
|
||||||
|
#ifdef USE_DGR_LIGHT_SEQUENCE
|
||||||
static uint8_t last_sequence = 0;
|
static uint8_t last_sequence = 0;
|
||||||
|
|
||||||
// If a sequence offset is set, set the channels to the ones we received <SequenceOffset>
|
// If a sequence offset is set, set the channels to the ones we received <SequenceOffset>
|
||||||
|
@ -2259,13 +2253,11 @@ void LightHandleDevGroupItem(void)
|
||||||
memcpy(&Light.channels_fifo[last_entry], XdrvMailbox.data, LST_MAX);
|
memcpy(&Light.channels_fifo[last_entry], XdrvMailbox.data, LST_MAX);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else
|
||||||
#endif // USE_DGR_LIGHT_SEQUENCE
|
#endif // USE_DGR_LIGHT_SEQUENCE
|
||||||
light_controller.changeChannels((uint8_t *)XdrvMailbox.data);
|
light_controller.changeChannels((uint8_t *)XdrvMailbox.data);
|
||||||
#ifdef USE_DGR_LIGHT_SEQUENCE
|
light_controller.changeBri(bri);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#endif // USE_DGR_LIGHT_SEQUENCE
|
|
||||||
send_state = true;
|
send_state = true;
|
||||||
break;
|
break;
|
||||||
case DGR_ITEM_LIGHT_FIXED_COLOR:
|
case DGR_ITEM_LIGHT_FIXED_COLOR:
|
||||||
|
@ -2319,9 +2311,9 @@ void LightHandleDevGroupItem(void)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case DGR_ITEM_STATUS:
|
case DGR_ITEM_STATUS:
|
||||||
SendLocalDeviceGroupMessage(DGR_MSGTYP_PARTIAL_UPDATE, DGR_ITEM_LIGHT_FADE, Settings.light_fade,
|
SendDeviceGroupMessage(Light.device, DGR_MSGTYP_PARTIAL_UPDATE, DGR_ITEM_LIGHT_FADE, Settings.light_fade,
|
||||||
DGR_ITEM_LIGHT_SPEED, Settings.light_speed, DGR_ITEM_LIGHT_SCHEME, Settings.light_scheme);
|
DGR_ITEM_LIGHT_SPEED, Settings.light_speed, DGR_ITEM_LIGHT_SCHEME, Settings.light_scheme);
|
||||||
LightSendDeviceGroupStatus(true);
|
LightSendDeviceGroupStatus();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2743,7 +2735,7 @@ void CmndDimmer(void)
|
||||||
uint8_t bri = light_state.getBri();
|
uint8_t bri = light_state.getBri();
|
||||||
if (bri != Settings.bri_power_on) {
|
if (bri != Settings.bri_power_on) {
|
||||||
Settings.bri_power_on = bri;
|
Settings.bri_power_on = bri;
|
||||||
SendDeviceGroupMessage(Light.device_group_index, DGR_MSGTYP_PARTIAL_UPDATE, DGR_ITEM_BRI_POWER_ON, Settings.bri_power_on);
|
SendDeviceGroupMessage(Light.device, DGR_MSGTYP_PARTIAL_UPDATE, DGR_ITEM_BRI_POWER_ON, Settings.bri_power_on);
|
||||||
}
|
}
|
||||||
#endif // USE_PWM_DIMMER && USE_DEVICE_GROUPS
|
#endif // USE_PWM_DIMMER && USE_DEVICE_GROUPS
|
||||||
Light.update = true;
|
Light.update = true;
|
||||||
|
@ -2836,58 +2828,62 @@ void CmndRgbwwTable(void)
|
||||||
|
|
||||||
void CmndFade(void)
|
void CmndFade(void)
|
||||||
{
|
{
|
||||||
// Fade - Show current Fade state
|
if (2 == XdrvMailbox.index) {
|
||||||
// Fade 0 - Turn Fade Off
|
// Home Assistant backwards compatibility, can be removed mid 2021
|
||||||
// Fade On - Turn Fade On
|
} else {
|
||||||
// Fade Toggle - Toggle Fade state
|
// Fade - Show current Fade state
|
||||||
switch (XdrvMailbox.payload) {
|
// Fade 0 - Turn Fade Off
|
||||||
case 0: // Off
|
// Fade On - Turn Fade On
|
||||||
case 1: // On
|
// Fade Toggle - Toggle Fade state
|
||||||
Settings.light_fade = XdrvMailbox.payload;
|
switch (XdrvMailbox.payload) {
|
||||||
break;
|
case 0: // Off
|
||||||
case 2: // Toggle
|
case 1: // On
|
||||||
Settings.light_fade ^= 1;
|
Settings.light_fade = XdrvMailbox.payload;
|
||||||
break;
|
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_group_index, 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);
|
ResponseCmndStateText(Settings.light_fade);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CmndSpeed(void)
|
void CmndSpeed(void)
|
||||||
{
|
{
|
||||||
if (XdrvMailbox.index == 2) {
|
if (2 == XdrvMailbox.index) {
|
||||||
if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload <= 40)) {
|
if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload <= 40)) {
|
||||||
Light.fade_once_enabled = true;
|
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_enabled = true;
|
||||||
Light.speed_once_value = XdrvMailbox.payload;
|
Light.speed_once_value = XdrvMailbox.payload;
|
||||||
if (!Light.fade_once_value) { Light.fade_running = false; }
|
if (!Light.fade_once_value) { Light.fade_running = false; }
|
||||||
}
|
}
|
||||||
return;
|
ResponseCmndNumber(Light.speed_once_value);
|
||||||
}
|
} else {
|
||||||
|
// Speed 1 - Fast
|
||||||
// Speed 1 - Fast
|
// Speed 40 - Very slow
|
||||||
// Speed 40 - Very slow
|
// Speed + - Increment Speed
|
||||||
// Speed + - Increment Speed
|
// Speed - - Decrement Speed
|
||||||
// Speed - - Decrement Speed
|
if (1 == XdrvMailbox.data_len) {
|
||||||
if (1 == XdrvMailbox.data_len) {
|
if (('+' == XdrvMailbox.data[0]) && (Settings.light_speed > 1)) {
|
||||||
if (('+' == XdrvMailbox.data[0]) && (Settings.light_speed > 1)) {
|
XdrvMailbox.payload = 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)) {
|
if ((XdrvMailbox.payload > 0) && (XdrvMailbox.payload <= 40)) {
|
||||||
XdrvMailbox.payload = Settings.light_speed + 1;
|
Settings.light_speed = XdrvMailbox.payload;
|
||||||
}
|
|
||||||
}
|
|
||||||
if ((XdrvMailbox.payload > 0) && (XdrvMailbox.payload <= 40)) {
|
|
||||||
Settings.light_speed = XdrvMailbox.payload;
|
|
||||||
#ifdef USE_DEVICE_GROUPS
|
#ifdef USE_DEVICE_GROUPS
|
||||||
SendDeviceGroupMessage(Light.device_group_index, 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
|
#endif // USE_DEVICE_GROUPS
|
||||||
|
}
|
||||||
|
ResponseCmndNumber(Settings.light_speed);
|
||||||
}
|
}
|
||||||
ResponseCmndNumber(Settings.light_speed);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CmndWakeupDuration(void)
|
void CmndWakeupDuration(void)
|
||||||
|
|