Merge pull request #7454 from s-hadinger/IRremote_272

Update IRremoteESP8266 lib updated to v2.7.2
This commit is contained in:
Theo Arends 2020-01-06 18:11:40 +01:00 committed by GitHub
commit 4dda48e0ac
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
240 changed files with 1182 additions and 118 deletions

View File

@ -1,15 +0,0 @@
// Copyright 2017 David Conran
// Supports:
// Brand: LG, Model: 6711A20083V remote
// Brand: LG, Model: AKB74395308 remote
#ifndef IR_LG_H_
#define IR_LG_H_
#define __STDC_LIMIT_MACROS
#include <stdint.h>
uint8_t calcLGChecksum(uint16_t data);
#endif // IR_LG_H_

View File

@ -9,8 +9,8 @@
This library enables you to **send _and_ receive** infra-red signals on an [ESP8266](https://github.com/esp8266/Arduino) or an This library enables you to **send _and_ receive** infra-red signals on an [ESP8266](https://github.com/esp8266/Arduino) or an
[ESP32](https://github.com/espressif/arduino-esp32) using the [Arduino framework](https://www.arduino.cc/) using common 940nm IR LEDs and common IR receiver modules. e.g. TSOP{17,22,24,36,38,44,48}* demodulators etc. [ESP32](https://github.com/espressif/arduino-esp32) using the [Arduino framework](https://www.arduino.cc/) using common 940nm IR LEDs and common IR receiver modules. e.g. TSOP{17,22,24,36,38,44,48}* demodulators etc.
## v2.7.1 Now Available ## v2.7.2 Now Available
Version 2.7.1 of the library is now [available](https://github.com/crankyoldgit/IRremoteESP8266/releases/latest). You can view the [Release Notes](ReleaseNotes.md) for all the significant changes. Version 2.7.2 of the library is now [available](https://github.com/crankyoldgit/IRremoteESP8266/releases/latest). You can view the [Release Notes](ReleaseNotes.md) for all the significant changes.
#### Upgrading from pre-v2.0 #### Upgrading from pre-v2.0
Usage of the library has been slightly changed in v2.0. You will need to change your usage to work with v2.0 and beyond. You can read more about the changes required on our [Upgrade to v2.0](https://github.com/crankyoldgit/IRremoteESP8266/wiki/Upgrading-to-v2.0) page. Usage of the library has been slightly changed in v2.0. You will need to change your usage to work with v2.0 and beyond. You can read more about the changes required on our [Upgrade to v2.0](https://github.com/crankyoldgit/IRremoteESP8266/wiki/Upgrading-to-v2.0) page.

View File

@ -9,8 +9,8 @@
Cette librairie vous permetra de **recevoir et d'envoyer des signaux** infrarouge sur le protocole [ESP8266](https://github.com/esp8266/Arduino) ou sur le protocole Cette librairie vous permetra de **recevoir et d'envoyer des signaux** infrarouge sur le protocole [ESP8266](https://github.com/esp8266/Arduino) ou sur le protocole
[ESP32](https://github.com/espressif/arduino-esp32) en utilisant le [Arduino framework](https://www.arduino.cc/) qui utilise la norme 940nm IR LEDs et le module basique de reception d'onde IR. Exemple : TSOP{17,22,24,36,38,44,48}* modules etc. [ESP32](https://github.com/espressif/arduino-esp32) en utilisant le [Arduino framework](https://www.arduino.cc/) qui utilise la norme 940nm IR LEDs et le module basique de reception d'onde IR. Exemple : TSOP{17,22,24,36,38,44,48}* modules etc.
## v2.7.1 disponible ## v2.7.2 disponible
Version 2.7.1 de la libraire est maintenant [disponible](https://github.com/crankyoldgit/IRremoteESP8266/releases/latest). Vous pouvez voir le [Release Notes](ReleaseNotes.md) pour tous les changements importants. Version 2.7.2 de la libraire est maintenant [disponible](https://github.com/crankyoldgit/IRremoteESP8266/releases/latest). Vous pouvez voir le [Release Notes](ReleaseNotes.md) pour tous les changements importants.
#### mise à jour depuis pre-v2.0 #### mise à jour depuis pre-v2.0
L'utilisation de la librairie à un peu changer depuis la version in v2.0. Si vous voulez l'utiliser vous devrez changer votre utilisation aussi. Vous pouvez vous renseigner sur les précondition d'utilisation ici : [Upgrade to v2.0](https://github.com/crankyoldgit/IRremoteESP8266/wiki/Upgrading-to-v2.0) page. L'utilisation de la librairie à un peu changer depuis la version in v2.0. Si vous voulez l'utiliser vous devrez changer votre utilisation aussi. Vous pouvez vous renseigner sur les précondition d'utilisation ici : [Upgrade to v2.0](https://github.com/crankyoldgit/IRremoteESP8266/wiki/Upgrading-to-v2.0) page.

View File

@ -1,5 +1,18 @@
# Release Notes # Release Notes
## _v2.7.2 (20200106)_
**[Bug Fixes]**
- Common AC api: Better handle protocols with power toggles. (#1002)
**[Features]**
- Experimental detailed support for LG a/c. (#1008 #1009)
**[Misc]**
- Add remote codes for Aloka LED lamp. (#1005)
- Improve Supported Devices scraping. (#1006)
## _v2.7.1 (20191125)_ ## _v2.7.1 (20191125)_
**[Bug Fixes]** **[Bug Fixes]**

View File

@ -1,6 +1,6 @@
<!--- WARNING: Do NOT edit this file directly. <!--- WARNING: Do NOT edit this file directly.
It is generated by './tools/scrape_supported_devices.py'. It is generated by './tools/scrape_supported_devices.py'.
Last generated: Mon Nov 25 11:12:06 2019 ---> Last generated: Sun Jan 5 15:53:26 2020 --->
# IR Protocols supported by this library # IR Protocols supported by this library
| Protocol | Brand | Model | A/C Model | Detailed A/C Support | | Protocol | Brand | Model | A/C Model | Detailed A/C Support |
@ -31,19 +31,21 @@
| [JVC](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_JVC.cpp) | **Unknown** | | | - | | [JVC](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_JVC.cpp) | **Unknown** | | | - |
| [Kelvinator](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Kelvinator.cpp) | **[Green](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Kelvinator.h)** | YAPOF3 remote | | Yes | | [Kelvinator](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Kelvinator.cpp) | **[Green](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Kelvinator.h)** | YAPOF3 remote | | Yes |
| [Kelvinator](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Kelvinator.cpp) | **[Kelvinator](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Kelvinator.h)** | KSV26CRC A/C<BR>KSV26HRC A/C<BR>KSV35CRC A/C<BR>KSV35HRC A/C<BR>KSV53HRC A/C<BR>KSV62HRC A/C<BR>KSV70CRC A/C<BR>KSV70HRC A/C<BR>KSV80HRC A/C<BR>YALIF Remote | | Yes | | [Kelvinator](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Kelvinator.cpp) | **[Kelvinator](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Kelvinator.h)** | KSV26CRC A/C<BR>KSV26HRC A/C<BR>KSV35CRC A/C<BR>KSV35HRC A/C<BR>KSV53HRC A/C<BR>KSV62HRC A/C<BR>KSV70CRC A/C<BR>KSV70HRC A/C<BR>KSV80HRC A/C<BR>YALIF Remote | | Yes |
| [LG](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_LG.cpp) | **[LG](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_LG.h)** | 6711A20083V remote<BR>6711A20083V remote<BR>AKB74395308 remote<BR>AKB74395308 remote | | Yes | | [LG](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_LG.cpp) | **[General Electric](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_LG.h)** | 6711AR2853M A/C Remote<BR>AG1BH09AW101 Split A/C | | Yes |
| [LG](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_LG.cpp) | **[LG](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_LG.h)** | 6711A20083V remote<BR>6711A20083V remote<BR>AKB74395308 remote<BR>AKB74395308 remote<BR>AKB75215403 remote (LG2)<BR>S4-W12JA3AA A/C (LG2) | | Yes |
| [Lasertag](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Lasertag.cpp) | **Unknown** | | | - | | [Lasertag](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Lasertag.cpp) | **Unknown** | | | - |
| [Lego](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Lego.cpp) | **LEGO Power Functions** | IR Receiver | | - | | [Lego](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Lego.cpp) | **LEGO Power Functions** | IR Receiver | | - |
| [Lutron](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Lutron.cpp) | **Unknown** | | | - | | [Lutron](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Lutron.cpp) | **Unknown** | | | - |
| [MWM](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_MWM.cpp) | **Unknown** | | | - | | [MWM](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_MWM.cpp) | **Unknown** | | | - |
| [Magiquest](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Magiquest.cpp) | **[Unknown](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Magiquest.h)** | | | Yes | | [Magiquest](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Magiquest.cpp) | **[Unknown](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Magiquest.h)** | | | - |
| [Midea](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Midea.cpp) | **[Comfee](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Midea.h)** | MPD1-12CRN7 A/C | | Yes | | [Midea](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Midea.cpp) | **[Comfee](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Midea.h)** | MPD1-12CRN7 A/C | | Yes |
| [Midea](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Midea.cpp) | **[Keystone](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Midea.h)** | RG57H4(B)BGEF remote | | Yes | | [Midea](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Midea.cpp) | **[Keystone](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Midea.h)** | RG57H4(B)BGEF remote | | Yes |
| [Midea](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Midea.cpp) | **[Pioneer System](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Midea.h)** | RUBO18GMFILCAD A/C (18K BTU)<BR>RYBO12GMFILCAD A/C (12K BTU) | | Yes | | [Midea](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Midea.cpp) | **[Pioneer System](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Midea.h)** | RUBO18GMFILCAD A/C (18K BTU)<BR>RYBO12GMFILCAD A/C (12K BTU) | | Yes |
| [Mitsubishi](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Mitsubishi.cpp) | **[Mitsubishi](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Mitsubishi.h)** | HC3000 Projector<BR>KM14A 0179213 remote<BR>MS-GK24VA A/C<BR>TV | | Yes | | [Mitsubishi](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Mitsubishi.cpp) | **[Mitsubishi](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Mitsubishi.h)** | HC3000 Projector<BR>KM14A 0179213 remote<BR>MS-GK24VA A/C<BR>TV | | Yes |
| [Mitsubishi](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Mitsubishi.cpp) | **[Mitsubishi Electric](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Mitsubishi.h)** | 001CP T7WE10714 remote<BR>KPOA remote<BR>MSH-A24WV / MUH-A24WV A/C<BR>PEAD-RP71JAA Ducted A/C | | Yes | | [Mitsubishi](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Mitsubishi.cpp) | **[Mitsubishi Electric](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Mitsubishi.h)** | 001CP T7WE10714 remote<BR>KPOA remote<BR>MSH-A24WV / MUH-A24WV A/C<BR>PEAD-RP71JAA Ducted A/C | | Yes |
| [MitsubishiHeavy](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_MitsubishiHeavy.cpp) | **[Mitsubishi Heavy Industries](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_MitsubishiHeavy.h)** | RKX502A001C remote<BR>RLA502A700B remote<BR>SRKxxZJ-S A/C<BR>SRKxxZM-S A/C<BR>SRKxxZMXA-S A/C | | Yes | | [MitsubishiHeavy](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_MitsubishiHeavy.cpp) | **[Mitsubishi Heavy Industries](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_MitsubishiHeavy.h)** | RKX502A001C remote<BR>RLA502A700B remote<BR>SRKxxZJ-S A/C<BR>SRKxxZM-S A/C<BR>SRKxxZMXA-S A/C | | Yes |
| [NEC](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_NEC.cpp) | **[Yamaha](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_NEC.h)** | RAV561 remote<BR>RXV585B A/V Receiver | | Yes | | [NEC](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_NEC.cpp) | **[Aloka](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_NEC.h)** | SleepyLights LED Lamp | | - |
| [NEC](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_NEC.cpp) | **[Yamaha](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_NEC.h)** | RAV561 remote<BR>RXV585B A/V Receiver | | - |
| [Neoclima](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Neoclima.cpp) | **[Neoclima](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Neoclima.h)** | NS-09AHTI A/C<BR>NS-09AHTI A/C<BR>ZH/TY-01 remote<BR>ZH/TY-01 remote | | Yes | | [Neoclima](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Neoclima.cpp) | **[Neoclima](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Neoclima.h)** | NS-09AHTI A/C<BR>NS-09AHTI A/C<BR>ZH/TY-01 remote<BR>ZH/TY-01 remote | | Yes |
| [Nikai](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Nikai.cpp) | **Unknown** | | | - | | [Nikai](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Nikai.cpp) | **Unknown** | | | - |
| [Panasonic](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Panasonic.cpp) | **[Panasonic](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Panasonic.h)** | A75C2311 remote (CKP)<BR>A75C3704 remote<BR>A75C3747 remote<BR>A75C3747 remote<BR>A75C3747 remote<BR>A75C3747 remote<BR>CKP series A/C<BR>CS-ME10CKPG A/C<BR>CS-ME12CKPG A/C<BR>CS-ME14CKPG A/C<BR>CS-YW9MKD A/C<BR>CS-Z9RKR A/C<BR>DKE series A/C<BR>JKE series A/C<BR>NKE series A/C<BR>RKR series A/C<BR>TV | | Yes | | [Panasonic](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Panasonic.cpp) | **[Panasonic](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Panasonic.h)** | A75C2311 remote (CKP)<BR>A75C3704 remote<BR>A75C3747 remote<BR>A75C3747 remote<BR>A75C3747 remote<BR>A75C3747 remote<BR>CKP series A/C<BR>CS-ME10CKPG A/C<BR>CS-ME12CKPG A/C<BR>CS-ME14CKPG A/C<BR>CS-YW9MKD A/C<BR>CS-Z9RKR A/C<BR>DKE series A/C<BR>JKE series A/C<BR>NKE series A/C<BR>RKR series A/C<BR>TV | | Yes |

View File

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

View File

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

@ -39,6 +39,7 @@ IRHaierACYRW02 KEYWORD1
IRHitachiAc KEYWORD1 IRHitachiAc KEYWORD1
IRHitachiAc424 KEYWORD1 IRHitachiAc424 KEYWORD1
IRKelvinatorAC KEYWORD1 IRKelvinatorAC KEYWORD1
IRLgAc KEYWORD1
IRMideaAC KEYWORD1 IRMideaAC KEYWORD1
IRMitsubishi112 KEYWORD1 IRMitsubishi112 KEYWORD1
IRMitsubishi136 KEYWORD1 IRMitsubishi136 KEYWORD1
@ -66,6 +67,7 @@ fanspeed_t KEYWORD1
fujitsu_ac_remote_model_t KEYWORD1 fujitsu_ac_remote_model_t KEYWORD1
gree_ac_remote_model_t KEYWORD1 gree_ac_remote_model_t KEYWORD1
irparams_t KEYWORD1 irparams_t KEYWORD1
lg_ac_remote_model_t KEYWORD1
match_result_t KEYWORD1 match_result_t KEYWORD1
opmode_t KEYWORD1 opmode_t KEYWORD1
panasonic_ac_remote_model_t KEYWORD1 panasonic_ac_remote_model_t KEYWORD1
@ -346,9 +348,11 @@ isSwingVToggle KEYWORD2
isTimeCommand KEYWORD2 isTimeCommand KEYWORD2
isTimerActive KEYWORD2 isTimerActive KEYWORD2
isTimerEnabled KEYWORD2 isTimerEnabled KEYWORD2
isValidLgAc KEYWORD2
kelvinator KEYWORD2 kelvinator KEYWORD2
ledOff KEYWORD2 ledOff KEYWORD2
ledOn KEYWORD2 ledOn KEYWORD2
lg KEYWORD2
mark KEYWORD2 mark KEYWORD2
match KEYWORD2 match KEYWORD2
matchAtLeast KEYWORD2 matchAtLeast KEYWORD2
@ -590,6 +594,7 @@ xorBytes KEYWORD2
// LITERAL1 // LITERAL1
AIWA_RC_T501 LITERAL1 AIWA_RC_T501 LITERAL1
AIWA_RC_T501_BITS LITERAL1 AIWA_RC_T501_BITS LITERAL1
AKB75215403 LITERAL1
ALLOW_DELAY_CALLS LITERAL1 ALLOW_DELAY_CALLS LITERAL1
AMCOR LITERAL1 AMCOR LITERAL1
ARDB1 LITERAL1 ARDB1 LITERAL1
@ -748,6 +753,7 @@ FUJITSU_AC_SWING_BOTH LITERAL1
FUJITSU_AC_SWING_HORIZ LITERAL1 FUJITSU_AC_SWING_HORIZ LITERAL1
FUJITSU_AC_SWING_OFF LITERAL1 FUJITSU_AC_SWING_OFF LITERAL1
FUJITSU_AC_SWING_VERT LITERAL1 FUJITSU_AC_SWING_VERT LITERAL1
GE6711AR2853M LITERAL1
GICABLE LITERAL1 GICABLE LITERAL1
GICABLE_BITS LITERAL1 GICABLE_BITS LITERAL1
GLOBALCACHE LITERAL1 GLOBALCACHE LITERAL1
@ -1063,6 +1069,22 @@ kAiwaRcT501PostBits LITERAL1
kAiwaRcT501PostData LITERAL1 kAiwaRcT501PostData LITERAL1
kAiwaRcT501PreBits LITERAL1 kAiwaRcT501PreBits LITERAL1
kAiwaRcT501PreData LITERAL1 kAiwaRcT501PreData LITERAL1
kAlokaBits LITERAL1
kAlokaLedBlue LITERAL1
kAlokaLedGreen LITERAL1
kAlokaLedLightGreen LITERAL1
kAlokaLedMidBlue LITERAL1
kAlokaLedOrange LITERAL1
kAlokaLedPink LITERAL1
kAlokaLedPinkRed LITERAL1
kAlokaLedRainbow LITERAL1
kAlokaLedRed LITERAL1
kAlokaLedTreeGrow LITERAL1
kAlokaLedWhite LITERAL1
kAlokaLedYellow LITERAL1
kAlokaNightFade LITERAL1
kAlokaNightTimer LITERAL1
kAlokaPower LITERAL1
kAmcorAuto LITERAL1 kAmcorAuto LITERAL1
kAmcorBits LITERAL1 kAmcorBits LITERAL1
kAmcorChecksumByte LITERAL1 kAmcorChecksumByte LITERAL1
@ -2094,9 +2116,38 @@ kLg32HdrSpace LITERAL1
kLg32HdrSpaceTicks LITERAL1 kLg32HdrSpaceTicks LITERAL1
kLg32RptHdrMark LITERAL1 kLg32RptHdrMark LITERAL1
kLg32RptHdrMarkTicks LITERAL1 kLg32RptHdrMarkTicks LITERAL1
kLgAcAuto LITERAL1
kLgAcChecksumOffset LITERAL1
kLgAcChecksumSize LITERAL1
kLgAcCool LITERAL1
kLgAcDry LITERAL1
kLgAcFan LITERAL1
kLgAcFanAuto LITERAL1
kLgAcFanHigh LITERAL1
kLgAcFanLow LITERAL1
kLgAcFanMedium LITERAL1
kLgAcFanOffset LITERAL1
kLgAcFanSize LITERAL1
kLgAcHeat LITERAL1
kLgAcMaxTemp LITERAL1
kLgAcMinTemp LITERAL1
kLgAcModeOffset LITERAL1
kLgAcModeSize LITERAL1
kLgAcOffCommand LITERAL1
kLgAcPowerOff LITERAL1
kLgAcPowerOffset LITERAL1
kLgAcPowerOn LITERAL1
kLgAcPowerSize LITERAL1
kLgAcSignature LITERAL1
kLgAcSignatureOffset LITERAL1
kLgAcSignatureSize LITERAL1
kLgAcTempAdjust LITERAL1
kLgAcTempOffset LITERAL1
kLgAcTempSize LITERAL1
kLgBitMark LITERAL1 kLgBitMark LITERAL1
kLgBitMarkTicks LITERAL1 kLgBitMarkTicks LITERAL1
kLgBits LITERAL1 kLgBits LITERAL1
kLgDefaultRepeat LITERAL1
kLgHdrMark LITERAL1 kLgHdrMark LITERAL1
kLgHdrMarkTicks LITERAL1 kLgHdrMarkTicks LITERAL1
kLgHdrSpace LITERAL1 kLgHdrSpace LITERAL1

View File

@ -1,6 +1,6 @@
{ {
"name": "IRremoteESP8266", "name": "IRremoteESP8266",
"version": "2.7.1", "version": "2.7.2",
"keywords": "infrared, ir, remote, esp8266, esp32", "keywords": "infrared, ir, remote, esp8266, esp32",
"description": "Send and receive infrared signals with multiple protocols (ESP8266/ESP32)", "description": "Send and receive infrared signals with multiple protocols (ESP8266/ESP32)",
"repository": "repository":

View File

@ -1,5 +1,5 @@
name=IRremoteESP8266 name=IRremoteESP8266
version=2.7.1 version=2.7.2
author=David Conran, Sebastien Warin, Mark Szabo, Ken Shirriff author=David Conran, Sebastien Warin, Mark Szabo, Ken Shirriff
maintainer=Mark Szabo, David Conran, Sebastien Warin, Roi Dayan, Massimiliano Pinto maintainer=Mark Szabo, David Conran, Sebastien Warin, Roi Dayan, Massimiliano Pinto
sentence=Send and receive infrared signals with multiple protocols (ESP8266/ESP32) sentence=Send and receive infrared signals with multiple protocols (ESP8266/ESP32)

View File

@ -25,6 +25,7 @@
#include "ir_Haier.h" #include "ir_Haier.h"
#include "ir_Hitachi.h" #include "ir_Hitachi.h"
#include "ir_Kelvinator.h" #include "ir_Kelvinator.h"
#include "ir_LG.h"
#include "ir_Midea.h" #include "ir_Midea.h"
#include "ir_Mitsubishi.h" #include "ir_Mitsubishi.h"
#include "ir_MitsubishiHeavy.h" #include "ir_MitsubishiHeavy.h"
@ -149,6 +150,10 @@ bool IRac::isProtocolSupported(const decode_type_t protocol) {
#if SEND_KELVINATOR #if SEND_KELVINATOR
case decode_type_t::KELVINATOR: case decode_type_t::KELVINATOR:
#endif #endif
#if SEND_LG
case decode_type_t::LG:
case decode_type_t::LG2:
#endif
#if SEND_MIDEA #if SEND_MIDEA
case decode_type_t::MIDEA: case decode_type_t::MIDEA:
#endif #endif
@ -719,6 +724,30 @@ void IRac::kelvinator(IRKelvinatorAC *ac,
} }
#endif // SEND_KELVINATOR #endif // SEND_KELVINATOR
#if SEND_LG
void IRac::lg(IRLgAc *ac, const lg_ac_remote_model_t model,
const bool on, const stdAc::opmode_t mode,
const float degrees, const stdAc::fanspeed_t fan) {
ac->begin();
ac->setModel(model);
ac->setPower(on);
ac->setMode(ac->convertMode(mode));
ac->setTemp(degrees);
ac->setFan(ac->convertFan(fan));
// No Vertical swing setting available.
// No Horizontal swing setting available.
// No Quiet setting available.
// No Turbo setting available.
// No Light setting available.
// No Filter setting available.
// No Clean setting available.
// No Beep setting available.
// No Sleep setting available.
// No Clock setting available.
ac->send();
}
#endif // SEND_LG
#if SEND_MIDEA #if SEND_MIDEA
void IRac::midea(IRMideaAC *ac, void IRac::midea(IRMideaAC *ac,
const bool on, const stdAc::opmode_t mode, const bool celsius, const bool on, const stdAc::opmode_t mode, const bool celsius,
@ -1144,6 +1173,20 @@ void IRac::whirlpool(IRWhirlpoolAc *ac, const whirlpool_ac_remote_model_t model,
} }
#endif // SEND_WHIRLPOOL_AC #endif // SEND_WHIRLPOOL_AC
// Create a new state base on the provided state that has been suitably fixed.
// Args:
// state: The state_t structure describing the desired a/c state.
//
// Returns:
// A stdAc::state_t with the needed settings.
stdAc::state_t IRac::cleanState(const stdAc::state_t state) {
stdAc::state_t result = state;
// A hack for Home Assistant, it appears to need/want an Off opmode.
// So enforce the power is off if the mode is also off.
if (state.mode == stdAc::opmode_t::kOff) result.power = false;
return result;
}
// Create a new state base on desired & previous states but handle // Create a new state base on desired & previous states but handle
// any state changes for options that need to be toggled. // any state changes for options that need to be toggled.
// Args: // Args:
@ -1244,23 +1287,18 @@ bool IRac::sendAc(const decode_type_t vendor, const int16_t model,
// Returns: // Returns:
// boolean: True, if accepted/converted/attempted. False, if unsupported. // boolean: True, if accepted/converted/attempted. False, if unsupported.
bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) { bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
stdAc::state_t send = this->handleToggles(desired, prev); // Convert the temp from Fahrenheit to Celsius if we are not in Celsius mode.
// Convert the temperature to Celsius. float degC = desired.celsius ? desired.degrees
float degC; : fahrenheitToCelsius(desired.degrees);
if (desired.celsius) // special `state_t` that is required to be sent based on that.
degC = send.degrees; stdAc::state_t send = this->handleToggles(this->cleanState(desired), prev);
else
degC = fahrenheitToCelsius(desired.degrees);
bool on = desired.power;
// A hack for Home Assistant, it appears to need/want an Off opmode.
if (desired.mode == stdAc::opmode_t::kOff) on = false;
// Per vendor settings & setup. // Per vendor settings & setup.
switch (send.protocol) { switch (send.protocol) {
#if SEND_AMCOR #if SEND_AMCOR
case AMCOR: case AMCOR:
{ {
IRAmcorAc ac(_pin, _inverted, _modulation); IRAmcorAc ac(_pin, _inverted, _modulation);
amcor(&ac, on, send.mode, degC, send.fanspeed); amcor(&ac, send.power, send.mode, degC, send.fanspeed);
break; break;
} }
#endif // SEND_AMCOR #endif // SEND_AMCOR
@ -1268,8 +1306,8 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
case ARGO: case ARGO:
{ {
IRArgoAC ac(_pin, _inverted, _modulation); IRArgoAC ac(_pin, _inverted, _modulation);
argo(&ac, on, send.mode, degC, send.fanspeed, send.swingv, send.turbo, argo(&ac, send.power, send.mode, degC, send.fanspeed, send.swingv,
send.sleep); send.turbo, send.sleep);
break; break;
} }
#endif // SEND_ARGO #endif // SEND_ARGO
@ -1277,8 +1315,8 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
case COOLIX: case COOLIX:
{ {
IRCoolixAC ac(_pin, _inverted, _modulation); IRCoolixAC ac(_pin, _inverted, _modulation);
coolix(&ac, on, send.mode, degC, send.fanspeed, send.swingv, send.swingh, coolix(&ac, send.power, send.mode, degC, send.fanspeed, send.swingv,
send.turbo, send.light, send.clean, send.sleep); send.swingh, send.turbo, send.light, send.clean, send.sleep);
break; break;
} }
#endif // SEND_COOLIX #endif // SEND_COOLIX
@ -1286,8 +1324,8 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
case DAIKIN: case DAIKIN:
{ {
IRDaikinESP ac(_pin, _inverted, _modulation); IRDaikinESP ac(_pin, _inverted, _modulation);
daikin(&ac, on, send.mode, degC, send.fanspeed, send.swingv, send.swingh, daikin(&ac, send.power, send.mode, degC, send.fanspeed, send.swingv,
send.quiet, send.turbo, send.econo, send.clean); send.swingh, send.quiet, send.turbo, send.econo, send.clean);
break; break;
} }
#endif // SEND_DAIKIN #endif // SEND_DAIKIN
@ -1295,7 +1333,7 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
case DAIKIN128: case DAIKIN128:
{ {
IRDaikin128 ac(_pin, _inverted, _modulation); IRDaikin128 ac(_pin, _inverted, _modulation);
daikin128(&ac, on, send.mode, degC, send.fanspeed, send.swingv, daikin128(&ac, send.power, send.mode, degC, send.fanspeed, send.swingv,
send.quiet, send.turbo, send.light, send.econo, send.sleep, send.quiet, send.turbo, send.light, send.econo, send.sleep,
send.clock); send.clock);
break; break;
@ -1305,7 +1343,7 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
case DAIKIN152: case DAIKIN152:
{ {
IRDaikin152 ac(_pin, _inverted, _modulation); IRDaikin152 ac(_pin, _inverted, _modulation);
daikin152(&ac, on, send.mode, degC, send.fanspeed, send.swingv, daikin152(&ac, send.power, send.mode, degC, send.fanspeed, send.swingv,
send.quiet, send.turbo, send.econo); send.quiet, send.turbo, send.econo);
break; break;
} }
@ -1314,7 +1352,7 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
case DAIKIN160: case DAIKIN160:
{ {
IRDaikin160 ac(_pin, _inverted, _modulation); IRDaikin160 ac(_pin, _inverted, _modulation);
daikin160(&ac, on, send.mode, degC, send.fanspeed, send.swingv); daikin160(&ac, send.power, send.mode, degC, send.fanspeed, send.swingv);
break; break;
} }
#endif // SEND_DAIKIN160 #endif // SEND_DAIKIN160
@ -1322,7 +1360,7 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
case DAIKIN176: case DAIKIN176:
{ {
IRDaikin176 ac(_pin, _inverted, _modulation); IRDaikin176 ac(_pin, _inverted, _modulation);
daikin176(&ac, on, send.mode, degC, send.fanspeed, send.swingh); daikin176(&ac, send.power, send.mode, degC, send.fanspeed, send.swingh);
break; break;
} }
#endif // SEND_DAIKIN176 #endif // SEND_DAIKIN176
@ -1330,9 +1368,9 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
case DAIKIN2: case DAIKIN2:
{ {
IRDaikin2 ac(_pin, _inverted, _modulation); IRDaikin2 ac(_pin, _inverted, _modulation);
daikin2(&ac, on, send.mode, degC, send.fanspeed, send.swingv, send.swingh, daikin2(&ac, send.power, send.mode, degC, send.fanspeed, send.swingv,
send.quiet, send.turbo, send.light, send.econo, send.filter, send.swingh, send.quiet, send.turbo, send.light, send.econo,
send.clean, send.beep, send.sleep, send.clock); send.filter, send.clean, send.beep, send.sleep, send.clock);
break; break;
} }
#endif // SEND_DAIKIN2 #endif // SEND_DAIKIN2
@ -1340,7 +1378,7 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
case DAIKIN216: case DAIKIN216:
{ {
IRDaikin216 ac(_pin, _inverted, _modulation); IRDaikin216 ac(_pin, _inverted, _modulation);
daikin216(&ac, on, send.mode, degC, send.fanspeed, send.swingv, daikin216(&ac, send.power, send.mode, degC, send.fanspeed, send.swingv,
send.swingh, send.quiet, send.turbo); send.swingh, send.quiet, send.turbo);
break; break;
} }
@ -1349,7 +1387,7 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
case ELECTRA_AC: case ELECTRA_AC:
{ {
IRElectraAc ac(_pin, _inverted, _modulation); IRElectraAc ac(_pin, _inverted, _modulation);
electra(&ac, on, send.mode, degC, send.fanspeed, send.swingv, electra(&ac, send.power, send.mode, degC, send.fanspeed, send.swingv,
send.swingh); send.swingh);
break; break;
} }
@ -1359,9 +1397,9 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
{ {
IRFujitsuAC ac(_pin, (fujitsu_ac_remote_model_t)send.model, _inverted, IRFujitsuAC ac(_pin, (fujitsu_ac_remote_model_t)send.model, _inverted,
_modulation); _modulation);
fujitsu(&ac, (fujitsu_ac_remote_model_t)send.model, on, send.mode, degC, fujitsu(&ac, (fujitsu_ac_remote_model_t)send.model, send.power, send.mode,
send.fanspeed, send.swingv, send.swingh, send.quiet, send.turbo, degC, send.fanspeed, send.swingv, send.swingh, send.quiet,
send.econo, send.filter, send.clean); send.turbo, send.econo, send.filter, send.clean);
break; break;
} }
#endif // SEND_FUJITSU_AC #endif // SEND_FUJITSU_AC
@ -1369,7 +1407,7 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
case GOODWEATHER: case GOODWEATHER:
{ {
IRGoodweatherAc ac(_pin, _inverted, _modulation); IRGoodweatherAc ac(_pin, _inverted, _modulation);
goodweather(&ac, on, send.mode, degC, send.fanspeed, send.swingv, goodweather(&ac, send.power, send.mode, degC, send.fanspeed, send.swingv,
send.turbo, send.light, send.sleep); send.turbo, send.light, send.sleep);
break; break;
} }
@ -1379,7 +1417,7 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
{ {
IRGreeAC ac(_pin, (gree_ac_remote_model_t)send.model, _inverted, IRGreeAC ac(_pin, (gree_ac_remote_model_t)send.model, _inverted,
_modulation); _modulation);
gree(&ac, (gree_ac_remote_model_t)send.model, on, send.mode, degC, gree(&ac, (gree_ac_remote_model_t)send.model, send.power, send.mode, degC,
send.fanspeed, send.swingv, send.turbo, send.light, send.clean, send.fanspeed, send.swingv, send.turbo, send.light, send.clean,
send.sleep); send.sleep);
break; break;
@ -1389,8 +1427,8 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
case HAIER_AC: case HAIER_AC:
{ {
IRHaierAC ac(_pin, _inverted, _modulation); IRHaierAC ac(_pin, _inverted, _modulation);
haier(&ac, on, send.mode, degC, send.fanspeed, send.swingv, send.filter, haier(&ac, send.power, send.mode, degC, send.fanspeed, send.swingv,
send.sleep, send.clock); send.filter, send.sleep, send.clock);
break; break;
} }
#endif // SEND_HAIER_AC #endif // SEND_HAIER_AC
@ -1398,7 +1436,7 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
case HAIER_AC_YRW02: case HAIER_AC_YRW02:
{ {
IRHaierACYRW02 ac(_pin, _inverted, _modulation); IRHaierACYRW02 ac(_pin, _inverted, _modulation);
haierYrwo2(&ac, on, send.mode, degC, send.fanspeed, send.swingv, haierYrwo2(&ac, send.power, send.mode, degC, send.fanspeed, send.swingv,
send.turbo, send.filter, send.sleep); send.turbo, send.filter, send.sleep);
break; break;
} }
@ -1407,7 +1445,7 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
case HITACHI_AC: case HITACHI_AC:
{ {
IRHitachiAc ac(_pin, _inverted, _modulation); IRHitachiAc ac(_pin, _inverted, _modulation);
hitachi(&ac, on, send.mode, degC, send.fanspeed, send.swingv, hitachi(&ac, send.power, send.mode, degC, send.fanspeed, send.swingv,
send.swingh); send.swingh);
break; break;
} }
@ -1416,7 +1454,7 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
case HITACHI_AC424: case HITACHI_AC424:
{ {
IRHitachiAc424 ac(_pin, _inverted, _modulation); IRHitachiAc424 ac(_pin, _inverted, _modulation);
hitachi424(&ac, on, send.mode, degC, send.fanspeed, send.swingv); hitachi424(&ac, send.power, send.mode, degC, send.fanspeed, send.swingv);
break; break;
} }
#endif // SEND_HITACHI_AC424 #endif // SEND_HITACHI_AC424
@ -1424,18 +1462,28 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
case KELVINATOR: case KELVINATOR:
{ {
IRKelvinatorAC ac(_pin, _inverted, _modulation); IRKelvinatorAC ac(_pin, _inverted, _modulation);
kelvinator(&ac, on, send.mode, degC, send.fanspeed, send.swingv, kelvinator(&ac, send.power, send.mode, degC, send.fanspeed, send.swingv,
send.swingh, send.quiet, send.turbo, send.light, send.filter, send.swingh, send.quiet, send.turbo, send.light, send.filter,
send.clean); send.clean);
break; break;
} }
#endif // SEND_KELVINATOR #endif // SEND_KELVINATOR
#if SEND_LG
case LG:
case LG2:
{
IRLgAc ac(_pin, _inverted, _modulation);
lg(&ac, (lg_ac_remote_model_t)send.model, send.power, send.mode,
send.degrees, send.fanspeed);
break;
}
#endif // SEND_LG
#if SEND_MIDEA #if SEND_MIDEA
case MIDEA: case MIDEA:
{ {
IRMideaAC ac(_pin, _inverted, _modulation); IRMideaAC ac(_pin, _inverted, _modulation);
midea(&ac, on, send.mode, send.celsius, send.degrees, send.fanspeed, midea(&ac, send.power, send.mode, send.celsius, send.degrees,
send.swingv, send.sleep); send.fanspeed, send.swingv, send.sleep);
break; break;
} }
#endif // SEND_MIDEA #endif // SEND_MIDEA
@ -1443,7 +1491,7 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
case MITSUBISHI_AC: case MITSUBISHI_AC:
{ {
IRMitsubishiAC ac(_pin, _inverted, _modulation); IRMitsubishiAC ac(_pin, _inverted, _modulation);
mitsubishi(&ac, on, send.mode, degC, send.fanspeed, send.swingv, mitsubishi(&ac, send.power, send.mode, degC, send.fanspeed, send.swingv,
send.swingh, send.quiet, send.clock); send.swingh, send.quiet, send.clock);
break; break;
} }
@ -1452,8 +1500,8 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
case MITSUBISHI112: case MITSUBISHI112:
{ {
IRMitsubishi112 ac(_pin, _inverted, _modulation); IRMitsubishi112 ac(_pin, _inverted, _modulation);
mitsubishi112(&ac, on, send.mode, degC, send.fanspeed, send.swingv, mitsubishi112(&ac, send.power, send.mode, degC, send.fanspeed,
send.swingh, send.quiet); send.swingv, send.swingh, send.quiet);
break; break;
} }
#endif // SEND_MITSUBISHI112 #endif // SEND_MITSUBISHI112
@ -1461,8 +1509,8 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
case MITSUBISHI136: case MITSUBISHI136:
{ {
IRMitsubishi136 ac(_pin, _inverted, _modulation); IRMitsubishi136 ac(_pin, _inverted, _modulation);
mitsubishi136(&ac, on, send.mode, degC, send.fanspeed, send.swingv, mitsubishi136(&ac, send.power, send.mode, degC, send.fanspeed,
send.quiet); send.swingv, send.quiet);
break; break;
} }
#endif // SEND_MITSUBISHI136 #endif // SEND_MITSUBISHI136
@ -1470,16 +1518,17 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
case MITSUBISHI_HEAVY_88: case MITSUBISHI_HEAVY_88:
{ {
IRMitsubishiHeavy88Ac ac(_pin, _inverted, _modulation); IRMitsubishiHeavy88Ac ac(_pin, _inverted, _modulation);
mitsubishiHeavy88(&ac, on, send.mode, degC, send.fanspeed, send.swingv, mitsubishiHeavy88(&ac, send.power, send.mode, degC, send.fanspeed,
send.swingh, send.turbo, send.econo, send.clean); send.swingv, send.swingh, send.turbo, send.econo,
send.clean);
break; break;
} }
case MITSUBISHI_HEAVY_152: case MITSUBISHI_HEAVY_152:
{ {
IRMitsubishiHeavy152Ac ac(_pin, _inverted, _modulation); IRMitsubishiHeavy152Ac ac(_pin, _inverted, _modulation);
mitsubishiHeavy152(&ac, on, send.mode, degC, send.fanspeed, send.swingv, mitsubishiHeavy152(&ac, send.power, send.mode, degC, send.fanspeed,
send.swingh, send.quiet, send.turbo, send.econo, send.swingv, send.swingh, send.quiet, send.turbo,
send.filter, send.clean, send.sleep); send.econo, send.filter, send.clean, send.sleep);
break; break;
} }
#endif // SEND_MITSUBISHIHEAVY #endif // SEND_MITSUBISHIHEAVY
@ -1487,7 +1536,7 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
case NEOCLIMA: case NEOCLIMA:
{ {
IRNeoclimaAc ac(_pin, _inverted, _modulation); IRNeoclimaAc ac(_pin, _inverted, _modulation);
neoclima(&ac, on, send.mode, degC, send.fanspeed, send.swingv, neoclima(&ac, send.power, send.mode, degC, send.fanspeed, send.swingv,
send.swingh, send.turbo, send.light, send.filter, send.sleep); send.swingh, send.turbo, send.light, send.filter, send.sleep);
break; break;
} }
@ -1496,9 +1545,9 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
case PANASONIC_AC: case PANASONIC_AC:
{ {
IRPanasonicAc ac(_pin, _inverted, _modulation); IRPanasonicAc ac(_pin, _inverted, _modulation);
panasonic(&ac, (panasonic_ac_remote_model_t)send.model, on, send.mode, panasonic(&ac, (panasonic_ac_remote_model_t)send.model, send.power,
degC, send.fanspeed, send.swingv, send.swingh, send.quiet, send.mode, degC, send.fanspeed, send.swingv, send.swingh,
send.turbo, send.clock); send.quiet, send.turbo, send.clock);
break; break;
} }
#endif // SEND_PANASONIC_AC #endif // SEND_PANASONIC_AC
@ -1506,8 +1555,8 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
case SAMSUNG_AC: case SAMSUNG_AC:
{ {
IRSamsungAc ac(_pin, _inverted, _modulation); IRSamsungAc ac(_pin, _inverted, _modulation);
samsung(&ac, on, send.mode, degC, send.fanspeed, send.swingv, send.quiet, samsung(&ac, send.power, send.mode, degC, send.fanspeed, send.swingv,
send.turbo, send.clean, send.beep, prev->power); send.quiet, send.turbo, send.clean, send.beep, prev->power);
break; break;
} }
#endif // SEND_SAMSUNG_AC #endif // SEND_SAMSUNG_AC
@ -1515,7 +1564,7 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
case SHARP_AC: case SHARP_AC:
{ {
IRSharpAc ac(_pin, _inverted, _modulation); IRSharpAc ac(_pin, _inverted, _modulation);
sharp(&ac, on, send.mode, degC, send.fanspeed); sharp(&ac, send.power, send.mode, degC, send.fanspeed);
break; break;
} }
#endif // SEND_SHARP_AC #endif // SEND_SHARP_AC
@ -1523,8 +1572,8 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
case TCL112AC: case TCL112AC:
{ {
IRTcl112Ac ac(_pin, _inverted, _modulation); IRTcl112Ac ac(_pin, _inverted, _modulation);
tcl112(&ac, on, send.mode, degC, send.fanspeed, send.swingv, send.swingh, tcl112(&ac, send.power, send.mode, degC, send.fanspeed, send.swingv,
send.turbo, send.light, send.econo, send.filter); send.swingh, send.turbo, send.light, send.econo, send.filter);
break; break;
} }
#endif // SEND_TCL112AC #endif // SEND_TCL112AC
@ -1532,8 +1581,8 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
case TECO: case TECO:
{ {
IRTecoAc ac(_pin, _inverted, _modulation); IRTecoAc ac(_pin, _inverted, _modulation);
teco(&ac, on, send.mode, degC, send.fanspeed, send.swingv, send.light, teco(&ac, send.power, send.mode, degC, send.fanspeed, send.swingv,
send.sleep); send.light, send.sleep);
break; break;
} }
#endif // SEND_TECO #endif // SEND_TECO
@ -1541,7 +1590,7 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
case TOSHIBA_AC: case TOSHIBA_AC:
{ {
IRToshibaAC ac(_pin, _inverted, _modulation); IRToshibaAC ac(_pin, _inverted, _modulation);
toshiba(&ac, on, send.mode, degC, send.fanspeed); toshiba(&ac, send.power, send.mode, degC, send.fanspeed);
break; break;
} }
#endif // SEND_TOSHIBA_AC #endif // SEND_TOSHIBA_AC
@ -1549,7 +1598,7 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
case TROTEC: case TROTEC:
{ {
IRTrotecESP ac(_pin, _inverted, _modulation); IRTrotecESP ac(_pin, _inverted, _modulation);
trotec(&ac, on, send.mode, degC, send.fanspeed, send.sleep); trotec(&ac, send.power, send.mode, degC, send.fanspeed, send.sleep);
break; break;
} }
#endif // SEND_TROTEC #endif // SEND_TROTEC
@ -1557,8 +1606,8 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
case VESTEL_AC: case VESTEL_AC:
{ {
IRVestelAc ac(_pin, _inverted, _modulation); IRVestelAc ac(_pin, _inverted, _modulation);
vestel(&ac, on, send.mode, degC, send.fanspeed, send.swingv, send.turbo, vestel(&ac, send.power, send.mode, degC, send.fanspeed, send.swingv,
send.filter, send.sleep, send.clock); send.turbo, send.filter, send.sleep, send.clock);
break; break;
} }
#endif // SEND_VESTEL_AC #endif // SEND_VESTEL_AC
@ -1566,9 +1615,9 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
case WHIRLPOOL_AC: case WHIRLPOOL_AC:
{ {
IRWhirlpoolAc ac(_pin, _inverted, _modulation); IRWhirlpoolAc ac(_pin, _inverted, _modulation);
whirlpool(&ac, (whirlpool_ac_remote_model_t)send.model, on, send.mode, whirlpool(&ac, (whirlpool_ac_remote_model_t)send.model, send.power,
degC, send.fanspeed, send.swingv, send.turbo, send.light, send.mode, degC, send.fanspeed, send.swingv, send.turbo,
send.sleep, send.clock); send.light, send.sleep, send.clock);
break; break;
} }
#endif // SEND_WHIRLPOOL_AC #endif // SEND_WHIRLPOOL_AC
@ -2129,6 +2178,21 @@ namespace IRAcUtils {
return ac.toString(); return ac.toString();
} }
#endif // DECODE_TCL112AC #endif // DECODE_TCL112AC
#if DECODE_LG
case decode_type_t::LG:
case decode_type_t::LG2: {
IRLgAc ac(0);
ac.setRaw(result->value); // Like Coolix, use value instead of state.
switch (result->decode_type) {
case decode_type_t::LG2:
ac.setModel(lg_ac_remote_model_t::AKB75215403);
break;
default:
ac.setModel(lg_ac_remote_model_t::GE6711AR2853M);
}
return ac.isValidLgAc() ? ac.toString() : "";
}
#endif // DECODE_LG
default: default:
return ""; return "";
} }
@ -2299,6 +2363,23 @@ namespace IRAcUtils {
break; break;
} }
#endif // DECODE_KELVINATOR #endif // DECODE_KELVINATOR
#if DECODE_LG
case decode_type_t::LG:
case decode_type_t::LG2: {
IRLgAc ac(kGpioUnused);
ac.setRaw(decode->value); // Uses value instead of state.
if (!ac.isValidLgAc()) return false;
switch (decode->decode_type) {
case decode_type_t::LG2:
ac.setModel(lg_ac_remote_model_t::AKB75215403);
break;
default:
ac.setModel(lg_ac_remote_model_t::GE6711AR2853M);
}
*result = ac.toCommon();
break;
}
#endif // DECODE_LG
#if DECODE_MIDEA #if DECODE_MIDEA
case decode_type_t::MIDEA: { case decode_type_t::MIDEA: {
IRMideaAC ac(kGpioUnused); IRMideaAC ac(kGpioUnused);

View File

@ -18,6 +18,7 @@
#include "ir_Haier.h" #include "ir_Haier.h"
#include "ir_Hitachi.h" #include "ir_Hitachi.h"
#include "ir_Kelvinator.h" #include "ir_Kelvinator.h"
#include "ir_LG.h"
#include "ir_Midea.h" #include "ir_Midea.h"
#include "ir_Mitsubishi.h" #include "ir_Mitsubishi.h"
#include "ir_MitsubishiHeavy.h" #include "ir_MitsubishiHeavy.h"
@ -230,6 +231,11 @@ void electra(IRElectraAc *ac,
const bool quiet, const bool turbo, const bool light, const bool quiet, const bool turbo, const bool light,
const bool filter, const bool clean); const bool filter, const bool clean);
#endif // SEND_KELVINATOR #endif // SEND_KELVINATOR
#if SEND_LG
void lg(IRLgAc *ac, const lg_ac_remote_model_t model,
const bool on, const stdAc::opmode_t mode,
const float degrees, const stdAc::fanspeed_t fan);
#endif // SEND_LG
#if SEND_MIDEA #if SEND_MIDEA
void midea(IRMideaAC *ac, void midea(IRMideaAC *ac,
const bool on, const stdAc::opmode_t mode, const bool celsius, const bool on, const stdAc::opmode_t mode, const bool celsius,
@ -340,6 +346,7 @@ void electra(IRElectraAc *ac,
const bool turbo, const bool light, const bool turbo, const bool light,
const int16_t sleep = -1, const int16_t clock = -1); const int16_t sleep = -1, const int16_t clock = -1);
#endif // SEND_WHIRLPOOL_AC #endif // SEND_WHIRLPOOL_AC
static stdAc::state_t cleanState(const stdAc::state_t state);
static stdAc::state_t handleToggles(const stdAc::state_t desired, static stdAc::state_t handleToggles(const stdAc::state_t desired,
const stdAc::state_t *prev = NULL); const stdAc::state_t *prev = NULL);
}; // IRac class }; // IRac class

View File

@ -52,7 +52,7 @@
#endif // UNIT_TEST #endif // UNIT_TEST
// Library Version // Library Version
#define _IRREMOTEESP8266_VERSION_ "2.7.1" #define _IRREMOTEESP8266_VERSION_ "2.7.2"
// Set the language & locale for the library. See the `locale` dir for options. // Set the language & locale for the library. See the `locale` dir for options.
#ifndef _IR_LOCALE_ #ifndef _IR_LOCALE_
@ -588,6 +588,7 @@ const uint16_t kSingleRepeat = 1;
const uint16_t kAiwaRcT501Bits = 15; const uint16_t kAiwaRcT501Bits = 15;
const uint16_t kAiwaRcT501MinRepeats = kSingleRepeat; const uint16_t kAiwaRcT501MinRepeats = kSingleRepeat;
const uint16_t kAlokaBits = 32;
const uint16_t kAmcorStateLength = 8; const uint16_t kAmcorStateLength = 8;
const uint16_t kAmcorBits = kAmcorStateLength * 8; const uint16_t kAmcorBits = kAmcorStateLength * 8;
const uint16_t kAmcorDefaultRepeat = kSingleRepeat; const uint16_t kAmcorDefaultRepeat = kSingleRepeat;
@ -668,6 +669,7 @@ const uint16_t kLegoPfBits = 16;
const uint16_t kLegoPfMinRepeat = kNoRepeat; const uint16_t kLegoPfMinRepeat = kNoRepeat;
const uint16_t kLgBits = 28; const uint16_t kLgBits = 28;
const uint16_t kLg32Bits = 32; const uint16_t kLg32Bits = 32;
const uint16_t kLgDefaultRepeat = kNoRepeat;
const uint16_t kLutronBits = 35; const uint16_t kLutronBits = 35;
const uint16_t kMagiquestBits = 56; const uint16_t kMagiquestBits = 56;
const uint16_t kMideaBits = 48; const uint16_t kMideaBits = 48;

View File

@ -141,6 +141,11 @@ enum whirlpool_ac_remote_model_t {
DG11J191, DG11J191,
}; };
enum lg_ac_remote_model_t {
GE6711AR2853M = 1, // (1) LG 28-bit Protocol (default)
AKB75215403, // (2) LG2 28-bit Protocol
};
// Classes // Classes
class IRsend { class IRsend {

View File

@ -824,13 +824,6 @@ namespace irutils {
String modelToStr(const decode_type_t protocol, const int16_t model) { String modelToStr(const decode_type_t protocol, const int16_t model) {
switch (protocol) { switch (protocol) {
case decode_type_t::GREE:
switch (model) {
case gree_ac_remote_model_t::YAW1F: return F("YAW1F");
case gree_ac_remote_model_t::YBOFB: return F("YBOFB");
default: return kUnknownStr;
}
break;
case decode_type_t::FUJITSU_AC: case decode_type_t::FUJITSU_AC:
switch (model) { switch (model) {
case fujitsu_ac_remote_model_t::ARRAH2E: return F("ARRAH2E"); case fujitsu_ac_remote_model_t::ARRAH2E: return F("ARRAH2E");
@ -841,6 +834,21 @@ namespace irutils {
default: return kUnknownStr; default: return kUnknownStr;
} }
break; break;
case decode_type_t::GREE:
switch (model) {
case gree_ac_remote_model_t::YAW1F: return F("YAW1F");
case gree_ac_remote_model_t::YBOFB: return F("YBOFB");
default: return kUnknownStr;
}
break;
case decode_type_t::LG:
case decode_type_t::LG2:
switch (model) {
case lg_ac_remote_model_t::GE6711AR2853M: return F("GE6711AR2853M");
case lg_ac_remote_model_t::AKB75215403: return F("AKB75215403");
default: return kUnknownStr;
}
break;
case decode_type_t::PANASONIC_AC: case decode_type_t::PANASONIC_AC:
switch (model) { switch (model) {
case panasonic_ac_remote_model_t::kPanasonicLke: return F("LKE"); case panasonic_ac_remote_model_t::kPanasonicLke: return F("LKE");

Some files were not shown because too many files have changed in this diff Show More