Commit Graph
27 Commits
Author SHA1 Message Date
Gijs Noorlander a8682e23ae [DateTime] Documented command + few fixes
- Argument number was incorrect
- did not set time source.  (so you had to set NTP which defeats the purpose of this command
- Added documentation
- Moved the command call to the correct first letter of the alphabet.
2020-03-06 01:33:14 +01:00
Gijs Noorlander b386b73bd2 [Cleanup] Refactor parseSystemVariables + move time functions to .h/.cpp
Trying to make the parseSystemVariables function smaller
Moved time related functions to their respective .h/.cpp classes.
This will make the code a bit more clean and also reduces the build size.
2020-03-03 00:01:45 +01:00
Gijs Noorlander b15aeb16fc [Time] Store system time in RTC and restore at warm boot (no deep sleep)
Sometimes a unit may crash and is not able to connect to WiFi.
But time based rules or the cron daemon may not work when there is no concept of time.

This stores the last known system time in RTC memory to keep track of time.
It can also be used for some diagnostics while it is also sent to log what the last known time was before the crash/reboot.

Each normal reboot does cause a "shift" in time of roughly -1 second. Abnormal (warm) reboots may add more as those may have been the result of watchdog reboots.
2020-02-26 13:55:03 +01:00
Plebs ab7cc2decc fixed longpress with a new timer type
Fixed the longpress event even if the pin is not in the device list.
Added a new timer type
2019-11-14 22:43:20 +01:00
Gijs Noorlander 68836da315 [Cleanup] Use of taskIndex_t & reduce memory usage in structs
Some structs like controller queue elements had their members not sorted to size. This may result in more memory usage than needed.
2019-10-23 16:02:19 +02:00
Gijs Noorlander 85348971d6 [Uncrustify] Cleanup code using Uncrustify
Since there are not that much PRs open and in progress, this is maybe the least intrusive moment to cleanup some code using the given uncrustify.cfg 
If there is a PR merge issue, checkout the PR and perform an uncrustify first before trying to merge.
2019-07-15 15:11:30 +02:00
Gijs Noorlander a3c6fc5cdf [TimeDiff] Clean up timeDiff() function and add ICACHE_RAM_ATTR
So the function can be called from ISR functions.
2019-05-21 22:54:20 +02:00
TD-er cad8583565 [Energy] Add Eco mode, wifi none sleep and gratuitous ARP
Eco mode will call delay() from scheduler during idle loops. (significant energy reduction of up-to 0.25 Watt)
WiFi_NONE_SLEEP will keep wifi on continously (max energy consumption)
Gratuitous ARP will be sent to keep the MAC tables in switches know about the MAC of the ESP node.

The interval for sending ARP messages is dynamic. The interval between these ARP's is increasing up-to 60 seconds interval, so we're not flooding the network.
But on some occasions this interval time is reset to 100 msec (and doubled each next interval step), so we're announcing ourselves a bit more often.

Known issue:
- WiFi always on does seem to miss some packets (unstable RF due to heat?)
- UDP packets sent for ESPeasy p2p do seem to be missed more often as soon as the power consumption of the node is actually reducing.
- Eco mode may take some time to actually reduce power consumption of the node. It is like the underlying core library is dynamically increasing/decreasing the power consumption of the node.  (core 2.6.0, SDK2.2.1)
2019-03-02 01:46:59 +01:00
TD-er 9961080510 [Energy] Call delay from scheduler during idle time
This will reduce the loop counter and even cause some inverse effect. Higher loop count means the node has more work to do (less scheduled tasks which are not yet due for work)

Initial tests show a significant lower power consumption and thus hopefully a more stable wifi connection.
The average used delay during idle calls can be seen in the timing stats (likely around 2.5 msec per idle loop)
The CPU load (in %) is still the same as before this patch, but the node feels a bit more 'snappy' and the extremes in the timing stats are lower.
2019-03-01 01:10:19 +01:00
Gijs Noorlander 98c4905827 Revert GPIO, prepare for easier merge later GPIO fixes
This commit is to cherry-pick all fixes in the reverted commits to make future GPIO related fixes be as easy as possible.
These also contain small fixes which were in the reverted commits, but not really related to the issues for which this revert is meant.
2018-12-13 17:20:46 +01:00
Gijs Noorlander c298c5a457 Revert "[GPIO] GPIO commands with long duration will be stopped async."
This reverts commit 0c0db4f401.
2018-12-13 17:19:48 +01:00
Gijs Noorlander 3bcfb5b0f5 Revert "[GPIO] Add some checks to what GPIO pin can be used."
This reverts commit 77b283197d.
2018-12-13 17:19:13 +01:00
Gijs Noorlander 0c0db4f401 [GPIO] GPIO commands with long duration will be stopped async.
Implemented a GPIO timer for the scheduler to schedule a GPIO state change.

These will be stopped async:

- Tone > 50 msec duration
- Longpulse and longpulse_ms

Also implemented a frequency parameter for the `pwm` command.
2018-12-04 22:38:17 +01:00
Gijs Noorlander 77b283197d [GPIO] Add some checks to what GPIO pin can be used.
Not all pins should be used.
For example GPIO 6 - 11 are often connected to flash and thus not usable.
2018-12-04 22:38:17 +01:00
Saverio Cisternino a35c3051df [CRON] Replace timeStruct with standard tm 2018-10-26 09:51:41 +02:00
TD-er f0ff52b76b [WDT] Change yield() to delay(0)
`delay(0)` is a special case of delay, which also calls the system scheduler, `yield()` does not call.
It may interrupt a bit more than `yield()` 

See #1950
2018-10-24 13:25:36 +02:00
TD-er 1c73cacc82 [Scheduler] Rename some functions and clean-up 2018-08-04 01:34:02 +02:00
TD-er 3d5f612ac9 [Scheduler] Call yield() when idle
This makes the ESP do a lot more background tasks, which makes each yield() call shorter on average.
This makes the ESP feel more snappy.
2018-07-22 02:53:49 +02:00
TD-er 447e958e74 [#1592] Remove systemCMDTimers
These timers were not used.
2018-07-20 21:52:49 +02:00
TD-er 04b631e4c9 [#1591] Move system timers to main scheduler
And fix longpulse command

With other plugins active, like the OLED Framed, the set period of `longpulse_ms` may fluctuate and durations below 100 msec are quite useless.

However, when running just a few sensors, the set pulse width is quite accurate.

Must still check a few other plugins.
2018-07-20 02:17:00 +02:00
TD-er b2212d2edb [Scheduler] Complete rewrite of time based scheduling
All scheduled operations are now handled by a time scheduler.
Also the CPU load is now based entirely on the idle time found by this scheduler.
2018-07-15 20:21:37 +02:00
TD-er 02a065d623 [Build ESP32] Fix for build issues between ESP32 and ESP8266
There is a problem with the PlatformIO builder since the last update of @mvdbro
It's an issue with the parsing of `#ifdef ESP32`.

It is very well explained here: [platformio/platformio-core#801 (comment)](https://github.com/platformio/platformio-core/issues/801#issuecomment-252447178)

In short, the event handling functions for the wifi have been moved to a separate .h file, since those files will be parsed properly by the Library Dependency Finder (LDF) in PlatformIO 3.x
2018-03-31 00:22:12 +02:00
Unknown 573fd0f320 [Travis error] Some #include test that wasn't meant to be included
... in the commit.
2018-03-18 21:08:22 +01:00
Unknown 4fa5203c5b [Relaxed WiFi] Perform WiFi initialization in steps
Doing WiFi initialization in multiple steps, will reduce boot time a lot.
For deepsleep the Setup is waiting for wifi initialization to complete, but for normal use the wifi connection is initiated during setup and checked on regular intervals to see if it is available.
The same for WiFi reconnect, which will hopefully not affect the performance of the ESP module during reconnects.

Also added a check + event when connected to another accesspoint with different BSSID (MAC address of accesspoint). Also the last used BSSID is used to reconnect to try to connect to the same device over and over, which may be useful with WiFi repeaters.
2018-03-18 20:54:27 +01:00
Unknown a222391f81 [issue #1057] AM PM display issue
X:XX PM (for hours 1...9)
X:XX AM (for hours 1...9)
XX:XX PM (for hours 10...12)
XX:XX AM (for hours 10...12)

Added for H:MM (without seconds) notations:
- `%systm_hm%`
-`%systm_hm_am%`
2018-03-15 23:43:14 +01:00
Gijs Noorlander 6b8ea6c15b [issue #727] Proper user interface to set DST rules (#823)
See #727
And it only took 4 bytes extra storage :)

When initialized with an invalid setting for DST, (like fresh after flashing), it will use the CEST/CET setting.
2018-02-06 00:42:45 +01:00
Gijs Noorlander a73875a2e2 [AutoDST] Added Auto DST (Bugfix/v2.0 issue569) (#726)
* [Time] Moved time related code to separate file

* [AutoDST] Added Auto DST

Preliminary support for Auto DST, as requested in #569
Also did a little refactorin of time related code, with #698 in mind.
All time related code is split into a few files based on its function.

The currently selected DST will start on Last Sunday March 2am and end on Last Sunday October 3am.
This is the most frequently used DST, according to https://en.wikipedia.org/wiki/Daylight_saving_time_by_country

To change it, currently the code has to be changed in the function applyTimeZone(). Several examples are given right below that function.
Problem is where to store the information of the timezone, how to use it in the web interface and how convenient it is to set by hand.
The UTC offset in minutes still has to be entered and whether or not DST should be enabled.
2018-01-15 21:51:15 +01:00