Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Accelerate path.listdir() #18927

Merged
merged 2 commits into from
Jul 6, 2023
Merged

Accelerate path.listdir() #18927

merged 2 commits into from
Jul 6, 2023

Conversation

Staars
Copy link
Contributor

@Staars Staars commented Jun 21, 2023

Description:

Related to #18906

@btsimonh I did not figure out the meaning of

                                        if (strcmp(fn, ".") && strcmp(fn, "..")) {
                                            be_pushstring(vm, fn);
                                            be_data_push(vm, -2);
                                            be_pop(vm, 1);
                                        }

Maybe the ìf is not needed with the newer API, maybe I have overlooked something.

Speed increase was by a factor of 7 for 200 files. List output in Berry was truncated and is another problem.

Checklist:

  • The pull request is done against the latest development branch
  • Only relevant files were touched
  • Only one feature/fix was added per PR and the code change compiles without warnings
  • The code change is tested and works with Tasmota core ESP8266 V.2.7.4.9
  • The code change is tested and works with Tasmota core ESP32 V.2.0.10
  • I accept the CLA.

NOTE: The code change must pass CI tests. Your PR cannot be merged unless tests pass

@btsimonh
Copy link
Contributor

It's checking for and ignoring '.' and '..' - of course they may not appear in some filesystems?
That part came directly for the original code.....
Thanks for attempting reproduction, and nice to see the speed improvement :).
I'll try it out later...

@Staars
Copy link
Contributor Author

Staars commented Jun 21, 2023

Ah, I remember that issues with . and ..

@s-hadinger I would prefer, that Berry does not hide hidden entries, to better monitor file system pollution. But maybe there are more reasons to keep this check. I guess it was introduced for the web UI, wasn‘t it?

@btsimonh
Copy link
Contributor

but... did you try '/somefolder/../somefolder' - maybe there is no support?
I'm worried about my zap(folder) function - if the FS does support the above!!!
But in general, it should be the berry app which deals with the raw returned data.

@Staars
Copy link
Contributor Author

Staars commented Jun 21, 2023

I am not sure, that I did understand this correctly.
Did you mean the general functionality of subfolders with this PR?
This seems to work, as I did another run with:
200 files in "/"
and
9993 files in "/torture"

The result was correct again and indeed performance in the root folder was better now with less than 10000 files.
Or wasn't that your question?

@btsimonh
Copy link
Contributor

no, my question was specifically about the . and ..
i.e., if someone listed '/torture/../torture', do they get the same result as '/torture'? If not, then providing '..' is only an indication of the fact we're in a subfolder. To me, '.' has little use? And '..' is dangerous (think of my ZAP() function - it could (would currently) recurse into the root folder through finding '..' - it currently refuses to zap('/') or zap('')).

@btsimonh
Copy link
Contributor

observations of TAS ref large folders: (test folder is a real folder on SD card with 2238 files).

1/ listing through the GUI. Whilst listing a (large) folder in the GUI, everything else is frozen. It stopped at ~1980 files. Tas is now unresponsive... (took two power offs to get back - got my steps in today).
(note: there is a non-file-closure bug in the GU llisting - but only for hidden files, so not the cause of the hang).

2/ listing via berry with this PR:

import path
print('starting')
var t = path.listdir('/sd/timelapse/test5')
print(size(t))

Result in about 1s:

starting
2238

Use cases:

Viewing an existing SD card.

why? - I think we can discount existing information on an SD as 'extraneous'.

stuff we wrote from TAS

with esp32cam, we can do motion capture and timelapse.

In both applications, we're in control of how much we write. i.e. we can start a new folder when we hit a certain quantity.
What quantity would we like to capture?

timelpase

Well for timelapse, the min cron interval is 1 minute (we can do shorter with timer) - so 1440 per day (24 hours). This seems a reasonable number to support in a folder. However, each frame (in my current implementation) is two files - the jpeg and some metadata (time, etc.). So 2880 per day. Still not unreasonable from the above....

motion

a motion event per minute seems unreasonbable. So above applies. If we keep < 3000, we're in good shape.

For me, this PR is a big improvement on the existing listdir function.

Final note:

In the above code, if I print(t), it goes away for what seems forever (yes, I gave up)
if I print(t[0]), I see the first REAL file (index.html) (not '.' or '..') - from SD card.

thanks again @Staars for a sound solution.

@btsimonh
Copy link
Contributor

haha - what would be really cool is if path.listdir('somename.zip#') worked with your implementation - it can't at the moment because zipFS rejects that.... but maybe the code would support it with a minor mod?

