mirror of
https://github.com/letscontrolit/ESPEasy.git
synced 2026-07-27 19:57:38 +00:00
Merge pull request #5535 from tonhuisman/bugfix/Fixes-for-release-may-2026
[Fixes] Corrections and improvements for release May 2026
This commit is contained in:
BIN
Binary file not shown.
-32
@@ -1,32 +0,0 @@
|
|||||||
3.9.8:
|
|
||||||
* add UI to support flash & efuse read
|
|
||||||
* support ESP32-C5 / ESP32-C61
|
|
||||||
|
|
||||||
3.9.7:
|
|
||||||
* support ESP32-P4
|
|
||||||
* update UI display icon
|
|
||||||
* Fix bug: icon stuck after long-term use
|
|
||||||
|
|
||||||
3.9.6:
|
|
||||||
* support ESP32/ESP32H2/ESP32C6/ESP32C2/ESP32S2 secure boot version2 and flash encryption
|
|
||||||
* config DUT number in multiconfig file ,up to 20pcs
|
|
||||||
* update secure config file, see docs in detail
|
|
||||||
|
|
||||||
3.9.5:
|
|
||||||
* support esp32-h2
|
|
||||||
* support erase button disable
|
|
||||||
* fix some bugs
|
|
||||||
|
|
||||||
3.9.4:
|
|
||||||
* support esp32-c6
|
|
||||||
* support esp32-c3/esp32-s3 flash encrytion
|
|
||||||
* add xmc flash fix
|
|
||||||
* support dut count in factory mode
|
|
||||||
|
|
||||||
3.9.3:
|
|
||||||
* support esp32-c2
|
|
||||||
* update finish UI show
|
|
||||||
|
|
||||||
3.9.2:
|
|
||||||
* fix configure file error
|
|
||||||
* update autostart process
|
|
||||||
@@ -402,6 +402,7 @@
|
|||||||
LoopTimerSetAndRun
|
LoopTimerSetAndRun
|
||||||
|
|
||||||
LoopTimerSetAndRun_ms","
|
LoopTimerSetAndRun_ms","
|
||||||
|
:green:`Rules`","
|
||||||
Set a Loop-Timer using ``LoopTimerSet`` or ``LoopTimerSet_ms`` and immediately run the first iteration.
|
Set a Loop-Timer using ``LoopTimerSet`` or ``LoopTimerSet_ms`` and immediately run the first iteration.
|
||||||
|
|
||||||
If a ``<nr of loops>`` value > 0 is included in the command, that count is decremented by 1 for the first iteration, as expected.
|
If a ``<nr of loops>`` value > 0 is included in the command, that count is decremented by 1 for the first iteration, as expected.
|
||||||
|
|||||||
@@ -413,7 +413,7 @@ Configure your development station as follows:
|
|||||||
At the bottom of the Debug screen enable User MCU input and select your ESP8266's USB port.
|
At the bottom of the Debug screen enable User MCU input and select your ESP8266's USB port.
|
||||||
If the Nextion display board is connected it will be ignored. It does NOT need to be removed.
|
If the Nextion display board is connected it will be ignored. It does NOT need to be removed.
|
||||||
|
|
||||||
You can now use the Nextion IDE instead of an actual HMI display board to test out your EPSEasy application.
|
You can now use the Nextion IDE instead of an actual HMI display board to test out your ESPEasy application.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ Example device configurations
|
|||||||
* :ref:`sensirion-sdp-810-differential-pressure-sensor`
|
* :ref:`sensirion-sdp-810-differential-pressure-sensor`
|
||||||
* :ref:`tf-luna-lidar-distance-sensor`
|
* :ref:`tf-luna-lidar-distance-sensor`
|
||||||
* :ref:`qmc6310-3-axis-magnetic-sensor`
|
* :ref:`qmc6310-3-axis-magnetic-sensor`
|
||||||
|
* :ref:`tca9554-io-extender`
|
||||||
|
|
||||||
Configuration
|
Configuration
|
||||||
-------------
|
-------------
|
||||||
@@ -610,6 +611,61 @@ To reduce the logging content, **Single event with all values** can be enabled,
|
|||||||
|
|
||||||
|
|
|
|
||||||
|
|
||||||
|
.. _tca9554-io-extender:
|
||||||
|
|
||||||
|
TCA9554 8-port I/O extender
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
This I/O extender provides 8 input/output pins, as documented in the Texas Instruments `TCA9554 Datasheet <https://www.ti.com/lit/ds/symlink/tca9554.pdf>`_
|
||||||
|
|
||||||
|
Configuration below is intended to be used for a `Waveshare ESP32-S3-ETH-8DI-8RO <https://www.waveshare.com/wiki/ESP32-S3-ETH-8DI-8RO>`_ unit to control the relays.
|
||||||
|
|
||||||
|
The plugin should be configured with these settings:
|
||||||
|
|
||||||
|
* **I2C Address (Hex)**: ``0x20``
|
||||||
|
|
||||||
|
* **Output Data Type**: ``Double`` To activate this setting, the page must be submitted to show the extra input fields.
|
||||||
|
|
||||||
|
* **Values**: The names can be changed whatever is appropriate, they are not really used, though we need 2 cached command sequences.
|
||||||
|
|
||||||
|
* **I2C Init Commands**: ``write.u8.0x03.0x00;calc.1``: Initializes the extender for all pins as output (and return a non-zero value for successful initialization).
|
||||||
|
|
||||||
|
* **Cache-Name 1**: Use ``readout``, to match the rules, below, and the I2C Command sequence is cached for much improved execution-performance.
|
||||||
|
|
||||||
|
* **I2C Commands 1**: ``read.u8.0x01;eval;let.bits.%value%`` Read the current relay state, and store in rules variable ``bits`` (referenced as ``%v_bits%``).
|
||||||
|
|
||||||
|
* **Cache-Name 2**: Use ``writeout``, to match with the rules, below.
|
||||||
|
|
||||||
|
* **I2C Commands 2**: ``write.u8.0x01.%v_bits%`` Set then outputs as updated in ``%v_bits%``.
|
||||||
|
|
||||||
|
To reduce the logging content, **Single event with all values** can be enabled, to generate a single event ``<task-name>#All`` with all values as argument, and thus reduce the logging to a single line.
|
||||||
|
|
||||||
|
Rules to add
|
||||||
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
As this is an output-only configuration, there must be some command(s) to control these outputs. These commands are handled by a single rule (event handler):
|
||||||
|
|
||||||
|
.. code-block:: none
|
||||||
|
|
||||||
|
On relay Do // Usage: event,"relay=1..8,0/1"
|
||||||
|
If %eventvalue1% > 0 And %eventvalue1% < 9 And (%eventvalue2|-1% = 0 Or %eventvalue2% = 1)
|
||||||
|
geni2c,exec,readout // Read all output bits into v_bits
|
||||||
|
Let,bits,{bitWrite:%eventvalue1%-1:%v_bits%:%eventvalue2%} // Update requested bit = relay
|
||||||
|
geni2c,exec,writeout // Write new state in v_bits to the outputs
|
||||||
|
// LogEntry,'Setting relay %eventvalue1% to state %eventvalue2%, bits: %v_bits%'
|
||||||
|
Endif
|
||||||
|
Endon
|
||||||
|
|
||||||
|
(The line with LogEntry can be uncommented to get some logging for test purposes)
|
||||||
|
|
||||||
|
To switch a relay on or off, this command syntax can be used:
|
||||||
|
|
||||||
|
``event,"relay=<1..8>,<1|0>"``
|
||||||
|
|
||||||
|
There are 8 relays on the device, so the matching number should be used, and the second argument ``1`` to set the relay to On, and ``0`` for Off.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
||||||
Change log
|
Change log
|
||||||
----------
|
----------
|
||||||
|
|
||||||
|
|||||||
@@ -241,9 +241,17 @@ More uses of these system variables can be seen in the rules section and formula
|
|||||||
|
|
||||||
* ``0`` = disconnected
|
* ``0`` = disconnected
|
||||||
* ``1`` = Connected
|
* ``1`` = Connected
|
||||||
* ``3`` = Got IP && Connected
|
* ``3`` = *Got IP && Connected (No longer reported since 2026-05-01)*
|
||||||
* ``7`` = Got IP && Connected && Completed to set all flags WiFi is initialized
|
* ``7`` = Got IP && Connected && Completed to set all flags WiFi is initialized
|
||||||
- Yes
|
- Yes
|
||||||
|
* - ``%iswifiap%``
|
||||||
|
- 1
|
||||||
|
- Status of WiFi AP mode
|
||||||
|
- Yes
|
||||||
|
* - ``%isppp%``
|
||||||
|
- 0
|
||||||
|
- Status of PPP Interface active (ESP32 only, with PPP Network Interface configured)
|
||||||
|
- Yes
|
||||||
* - ``%vcc%``
|
* - ``%vcc%``
|
||||||
- 5.2
|
- 5.2
|
||||||
- VCC value, this is only available in the VCC builds of FW (with "VCC" in the file name).
|
- VCC value, this is only available in the VCC builds of FW (with "VCC" in the file name).
|
||||||
|
|||||||
@@ -47,6 +47,15 @@
|
|||||||
#define DEFAULT_AP_SUBNET 255, 255, 255, 0 // Enter IP address (comma separated) for AP (config) mode
|
#define DEFAULT_AP_SUBNET 255, 255, 255, 0 // Enter IP address (comma separated) for AP (config) mode
|
||||||
#define DEFAULT_AP_KEY "configesp" // Enter network WPA key for AP (config) mode
|
#define DEFAULT_AP_KEY "configesp" // Enter network WPA key for AP (config) mode
|
||||||
|
|
||||||
|
// #define DEFAULT_AP_DNS 1,1,1,1 // Used by PPP/NAPT feature (mind the comma-separated parts!),
|
||||||
|
// Cloudflare DNS: 1.1.1.1 and 1.0.0.1 and 1.1.1.2 (secure) and 1.1.1.3 (censored)
|
||||||
|
// Alternatives
|
||||||
|
// Cleanbrowsing: 185.228.168.9 and 185.228.169.9
|
||||||
|
// Google Public DNS: 8.8.8.8 and 8.8.4.4
|
||||||
|
// Quad9: 9.9.9.9 and 149.112.112.112
|
||||||
|
// OpenDNS: 208.67.222.222 and 208.67.220.220
|
||||||
|
// Comodo Secure DNS: 8.26.56.26 and 8.20.247.20
|
||||||
|
|
||||||
// --- Wifi Client Mode -----------------------------------------------------------------------------
|
// --- Wifi Client Mode -----------------------------------------------------------------------------
|
||||||
#define DEFAULT_SSID "MyHomeSSID" // Enter your network SSID
|
#define DEFAULT_SSID "MyHomeSSID" // Enter your network SSID
|
||||||
#define DEFAULT_KEY "MySuperSecretPassword" // Enter your network WPA key
|
#define DEFAULT_KEY "MySuperSecretPassword" // Enter your network WPA key
|
||||||
@@ -295,6 +304,27 @@
|
|||||||
// #define DEFAULT_PROVISIONING_PASS ""
|
// #define DEFAULT_PROVISIONING_PASS ""
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
#######################################################################################################
|
||||||
|
Defining Ethernet & GPIO
|
||||||
|
#######################################################################################################
|
||||||
|
*/
|
||||||
|
// Actual values can be obtained from product documentation and ESPEasyDefaults.h
|
||||||
|
// #define DEFAULT_ETH_PHY_ADDR 0
|
||||||
|
// #define DEFAULT_ETH_PHY_TYPE 0 // See EthernetParameters.h enum EthPhyType_t
|
||||||
|
// #define DEFAULT_ETH_PIN_MDC -1
|
||||||
|
// #define DEFAULT_ETH_PIN_MDIO -1
|
||||||
|
// #define DEFAULT_ETH_PIN_POWER -1
|
||||||
|
// #define DEFAULT_ETH_CLOCK_MODE (0) // See EthernetParameters.h enum EthClockMode_t
|
||||||
|
|
||||||
|
// #define DEFAULT_NETWORK_MEDIUM ESPEasy::net::NetworkMedium_t::WIFI
|
||||||
|
|
||||||
|
// #define DEFAULT_ENABLED_NW001 1 // Enable NWPLUGIN_001, on factory reset/initial setup
|
||||||
|
// #define DEFAULT_ENABLED_NW002 1 // Enable NWPLUGIN_002, on factory reset/initial setup
|
||||||
|
// #define DEFAULT_ENABLED_NW003 1 // Enable NWPLUGIN_003, on factory reset/initial setup
|
||||||
|
// #define DEFAULT_ENABLED_NW004 1 // Enable NWPLUGIN_004, on factory reset/initial setup
|
||||||
|
// #define DEFAULT_ENABLED_NW005 1 // Enable NWPLUGIN_005, on factory reset/initial setup
|
||||||
|
// This list should be updated when adding new Network Interface plugins
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -14,13 +14,30 @@ namespace net {
|
|||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
struct NetworkDriverStruct
|
struct NetworkDriverStruct
|
||||||
{
|
{
|
||||||
NetworkDriverStruct() = default;
|
NetworkDriverStruct() {
|
||||||
|
onlySingleInstance = 1;
|
||||||
|
}
|
||||||
|
|
||||||
bool onlySingleInstance = true;
|
union {
|
||||||
bool alwaysPresent = false;
|
struct {
|
||||||
bool enabledOnFactoryReset = false;
|
uint8_t onlySingleInstance : 1; // Default true
|
||||||
networkIndex_t fixedNetworkIndex = INVALID_NETWORK_INDEX;
|
uint8_t alwaysPresent : 1;
|
||||||
|
uint8_t enabledOnFactoryReset : 1;
|
||||||
|
uint8_t _unusedNetworkDriverStructBits0_03 : 1;
|
||||||
|
uint8_t _unusedNetworkDriverStructBits0_04 : 1;
|
||||||
|
uint8_t _unusedNetworkDriverStructBits0_05 : 1;
|
||||||
|
uint8_t _unusedNetworkDriverStructBits0_06 : 1;
|
||||||
|
uint8_t _unusedNetworkDriverStructBits0_07 : 1;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
uint8_t _networkDriverStructBits0{};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
networkIndex_t fixedNetworkIndex = INVALID_NETWORK_INDEX;
|
||||||
|
|
||||||
|
uint16_t _networkDriverStructPadding{};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -23,13 +23,13 @@
|
|||||||
# include "../net/Helpers/_NWPlugin_init.h"
|
# include "../net/Helpers/_NWPlugin_init.h"
|
||||||
# include "../net/NWPluginStructs/NW001_data_struct_WiFi_STA.h"
|
# include "../net/NWPluginStructs/NW001_data_struct_WiFi_STA.h"
|
||||||
# include "../net/wifi/ESPEasyWifi.h"
|
# include "../net/wifi/ESPEasyWifi.h"
|
||||||
#ifdef ESP8266
|
# ifdef ESP8266
|
||||||
# include "../net/ESPEasyNetwork.h"
|
# include "../net/ESPEasyNetwork.h"
|
||||||
#endif
|
# endif
|
||||||
|
|
||||||
#if FEATURE_TASKVALUE_UNIT_OF_MEASURE
|
# if FEATURE_TASKVALUE_UNIT_OF_MEASURE
|
||||||
# include "../../src/Helpers/ESPEasy_UnitOfMeasure.h"
|
# include "../../src/Helpers/ESPEasy_UnitOfMeasure.h"
|
||||||
#endif
|
# endif
|
||||||
|
|
||||||
|
|
||||||
# if FEATURE_STORE_CREDENTIALS_SEPARATE_FILE
|
# if FEATURE_STORE_CREDENTIALS_SEPARATE_FILE
|
||||||
@@ -57,11 +57,13 @@ bool NWPlugin_001(NWPlugin::Function function, EventStruct *event, String& strin
|
|||||||
{
|
{
|
||||||
case NWPlugin::Function::NWPLUGIN_DRIVER_ADD:
|
case NWPlugin::Function::NWPLUGIN_DRIVER_ADD:
|
||||||
{
|
{
|
||||||
NetworkDriverStruct& nw = getNetworkDriverStruct(networkDriverIndex_t::toNetworkDriverIndex(event->idx));
|
NetworkDriverStruct& nw = getNetworkDriverStruct(networkDriverIndex_t::toNetworkDriverIndex(event->idx));
|
||||||
nw.onlySingleInstance = true;
|
nw.onlySingleInstance = true;
|
||||||
nw.alwaysPresent = true;
|
nw.alwaysPresent = true;
|
||||||
|
# if DEFAULT_ENABLED_NW001
|
||||||
nw.enabledOnFactoryReset = true;
|
nw.enabledOnFactoryReset = true;
|
||||||
nw.fixedNetworkIndex = NWPLUGIN_ID_001 - 1; // Start counting at 0
|
# endif
|
||||||
|
nw.fixedNetworkIndex = NWPLUGIN_ID_001 - 1; // Start counting at 0
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,7 +96,7 @@ bool NWPlugin_001(NWPlugin::Function function, EventStruct *event, String& strin
|
|||||||
|
|
||||||
case NWPlugin::Function::NWPLUGIN_CREDENTIALS_CHANGED:
|
case NWPlugin::Function::NWPLUGIN_CREDENTIALS_CHANGED:
|
||||||
{
|
{
|
||||||
// ESPEasy::net::wifi::WiFi_AP_Candidates.force_reload(); // Force reload of the credentials and found APs from the last scan
|
// ESPEasy::net::wifi::WiFi_AP_Candidates.force_reload(); // Force reload of the credentials and found APs from the last scan
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -106,6 +108,7 @@ bool NWPlugin_001(NWPlugin::Function function, EventStruct *event, String& strin
|
|||||||
|
|
||||||
if (NW_data) {
|
if (NW_data) {
|
||||||
auto runtime_data = NW_data->getNWPluginData_static_runtime();
|
auto runtime_data = NW_data->getNWPluginData_static_runtime();
|
||||||
|
|
||||||
if (runtime_data) {
|
if (runtime_data) {
|
||||||
success = runtime_data->connected();
|
success = runtime_data->connected();
|
||||||
}
|
}
|
||||||
@@ -482,7 +485,7 @@ bool NWPlugin_001(NWPlugin::Function function, EventStruct *event, String& strin
|
|||||||
|
|
||||||
addFormNumericBox(LabelType::WIFI_NR_RECONNECT_ATTEMPTS, 0, 255);
|
addFormNumericBox(LabelType::WIFI_NR_RECONNECT_ATTEMPTS, 0, 255);
|
||||||
{
|
{
|
||||||
LabelType::Enum labels[]{
|
LabelType::Enum labels[]{
|
||||||
LabelType::RESTART_WIFI_LOST_CONN
|
LabelType::RESTART_WIFI_LOST_CONN
|
||||||
, LabelType::WIFI_USE_LAST_CONN_FROM_RTC
|
, LabelType::WIFI_USE_LAST_CONN_FROM_RTC
|
||||||
# ifndef ESP32
|
# ifndef ESP32
|
||||||
|
|||||||
@@ -40,10 +40,12 @@ bool NWPlugin_002(NWPlugin::Function function, EventStruct *event, String& strin
|
|||||||
case NWPlugin::Function::NWPLUGIN_DRIVER_ADD:
|
case NWPlugin::Function::NWPLUGIN_DRIVER_ADD:
|
||||||
{
|
{
|
||||||
NetworkDriverStruct& nw = getNetworkDriverStruct(networkDriverIndex_t::toNetworkDriverIndex(event->idx));
|
NetworkDriverStruct& nw = getNetworkDriverStruct(networkDriverIndex_t::toNetworkDriverIndex(event->idx));
|
||||||
nw.onlySingleInstance = true;
|
nw.onlySingleInstance = true;
|
||||||
nw.alwaysPresent = true;
|
nw.alwaysPresent = true;
|
||||||
|
# if DEFAULT_ENABLED_NW002
|
||||||
nw.enabledOnFactoryReset = true;
|
nw.enabledOnFactoryReset = true;
|
||||||
nw.fixedNetworkIndex = NWPLUGIN_ID_002 - 1; // Start counting at 0
|
# endif
|
||||||
|
nw.fixedNetworkIndex = NWPLUGIN_ID_002 - 1; // Start counting at 0
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -288,7 +290,7 @@ bool NWPlugin_002(NWPlugin::Function function, EventStruct *event, String& strin
|
|||||||
,169 // 5 GHz U-NII-3/4
|
,169 // 5 GHz U-NII-3/4
|
||||||
,173, 177 // 5 GHz U-NII-4
|
,173, 177 // 5 GHz U-NII-4
|
||||||
};
|
};
|
||||||
// *INDENT-ON*
|
// *INDENT-ON*
|
||||||
constexpr int nrwifiChannels = NR_ELEMENTS(wifiChannels);
|
constexpr int nrwifiChannels = NR_ELEMENTS(wifiChannels);
|
||||||
const FormSelectorOptions selector(
|
const FormSelectorOptions selector(
|
||||||
nrwifiChannels,
|
nrwifiChannels,
|
||||||
|
|||||||
@@ -37,6 +37,9 @@ bool NWPlugin_003(NWPlugin::Function function, EventStruct *event, String& strin
|
|||||||
nw.enabledOnFactoryReset = true;
|
nw.enabledOnFactoryReset = true;
|
||||||
nw.fixedNetworkIndex = NWPLUGIN_ID_003 - 1; // Start counting at 0
|
nw.fixedNetworkIndex = NWPLUGIN_ID_003 - 1; // Start counting at 0
|
||||||
# else // ifdef ESP32P4
|
# else // ifdef ESP32P4
|
||||||
|
# if DEFAULT_ENABLED_NW003
|
||||||
|
nw.enabledOnFactoryReset = true;
|
||||||
|
# endif
|
||||||
nw.alwaysPresent = false;
|
nw.alwaysPresent = false;
|
||||||
# endif // ifdef ESP32P4
|
# endif // ifdef ESP32P4
|
||||||
break;
|
break;
|
||||||
@@ -46,7 +49,7 @@ bool NWPlugin_003(NWPlugin::Function function, EventStruct *event, String& strin
|
|||||||
{
|
{
|
||||||
// Make sure the first listed Eth device is default set to have the highest route prio
|
// Make sure the first listed Eth device is default set to have the highest route prio
|
||||||
Settings.setRoutePrio_for_network(
|
Settings.setRoutePrio_for_network(
|
||||||
event->NetworkIndex,
|
event->NetworkIndex,
|
||||||
DEFAULT_ETH_ROUTE_PRIO - (5 * event->NetworkIndex));
|
DEFAULT_ETH_ROUTE_PRIO - (5 * event->NetworkIndex));
|
||||||
Settings.setNetworkInterfaceSubnetBlockClientIP(event->NetworkIndex, false);
|
Settings.setNetworkInterfaceSubnetBlockClientIP(event->NetworkIndex, false);
|
||||||
Settings.setNetworkInterfaceStartupDelay(event->NetworkIndex, 500 * event->NetworkIndex);
|
Settings.setNetworkInterfaceStartupDelay(event->NetworkIndex, 500 * event->NetworkIndex);
|
||||||
|
|||||||
@@ -34,6 +34,9 @@ bool NWPlugin_004(NWPlugin::Function function, EventStruct *event, String& strin
|
|||||||
NetworkDriverStruct& nw = getNetworkDriverStruct(networkDriverIndex_t::toNetworkDriverIndex(event->idx));
|
NetworkDriverStruct& nw = getNetworkDriverStruct(networkDriverIndex_t::toNetworkDriverIndex(event->idx));
|
||||||
nw.onlySingleInstance = true;
|
nw.onlySingleInstance = true;
|
||||||
nw.alwaysPresent = false;
|
nw.alwaysPresent = false;
|
||||||
|
# if DEFAULT_ENABLED_NW004
|
||||||
|
nw.enabledOnFactoryReset = true;
|
||||||
|
# endif
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -35,6 +35,9 @@ bool NWPlugin_005(NWPlugin::Function function, EventStruct *event, String& strin
|
|||||||
NetworkDriverStruct& nw = getNetworkDriverStruct(networkDriverIndex_t::toNetworkDriverIndex(event->idx));
|
NetworkDriverStruct& nw = getNetworkDriverStruct(networkDriverIndex_t::toNetworkDriverIndex(event->idx));
|
||||||
nw.onlySingleInstance = true;
|
nw.onlySingleInstance = true;
|
||||||
nw.alwaysPresent = false;
|
nw.alwaysPresent = false;
|
||||||
|
# if DEFAULT_ENABLED_NW005
|
||||||
|
nw.enabledOnFactoryReset = true;
|
||||||
|
# endif
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+5
-10
@@ -31,7 +31,7 @@
|
|||||||
|
|
||||||
# define CPLUGIN_016
|
# define CPLUGIN_016
|
||||||
# define CPLUGIN_ID_016 16
|
# define CPLUGIN_ID_016 16
|
||||||
# define CPLUGIN_NAME_016 "Cache Controller [Experimental]"
|
# define CPLUGIN_NAME_016 "Cache Controller"
|
||||||
|
|
||||||
// #include <ArduinoJson.h>
|
// #include <ArduinoJson.h>
|
||||||
|
|
||||||
@@ -46,19 +46,12 @@ bool CPlugin_016(CPlugin::Function function, struct EventStruct *event, String&
|
|||||||
case CPlugin::Function::CPLUGIN_PROTOCOL_ADD:
|
case CPlugin::Function::CPLUGIN_PROTOCOL_ADD:
|
||||||
{
|
{
|
||||||
ProtocolStruct& proto = getProtocolStruct(event->idx); // = CPLUGIN_ID_016;
|
ProtocolStruct& proto = getProtocolStruct(event->idx); // = CPLUGIN_ID_016;
|
||||||
proto.usesMQTT = false;
|
|
||||||
proto.usesTemplate = false;
|
|
||||||
proto.usesAccount = false;
|
|
||||||
proto.usesPassword = false;
|
|
||||||
proto.usesExtCreds = false;
|
|
||||||
proto.defaultPort = 80;
|
proto.defaultPort = 80;
|
||||||
proto.usesID = false;
|
|
||||||
proto.usesHost = false;
|
proto.usesHost = false;
|
||||||
proto.usesPort = false;
|
proto.usesPort = false;
|
||||||
proto.usesQueue = false;
|
proto.usesQueue = false;
|
||||||
proto.usesCheckReply = false;
|
proto.usesCheckReply = false;
|
||||||
proto.usesTimeout = false;
|
proto.usesTimeout = false;
|
||||||
proto.usesSampleSets = false;
|
|
||||||
proto.needsNetwork = false;
|
proto.needsNetwork = false;
|
||||||
proto.allowsExpire = false;
|
proto.allowsExpire = false;
|
||||||
proto.allowLocalSystemTime = true;
|
proto.allowLocalSystemTime = true;
|
||||||
@@ -115,10 +108,12 @@ bool CPlugin_016(CPlugin::Function function, struct EventStruct *event, String&
|
|||||||
uint8_t valueCount = getValueCountForTask(event->TaskIndex);
|
uint8_t valueCount = getValueCountForTask(event->TaskIndex);
|
||||||
|
|
||||||
if (event->timestamp_sec == 0) {
|
if (event->timestamp_sec == 0) {
|
||||||
if (C016_allowLocalSystemTime)
|
if (C016_allowLocalSystemTime) {
|
||||||
event->setLocalTimeTimestamp();
|
event->setLocalTimeTimestamp();
|
||||||
else
|
}
|
||||||
|
else {
|
||||||
event->setUnixTimeTimestamp();
|
event->setUnixTimeTimestamp();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
const C016_queue_element element(
|
const C016_queue_element element(
|
||||||
event,
|
event,
|
||||||
|
|||||||
+10
-5
@@ -26,18 +26,22 @@
|
|||||||
|
|
||||||
# include "src/NotifierStructs/N001_data_struct.h"
|
# include "src/NotifierStructs/N001_data_struct.h"
|
||||||
|
|
||||||
|
|
||||||
// The message body is included in event->String1
|
// The message body is included in event->String1
|
||||||
bool NPlugin_001(NPlugin::Function function, struct EventStruct *event, String& string)
|
bool NPlugin_001(NPlugin::Function function, struct EventStruct *event, String& string)
|
||||||
{
|
{
|
||||||
bool success = false;
|
bool success = false;
|
||||||
|
|
||||||
switch (function) {
|
switch (function)
|
||||||
|
{
|
||||||
case NPlugin::Function::NPLUGIN_PROTOCOL_ADD:
|
case NPlugin::Function::NPLUGIN_PROTOCOL_ADD:
|
||||||
{
|
{
|
||||||
Notification[++notificationCount].Number = NPLUGIN_ID_001;
|
auto& notif = Notification[++notificationCount];
|
||||||
Notification[notificationCount].usesMessaging = true;
|
notif.Number = NPLUGIN_ID_001;
|
||||||
Notification[notificationCount].usesGPIO = 0;
|
notif.usesMessaging = true;
|
||||||
|
notif.usesGPIO = 0;
|
||||||
|
# if FEATURE_EMAIL_TLS
|
||||||
|
notif.usesTLS = true;
|
||||||
|
# endif // if FEATURE_EMAIL_TLS
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -67,6 +71,7 @@ bool NPlugin_001(NPlugin::Function function, struct EventStruct *event, String&
|
|||||||
case NPlugin::Function::NPLUGIN_NOTIFY:
|
case NPlugin::Function::NPLUGIN_NOTIFY:
|
||||||
{
|
{
|
||||||
MakeNotificationSettings(NotificationSettings);
|
MakeNotificationSettings(NotificationSettings);
|
||||||
|
|
||||||
if (!AllocatedNotificationSettings()) {
|
if (!AllocatedNotificationSettings()) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,9 +25,10 @@ bool NPlugin_002(NPlugin::Function function, struct EventStruct *event, String&
|
|||||||
{
|
{
|
||||||
case NPlugin::Function::NPLUGIN_PROTOCOL_ADD:
|
case NPlugin::Function::NPLUGIN_PROTOCOL_ADD:
|
||||||
{
|
{
|
||||||
Notification[++notificationCount].Number = NPLUGIN_ID_002;
|
auto& notif = Notification[++notificationCount];
|
||||||
Notification[notificationCount].usesMessaging = false;
|
notif.Number = NPLUGIN_ID_002;
|
||||||
Notification[notificationCount].usesGPIO=1;
|
notif.usesMessaging = false;
|
||||||
|
notif.usesGPIO = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -122,6 +122,21 @@
|
|||||||
#define DEFAULT_ETH_ROUTE_PRIO 150 // ESP32-only default route priority
|
#define DEFAULT_ETH_ROUTE_PRIO 150 // ESP32-only default route priority
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef DEFAULT_ENABLED_NW001
|
||||||
|
#define DEFAULT_ENABLED_NW001 1 // Wifi-STA enabled by default
|
||||||
|
#endif
|
||||||
|
#ifndef DEFAULT_ENABLED_NW002
|
||||||
|
#define DEFAULT_ENABLED_NW002 1 // Wifi-AP enabled by default
|
||||||
|
#endif
|
||||||
|
#ifndef DEFAULT_ENABLED_NW003
|
||||||
|
#define DEFAULT_ENABLED_NW003 0 // RMII Ethernet disabled by default, except for P4
|
||||||
|
#endif
|
||||||
|
#ifndef DEFAULT_ENABLED_NW004
|
||||||
|
#define DEFAULT_ENABLED_NW004 0 // SPI Ethernet disabled by default
|
||||||
|
#endif
|
||||||
|
#ifndef DEFAULT_ENABLED_NW005
|
||||||
|
#define DEFAULT_ENABLED_NW005 0 // PPP disabled by default
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef DEFAULT_USE_STATIC_IP
|
#ifndef DEFAULT_USE_STATIC_IP
|
||||||
#define DEFAULT_USE_STATIC_IP false // (true|false) enabled or disabled static IP
|
#define DEFAULT_USE_STATIC_IP false // (true|false) enabled or disabled static IP
|
||||||
|
|||||||
@@ -11,14 +11,30 @@
|
|||||||
struct NotificationStruct
|
struct NotificationStruct
|
||||||
{
|
{
|
||||||
NotificationStruct() :
|
NotificationStruct() :
|
||||||
Number(0), usesGPIO(0), usesMessaging(false) {}
|
Number(0), usesGPIO(0) {}
|
||||||
|
|
||||||
uint8_t Number;
|
uint8_t Number;
|
||||||
uint8_t usesGPIO;
|
uint8_t usesGPIO;
|
||||||
bool usesMessaging;
|
union {
|
||||||
|
struct {
|
||||||
|
uint8_t usesMessaging : 1;
|
||||||
|
uint8_t usesTLS : 1;
|
||||||
|
uint8_t unusedN02 : 1; // unused
|
||||||
|
uint8_t unusedN03 : 1; // unused
|
||||||
|
uint8_t unusedN04 : 1; // unused
|
||||||
|
uint8_t unusedN05 : 1; // unused
|
||||||
|
uint8_t unusedN06 : 1; // unused
|
||||||
|
uint8_t unusedN07 : 1; // unused
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
uint8_t _notificationBits0{};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif // if FEATURE_NOTIFIER
|
||||||
|
|
||||||
|
|
||||||
#endif // DATASTRUCTS_NOTIFICATIONSTRUCT_H
|
#endif // DATASTRUCTS_NOTIFICATIONSTRUCT_H
|
||||||
|
|||||||
@@ -465,13 +465,11 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
uint32_t getVariousBits2() const {
|
uint32_t getVariousBits2() const {
|
||||||
uint32_t res;
|
return VariousBits_2._all_bits;
|
||||||
memcpy(&res, &VariousBits_2, sizeof(VariousBits_2));
|
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void setVariousBits2(uint32_t value) {
|
void setVariousBits2(uint32_t value) {
|
||||||
memcpy(&VariousBits_2, &value, sizeof(VariousBits_2));
|
VariousBits_2._all_bits = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool getNetworkEnabled(ESPEasy::net::networkIndex_t index) const;
|
bool getNetworkEnabled(ESPEasy::net::networkIndex_t index) const;
|
||||||
|
|||||||
@@ -119,6 +119,7 @@ void run_compiletime_checks() {
|
|||||||
#if FEATURE_CUSTOM_PROVISIONING
|
#if FEATURE_CUSTOM_PROVISIONING
|
||||||
check_size<ProvisioningStruct, 256u>();
|
check_size<ProvisioningStruct, 256u>();
|
||||||
#endif
|
#endif
|
||||||
|
check_size<ESPEasy::net::NetworkDriverStruct, 4u>();
|
||||||
check_size<systemTimerStruct, 32u>();
|
check_size<systemTimerStruct, 32u>();
|
||||||
check_size<RTCStruct, 32u>();
|
check_size<RTCStruct, 32u>();
|
||||||
check_size<portStatusStruct, 6u>();
|
check_size<portStatusStruct, 6u>();
|
||||||
|
|||||||
@@ -44,11 +44,24 @@
|
|||||||
|
|
||||||
#if defined(ESP8266)
|
#if defined(ESP8266)
|
||||||
# include <ESP8266WiFi.h>
|
# include <ESP8266WiFi.h>
|
||||||
#define WIFI_CONNECTED WiFi.isConnected()
|
int WIFI_CONNECT_STATUS() {
|
||||||
|
if (WiFi.isConnected()) {
|
||||||
|
return 7;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
#endif // if defined(ESP8266)
|
#endif // if defined(ESP8266)
|
||||||
#if defined(ESP32)
|
#if defined(ESP32)
|
||||||
# include <WiFi.h>
|
# include <WiFi.h>
|
||||||
#define WIFI_CONNECTED WiFi.STA.connected()
|
int WIFI_CONNECT_STATUS() {
|
||||||
|
if (WiFi.STA.connected()) {
|
||||||
|
if (WiFi.STA.hasIP()) {
|
||||||
|
return 7;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
#endif // if defined(ESP32)
|
#endif // if defined(ESP32)
|
||||||
|
|
||||||
|
|
||||||
@@ -176,7 +189,7 @@ String SystemVariables::getSystemVariable(SystemVariables::Enum enumval) {
|
|||||||
switch (enumval)
|
switch (enumval)
|
||||||
{
|
{
|
||||||
case BOOT_CAUSE: intvalue = lastBootCause; break; // Integer value to be used in rules
|
case BOOT_CAUSE: intvalue = lastBootCause; break; // Integer value to be used in rules
|
||||||
case BSSID: return (!WIFI_CONNECTED) ? MAC_address().toString() : WiFi.BSSIDstr();
|
case BSSID: return (!WIFI_CONNECT_STATUS()) ? MAC_address().toString() : WiFi.BSSIDstr();
|
||||||
case CR: return String('\r');
|
case CR: return String('\r');
|
||||||
case IP4: intvalue = static_cast<int>(ESPEasy::net::NetworkLocalIP()[3]); break; // 4th IP octet
|
case IP4: intvalue = static_cast<int>(ESPEasy::net::NetworkLocalIP()[3]); break; // 4th IP octet
|
||||||
case ISVAR_DOUBLE: intvalue =
|
case ISVAR_DOUBLE: intvalue =
|
||||||
@@ -207,13 +220,11 @@ String SystemVariables::getSystemVariable(SystemVariables::Enum enumval) {
|
|||||||
|
|
||||||
case ISNTP: intvalue = statusNTPInitialized ? 1 : 0; break;
|
case ISNTP: intvalue = statusNTPInitialized ? 1 : 0; break;
|
||||||
case ISWIFIAP: intvalue = ESPEasy::net::wifi::WifiIsAP(WiFi.getMode()) ? 1 : 0; break;
|
case ISWIFIAP: intvalue = ESPEasy::net::wifi::WifiIsAP(WiFi.getMode()) ? 1 : 0; break;
|
||||||
case ISWIFI: intvalue = WIFI_CONNECTED ? 1 : 0; break;
|
case ISWIFI: intvalue = WIFI_CONNECT_STATUS(); break;
|
||||||
#ifdef USES_NW005
|
#ifdef USES_NW005
|
||||||
case ISPPP: intvalue = PPP.connected() ? 1 : 0; break;
|
case ISPPP: intvalue = PPP.connected() ? 1 : 0; break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// WiFiEventData.wifiStatus; break; // 0=disconnected, 1=connected, 2=got ip, 4=services
|
|
||||||
// initialized
|
|
||||||
case LCLTIME_AM: return node_time.getDateTimeString_ampm('-', ':', ' ');
|
case LCLTIME_AM: return node_time.getDateTimeString_ampm('-', ':', ' ');
|
||||||
case LF: return String('\n');
|
case LF: return String('\n');
|
||||||
case MAC_INT: intvalue = getChipId(); break; // Last 24 bit of MAC address as integer, to be used in rules.
|
case MAC_INT: intvalue = getChipId(); break; // Last 24 bit of MAC address as integer, to be used in rules.
|
||||||
@@ -236,7 +247,7 @@ String SystemVariables::getSystemVariable(SystemVariables::Enum enumval) {
|
|||||||
}
|
}
|
||||||
#endif // ifndef LIMIT_BUILD_SIZE
|
#endif // ifndef LIMIT_BUILD_SIZE
|
||||||
case SPACE: return String(' ');
|
case SPACE: return String(' ');
|
||||||
case SSID: return (!WIFI_CONNECTED) ? String(F("--")) : WiFi.SSID();
|
case SSID: return (!WIFI_CONNECT_STATUS()) ? String(F("--")) : WiFi.SSID();
|
||||||
|
|
||||||
|
|
||||||
case SYSBUILD_DATE: return get_build_date();
|
case SYSBUILD_DATE: return get_build_date();
|
||||||
@@ -290,7 +301,7 @@ String SystemVariables::getSystemVariable(SystemVariables::Enum enumval) {
|
|||||||
#else // if FEATURE_ADC_VCC
|
#else // if FEATURE_ADC_VCC
|
||||||
case VCC: intvalue = -1; break;
|
case VCC: intvalue = -1; break;
|
||||||
#endif // if FEATURE_ADC_VCC
|
#endif // if FEATURE_ADC_VCC
|
||||||
case WI_CH: intvalue = !WIFI_CONNECTED ? 0 : WiFi.channel(); break;
|
case WI_CH: intvalue = !WIFI_CONNECT_STATUS() ? 0 : WiFi.channel(); break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
// Already handled above.
|
// Already handled above.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
#ifdef USES_P073
|
#ifdef USES_P073
|
||||||
|
|
||||||
#include <GPIO_Direct_Access.h>
|
# include <GPIO_Direct_Access.h>
|
||||||
|
|
||||||
uint8_t P073_getDefaultDigits(uint8_t displayModel,
|
uint8_t P073_getDefaultDigits(uint8_t displayModel,
|
||||||
uint8_t digits) {
|
uint8_t digits) {
|
||||||
@@ -1649,33 +1649,33 @@ bool P073_data_struct::plugin_write_7dbin(const String& text) {
|
|||||||
// ===================================
|
// ===================================
|
||||||
|
|
||||||
# ifdef ESP32
|
# ifdef ESP32
|
||||||
# define CLK_HIGH() DIRECT_pinWrite(this->pin1, HIGH)
|
# define CLK_HIGH() DIRECT_pinWrite(this->pin1, HIGH)
|
||||||
# define CLK_LOW() DIRECT_pinWrite(this->pin1, LOW)
|
# define CLK_LOW() DIRECT_pinWrite(this->pin1, LOW)
|
||||||
# define DIO_HIGH() DIRECT_pinWrite(this->pin2, HIGH)
|
# define DIO_HIGH() DIRECT_pinWrite(this->pin2, HIGH)
|
||||||
# define DIO_LOW() DIRECT_PINMODE_OUTPUT(this->pin2); DIRECT_pinWrite(this->pin2, LOW)
|
# define DIO_LOW() DIRECT_PINMODE_OUTPUT(this->pin2); DIRECT_pinWrite(this->pin2, LOW)
|
||||||
# define DIO_INPUT() DIRECT_PINMODE_INPUT(this->pin2)
|
# define DIO_INPUT() DIRECT_PINMODE_INPUT(this->pin2)
|
||||||
# define DIO_OUTPUT() DIRECT_PINMODE_OUTPUT(this->pin2)
|
# define DIO_OUTPUT() DIRECT_PINMODE_OUTPUT(this->pin2)
|
||||||
# else // ifdef ESP32
|
# else // ifdef ESP32
|
||||||
# define CLK_HIGH() pinMode(this->pin1, INPUT_PULLUP)
|
# define CLK_HIGH() pinMode(this->pin1, INPUT_PULLUP)
|
||||||
# define CLK_LOW() pinMode(this->pin1, OUTPUT)
|
# define CLK_LOW() pinMode(this->pin1, OUTPUT)
|
||||||
# define DIO_HIGH() pinMode(this->pin2, INPUT_PULLUP)
|
# define DIO_HIGH() pinMode(this->pin2, INPUT_PULLUP)
|
||||||
# define DIO_LOW() pinMode(this->pin2, OUTPUT);digitalWrite(this->pin2, LOW)
|
# define DIO_LOW() pinMode(this->pin2, OUTPUT); digitalWrite(this->pin2, LOW)
|
||||||
# define DIO_INPUT() pinMode(this->pin2, INPUT_PULLUP)
|
# define DIO_INPUT() pinMode(this->pin2, INPUT_PULLUP)
|
||||||
# define DIO_OUTPUT() pinMode(this->pin2, OUTPUT)
|
# define DIO_OUTPUT() pinMode(this->pin2, OUTPUT)
|
||||||
# endif // ifdef ESP32
|
# endif // ifdef ESP32
|
||||||
|
|
||||||
void P073_data_struct::tm1637_i2cStart() {
|
void P073_data_struct::tm1637_i2cStart() {
|
||||||
# ifdef P073_DEBUG
|
# if defined(P073_DEBUG) && !defined(BUILD_NO_DEBUG)
|
||||||
addLog(LOG_LEVEL_DEBUG, F("7DGT : Comm Start"));
|
addLog(LOG_LEVEL_DEBUG, F("7DGT : Comm Start"));
|
||||||
# endif // ifdef P073_DEBUG
|
# endif // if defined(P073_DEBUG) && !defined(BUILD_NO_DEBUG)
|
||||||
DIO_LOW();
|
DIO_LOW();
|
||||||
delayMicroseconds(TM1637_CLOCKDELAY);
|
delayMicroseconds(TM1637_CLOCKDELAY);
|
||||||
}
|
}
|
||||||
|
|
||||||
void P073_data_struct::tm1637_i2cStop() {
|
void P073_data_struct::tm1637_i2cStop() {
|
||||||
# ifdef P073_DEBUG
|
# if defined(P073_DEBUG) && !defined(BUILD_NO_DEBUG)
|
||||||
addLog(LOG_LEVEL_DEBUG, F("7DGT : Comm Stop"));
|
addLog(LOG_LEVEL_DEBUG, F("7DGT : Comm Stop"));
|
||||||
# endif // ifdef P073_DEBUG
|
# endif // if defined(P073_DEBUG) && !defined(BUILD_NO_DEBUG)
|
||||||
DIO_LOW();
|
DIO_LOW();
|
||||||
delayMicroseconds(TM1637_CLOCKDELAY);
|
delayMicroseconds(TM1637_CLOCKDELAY);
|
||||||
CLK_HIGH();
|
CLK_HIGH();
|
||||||
@@ -1693,14 +1693,15 @@ bool P073_data_struct::tm1637_i2cAck() {
|
|||||||
const uint32_t start_wait = micros();
|
const uint32_t start_wait = micros();
|
||||||
|
|
||||||
const bool acknowledged = -1 !=
|
const bool acknowledged = -1 !=
|
||||||
DIRECT_measureWaitForPinState_ISR(this->pin2, start_wait, TM1637_CLOCKDELAY, 0);
|
DIRECT_measureWaitForPinState_ISR(this->pin2, start_wait, TM1637_CLOCKDELAY, 0);
|
||||||
|
|
||||||
const int32_t timePassed = usecPassedSince_fast(start_wait);
|
const int32_t timePassed = usecPassedSince_fast(start_wait);
|
||||||
|
|
||||||
if (timePassed < TM1637_CLOCKDELAY) {
|
if (timePassed < TM1637_CLOCKDELAY) {
|
||||||
delayMicroseconds(TM1637_CLOCKDELAY - timePassed);
|
delayMicroseconds(TM1637_CLOCKDELAY - timePassed);
|
||||||
}
|
}
|
||||||
|
|
||||||
# ifdef P073_DEBUG
|
# if defined(P073_DEBUG) && !defined(BUILD_NO_DEBUG)
|
||||||
|
|
||||||
if (loglevelActiveFor(LOG_LEVEL_DEBUG)) {
|
if (loglevelActiveFor(LOG_LEVEL_DEBUG)) {
|
||||||
String log = F("7DGT : Comm ACK=");
|
String log = F("7DGT : Comm ACK=");
|
||||||
@@ -1712,13 +1713,13 @@ bool P073_data_struct::tm1637_i2cAck() {
|
|||||||
}
|
}
|
||||||
addLogMove(LOG_LEVEL_DEBUG, log);
|
addLogMove(LOG_LEVEL_DEBUG, log);
|
||||||
}
|
}
|
||||||
# endif // ifdef P073_DEBUG
|
# endif // if defined(P073_DEBUG) && !defined(BUILD_NO_DEBUG)
|
||||||
CLK_HIGH();
|
CLK_HIGH();
|
||||||
|
|
||||||
delayMicroseconds(TM1637_CLOCKDELAY);
|
delayMicroseconds(TM1637_CLOCKDELAY);
|
||||||
CLK_LOW();
|
CLK_LOW();
|
||||||
delayMicroseconds(TM1637_CLOCKDELAY);
|
delayMicroseconds(TM1637_CLOCKDELAY);
|
||||||
DIO_OUTPUT();
|
DIO_OUTPUT();
|
||||||
|
|
||||||
return acknowledged;
|
return acknowledged;
|
||||||
}
|
}
|
||||||
@@ -1745,9 +1746,9 @@ void P073_data_struct::tm1637_i2cWriteByte_ack(uint8_t bytetoprint) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void P073_data_struct::tm1637_i2cWrite(uint8_t bytetoprint) {
|
void P073_data_struct::tm1637_i2cWrite(uint8_t bytetoprint) {
|
||||||
# ifdef P073_DEBUG
|
# if defined(P073_DEBUG) && !defined(BUILD_NO_DEBUG)
|
||||||
addLog(LOG_LEVEL_DEBUG, F("7DGT : WriteByte"));
|
addLog(LOG_LEVEL_DEBUG, F("7DGT : WriteByte"));
|
||||||
# endif // ifdef P073_DEBUG
|
# endif // if defined(P073_DEBUG) && !defined(BUILD_NO_DEBUG)
|
||||||
|
|
||||||
for (uint8_t i = 0; i < 8; ++i) {
|
for (uint8_t i = 0; i < 8; ++i) {
|
||||||
CLK_LOW();
|
CLK_LOW();
|
||||||
@@ -1785,19 +1786,19 @@ void P073_data_struct::tm1637_SetPowerBrightness(uint8_t brightlvl,
|
|||||||
brightlvl |= TM1637_POWER_OFF;
|
brightlvl |= TM1637_POWER_OFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t bytesToPrint[]{brightlvl};
|
uint8_t bytesToPrint[]{ brightlvl };
|
||||||
tm1637_i2cWrite_ack(bytesToPrint, NR_ELEMENTS(bytesToPrint));
|
tm1637_i2cWrite_ack(bytesToPrint, NR_ELEMENTS(bytesToPrint));
|
||||||
}
|
}
|
||||||
|
|
||||||
void P073_data_struct::tm1637_InitDisplay() {
|
void P073_data_struct::tm1637_InitDisplay() {
|
||||||
pinMode(this->pin1, OUTPUT);
|
pinMode(this->pin1, OUTPUT);
|
||||||
pinMode(this->pin2, OUTPUT);
|
pinMode(this->pin2, OUTPUT);
|
||||||
|
|
||||||
digitalWrite(this->pin1, HIGH);
|
digitalWrite(this->pin1, HIGH);
|
||||||
digitalWrite(this->pin2, HIGH);
|
digitalWrite(this->pin2, HIGH);
|
||||||
|
|
||||||
delayMicroseconds(TM1637_CLOCKDELAY);
|
delayMicroseconds(TM1637_CLOCKDELAY);
|
||||||
uint8_t bytesToPrint[]{0x40};
|
uint8_t bytesToPrint[]{ 0x40 };
|
||||||
tm1637_i2cWrite_ack(bytesToPrint, NR_ELEMENTS(bytesToPrint));
|
tm1637_i2cWrite_ack(bytesToPrint, NR_ELEMENTS(bytesToPrint));
|
||||||
tm1637_ClearDisplay();
|
tm1637_ClearDisplay();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -433,6 +433,7 @@ void handle_networks_NetworkSettingsPage(ESPEasy::net::networkIndex_t networkind
|
|||||||
|
|
||||||
if (NW_data && NW_data->hasPluginStats()) {
|
if (NW_data && NW_data->hasPluginStats()) {
|
||||||
addFormSubHeader(F("Statistics"));
|
addFormSubHeader(F("Statistics"));
|
||||||
|
addFormDetailsStart(false);
|
||||||
# if FEATURE_CHART_JS
|
# if FEATURE_CHART_JS
|
||||||
|
|
||||||
if (NW_data->nrSamplesPresent() > 0) {
|
if (NW_data->nrSamplesPresent() > 0) {
|
||||||
@@ -453,6 +454,7 @@ void handle_networks_NetworkSettingsPage(ESPEasy::net::networkIndex_t networkind
|
|||||||
// } else {
|
// } else {
|
||||||
// somethingAdded = true;
|
// somethingAdded = true;
|
||||||
}
|
}
|
||||||
|
addFormDetailsEnd();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -41,9 +41,9 @@ void handle_pluginlist() {
|
|||||||
html_table_header(F(""), 25);
|
html_table_header(F(""), 25);
|
||||||
html_table_header(F("Description"), 800);
|
html_table_header(F("Description"), 800);
|
||||||
html_table_header(F(""), 50);
|
html_table_header(F(""), 50);
|
||||||
# if FEATURE_MQTT_TLS || FEATURE_HTTP_TLS
|
# if FEATURE_MQTT_TLS || FEATURE_HTTP_TLS || FEATURE_EMAIL_TLS
|
||||||
html_table_header(F(""), 50);
|
html_table_header(F(""), 50);
|
||||||
# endif // if FEATURE_MQTT_TLS || FEATURE_HTTP_TLS
|
# endif // if FEATURE_MQTT_TLS || FEATURE_HTTP_TLS || FEATURE_EMAIL_TLS
|
||||||
html_table_header(F(""));
|
html_table_header(F(""));
|
||||||
|
|
||||||
deviceIndex_t x;
|
deviceIndex_t x;
|
||||||
@@ -130,9 +130,13 @@ void handle_pluginlist() {
|
|||||||
html_table_header(F(""), 25);
|
html_table_header(F(""), 25);
|
||||||
html_table_header(F("Description"), 800);
|
html_table_header(F("Description"), 800);
|
||||||
html_table_header(F(""), 50);
|
html_table_header(F(""), 50);
|
||||||
# if FEATURE_MQTT_TLS || FEATURE_HTTP_TLS
|
# if FEATURE_MQTT_TLS || FEATURE_HTTP_TLS || FEATURE_EMAIL_TLS
|
||||||
|
# if FEATURE_EMAIL_TLS
|
||||||
|
html_table_header(F("TLS"), 50);
|
||||||
|
# else
|
||||||
html_table_header(F(""), 50);
|
html_table_header(F(""), 50);
|
||||||
# endif // if FEATURE_MQTT_TLS || FEATURE_HTTP_TLS
|
# endif // if FEATURE_EMAIL_TLS
|
||||||
|
# endif // if FEATURE_MQTT_TLS || FEATURE_HTTP_TLS || FEATURE_EMAIL_TLS
|
||||||
html_table_header(F(""));
|
html_table_header(F(""));
|
||||||
|
|
||||||
for (uint8_t x = 0; x <= notificationCount; x++)
|
for (uint8_t x = 0; x <= notificationCount; x++)
|
||||||
@@ -147,6 +151,13 @@ void handle_pluginlist() {
|
|||||||
NPlugin_ptr[x](NPlugin::Function::NPLUGIN_GET_DEVICENAME, 0, NotificationName);
|
NPlugin_ptr[x](NPlugin::Function::NPLUGIN_GET_DEVICENAME, 0, NotificationName);
|
||||||
addHtml(NotificationName);
|
addHtml(NotificationName);
|
||||||
html_TD();
|
html_TD();
|
||||||
|
# if FEATURE_EMAIL_TLS
|
||||||
|
html_TD();
|
||||||
|
|
||||||
|
if (Notification[x].usesTLS) {
|
||||||
|
addEnabled(true);
|
||||||
|
}
|
||||||
|
# endif // if FEATURE_EMAIL_TLS
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
# endif // if FEATURE_NOTIFIER
|
# endif // if FEATURE_NOTIFIER
|
||||||
@@ -159,9 +170,9 @@ void handle_pluginlist() {
|
|||||||
html_table_header(F(""), 25);
|
html_table_header(F(""), 25);
|
||||||
html_table_header(F("Description"), 800);
|
html_table_header(F("Description"), 800);
|
||||||
html_table_header(F(""), 50);
|
html_table_header(F(""), 50);
|
||||||
# if FEATURE_MQTT_TLS || FEATURE_HTTP_TLS
|
# if FEATURE_MQTT_TLS || FEATURE_HTTP_TLS || FEATURE_EMAIL_TLS
|
||||||
html_table_header(F(""), 50);
|
html_table_header(F(""), 50);
|
||||||
# endif // if FEATURE_MQTT_TLS || FEATURE_HTTP_TLS
|
# endif // if FEATURE_MQTT_TLS || FEATURE_HTTP_TLS || FEATURE_EMAIL_TLS
|
||||||
html_table_header(F(""));
|
html_table_header(F(""));
|
||||||
|
|
||||||
ESPEasy::net::networkDriverIndex_t tmpNetworkDriverIndex{};
|
ESPEasy::net::networkDriverIndex_t tmpNetworkDriverIndex{};
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
Import("env")
|
Import("env")
|
||||||
|
import os
|
||||||
|
|
||||||
|
|
||||||
# ToDo: Use suggested code by Jason2866
|
# ToDo: Use suggested code by Jason2866
|
||||||
@@ -7,4 +8,9 @@ Import("env")
|
|||||||
try:
|
try:
|
||||||
from pygit2 import Repository
|
from pygit2 import Repository
|
||||||
except ImportError:
|
except ImportError:
|
||||||
env.Execute("$PYTHONEXE -m pip install -r requirements.txt")
|
# Activate the Python environment penv and install the requirements there when not yet available
|
||||||
|
# Windows is different from other OS-es, assuming Powershell as default shell, not CMD (where separator: & instead of ;)
|
||||||
|
if os.name == "nt":
|
||||||
|
env.Execute(".\.platformio\penv\Scripts\activate ; uv pip install -r requirements.txt")
|
||||||
|
else:
|
||||||
|
env.Execute(". .platformio/penv/bin/activate ; uv pip install -r requirements.txt")
|
||||||
|
|||||||
Reference in New Issue
Block a user