* Optimize testing
During the need to run all test cases defined during development of eg a new protocol is not necessary, minimize test execution time and make it easier to see results from specific test cases within test file.
Co-authored-by: Tom Rosenback <tom@carputec.com>
Note: Tool is used internally by library developers to automatically generate documentation prior to a release and to warn when files are missing the required documentation.
* Update Regex used to eliminate potential denial of service.
- Deemed a Low severity & impact threat.
- Does NOT require or necessitate a new version/release of the library.
- The tool is only used after review of code/PR etc which would already be very suspicious.
- The tool is not something a user would typically use or run. (i.e. Internal use only)
- Very unlikely to be exploited as the tool is not typically automatically run.
- Expected worse case scenario would be the Continuous Integration tests failing due to a timeout, or a Developer losing some CPU time if they didn't notice a malicious PR/commit. (It would be very very obvious)
- Remediation tested using supplied Proof of Concept code. i.e. Guaranteed Sub mSecond CPU use instead of exponential CPU use.
- Addressed all other regex as a precaution as well via sensible range limitations.
* Documented the Regex used via `re.VERBOSE` and made easier to read/follow.
* Simplified some of the Regex.
Fixes#1616
Thanks to @srikanthprathi for reporting the issue & providing POC via the Huntr.Dev team.
Thanks to Huntr.Dev team for bring the issue to our attention. (Kudos to @zidingz, @JamieSlome)
Ref: https://huntr.dev/bounties/4da00a75-50dc-458b-acc6-cc216e1c854a/
* Add two outputs for Fan mode.
Use a nicer & more obvious human mode by default, & a special output which is expected for Home Assistant + Google Home.
* Unit tests
* Pretty up some of the switch statements.
Replaces PR #1612
Try to fix a bucket load of pylint issues.
A new version of pylint seems to warn us about:
`C0209: Formatting a regular string which could be a f-string (consider-using-f-string)`
Try to address as many as we can.
* Add `model` support for `TCL112AC` protocol.
* Hack `TEKNOPOINT` decoding to use `TCL112AC` model `GZ055BE1`
* Change Vertical Swing to have multiple positions.
* Add On & Off timer support.
* Add "Night" (aka. Quiet/min fan speed)
* Plenty of Unit Test additions, updates, & improvements.
Fixes#1486
* Add `sendArris()` & `decodeArris()`.
- Uses Manchester Encoding.
- Checksum validation on decode.
- provide release status (via `address`) and the likely `command`.
* Add helper routines:
- `toggleArrisRelease()` for changing mesg status between a press & a release of a button.
- `encodeArris()` to construct a valid ARRIS mesg from a `command` and a `release` status.
* Add & update unit tests.
* Add the ability to set Vertical Swing positions via `setSwingV()`
- e.g. Coanda setting.
* Modify `setSwingV()` to take an optional parameter to override the heat mode check.
* Enable forcing of Coanda mode in Cool.
- Several other undocumented positions discovered via experimentation.
- May not work on all models.
* Update & add unit tests accordingly.
Fixes#1590
## _v2.7.20 (20210828)_
**[Bug Fixes]**
- Make `strToSwingH()` match "Right Max" (#1550#1551)
**[Features]**
- Experimental Bose remote support (#1579)
- Added MitsubishiAC VaneLeft (#1572#1576)
- HAIER_AC176: Add experimental detailed support (#1480#1571)
- Detailed support for Tornado/Sanyo 88-bit A/C protocol (#1503#1568)
- Add support for new `TROTEC_3550` A/C protocol (#1563#1566#1507)
- SamsungAc: Use `sendExtended()` going forward. (#1484#1562)
- SamsungAc: Redo/fix checksum calculations. (#1538#1554)
- LG: Add support for `AKB73757604` model (#1531#1545)
- Daikin176: Add support for Unit Id. (#1543#1544)
- Daikin2: Add support for Humidity setting/operation. (#1535#1540)
- TCL112AC: Add support for quiet/mute setting. (#1528#1529)
- LG2: Add Fan speed, Swing, & Light support for new `AKB74955603` model (#1513#1530)
- Add Mitsubishi AC "fan only" mode (#1527)
**[Misc]**
- Change when some github workflows run (#1583)
- Add/update supported device info (#1580#1581#1585)
- Fix pylint issues due to pylint update. (#1569#1570)
- DAIKIN216: Update supported models. (#1552#1567)
- IRMQTTServer: Build a minimal OTA image via PlatformIO. (#1513#1541)
- Reduce memory fragmentation cause by String usage. (#1493#1536)
- Refactor `decodeMitsubishiAC()` (#1523#1532)
- Fix incorrect comment.
- Migrate from Travis to GitHub Actions (#1522#1526)
- Documentation update with additional supported Panasonic AC models (#1525)
* `IRHaierACYRW02` inherits from the new `IRHaierAC176`.
- Except for a few functions that need to be special.
* Add `[sg]et(On|Off)Timer()` & `[sg]etTimerMode()` class methods.
* Update `toString()`.
* Add timer specific unit tests.
* Update existing Unit Tests.
* Add it to the Common A/C API (`IRac`)
* Expand & update the unit tests.
Fixes#1480
* As the `checksum()` calculation for extended states has been fixed in #1554, use `sendExtended()` to calculate & send the extended state instead of the `sendOn()` & `sendOff()`.
- This should allow for custom off messages. e.g. clean.
- It should also reduce the number of messages sent, and the beeps generated by the A/C on receiving the message.
- And make the intended transaction quicker.
* Update/adjust unit tests accordingly.
* Refactored `sendExtended()`
- Use `memcpy()`.
- Use less stack space / memory.
For #1484
* Refactor & Fix checksum calcs so it works per section & thus with extended states.
* Add additional unit tests checking the section calcs.
* Uncomment the failing unit test as it now works and is explained.
- Mark TODO as done.
* Cleanup code style & elements in `ir_Samsung_test.cpp`.
Huge kudos to @thermseekr for explaining the algorithm.
Fixes#1538
* Add `IRDaikin176:setId()` & `IRDaikin176:getId()` for dealing with Unit Identifiers.
* Add "Id:" to `.toString()` output.
* Add unit test coverage for that, and update existing tests.
* Misc code style cleanups.
Fixes#1543
* Allow some flags to be set by compiler flags.
* Fix an issue when all protocols are disabled.
* Upgrade from deprecated build flag `-Wl,-Teagle.flash.1m64.ld` to `board_build.ldscript`
For #1513
* Allow setting known humidity percentages via `setHumidity()` & `getHumidity()`
* Report the setting correctly in `toString().
* Enforce it being available only in Heat & Dry Modes.
* Change temp to Max when it's in operation.
* Misc code style cleanups.
* Update unit tests, and add coverage for new features.
* Update supported models.
Fixes#1535
* Changes required to handle quiet setting, which is sent in a separate special message.
* Modify checksum alg. for these special messages.
* Add `IRac` support for quiet for TCL112
* Add & update unit tests.
* Update supported models
* General code style cleanups.
Fixes#1528
* Use standard code methods to decode it rather than spaghetti.
* Remove Unit Test cases that tried to match bad data. We are just going to ignore bad signals from now on.
* Ensure repeated messages are identical.
* Do the message compliance tests earlier so if it isn't a valid message we can quit earlier.
Fixes#1523
* Create new `AKB74955603` LG/LG2 model.
* Add support for different fan speed values for the `AKB74955603` model.
* Tweak `IRLgAc::setRaw()` to accept an optional protocol parameter.
* Improve model detection code & unit tests.
* Improve fan speed text output handling.
* Add support for SwingV & Light settings.
- Because a normal message turns the light on, we can treat it not as a toggle in most cases.
* Misc cleanup and code improvements.
* Unit tests coverage and improvement.
* Update supported devices info.
Fixes#1513
This PR adds "fan only" mode for Mitsubishi AC units. I noticed that it was missing previously and always defaulted to "Auto" instead.
The IR code for this was captured from the remote that came with my indoor unit (Mitsubishi MSZ-SF25VE) and the resulting change to the library has been real-world tested with that device as well. I can't say if it will apply to all Mitsubishi AC units, as I only have this type available for testing.
The commits mostly just add the kMitsubishiAcFan constant and raw bitfield data.
Adds functionality to set the mode of Mitsubishi air conditioners to "fan only". Tested with MSZ-SF25VE indoor units.
* Regenerate Doxygen documentation
* v2.7.19 release
_v2.7.19 (20210706)_
**[Bug Fixes]**
- Illegal Heap write in rawbuf when the capture has overflowed. (#1516#1517)
- PANASONIC_AC: Fix Low and High fan speeds (#1515)
- Fix MDNS in IRServer and IRMQTTServer example code (#1498#1499)
- IRac: Fix off-by-one error in Coolix's sleep setting. (#1500)
- Fix undefined constant (#1490)
**[Features]**
- Add detailed support for Kelon ACs (#1494)
- Experimental basic support for Teknopoint A/C protocol (#1486#1504)
- Daikin64: Add support for Heat mode (#1492)
- Basic support for `HAIER_AC176` 176 bit protocol. (#1480#1481)
**[Misc]**
- GREE: Update inter-message gap timing (#1508#1509)
- IRac: Change Coolix to send special messages after a normal message. (#1501#1502)
- Fix compiler warnings causing Travis failures. (#1491)
- Update supported model info (#1477#1485#1488#1489)
- Add HTML viewport meta tag to IRServer and IRMQTTServer examples (#1467#1469)
* Fix an issue where we write past the end of the capture buffer when it is full. Two options to fix this:
1. Extend all capture buffers by 1 entry. i.e. upto 4 bytes of extra unused heap and some FLASH/PROGMEM bytes. _or_
2. Skip the memory write when we have overflowed. i.e. Possibly slightly more than 4 bytes of FLASH/PROGMEM used.
- CPU overhead should be about the same.
- Given heap & memory is a more critical resource than Flash/PROGMEM, opting for Option 2.
* Add a helper method `IRrecv::_getParamsPtr` to access `params` in Unit tests.
* Unit tests so we can be sure it is fixed, and it doesn't happen again.
Kudos to @davepl for reporting the issue and diagnosing the offending line of code.
Fixes#1516
* Add Fan low and high speeds to setFan
* Adjust unit tests accordingly.
* Fixes a regression introduced in #934
Co-authored-by: David Conran <crankyoldgit@users.noreply.github.com>
* Detailed support for new Kelon A/C protocol.
* CommonAC api updated.
* Unit tests coverage added.
* Extensive user testing with actual device. Confirmed working.
* Add support for printing `int64_t`s.
* Allow converting signed ints to string.
* Add @Depau to Contributors,