@btsimonh
Copy link
Contributor

something i did not notice last night.
when I printed the last file, the string is the full path /sd/timelapse/test5/index.html

This does not match the previous implementation where the filenames supplied were just the names. It would use less ram if only the names were returned?

@Staars
Copy link
Contributor Author

Staars commented Jun 22, 2023

That's basically the default behavior of the Arduino lib, which I would expect to be the standard in the Berry implementation too. But as always ... personal preference.

As working with large file numbers will not be possible (aka is practically impossible) without a PSRAM board, we "only waste" PSRAM here. Unless you run out of this, there is no real world problem.

My suggestion is, to leave the implementation according to the Arduino standard behavior for this PR.
If you later really run in to trouble with this, then a change should be no problem. I assume, that currently there are not hordes of Berry coders out there, that deal with >10000 files in Tasmota, so a later small API change should be feasible .

But I would gladly leave that decision to @s-hadinger .

@btsimonh
Copy link
Contributor

I'm happy either way. I just wonder how many people already have path.listdir in use. Indeed, I think it's used during boot.... so the PR may actually already be breaking searching for certain berry files. @s-hadinger will know :).

@Staars
Copy link
Contributor Author

Staars commented Jun 22, 2023

Okay, for testing ... the old behavior:
(starting at line 148)

                        if (dir) {
                            String fpath;
                            String fname;
                            switch (action){
                                case MPATH_LISTDIR:
                                    dir->seekDir(0);
                                    fpath = dir->getNextFileName();
                                    while (fpath.length() != 0) {
                                        fname = fpath.substring(fpath.lastIndexOf("/") + 1);
                                        const char * fn = fname.c_str();
                                        be_pushstring(vm, fn);
                                        be_data_push(vm, -2);
                                        be_pop(vm, 1);
                                        fpath = dir->getNextFileName();
                                    }
                                    break;

Tested the speed with this underengineerd benchmark:

print(tasmota.memory())
import path
var m = tasmota.millis()
var r = path.listdir("/")
print(size(r))
var t = path.listdir("/torture")
print(size(t))
var d = tasmota.millis() - m
print("duration in millis:", d)
print(tasmota.memory())

giving this result:

12:41:46.147 {'stack_low': 3.71094, 'program_free': 1077, 'program': 1802, 'psram': 4093, 'stack_size': 8, 'flash_real': 16384, 'iram_free': 5, 'flash': 16384, 'frag': 8, 'heap_free': 116, 'psram_free': 4081}
12:41:46.335 104
12:42:15.437 9993
12:42:15.438 duration in millis: 29281
12:42:15.447 {'stack_low': 3.71094, 'program_free': 1077, 'program': 1802, 'psram': 4082, 'stack_size': 8, 'flash_real': 16384, 'iram_free': 5, 'flash': 16384, 'frag': 7, 'heap_free': 115, 'psram_free': 3611}
12:42:32.852 {'stack_low': 3.71094, 'program_free': 1077, 'program': 1802, 'psram': 4082, 'stack_size': 8, 'flash_real': 16384, 'iram_free': 5, 'flash': 16384, 'frag': 7, 'heap_free': 115, 'psram_free': 3603}
12:42:33.038 104
12:43:01.502 9993
12:43:01.503 duration in millis: 28641
12:43:01.512 {'stack_low': 3.71094, 'program_free': 1077, 'program': 1802, 'psram': 4081, 'stack_size': 8, 'flash_real': 16384, 'iram_free': 5, 'flash': 16384, 'frag': 7, 'heap_free': 114, 'psram_free': 3468}

(just two runs of the same, seems to cache a bit)

Speed seems to be the same (yes, 9993 files is insanely slow).

@btsimonh
Copy link
Contributor

just for the record, I tested before and after the above.

using the 'filenames only' code above shaved a few ms off my ~1s for 2238 files on SD card.
I'm happy that with the above change, this PR performs the same as the old path.listdir, but somewhat more efficiently.
I also checked first and last filenames, and all the data appears to be there :).

before:

{'stack_low': 3.70703, 'program_free': 1984, 'program': 1447, 'psram': 4092, 'stack_size': 8, 'flash_real': 4096, 'iram_free': 39, 'flash': 4096, 'frag': 4, 'heap_free': 78, 'psram_free': 2607}
2238
duration in millis: 1161
2238
duration in millis: 939
{'stack_low': 3.70703, 'program_free': 1984, 'program': 1447, 'psram': 4057, 'stack_size': 8, 'flash_real': 4096, 'iram_free': 39, 'flash': 4096, 'frag': 4, 'heap_free': 78, 'psram_free': 2409}

after:

{'stack_low': 3.73828, 'program_free': 1984, 'program': 1447, 'psram': 4093, 'stack_size': 8, 'flash_real': 4096, 'iram_free': 39, 'flash': 4096, 'frag': 4, 'heap_free': 78, 'psram_free': 3301}
2238
duration in millis: 1127
2238
duration in millis: 931
{'stack_low': 3.73828, 'program_free': 1984, 'program': 1447, 'psram': 4090, 'stack_size': 8, 'flash_real': 4096, 'iram_free': 39, 'flash': 4096, 'frag': 4, 'heap_free': 78, 'psram_free': 3161}

@Staars
Copy link
Contributor Author

Staars commented Jun 22, 2023

Thanks for testing.
Meanwhile I also think, that we should stick to the old behavior. Changes pushed.
Now the only functional change would be to not filter out . and .., which IMHO makes sense for a function, that usually works behind the scenes and not directly in GUI.

@btsimonh
Copy link
Contributor

on my SD, I do not see '.' or '..' anyway, unless they hide at file 1000!

@s-hadinger s-hadinger merged commit 4c05356 into arendst:development Jul 6, 2023
@Staars Staars deleted the patch-2 branch September 2, 2023 09:03
eckelj added a commit to rddl-network/Tasmota that referenced this pull request Sep 21, 2023
* Berry `var` allowed in with walrus operator `:=` (arendst#19018)

* Berry `var` allowed in with walrus operator `:=`

* fix regression

* Revert "Berry `var` allowed in with walrus operator `:=` (arendst#19018)" (arendst#19019)

This reverts commit 8f06552.

* Implement deepsleep(0)

Implement deepsleep(0) as command ``restart 9`` (arendst#19024)

* Update change logs

* Partition Wizard is now able to convert to safeboot from Shelly partition layout (arendst#19034)

* Update changelogs

* Hot fix for gitpod and CI  (pio core v6.1.8 is faulty) (arendst#19044)

* Use pio v6.1.7

* Accelerate path.listdir() (arendst#18927)

* Accelerate path.listdir()

* restore old behavior, push filename only and not the full path to the list

* Revert "Hot fix for gitpod and CI  (pio core v6.1.8 is faulty) (arendst#19044)" (arendst#19051)

This reverts commit c4f899a.

* Create GC9A01_display.ini (arendst#19043)

* Fix to Partition_Wizard for shelly (arendst#19056)

* Fix BUG: Zigbee devices cannot be added through routing nodes (arendst#19036)

* `BrRestart` now supports web handlers to work after Berry restart (arendst#19057)

* ESP32 LVGL library from v8.3.7 to v8.3.8 (no functional change) (arendst#19058)

* ESP32 LVGL library from v8.3.7 to v8.3.8 (no functional change)

* Update changelog

* Matter increase logs in save_fabrics (arendst#19060)

* Enhance ZC-Dimmer for falling and leading edge dimmer (arendst#19054)

* Update tasmota_types.h

* Update xdrv_68_zerocrossDimmer.ino

* fix modbus-tcp, add U32,U64 etc (arendst#19063)

* Berry added `getgbl` performance counter to `debug.counters()` (arendst#19070)

* Berry add `getgbl` counter

* Berry added `getgbl` performance counter to `debug.counters()`

* Matter fix bug when saving Force Static endpoints (arendst#19071)

* Matter improve latency for remote commands (arendst#19072)

* Matter increase logs when storing sessions (arendst#19073)

* Enable ESP32 shutter driver

Enable ESP32 shutter driver (arendst#18295)

* Bump version v13.0.0.2

Update changelogs

* Set ESP32-C3 max supported ADC channels to 5

* Matter add mini-profiler (arendst#19075)

* Update changelogs

* Update decode-status.py to synchronize SetOption154/155 (arendst#19078)

I noticed that the translation for SetOption154/155 bits did not match tasmota_types.h:
https://github.com/arendst/Tasmota/blob/development/tasmota/include/tasmota_types.h#L190-L191

* Matter fix session not being removed from memory (arendst#19081)

* Matter fix session not being removed from memory

* Fix

* File UI changes (arendst#19014)

* Remove recursion into folders on Manage Files.  May be enabled with UFILESYS_RECURSEFOLDERS_GUI.  On Edit of a file, Save and Magane btuttons return to the folder containgint the file being edited.  On delete file, UI returns to the folder that the deleted file was in.

* Make newfile put in in the current folder, and return to current folder on save of manage button.

* Add folderOnly and FileOnly functions to reduce code duplication.
Enable folder delete.
Enable folder listing to be aborted (x in browser)
Disbale ESP32 Download Task.  Needs attention.
Allow folder create from newfile name.

* Configuration file save and restore .xdrvsetXXX

Configuration file save and restore now backup and restore ``.xdrvsetXXX`` files too (arendst#18295)

* Berry `_class` can be used in `static var` initialization code (arendst#19088)

* Verify correct functionality

* Update changelogs

* Berry minor fixes from upstream (arendst#19091)

* Fix driver config restore

* Fix driver config backup and restore

Fix driver config backup and restore (arendst#18295)

* Fix possible buffer overflow

* Zero-Cross Dimmer fixes (arendst#19109)

* Fix Zero-Cross flickering on Savedata

* Fix reboot on DIMMER usage with Zero-Cross

* Fix Flickering on dimmer 0

* Berry add `energy.update_total()` to call `EnergyUpdateTotal()` from energy driver (arendst#19117)

* Sync with Berry upstream (arendst#19119)

* Berry extend `range(lower, upper, incr)` to arbitrary increment (arendst#19120)

* Update Berry windows exe to latest (arendst#19121)

* Berry updated syntax highlighting plugin for VSCode (arendst#19123)

* Berry check arguments for `range()` (arendst#19124)

* Berry fix syntax highlighting for escaped chars (arendst#19126)

* Fix typo

* Berry update grammar (arendst#19129)

* More user-friendly defaults for DisplayMode and DisplayDimmer (arendst#19138)

Changing default for DisplayMode from 1 to 0. Users are getting confused by the display doing something they did not ask for (and not being aware of DisplayMode). This got worse with LVGL/HASPmota displays becoming common, with users having much less reason to dive into the old DisplayXxxxx commands. And it may even be hard to see that it is even a display of time/date causing the display to flicker.

Changing default for DisplayDimmer from 10% to 50%. The low brightness of 10% is not always easy to see, especially in daylight. 50% is generally better, while not going "full blast" with 100%.

* Berry add metrics for memory allocation/deallocation/reallocation (arendst#19150)

* Zigbee DIYRuZ_Geiger (arendst#19151)

* Berry `tasmota.loglevel()` and `tasmota.rtc_utc()` for faster performance (arendst#19152)

* Berry add AES CCM decrypting in a single call to avoid any object allocation (arendst#19153)

* New DEEPSLEEP topic for HA + Battery Level % support (arendst#19134)

* New LWT on deepsleep

To allow better integration into HA LWT topic will report details of sleep status:
16:54:04.388 MQT: hm/tele/ESP_3284D1/LWT =
{"Sleep":{"Time":"2023-07-17T16:55:03","Sleep":1689612844,"Wakeup":1689612903}}

* Revert LWT back to non JSON

Send DeelSleep on LWT
Send Deepsleep parameters on topic DeepSleep

* Setting default for batteryLevel

* Enable BatteryPercentSet

Changing the battery level e.g. by rule

* Added Battery % to status message

* added battery_level_percent

* Added battery % support in STATE message

* Enable setting battery level

101 is reserved for power-plug. No battery Level reported

* Setting default for battery Level

101 is reserved for power plug
0..100 normal battery values

* Revert back LWT to Offline

Removed "DeepSleep" LWT status until further decision is made. Current implementation is technical sufficient for HA to detect a battery powered device

* Added discovery message after deepsleep change

* Added discovery for battery and deepsleep

* Matter latency improvement for single attribute reads and single commands (arendst#19158)

* Solidified Code updated

* Fix default battery level

- Fix default battery level (arendst#19160)
- Bump version to v13.0.0.3

* Update changelogs

* Fix compilation (arendst#19134)

* MAX17043 sensor integration (arendst#18788)

* Restart MAX17043 from the scratch

* revert change

* Changed battery capacity in charge (capacity is the Ah value of the battery, this degrades over time when battery ages)

* merge

* Changing xsns_109 to 110

* fix nr

* removed old xsns109

* Update I2CDEVICES.md

* clean-up usage of Interface

* Update change logs

* Berry SK6812_GRBW crash (arendst#19166)

* Update italian language (arendst#19169)

* changing reference to xsns109 (arendst#19170)

* fix empty line problem (arendst#19171)

* Update de_DE.h

* Refactor MAX17043 driver

* Refactor MAX17043 driver

Refactor MAX17043 driver optional enable library (default off providing smaller footprint (-250 bytes)

* Add alternative for PCA9685

Add alternative for PCA9685 as define PCA9685_V2 (arendst#18805)

* Update changelogs

* Core 2.0.11 (arendst#19181)

* Update changelogs

* Berry `mqtt.publish` now distinguishes between `string` and `bytes` (arendst#19196)

* Berry improve tasmota.scale_uint() (arendst#19197)

* Make TCPStart ip filter more IPv6 friendly (arendst#19199)

* IRremoteESP8266 library from v2.8.5 to v2.8.6 (arendst#19212)

* ensure minimum interrupt time (arendst#19211)

prevent interrupts <30 micro seconds because sometimes see crashes on esp8266.
esp32 stop of interrupt >30microseconds and < 105microseconds

* Zigbee decode Aqara 0000/FF01 attribute 03 as Temperature (arendst#19210)

* Zigbee decode Aqara 0000/FF01 attribute 03 as Temperature

* Changed to AqaraTemperature

* Four files which used #ifdef EPS8266 instead of #ifdef ESP8266 - which e.g. broke the MFRC522 functionality between 12.5 and 13.x. (arendst#19209)

* Auto detect flash size and adjust FS (arendst#349) (arendst#19215)

* Reduced log level for TeleInfo (arendst#19216)

* unsigned overflow fixed (arendst#19221)

fixed overflow on negative value with dimmer 100%

* Fix fabric saving exception (arendst#19224)

* Berry bytes `get` and `set` work for 3 bytes values (arendst#19225)

* Berry bytes `get` and `set` work for 3 bytes values

* Fix error message

* fix 4MB PIO script upload regression

* Matter increased polling frequency for local switches/occupancy (arendst#19242)

* Fade would fail when the difference between start and target would be too small (arendst#19246)

* Matter support for fabric_filtered request (for Google compatibility) (arendst#19249)

* Update changelogs

* Integrate MAX17043 driver mechanisms in xsns_110 (arendst#19219)

* Fixing SHUTTERINVERT issues (arendst#19243)

* fix wrong inverted shutter

* fix inverted shutter for esp32

* Update changelogs

* Matter support for large atribute responses (arendst#19252)

Support for responses (arrays) that do not fit in a single UDP packer
Do not remove children fabrics

* Matter fix auto-configuration Relay indices (arendst#19255)

* Update changelogs

* Change console height

Change console height from default 318 pixels to viewport (arendst#19241)

* Save some more code bytes

* add wifitest3 (arendst#19259)

* Zigbee Berry minor fix and cleaning (arendst#19257)

* Zigbee Berry minor fix and cleaning

* Fix compilation

* Fix compilation when IPv6 is not supported (arendst#19260)

* Fix console min height

* Fix console Firefox layout

* Change shutterbutton hold behavior with grouptopic (arendst#19263)

* skip stop on hold if grouptopic

If shutterbutton is defined with a grouptopic send on HOLD, there is no stop on releasing the button. All shutters will move to defined position

* do not stop on hold release if group submitt

If mqtt broadcast is defined on hold then release the hold button will not anymore stop the local shutter. All shutter will move to defined position

* Update ru_RU.h (arendst#19214)

* Prepare for Arduino v3 / esp-idf v5 (arendst#19264)

* Bump version to v13.0.0.4

* Prepare for Arduino v3 / esp-idf v5 2nd batch (arendst#19265)

* Tasmota based on Arduino 3.0.0 (arendst#19270)

* more idf5.1 preps: Berry SPI (arendst#19273)

* Improvements to thermostat debug output (arendst#19279)

* add: update DEBUG_THERMOSTAT to only control the virtual switch

Also, debug output is still generated but end user can control this debug level 3

* add: debug output of main controller parameters when thermostat enabled

Also, add units for debug outputs added to make them more intelligible

* Update xdrv_39_thermostat.ino

* add: debug message when sensor is detected as not alive

fix: display thermostat number in debug messages

* add: log message prefix string for thermostat

* Update xdrv_39_thermostat.ino

fix: typos in comments
add: debug messages

* add: debug prefix for thermostat

* add: debug prefix added to output lines

* fix: comment typos and small grammatical changes for clarity

* add: debug prefix 'THE' added to debug output

* add section safeboot_flags in platform_tasmota32.ini (arendst#19281)

This will make it easier to ignore a bunch of libraries in order to speed up builds without polluting the ENV sections too much.

Usage:
[env:my_safeboot_env]
lib_ignore              = ${safeboot_flags.lib_ignore}

* use common safeboot flags (arendst#19282)

* fix IRAM_ATTR specified both in function declaration and definition (arendst#19286)

* Improvements to PID controller driver (arendst#19285)

* add: update DEBUG_THERMOSTAT to only control the virtual switch

Also, debug output is still generated but end user can control this debug level 3

* add: debug output of main controller parameters when thermostat enabled

Also, add units for debug outputs added to make them more intelligible

* Update xdrv_39_thermostat.ino

* add: debug message when sensor is detected as not alive

fix: display thermostat number in debug messages

* add: log message prefix string for thermostat

* Update xdrv_39_thermostat.ino

fix: typos in comments
add: debug messages

* add: debug prefix for thermostat

* add: debug prefix added to output lines

* fix: comment typos and small grammatical changes for clarity

* add: debug prefix 'THE' added to debug output

* add:  display PID status and key info on web output

* fix: remove extraneous comments that included unused code fragments

* add: local sensor handling improvements

add: define a local sensor name
add: define the local sensor measurement parameter
add: limit sensor not seen error message to every 60 seconds to avoid flooding the logs
add: include interval since which sensor data was last updated
fix: properly update the maximum interval time so missing sensor data is properly alerted

* Update xdrv_49_pid.ino

* Typo architceture → architecture (arendst#19288)

* avoid unnecessary compiling of specific libraries in lib32_div for most builds (arendst#19293)

* ESP32: pass flashmode at build time to macro definition (arendst#19299)

* pass flashmode at build time to macro definition

* fix 8266 builds

* fix: properly detect device is offline after maximum misses reached (arendst#19298)

* Update changelogs

* [DS18x20] Enhance use of aliases (arendst#19026)

* [DS18x20] Enhance use of aliases

`defineDS18x20_USE_ID_AS_NAME`:
Always show part of the address, even for one sensor
`#define DS18x20_USE_ID_ALIAS`:
The command `DS18Alias` can now be use with alphanumeric aliases, which replace the sensor name

* [DS18x20] change to calloc()

* fix OneWire for IDF5.1 and C2/C6 (arendst#19303)

* fix OneWire for IDF5.1 and C2/C6

* Use Onewire in arduino30 builds

* use SOC specific defines for C2,C3 and C6

* Removes software based no load threshold. (arendst#19302)

Lowers ADE7953 builtin no load detection threshold to be able to measure 5 watt power levels.

* Update changelogs

* Creates a place to put the customer boards (arendst#19309)

* Add commands to allow setting of timeprop parameters (arendst#19310)

* add: commands to set timeprop settings

* Update my_user_config.h

* fix: properly generated json response to commands

* Sync dev with release v13.1

* Update platformio_tasmota32.ini (arendst#19313)

* add: shutdown command for PID controller (arendst#19318)

* Add variables to rules

Add variables ``%power<1..28>%`` and  ``%switch<1..28>%`` to rules (arendst#19331)

* Update switch comments

* fix shutterinvert (arendst#19341)

* fix shutterinvert

* fix shutterinvert

* Update changelogs

* Changed display invert setting

Changed display invert setting after tasmota start in uDisplay driver (arendst#19337)

* add platformio_tasmota_core3_env.ini to gitignore

* Remove debug messages (arendst#19365)

* Fix compile warning

* Phase 1 support C2/C6

* Phase 1 support C2/C6

* Phase 1 support C2/C6

* Phase 1 support C2/C6

* Add new webcam driver over latest dev. (arendst#19280)

* Add new webcam driver over latest dev. To use the old one, define USE_WEBCAM_LAGACY

* enable build without RTSP.
check pin_pwdn before using it n 0x105!!!

* more fixes around pwdn.  Make wcresolution -1 set the resoltuion setting to 'disbale cam' value (15).

* fix task stop - wait for debug to leave-> prevents guru. pin task to core 0.

* split motion from other code.  Add USE_WEBCAM_MOTION to control inclusion of motion code (big hit). Change from using USE_WEBCAM_LEGACY to USE_WEBCAM_V2

* logging minimisation - behind WEBCAM_DEV_DEBUG

* Shutter ESP32 fixes (arendst#19362)

* fix esp32 shutter

* fix shutterinvert+shutterbutton

* Phase 2 support C2/C6

* ignore esp-nimble-cpp (arendst#19369)

in core 2.0.11

* Phase 2 support C2/C6

* Fix Core 3 compilation

* Fix Core 3 compilation

* prepare transition to esp-nimble-cpp (arendst#19370)

* Platform ESP32 2023.08.01 (arendst#19371)

* Neopixel add SPI driver for C2 and some minor updates (arendst#19372)

* fix inverted shutter inconsistencies (arendst#19374)

* inverted shutter fix on overflow

* fix inverted_shutter > 9

fix on inverted shutter at esp32.
fix tilt behavior on inverted shutter

* fix tilt behavior on inverted shutter

* do not use NimBLE-Arduino for Mi32-legacy (arendst#19375)

* Fix compilation

* Arduino.3.0: enable Audio libs compile by disabling incompatible I2S driver (arendst#19377)

* i2s off for Arduino 3.0

* fix compile of uDisplay with IDF5.x on ESP32S3 (arendst#19378)

* Fix idf chip revision

* Revert "Fix idf chip revision"

This reverts commit e5cb367.

* Teleinfo power fix (arendst#19381)

* fix power arendst#19244

* cosmetic display

* Fix idf chip revision

* Fix crash of uDisplay on  ESP32S3 with IDF5.1 (arendst#19383)

* fix compile of uDisplay with IDF5.x on ESP32S3

* fix crash with uDisplay on S3 with IDF5.1

* Consolidate esp32 hardware info

* Finally add ESP32-P4 ;-)

* translate label (arendst#19385)

* Update change logs

* Fix rotary edge cases (arendst#19164)

* Fix crash in IRHVAC (arendst#19389)

* Update changelogs

* Allow ADE7880 user defines (arendst#19391)

* Fix IRHVAC crash v2

* Added passive mode for Sen5x sensor (required for Ike@ Vindstyrka) (arendst#19388)

* Added a passive mode in sen5x sensor for parasitic installations. This skips reset & initialization of sensor on startup and reduces the polling to every 10 seconds to not interfere with and confuse the other I2C master on the bus, e.g. Ike* Vindstyrka.

* Removed obsolete updateCount. Cleanup.

* Update decode-status

* EnergyMargins - always send MQTT telemetry message (arendst#19397)

* Add twilight info to GUI (arendst#19334)

* fix and improve pzem_dc (arendst#19402)

* enable more driver for Arduino 3.0

* More Arduino 3.0 env

* Final change to GUI twilight

* Fix xdrv_122_file_settings_demo buffer overflow (arendst#19405)

* expected changes for arduino30 (arendst#19421)

* Add ESP32-C6 GPIO26/28 in template

Add ESP32-C6 GPIO26/28 in template as Red pins used by flash (QIO) but optionally free if DIO/DOUT

* Allow display of revision v0.0

* build safeboot bin for C2/C6 (arendst#19422)

* build safeboot bin for C2/C6
* add C2/C6 safeboot to CI
* Enable core3 env settings before Pio starts

* Revert "build safeboot bin for C2/C6 (arendst#19422)" (arendst#19423)

This reverts commit f840f51.

* Build C2/C6 safeboot firmwares in GH Actions (arendst#19424)

* Added compiler option for doubleclick window (arendst#19428)

* sorry... (arendst#19429)

* Fixed PCF8574 mode 1

- Fixed PCF8574 mode 1 with base relays exception 3/28 regression from v12.4.0.4 (arendst#19408)
- Bump version v13.1.0.2

* Support for HDMI CEC protocol (arendst#19434)

* Berry fast_loop is now called every 5ms whatever the Sleep value (arendst#19436)

* all output parts for I2S and IDF5.1 (arendst#19440)

* Update italian language (arendst#19442)

* Berry make mdns compatible with non-IPv6 builds (arendst#19444)

* Berry move solidified code to C (arendst#19446)

* Fix compilation on Arduino 3 (arendst#19447)

* Fix compilation on Arduino 3

* Fix compilation

* Berry cleaned udp class (arendst#19449)

* Berry move mapping from C++ to C (arendst#19450)

* Reduce IRAM consumption of HDMI CEC to 1453 bytes (arendst#19452)

* Reduce IRAM consumption of HDMI CEC to 1453 bytes

* Add changelog

* enable IPv6 and Matter (arendst#19456)

* Fix migration error to filesystem settings (arendst#19454)

* `Sendmail` upgraded to ESP-Mail-Client v3.4.9 from v1.2.0, using BearSSL instead of MbedTLS (arendst#19460)

* `Sendmail` upgraded to ESP-Mail-Client v3.4.9 from v1.2.0, using BearSSL instead of MbedTLS

* Fix compilation on ESP8266

* Fix compilation

* fix compilation

* fix shine for gcc12 (arendst#19458)

* Enable ESP Mail Client in core 30 (arendst#19461)

* Enable multipress events on buttons (arendst#19465)

* Update changelogs

* Support for IPv6 link-local zones for esp-idf 5.1 (arendst#19469)

* cosmetic changes only (arendst#19468)

- reorder functions alphabetically
- reformat equations for better reading following guidelines
- adding comment for understanding

* Fix TLS by removing redundant BearSSL code from libmail (arendst#19472)

* Fix compilation of IRRemoteESP8266 for core3 (arendst#19473)

* Fix typo in berry mqtt (arendst#19477)

* Don't reset the MAX17043 battery fuel gauge after waking from Deep Sleep (arendst#19412)

* fix: don't reset the device when coming out of deep sleep

* fix: move debug log message to inside the device validation

* Update xsns_110_max17043.ino

* add: update global battery percentage when max17043 reports new value

* Matter events phase 1 (arendst#19484)

* Zigbee fix warnings with Arduino3 (arendst#19486)

* Fix core 2.0.12 exception

* Fix possible MQTT disconnect exception

* Tasmota ESP32 core 2.0.12 (arendst#19463)

* Matter consolidate attributes per cluster (arendst#19493)

* Improved parsing of accumulation data from HRG-15 rain sensor (arendst#19485)

* fix: more robust parsing of accumulation data

* fix: further parsing checks

* Update xdrv_29_deepsleep.ino (arendst#19492)

* Fix MAX17043 invalid JSON (arendst#19495)

* Clean up support command code

* Fix ESP8266 compilation (arendst#19485)

* Add BL0942 baudrate selection

* fix hardware serial port swap on ESP8266 (arendst#19505)

* Fix hidden invalid character

* Fix invalid character

* fix compile errors on exotic windows codepages (arendst#19508)

* Fix BL0942 higher baudrates

* Add frequency to BL0942

* ESP32 LVGL library from v8.3.8 to v8.3.9 (no functional change) (arendst#19510)

* Matter virtual lights (arendst#19511)

* Fix ESP32C3 relay click on restart

* Fix Arduino3 compilation

* Update changelogs

* Bump version v13.1.0.3

* Matter support for Virtual Devices controllable via Rules or Berry (arendst#19520)

* Fix typo

* Solidified Code updated

* Update changelogs

* fix: add command data to cmnd response (arendst#19524)

* Matter add virtual sensors (arendst#19530)

* Tasmota Core 2.0.13 (arendst#395) (arendst#19533)

Tasmota Core 2.0.13

* Fix IR compilation for ESP32 with Arduino3 (arendst#19537)

* Update RELEASENOTES.md

* Preps for IDF5.1: microphone/input for i2s audio (arendst#19544)

* fix codec compilation on IDF5.1 (arendst#19546)

* I2S improvements to MP3 play (arendst#19547)

* Fix DS18B20 for ESP32 with over 33 gpios

* Update changelogs

---------

Co-authored-by: s-hadinger <[email protected]>
Co-authored-by: Theo Arends <[email protected]>
Co-authored-by: Jason2866 <[email protected]>
Co-authored-by: Christian Baars <[email protected]>
Co-authored-by: MIzzzzon <[email protected]>
Co-authored-by: xsp1989 <[email protected]>
Co-authored-by: stefanbode <[email protected]>
Co-authored-by: gemu <[email protected]>
Co-authored-by: sfromis <[email protected]>
Co-authored-by: btsimonh <[email protected]>
Co-authored-by: s-hadinger <[email protected]>
Co-authored-by: Vincent de Groot <[email protected]>
Co-authored-by: bovirus <[email protected]>
Co-authored-by: msedv <[email protected]>
Co-authored-by: Christian Baars <[email protected]>
Co-authored-by: usr44 <[email protected]>
Co-authored-by: Paul Blacknell <[email protected]>
Co-authored-by: Дилян Палаузов <[email protected]>
Co-authored-by: SteWers <[email protected]>
Co-authored-by: paulusbrand <[email protected]>
Co-authored-by: Martin <[email protected]>
Co-authored-by: Charles <[email protected]>
Co-authored-by: Andre H. Beckedorf <[email protected]>
Co-authored-by: Barbudor <[email protected]>
Co-authored-by: Norbert Richter <[email protected]>
Co-authored-by: blakadder <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants