- Add ::Released button event to be used specifically with switches, opposite of ::Pressed
- Always use default state for switches instead of ignoring it and using current pin reading as value. This allows us to boot with the switch held in the opposite state and trigger the correct event immediately
(meaning, switches now depend on the BUTTON_DEFAULT_HIGH presence to detect the default position)
- BREAKING: Fixup hardware.h. Any custom board needs manual changes.
- BREAKING: Rework MQTT button messages to send text from debug messages instead of numeric code
- Buttons events source as button property instead of a global one
- Rename events source -> provider for all settings, consistent with the other things like relay and light providers
- AnalogPin to read between a certain analogRead() range
Trying to follow defaults here - analog 'press' is digital LOW, default value is HIGH, so no additional cfg entries are needed besides pin, level and changing evt source
- (debug) Refactor gpio command, add adc to show analogRead(pin)
- (debug) Add button command
Implemented based on:
https://gitter.im/tinkerman-cat/espurna?at=5f5d44c8df4af236f902e25dhttps://gitter.im/tinkerman-cat/espurna?at=5f60e7f1f969413294e95370
Change the underlying command line handling:
- switch to a custom parser, inspired by redis / sds
- update terminalRegisterCommand signature, pass only bare minimum
- clean-up `help` & `commands`. update settings `set`, `get` and `del`
- allow our custom test suite to run command-line tests
- clean-up Stream IO to allow us to print large things into debug stream (for example, `eeprom.dump`)
- send parsing errors to the debug log
As a proof of concept, introduce `TERMINAL_MQTT_SUPPORT` and `TERMINAL_WEB_API_SUPPORT`
- MQTT subscribes to the `<root>/cmd/set` and sends response to the `<root>/cmd`. We can't output too much, as we don't have any large-send API.
- Web API listens to the `/api/cmd?apikey=...&line=...` (or PUT, params inside the body). This one is intended as a possible replacement of the `API_SUPPORT`. Internals introduce a 'task' around the AsyncWebServerRequest object that will simulate what WiFiClient does and push data into it continuously, switching between CONT and SYS.
Both are experimental. We only accept a single command and not every command is updated to use Print `ctx.output` object. We are also somewhat limited by the Print / Stream overall, perhaps I am overestimating the usefulness of Arduino compatibility to such an extent :)
Web API handler can also sometimes show only part of the result, whenever the command tries to yield() by itself waiting for something. Perhaps we would need to create a custom request handler for that specific use-case.
- general conversion from .ino modules into a separate .cpp files
- clean-up internal headers, place libraries into .h. guard .cpp with _SUPPORT flags
- fix some instances of shared variables instead of public methods
- tweak build system to still build a single source file via os environment variable ESPURNA_BUILD_SINGLE_SOURCE
* ntp: try using sntp app from lwip, drop ntpclientlib
* fix display
* thermostat: fix day and month getters
* test build sizes with scheduler
* use system timers for once-a-minute scheduling, no polling
* tick
* avoid timestamps, use tm
* drop utc rpn operator, add utc_hour and utc_dow
* try to build with old implementation too
* dep
* notify ws
* progmem
* cleanup types
* offset tm values by 1 to match existing schedules
* avoid using ntpclientlib with rpn
* test. show debug strings in sch
* fix secureclient
* consts, fix unsyncing when changing tz (and not triggering sntp after reinit for some reason)
* startup time in seconds
* same delay as lwip
* header
* assume build timestamp is unixtime
* cache server value
* fmt
* typo
* handle dhcp request
* rename
* web
* TZ.h
* add notice about what alias means
* fix disabling NTP_SUPPORT
* scheduled ticker
* same behaviour as old module
* rollback rpn dependency check, utc_ prefixes
* ...
* comments, refactor naming
* debug: store boot log
* order
* roll single header
* hide when not implemented
* fix capacity check
* dependencies
* refactor names, can just use malloc
* settings formatting
* dbgBuf prefix
* show size
* release memory after buffer is displayed
* fix uptime unused warning, combine printer
* comments
* use arg flag instead of static to handle boot
* ci test fix
* Hide whole info() without debug
* typo
* cleanup setDebugOutput condition
* webui: improve updater error message
* ota: properly check updater state and finalize on errors
* finish up ota handling refactor
* fail web upgrade when cannot find magic byte
* send updater status with no payload arg and always send payload with
* mention magic byte and flash mode in webui
* gzip magic
* make async ota at least usable. timeouts, show errors, try harder to find data after headers
* simplify setup and destruction
* cleanup class instantiations for ota and url
* handle default case of magicflashchipsize
* shorter
* blobs
* Use generic typechecks, OTA add followRedirects
* revamp using is_detected
* relative include
* mention ts draft instead, fix c++17 includes (still not buildable)
* typo
* Always create WiFiClient pointer
* Remove old CREATE_CHECK macro
* do not create wificlient obj when running old Core
* Core 2.6.0+ fixes
* fix env -> config, run travis04 job
* don't duplicate free heap in frag data, use single stats struct
* fix dtostrf warnings, bump buffer sizes
* ...and even less words for fragmentation stat
- update every dynamicjsonbuffer with fixed size constructor argument
- change to ws callback registration to use a class builder (just cosmetic)
- test multiple ws data callbacks for each module
- remove some of the static strings in favour of ws data callback
- improve sensor ws callback data size, remove duplicated strings
- use static buffer in wsDebugSend
- postpone wsSend until loop, implement wsPost to allow other modules to queue message callbacks. remove Ticker based ws callbacks for data
- update WebUI files
- add httpupdate ota impelementation
- move async ota into a separate module
- support bearssl & axtls through wificlientsecure
- allow to disable arduino ide ota module
* Update encoder
- import modified Encoder library
- customize minimum delta value
* minimum delta in header config
* fixup! minimum delta in header config
* fix dead code, actually use interrupts
* move static class methods to normal funcs, apply namespace
* drop hardcoded register use
- use peripheral api (see cores/esp8266/esp8266_peri.h)
- remove bitmask and register struct members
* add a note about changes
* fixup! add a note about changes
- chain debugSend_P into basic _debugSend instead of duplicating code, pass va_list between them
- check if new[] call was successful
- when possible, use stack buffer and fallback to heap buffer only when it is more that 64 chars
* debug: heap fragmentation stat
* Rework method detection
- return check integral type as a result of detection instead of method type
- type-tagging instead of enable_if
* fix alias
* typo
* only need one bool_type instance
* Move heap debug into HeapStats header
- don't show fragmentation stats on the first call
- prettify fragmentation display
- pack function params into helper struct
- naming
* pass external flag instead
* add missing prototypes
- wrapper NTPClient class to avoid inadvertently calling NTP::getTime() while
setting things up
- only call NTP::getTime() when in loop(), install async TimeLib
sync provider and manually set TimeLib time
- randomize sync and delay times