Merge branch 'development' into release
1
.gitignore
vendored
@ -13,6 +13,7 @@ build
|
||||
firmware.map
|
||||
firmware.asm
|
||||
tasmota*.bin
|
||||
tasmota*.bin.gz
|
||||
tasmota*.map
|
||||
platformio_override.ini
|
||||
|
||||
|
@ -1,3 +1,3 @@
|
||||
tasks:
|
||||
- before: pip install -U platformio
|
||||
- before: pip3 install -U platformio
|
||||
command: platformio run -e tasmota
|
||||
|
@ -4,7 +4,7 @@ python:
|
||||
sudo: false
|
||||
install:
|
||||
- pip install -U platformio
|
||||
- platformio upgrade
|
||||
- platformio upgrade --dev
|
||||
- platformio update
|
||||
|
||||
cache: false
|
||||
@ -32,6 +32,7 @@ env:
|
||||
- ENV=tasmota-NL
|
||||
- ENV=tasmota-PL
|
||||
- ENV=tasmota-PT
|
||||
- ENV=tasmota-RO
|
||||
- ENV=tasmota-RU
|
||||
- ENV=tasmota-SE
|
||||
- ENV=tasmota-SK
|
||||
|
2
API.md
@ -25,7 +25,7 @@ FUNC_EVERY_250_MSECOND | | 1 | 3 | 2 | |
|
||||
FUNC_EVERY_SECOND | | 1 | 2 | | |
|
||||
FUNC_SAVE_AT_MIDNIGHT | | | x | | | At midnight
|
||||
FUNC_SAVE_BEFORE_RESTART | | 2 | 1 | | | Just before a planned restart
|
||||
FUNC_AFTER_TELEPERIOD | | x | | | | At end of teleperiod
|
||||
FUNC_AFTER_TELEPERIOD | | 2 | 1 | | | At end of teleperiod
|
||||
FUNC_JSON_APPEND | | 2 | 1 | 3 | | Extend teleperiod JSON text
|
||||
FUNC_WEB_SENSOR | | 2 | 1 | 3 | | Add sensor data to web GUI
|
||||
FUNC_COMMAND | x | 1 | 2 | 3 | 4 | When a command is not recognized
|
||||
|
49
BUILDS.md
@ -26,21 +26,24 @@
|
||||
| USE_SCRIPT | - | - | - | - | - | - | - |
|
||||
| USE_EXPRESSION | - | - | - | - | - | - | - |
|
||||
| SUPPORT_IF_STATEMENT | - | - | - | - | - | - | - |
|
||||
| USE_HOTPLUG | - | - | - | - | x | - | - |
|
||||
| | | | | | | | |
|
||||
| Feature or Sensor | minimal | lite | tasmota | knx | sensors | ir | display | Remarks
|
||||
| ROTARY_V1 | - | - | - | - | - | - | - |
|
||||
| USE_SONOFF_RF | - | - | x | x | x | - | - |
|
||||
| USE_RF_FLASH | - | - | x | x | x | - | - |
|
||||
| USE_SONOFF_SC | - | - | x | - | x | - | - |
|
||||
| USE_SONOFF_SC | - | - | x | x | x | - | - |
|
||||
| USE_TUYA_MCU | - | x | x | x | x | - | x |
|
||||
| USE_ARMTRONIX_DIMMERS | - | - | x | x | - | - | - |
|
||||
| USE_PS_16_DZ | - | - | x | x | x | - | - |
|
||||
| USE_SONOFF_IFAN | - | - | x | x | x | - | - |
|
||||
| USE_BUZZER | - | - | x | x | x | - | - |
|
||||
| USE_ARILUX_RF | - | - | x | x | x | - | - |
|
||||
| USE_SHUTTER | - | - | - | - | - | - | - |
|
||||
| USE_SHUTTER | - | - | x | x | - | - | - |
|
||||
| USE_DEEPSLEEP | - | - | x | - | x | - | - |
|
||||
| USE_EXS_DIMMER | - | - | x | x | - | - | - |
|
||||
| USE_DEVICE_GROUPS | - | - | x | - | - | - | - |
|
||||
| USE_PWM_DIMMER | - | - | x | x | - | - | - |
|
||||
| | | | | | | | |
|
||||
| Feature or Sensor | minimal | lite | tasmota | knx | sensors | ir | display | Remarks
|
||||
| USE_LIGHT | - | x | x | x | x | x | x |
|
||||
@ -61,6 +64,7 @@
|
||||
| USE_DDS2382 | - | - | - | - | x | - | - |
|
||||
| USE_DDSU666 | - | - | - | - | x | - | - |
|
||||
| USE_SOLAX_X1 | - | - | - | - | - | - | - |
|
||||
| USE_LE01MR | - | - | - | - | - | - | - |
|
||||
| | | | | | | | |
|
||||
| USE_ADC_VCC | x | x | - | - | - | - | - |
|
||||
| USE_COUNTER | - | - | x | x | x | x | x |
|
||||
@ -71,28 +75,28 @@
|
||||
| | | | | | | | |
|
||||
| Feature or Sensor | minimal | lite | tasmota | knx | sensors | ir | display | Remarks
|
||||
| USE_I2C | - | - | x | x | x | - | x |
|
||||
| USE_SHT | - | - | x | x | x | - | x |
|
||||
| USE_HTU | - | - | x | x | x | - | x |
|
||||
| USE_BMP | - | - | x | x | x | - | x |
|
||||
| USE_SHT | - | - | - | - | x | - | - |
|
||||
| USE_HTU | - | - | - | - | x | - | - |
|
||||
| USE_BMP | - | - | - | - | x | - | - |
|
||||
| USE_BME680 | - | - | - | - | x | - | - |
|
||||
| USE_BH1750 | - | - | x | x | x | - | x |
|
||||
| USE_BH1750 | - | - | - | - | x | - | - |
|
||||
| USE_VEML6070 | - | - | - | - | x | - | - |
|
||||
| USE_ADS1115 | - | - | - | - | x | - | - |
|
||||
| USE_ADS1115_I2CDEV | - | - | - | - | - | - | - |
|
||||
| USE_INA219 | - | - | - | - | x | - | - |
|
||||
| USE_INA226 | - | - | - | - | - | - | - |
|
||||
| USE_SHT3X | - | - | x | x | x | - | x |
|
||||
| USE_SHT3X | - | - | - | - | x | - | - |
|
||||
| USE_TSL2561 | - | - | - | - | x | - | - |
|
||||
| USE_TSL2591 | - | - | - | - | - | - | - |
|
||||
| USE_MGS | - | - | - | - | x | - | - |
|
||||
| USE_SGP30 | - | - | x | x | x | - | x |
|
||||
| USE_SGP30 | - | - | - | - | x | - | - |
|
||||
| USE_SI1145 | - | - | - | - | - | - | - |
|
||||
| USE_LM75AD | - | - | x | x | x | - | x |
|
||||
| USE_LM75AD | - | - | - | - | x | - | - |
|
||||
| USE_APDS9960 | - | - | - | - | - | - | - |
|
||||
| USE_MCP230xx | - | - | - | - | - | - | - |
|
||||
| USE_PCA9685 | - | - | - | - | - | - | - |
|
||||
| USE_MPR121 | - | - | - | - | - | - | - |
|
||||
| USE_CCS811 | - | - | - | - | - | - | - |
|
||||
| USE_CCS811 | - | - | - | - | x | - | - |
|
||||
| USE_MPU6050 | - | - | - | - | - | - | - |
|
||||
| USE_DS3231 | - | - | - | - | - | - | - |
|
||||
| USE_MGC3130 | - | - | - | - | - | - | - |
|
||||
@ -107,13 +111,16 @@
|
||||
| USE_PCF8574 | - | - | - | - | - | - | - |
|
||||
| USE_HIH6 | - | - | - | - | x | - | - |
|
||||
| USE_DHT12 | - | - | - | - | x | - | - |
|
||||
| USE_DS1624 | - | - | - | - | x | - | - |
|
||||
| USE_AHT1x | - | - | - | - | - | - | - |
|
||||
| USE_WEMOS_MOTOR_V1 | - | - | - | - | x | - | - |
|
||||
| | | | | | | | |
|
||||
| Feature or Sensor | minimal | lite | tasmota | knx | sensors | ir | display | Remarks
|
||||
| USE_SPI | - | - | - | - | - | - | x |
|
||||
| USE_MHZ19 | - | - | x | x | x | - | x |
|
||||
| USE_SENSEAIR | - | - | x | x | x | - | x |
|
||||
| USE_PMS5003 | - | - | x | x | x | - | x |
|
||||
| USE_NOVA_SDS | - | - | x | x | x | - | x |
|
||||
| USE_MHZ19 | - | - | - | - | x | - | - |
|
||||
| USE_SENSEAIR | - | - | - | - | x | - | - |
|
||||
| USE_PMS5003 | - | - | - | - | x | - | - |
|
||||
| USE_NOVA_SDS | - | - | - | - | x | - | - |
|
||||
| USE_HPMA | - | - | - | - | x | - | - |
|
||||
| USE_SERIAL_BRIDGE | - | - | x | x | x | - | x |
|
||||
| USE_MP3_PLAYER | - | - | - | - | x | - | - |
|
||||
@ -122,15 +129,21 @@
|
||||
| USE_RDM6300 | - | - | - | - | x | - | - |
|
||||
| USE_IBEACON | - | - | - | - | x | - | - |
|
||||
| USE_GPS | - | - | - | - | - | - | - |
|
||||
| USE_HM10 | - | - | - | - | x | - | - |
|
||||
| USE_HRXL | - | - | - | - | x | - | - |
|
||||
| | | | | | | | |
|
||||
| USE_NRF24 | - | - | - | - | - | - | - |
|
||||
| USE_MIBLE | - | - | - | - | - | - | - |
|
||||
| USE_ZIGBEE | - | - | - | - | - | - | - |
|
||||
| | | | | | | | |
|
||||
| USE_IR_REMOTE | - | - | x | x | x | x | x |
|
||||
| USE_IR_RECEIVE | - | - | x | x | x | x | x |
|
||||
| USE_IR_REMOTE_FULL | - | - | - | - | - | x | - | Enable ALL protocols
|
||||
| | | | | | | | |
|
||||
| USE_SR04 | - | - | x | x | x | - | x |
|
||||
| USE_SR04 | - | - | - | - | x | - | - |
|
||||
| USE_TM1638 | - | - | - | - | x | - | - |
|
||||
| USE_HX711 | - | - | x | x | x | - | x |
|
||||
| USE_TX20_WIND_SENSOR | - | - | - | - | x | - | - |
|
||||
| USE_HX711 | - | - | - | - | x | - | - |
|
||||
| USE_TX2x_WIND_SENSOR | - | - | - | - | - | - | - |
|
||||
| USE_RC_SWITCH | - | - | - | - | x | - | - |
|
||||
| USE_RF_SENSOR | - | - | - | - | x | - | - | AlectoV2 only
|
||||
| USE_HRE | - | - | - | - | x | - | - |
|
||||
@ -148,4 +161,4 @@
|
||||
| USE_DISPLAY_EPAPER_42 | - | - | - | - | - | - | x |
|
||||
| USE_DISPLAY_ILI9488 | - | - | - | - | - | - | - |
|
||||
| USE_DISPLAY_SSD1351 | - | - | - | - | - | - | - |
|
||||
| USE_DISPLAY_RA8876 | - | - | - | - | - | - | - |
|
||||
| USE_DISPLAY_RA8876 | - | - | - | - | - | - | - |
|
||||
|
45
Device_Groups.md
Normal file
@ -0,0 +1,45 @@
|
||||
# Device Groups
|
||||
|
||||
The device groups module provides a framework to allow multiple devices to be in a group with values such as power, light color/temperature/brightness, PWM values, sensor values, etc. shared with other devices in the group. For example, with multiple light modules in a device group, the light settings can be changed on one module and the settings will automatically be changed on the other light modules. Dimmer switch modules could be in a device group with light modules and the dimmer switch could control the power, brightness and colors of all the lights in the group. Multiple dimmer switches could be in a device group to form a 3-way/4-way dimmer switch.
|
||||
|
||||
UDP multicasts, followed by UDP unicasts if necessary, are used to send updates to all devices so updates are fast. There is no need for an MQTT server but all the devices in a group must be on the same IP network.
|
||||
|
||||
To include device groups support in the build, define USE_DEVICE_GROUPS in your user_config_override. This adds 3.5K to the code size. All devices in a group must be running firmware with device group support and have device groups enabled.
|
||||
|
||||
To enable device groups, set Option85 to 1.
|
||||
|
||||
|
||||
## Device Groups Operation
|
||||
|
||||
The device group name is the MQTT group topic set with the GroupTopic command. All devices in the same IP network with the same group topic are in the same group. Some modules may define additional device groups. For example, if Remote Device Mode is enabled, the PWM Dimmer module defines three devices groups.
|
||||
|
||||
The items that are sent to the group and the items that are received from the group are selected with the DevGroupShare command. By default all items are sent and received from the group. An example of when the DevGroupShare command would be used is when you have a group of lights that you control with a dimmer switch and home automation software. You want the dimmer switch to be able to control all items. The home automation software controls each light individually. When it controls the whole group, it actually sends command to each light in the group. If you use the home automation software to turn an individual light on or off or change it’s brightness, color or scheme, you do not want the change to be replicated to the other lights. In this case, you would set the incoming and outgoing item masks to 0xffffffff (all items) on the dimmer switch (DevGroupShare 0xffffffff,0xffffffff) and set the incoming item mask to 0xffffffff and outgoing item mask to 0 on all the lights (DevGroupShare 0xffffffff,0).
|
||||
|
||||
|
||||
### Commands
|
||||
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td><strong>Command</strong>
|
||||
</td>
|
||||
<td><strong>Parameters</strong>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>DevGroupShare
|
||||
</td>
|
||||
<td><in>,<out> = set incoming and outgoing shared item mask (default = 0xffffffff,0xffffffff)
|
||||
<p>
|
||||
1 = Power, 2 = Light brightness, 4 = Light fade/speed, 8 = Light scheme, 16 = Light color, 32 = Minimum brightness
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>GroupTopic<x>
|
||||
</td>
|
||||
<td>1 = reset device group <x> MQTT group topic to firmware default (MQTT_GRPTOPIC) and restart
|
||||
<p>
|
||||
<value> = set device group <x> MQTT group topic (32 chars max) and restart
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
@ -62,4 +62,7 @@ Index | Define | Driver | Device | Address(es) | Description
|
||||
39 | USE_DISPLAY_RA8876 | xdsp_10 | FT5316 | 0x38 | Touch panel controller
|
||||
40 | USE_TSL2591 | xsns_57 | TLS2591 | 0x29 | Light intensity sensor
|
||||
41 | USE_DHT12 | xsns_58 | DHT12 | 0x5C | Temperature and humidity sensor
|
||||
|
||||
42 | USE_DS1624 | xsns_59 | DS1621 | 0x48 - 0x4F | Temperature sensor
|
||||
42 | USE_DS1624 | xsns_59 | DS1624 | 0x48 - 0x4F | Temperature sensor
|
||||
43 | USE_AHT1x | xsns_63 | AHT10/15 | 0x38 | Temperature and humidity sensor
|
||||
44 | USE_WEMOS_MOTOR_V1 | xdrv_34 | | 0x2D - 0x30 | WEMOS motor shield v1.0.0 (6612FNG)
|
||||
|
@ -76,5 +76,6 @@ Module | Description
|
||||
70 Sonoff L1 | Sonoff L1 light strip
|
||||
71 Sonoff iFan03 | Sonoff iFan03 Wifi Smart Ceiling Fan with Light
|
||||
72 EXS Dimmer | EXS Wifi Dimmer v4
|
||||
73 PWM Dimmer | Martin Jerry/acenx/Tessan/NTONPOWER SD0x PWM Dimmer Switches
|
||||
|
||||
Over 600 additional devices are supported using [templates](TEMPLATES.md).
|
||||
|
173
PWM_Dimmer.md
Normal file
@ -0,0 +1,173 @@
|
||||
# PWM Dimmer
|
||||
|
||||
The PWM Dimmer module adds support for Martin Jerry/acenx/Tessan/NTONPOWER SD0x PWM dimmer switches. The brightness of the load for these dimmers is controlled by a PWM GPIO pin. They typically have power, up and down buttons, a powered-on LED, five brightness LEDs and another status LED. Examples are:[ https://www.amazon.com/dp/B07FXYSVR1](https://www.amazon.com/dp/B07FXYSVR1),[ https://www.amazon.com/dp/B07V26Q3VD](https://www.amazon.com/dp/B07V26Q3VD),[ https://www.amazon.com/dp/B07K67D43J](https://www.amazon.com/dp/B07K67D43J),[ https://www.amazon.com/dp/B07TTGFWFM](https://www.amazon.com/dp/B07TTGFWFM)
|
||||
|
||||
To include PWM dimmer support in the build, define USE_PWM_DIMMER in your user_config_override. This adds 4.5K to the code size. The light module is not required for PWM dimmer operation so you can #undef USE_LIGHT to reduce the firmware bin size.
|
||||
|
||||
To enable PWM dimmer operation, select the PWM Dimmer module.
|
||||
|
||||
|
||||
## PWM Dimmer Operation
|
||||
|
||||
Pressing and releasing the power button toggles the power on/off. If the toggle turns the power on, the load is returned to the last brightness it was adjusted to. If Fade is enabled, the load is faded on/off at the rate defined by the Speed setting.
|
||||
|
||||
When the power is on, holding the down or up button decreases/increases the brightness (PWM value). The brightness is changed faster at higher brightnesses. The DimmerRange command sets the minimum and maximum PWM values. Brightness values (0 through 255) are scaled to dimmerMin through dimmerMax. Typically, dimmerMin would be set to the lowest value at which the lights show visible light and dimmerMax would be set 1023. If you want to increase the lowest brightness level and/or decrease the highest brightness level, set higher dimmerMin and/or lower dimmerMax values.
|
||||
|
||||
The brightness can also be changed using just the power button. When the power is on, holding the power button alternately increases or decreases the brightness. Initially, holding the power button increases the brightness. Releasing and then holding the power button again decreases the brightness.
|
||||
|
||||
When the power is off, pressing the down or up button turns the power on at a temporary brightness of the low/high levels set by the BriPreset command (default =10,255). Turning the power on at the low preset can also be accomplished by holding the power button while the power is off. The brightness presets are intended to enable quickly turning on a light to a dim or bright level without changing the normal desired brightness. Turning the power on to a preset does not change the brightness the load will be set to when the switch is turned on the next time. For example, if the light is on and you adjust the brightness to 80 and then turn the light off, when you turn it back on, the brightness will return to 80. If you turn the power off again and then press the down button, the light will be turned on with a brightness of the low preset. If you then turn the light off and on again, the brightness will return to 80.
|
||||
|
||||
If there are LED’s defined in the template, they are turned on to indicate the current brightness. More LEDs are turned on at higher brightnesses. The LedTimeout command enables/disables an LED timeout. If LED timeout is enabled, the LED’s turn off five seconds after the last change in brightness. Note that the lowest LED and the blue power LED are always on when the power is on.
|
||||
|
||||
The LEDLink LED can be used as a nightlight/powered-off indicator. The PoweredOffLed command enables/disables turning the LEDLink LED on when the power is off.
|
||||
|
||||
When the power is on, tapping (pressing and releasing quickly) the down or up buttons a given number of times and then holding the down or up button decreases or increases settings according to the table below. For example, tapping the down button once and then holding the up button sets all RGB lights in the device group to the next fixed color. Tapping the up button three times and then holding the down button decreases the high brightness preset.
|
||||
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td>Taps
|
||||
</td>
|
||||
<td>Down Button
|
||||
</td>
|
||||
<td>Up Button
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>1
|
||||
</td>
|
||||
<td>Set fixed color<sup>1</sup>
|
||||
</td>
|
||||
<td>Publish MQTT event<sup>2</sup>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>2
|
||||
</td>
|
||||
<td>Adjust minimum brightness
|
||||
</td>
|
||||
<td>Adjust fade speed
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>3
|
||||
</td>
|
||||
<td>Adjust low brightness preset
|
||||
</td>
|
||||
<td>Adjust high brightness preset
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
1. Setting the previous/next color only functions when remote device mode is enabled (see below) and only when the switch is in a device group with an RGB light. The color sequence as defined by the Light module is red, green, blue, orange, light green, light blue, amber, cyan, purple, yellow, pink, white using RGB channels, white using CT channels.
|
||||
|
||||
2. The MQTT topic has the format %group-topic%/cmnd/Event, where %group-topic% is the group topic set by the GroupTopic command. The MQTT payload is SwitchTrigger#, where # is 1 if the down button is held or 2 if the up button is held. These triggers can be used in rules on remote devices (ON Event#SwitchTrigger1) or by automation software to trigger automations such as scene changes. For example, the Event topic SwitchTrigger1 payload could trigger the automation software to turn on the previous scene in a list and the SwitchTrigger2 payload could trigger the automation software to turn on the next scene in a list.
|
||||
|
||||
Holding the power button, pressing the down/up buttons a given number of times and then releasing the power button toggles options according to the table below. Note that you must press a down or up button within 0.5 seconds to prevent the power button hold action from taking place.
|
||||
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td>Presses
|
||||
</td>
|
||||
<td>Down Button
|
||||
</td>
|
||||
<td>Up Button
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>1
|
||||
</td>
|
||||
<td>Toggle powered-off LED
|
||||
</td>
|
||||
<td>Toggle brightness LED timeout
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>2
|
||||
</td>
|
||||
<td>Toggle fading
|
||||
</td>
|
||||
<td>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
Holding any button for over 10 seconds executes the WiFiConfig 2 command.
|
||||
|
||||
Pressing and releasing a button publishes an MQTT TOGGLE command. Holding a button publishes an MQTT HOLD command followed by an MQTT OFF command when the button is released.
|
||||
|
||||
When Device Groups are enabled, the PWM Dimmer brightness presets, dimmer minimum and maximum values, fade and speed settings are kept in sync across all switches in the group. The powered-off LED and LED timeout settings are specific to each switch. Changing them does not replicate the change to the other switches in the group.
|
||||
|
||||
|
||||
### Commands
|
||||
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td><strong>Command</strong>
|
||||
</td>
|
||||
<td><strong>Parameters</strong>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>BriPreset
|
||||
</td>
|
||||
<td> <low>,<high> = set brightness low and high presets<br>
|
||||
1..255 = set brightness preset<br>
|
||||
+ = increase brightness preset<br>
|
||||
- = decrease brightness preset
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>DimmerRange
|
||||
</td>
|
||||
<td>Change dimming range<br>
|
||||
<dimmerMin>,<DimmerMax> = set minimum and maximum PWM values. Dimmer/brightness is scaled to this range.<br>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>SetOption86
|
||||
</td>
|
||||
<td>Set brightness LED timeout<br>
|
||||
0 = disable timeout (default)<br>
|
||||
1 = enable timeout
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>SetOption87
|
||||
</td>
|
||||
<td>Set powered-off LED (nightlight)<br>
|
||||
0 = disable powered-off LED (default)<br>
|
||||
1 = enable powered-off LED
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>SetOption88
|
||||
</td>
|
||||
<td>Set remote device mode<br>
|
||||
0 = disable remote device mode(default)<br>
|
||||
1 = enable remote device mode
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
|
||||
### Remote Device Mode
|
||||
|
||||
Remote device mode allows PWM Dimmer switches to control remote devices. With remote device mode enabled, each button controls a different device. Note that dimmer switches with toggle-style down/up buttons have limited functionality as remote device mode switches because you can not push the down and up buttons simultaneously.
|
||||
|
||||
To include remote device mode support in the build, define USE_PWM_DIMMER_REMOTE in your user_config_override. Remote device mode support requires device group support so USE_DEVICE_GROUPS is automatically defined if USE_PWM_DIMMER_REMOTE is defined. Remote device mode support adds 0.7K to the code size in addition to the code size required for device groups support.
|
||||
|
||||
To enable remote device mode, set Option88 to 1. Each remote device must be running firmware with device group support and have remote device support enabled. The remote devices do not need to be built with PWM dimmer support nor do they need to be switches.
|
||||
|
||||
If a remote device is a PWM dimmer, the device acts like a 3-way dimmer switch would and may or may not have a load connected to it. It’s also possible to use a PWM dimmer switch without a load to act as a wall switch to control the power, brightness and color of one or more smart lights with Tasmota with device group support loaded on them.
|
||||
|
||||
With remote device mode enabled, button 1 is the power button for the local device while buttons 2 and 3 are the power buttons for remote devices. Group names for buttons 2 and 3 are set by the GroupTopic2 and GroupTopic3 commands respectively. Note that the button numbers are defined by the module template and can be in any physical order on the switch (button 1 can be defined as the top button, the middle button or the bottom button).
|
||||
|
||||
Pressing and releasing a power button toggles the power on all devices in the group assigned to the button. When the power is on, holding the button alternately increases or decreases the brightness. When the power is off, holding the button turns the power on at a temporary brightness of the low level set by the BriPreset command (default =10).
|
||||
|
||||
While holding a power button, the other two buttons act like the down and up buttons for the remote device. All the functions performed by the down and up buttons in non-remote device mode are available in remote device mode. While holding button 1, button 2 performs the functions of the down button and button 3 performs the functions of the up button. While holding button 2, button 1 performs the functions of the down button and button 3 performs the functions of the up button. While holding button 3, button 1 performs the functions of the down button and button 2 performs the functions of the up button.
|
@ -132,7 +132,7 @@ People helping to keep the show on the road:
|
||||
- Adrian Scillato for his (security)fixes and implementing and maintaining KNX
|
||||
- Gennaro Tortone for implementing and maintaining Eastron drivers
|
||||
- Raymond Mouthaan for managing Wemos Wiki information
|
||||
- Norbert Richter for his decode-config.py tool
|
||||
- Norbert Richter for his [decode-config.py](https://github.com/tasmota/decode-config) tool
|
||||
- Andre Thomas for providing [thehackbox](http://thehackbox.org/tasmota/) OTA support and daily development builds
|
||||
- Joel Stein, digiblur and Shantur Rathore for their Tuya research and driver
|
||||
- Frogmore42 and Jason2866 for providing many issue answers
|
||||
|
@ -52,16 +52,69 @@ The following binary downloads have been compiled with ESP8266/Arduino library c
|
||||
|
||||
## Changelog
|
||||
|
||||
### Version 8.1.0 Doris
|
||||
### Version 8.2.0 Elliot
|
||||
|
||||
- Change Settings text handling allowing variable length text within a total text pool of 699 characters
|
||||
- Change Smoother ``Fade`` using 100Hz instead of 20Hz animation (#7179)
|
||||
- Change number of rule ``Var``s and ``Mem``s from 5 to 16 (#4933)
|
||||
- Change number of ``FriendlyName``s from 4 to 8
|
||||
- Add commands ``WebButton1`` until ``WebButton16`` to support user defined GUI button text (#7166)
|
||||
- Add support for max 150 characters in most command parameter strings (#3686, #4754)
|
||||
- Add support for GPS as NTP server by Christian Baars and Adrian Scillato
|
||||
- Add support for ``AdcParam`` parameters to control ADC0 Moisture formula by Federico Leoni (#7309)
|
||||
- Add Zigbee coalesce sensor attributes into a single message
|
||||
- Add Zigbee better support for Xiaomi Double Switch and Xiaomi Vibration sensor
|
||||
- Add Deepsleep start delay based on Teleperiod if ``Teleperiod`` differs from 10 or 300
|
||||
- Change default my_user_config.h driver and sensor support removing most sensors and adding most drivers
|
||||
- Change Lights: simplified gamma correction and 10 bits internal computation
|
||||
- Change commands ``Prefix``, ``Ssid``, ``StateText``, ``NTPServer``, and ``FriendlyName`` displaying all items
|
||||
- Change IRremoteESP8266 library updated to v2.7.4
|
||||
- Change Zigbee command prefix from ``Zigbee*`` to ``Zb*``
|
||||
- Change MQTT message size with additional 200 characters
|
||||
- Change display of some date and time messages from "Wed Feb 19 10:45:12 2020" to "2020-02-19T10:45:12"
|
||||
- Change switchmode 6 according to issue 7778 (#7831)
|
||||
- Fix Sonoff Bridge, Sc, L1, iFan03 and CSE7766 serial interface to forced speed, config and disable logging
|
||||
- Fix commands ``Display`` and ``Counter`` from overruling command processing (#7322)
|
||||
- Fix ``White`` added to light status (#7142)
|
||||
- Fix Improved fade linearity with gamma correction
|
||||
- Fix LCD line and column positioning (#7387)
|
||||
- Fix Display handling of hexadecimal escape characters (#7387)
|
||||
- Fix ``WakeUp <x>`` ignores provided value (#7473)
|
||||
- Fix exception 9 restart on log message in Ticker interrupt service routines NTP, Wemos and Hue emulation (#7496)
|
||||
- Fix ``PowerDelta`` zero power detection (#7515)
|
||||
- Fix ``RGBWWTable`` ignored (#7572)
|
||||
- Fix PWM flickering at low levels (#7415)
|
||||
- Fix Hass sensor discovery part 1/4 by Federico Leoni (#7582, #7548)
|
||||
- Fix MaxPower functionality (#7647)
|
||||
- Fix relation between RSSI and signal strength
|
||||
- Add command ``SetOption79 0/1`` to enable reset of counters at teleperiod time by Andre Thomas (#7355)
|
||||
- Add command ``SetOption82 0/1`` to limit the CT range for Alexa to 200..380
|
||||
- Add command ``SetOption84 0/1`` to send AWS IoT device shadow updates (alternative to retained)
|
||||
- Add commands ``SetOption85 0/1`` and ``DevGroupShare`` supporting UDP Group command using ``GroupTopic`` without MQTT by Paul Diem (#7790)
|
||||
- Add command ``SetOption86 0/1`` for PWM dimmer to turn brightness LED's off 5 seconds after last change
|
||||
- Add command ``SetOption87 0/1`` for PWM dimmer to turn red LED on when powered off
|
||||
- Add command ``SetOption88 0/1`` for PWM dimmer to let buttons control remote devices
|
||||
- Add command ``SetOption89 0/1`` for Zigbee distinct MQTT topics per device for SENSOR, allowing retained messages (#7835)
|
||||
- Add command ``ShutterButton <parameters>`` to control shutter(s) by to-scho (#7403)
|
||||
- Add commands ``SwitchMode 8`` ToggleMulti, ``SwitchMode 9`` FollowMulti and ``SwitchMode 10`` FollowMultiInverted (#7522)
|
||||
- Add commands ``SwitchMode 11`` PushHoldMulti and ``SwitchMode 12`` PushHoldInverted (#7603)
|
||||
- Add command ``Buzzer -1`` for infinite mode and command ``Buzzer -2`` for following led mode (#7623)
|
||||
- Add SerialConfig to ``Status 1``
|
||||
- Add WifiPower to ``Status 5``
|
||||
- Add support for DS1624, DS1621 Temperature sensor by Leonid Myravjev
|
||||
- Add Zigbee attribute decoder for Xiaomi Aqara Cube
|
||||
- Add support for ``AdcParam`` parameters to control ADC0 Current Transformer Apparent Power formula by Jodi Dillon (#7100)
|
||||
- Add optional support for Prometheus using file xsns_91_prometheus.ino (#7216)
|
||||
- Add experimental support for NRF24L01 as BLE-bridge for Mijia Bluetooth sensors by Christian Baars (#7394)
|
||||
- Add support to BMP driver to enter reset state (sleep enable) when deep sleep is used in Tasmota
|
||||
- Add support for gzipped binaries
|
||||
- Add web page sliders when ``SetOption37 128`` is active allowing control of white(s)
|
||||
- Add most SetOptions as defines to my_user_config.h
|
||||
- Add SoftwareSerial to CSE7766 driver allowing different GPIOs (#7563)
|
||||
- Add optional parameter <startcolor> to command ``Scheme <scheme>, <startcolor>`` to control initial start color
|
||||
- Add rule trigger on one level deeper using syntax with two ``#`` like ``on zigbeereceived#vibration_sensor#aqaracubeside=0 do ...``
|
||||
- Add support for sensors DS18x20 and DHT family on Shelly 1 and Shelly 1PM using Shelly Add-On adapter (#7469)
|
||||
- Add support for MI-BLE sensors using HM-10 Bluetooth 4.0 module by Christian Staars (#7683)
|
||||
- Add BootCount Reset Time as BCResetTime to ``Status 1``
|
||||
- Add ``ZbZNPReceived``and ``ZbZCLReceived`` being published to MQTT when ``SetOption66 1``
|
||||
- Add optional Wifi AccessPoint passphrase define WIFI_AP_PASSPHRASE in my_user_config.h (#7690)
|
||||
- Add support for FiF LE-01MR energy meter by saper-2 (#7584)
|
||||
- Add new DHT driver. The old driver can still be used using define USE_DHT_OLD (#7468)
|
||||
- Add another new DHT driver based on ESPEasy. The old driver can still be used using define USE_DHT_OLD. The previous new driver can be used with define USE_DHT_V2 (#7717)
|
||||
- Add initial support for Sensors AHT10 and AHT15 by Martin Wagner (#7596)
|
||||
- Add support for Wemos Motor Shield V1 by Denis Sborets (#7764)
|
||||
- Add Zigbee enhanced commands decoding, added ``ZbPing``
|
||||
- Add Zigbee features and improvements
|
||||
- Add support for Martin Jerry/acenx/Tessan/NTONPOWER SD0x PWM dimmer switches by Paul Diem (#7791)
|
||||
- Add support for Jarolift rollers by Keeloq algorithm
|
||||
- Add support for MaxBotix HRXL-MaxSonar ultrasonic range finders by Jon Little (#7814)
|
||||
- Add support for Romanian language translations by Augustin Marti
|
||||
|
@ -130,6 +130,7 @@ Kingart Touch {"NAME":"PS-16-DZ","GPIO":[255,148,255,149,255,255,0,0,255
|
||||
Moes DS01 {"NAME":"MOES - DS01","GPIO":[255,255,255,255,255,255,0,0,255,108,255,107,255],"FLAG":0,"BASE":54}
|
||||
Moes QS-WiFi-D01 Dimmer 150W {"NAME":"WiFi-Dimmer","GPIO":[0,148,0,149,0,0,0,0,0,42,37,0,0],"FLAG":0,"BASE":18}
|
||||
PS-16-DZ {"NAME":"PS-16-DZ","GPIO":[255,148,255,149,255,255,0,0,255,52,255,255,255],"FLAG":0,"BASE":58}
|
||||
PWM Dimmer {"NAME":"PWM Dimmer","GPIO":[19,18,0,59,158,58,0,0,57,37,56,122,29],"FLAG":0,"BASE":73}
|
||||
Zemismart KS-7011 {"NAME":"KS-7011 Dimmer","GPIO":[255,107,255,108,255,255,0,0,255,255,255,255,255],"FLAG":0,"BASE":54}
|
||||
```
|
||||
|
||||
|
@ -3,12 +3,46 @@
|
||||
//
|
||||
//var_dump($_FILES);
|
||||
|
||||
/**
|
||||
* GZIPs a file on disk (appending .gz to the name)
|
||||
*
|
||||
* From http://stackoverflow.com/questions/6073397/how-do-you-create-a-gz-file-using-php
|
||||
* Based on function by Kioob at:
|
||||
* http://www.php.net/manual/en/function.gzwrite.php#34955
|
||||
*
|
||||
* @param string $source Path to file that should be compressed
|
||||
* @param integer $level GZIP compression level (default: 9)
|
||||
* @return string New filename (with .gz appended) if success, or false if operation fails
|
||||
*/
|
||||
function gzCompressFile($source, $level = 9){
|
||||
$dest = $source . '.gz';
|
||||
$mode = 'wb' . $level;
|
||||
$error = false;
|
||||
if ($fp_out = gzopen($dest, $mode)) {
|
||||
if ($fp_in = fopen($source,'rb')) {
|
||||
while (!feof($fp_in))
|
||||
gzwrite($fp_out, fread($fp_in, 1024 * 512));
|
||||
fclose($fp_in);
|
||||
} else {
|
||||
$error = true;
|
||||
}
|
||||
gzclose($fp_out);
|
||||
} else {
|
||||
$error = true;
|
||||
}
|
||||
if ($error)
|
||||
return false;
|
||||
else
|
||||
return $dest;
|
||||
}
|
||||
|
||||
$image = basename($_FILES["file"]["name"]);
|
||||
$target_file = "arduino/".$image;
|
||||
$hostname = $_SERVER['SERVER_NAME'];
|
||||
|
||||
if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_file)) {
|
||||
echo "The file $image has been uploaded to OTA server $hostname. \n";
|
||||
gzCompressFile($target_file);
|
||||
echo "The files $image and $image.gz have been uploaded to OTA server $hostname. \n";
|
||||
} else {
|
||||
echo "Sorry, there was an error uploading your file $image to OTA server $hostname. \n";
|
||||
}
|
||||
|
@ -1,130 +0,0 @@
|
||||
|
||||
# ESP8266 platform
|
||||
# ------------------------------
|
||||
|
||||
# For more info:
|
||||
# https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5---3rd-party-Hardware-specification
|
||||
|
||||
name=ESP8266 Modules
|
||||
version=2.2.0
|
||||
|
||||
|
||||
|
||||
|
||||
compiler.warning_flags=-w
|
||||
compiler.warning_flags.none=-w
|
||||
compiler.warning_flags.default=
|
||||
compiler.warning_flags.more=-Wall
|
||||
compiler.warning_flags.all=-Wall -Wextra
|
||||
|
||||
build.lwip_lib=-llwip_gcc
|
||||
build.lwip_flags=-DLWIP_OPEN_SRC
|
||||
|
||||
compiler.path={runtime.tools.xtensa-lx106-elf-gcc.path}/bin/
|
||||
compiler.sdk.path={runtime.platform.path}/tools/sdk
|
||||
compiler.cpreprocessor.flags=-D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ "-I{compiler.sdk.path}/include" "-I{compiler.sdk.path}/lwip/include" "-I{build.path}/core"
|
||||
|
||||
compiler.c.cmd=xtensa-lx106-elf-gcc
|
||||
compiler.c.flags=-c {compiler.warning_flags} -Os -g -Wpointer-arith -Wno-implicit-function-declaration -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -falign-functions=4 -MMD -std=gnu99 -ffunction-sections -fdata-sections
|
||||
|
||||
compiler.S.cmd=xtensa-lx106-elf-gcc
|
||||
compiler.S.flags=-c -g -x assembler-with-cpp -MMD -mlongcalls
|
||||
|
||||
compiler.c.elf.flags=-g {compiler.warning_flags} -Os -nostdlib -Wl,--no-check-sections -u call_user_start -Wl,-static "-L{compiler.sdk.path}/lib" "-L{compiler.sdk.path}/ld" "-T{build.flash_ld}" -Wl,--gc-sections -Wl,-wrap,system_restart_local -Wl,-wrap,register_chipv6_phy
|
||||
|
||||
compiler.c.elf.cmd=xtensa-lx106-elf-gcc
|
||||
compiler.c.elf.libs=-lm -lgcc -lhal -lphy -lpp -lnet80211 -lwpa -lcrypto -lmain -lwps -laxtls -lsmartconfig -lmesh -lwpa2 {build.lwip_lib} -lstdc++
|
||||
|
||||
compiler.cpp.cmd=xtensa-lx106-elf-g++
|
||||
compiler.cpp.flags=-c {compiler.warning_flags} -Os -g -mlongcalls -mtext-section-literals -fno-exceptions -fno-rtti -falign-functions=4 -std=c++11 -MMD -ffunction-sections -fdata-sections
|
||||
|
||||
compiler.as.cmd=xtensa-lx106-elf-as
|
||||
|
||||
compiler.ar.cmd=xtensa-lx106-elf-ar
|
||||
compiler.ar.flags=cru
|
||||
|
||||
compiler.elf2hex.cmd=esptool
|
||||
compiler.elf2hex.flags=
|
||||
|
||||
compiler.size.cmd=xtensa-lx106-elf-size
|
||||
|
||||
compiler.esptool.cmd=esptool
|
||||
compiler.esptool.cmd.windows=esptool.exe
|
||||
|
||||
# This can be overriden in boards.txt
|
||||
build.extra_flags=-DESP8266
|
||||
|
||||
# These can be overridden in platform.local.txt
|
||||
compiler.c.extra_flags=
|
||||
compiler.c.elf.extra_flags=
|
||||
compiler.S.extra_flags=
|
||||
compiler.cpp.extra_flags=
|
||||
compiler.ar.extra_flags=
|
||||
compiler.objcopy.eep.extra_flags=
|
||||
compiler.elf2hex.extra_flags=
|
||||
|
||||
## generate file with git version number
|
||||
## needs bash, git, and echo
|
||||
|
||||
## windows-compatible version may be added later
|
||||
|
||||
|
||||
## Compile c files
|
||||
recipe.c.o.pattern="{compiler.path}{compiler.c.cmd}" {compiler.cpreprocessor.flags} {compiler.c.flags} -DF_CPU={build.f_cpu} {build.lwip_flags} {build.debug_port} {build.debug_level} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} -DARDUINO_BOARD="{build.board}" {compiler.c.extra_flags} {build.extra_flags} {includes} "{source_file}" -o "{object_file}"
|
||||
|
||||
## Compile c++ files
|
||||
recipe.cpp.o.pattern="{compiler.path}{compiler.cpp.cmd}" {compiler.cpreprocessor.flags} {compiler.cpp.flags} -DF_CPU={build.f_cpu} {build.lwip_flags} {build.debug_port} {build.debug_level} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} -DARDUINO_BOARD="{build.board}" {compiler.cpp.extra_flags} {build.extra_flags} {includes} "{source_file}" -o "{object_file}"
|
||||
|
||||
## Compile S files
|
||||
recipe.S.o.pattern="{compiler.path}{compiler.c.cmd}" {compiler.cpreprocessor.flags} {compiler.S.flags} -DF_CPU={build.f_cpu} {build.lwip_flags} {build.debug_port} {build.debug_level} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} -DARDUINO_BOARD="{build.board}" {compiler.c.extra_flags} {build.extra_flags} {includes} "{source_file}" -o "{object_file}"
|
||||
|
||||
## Create archives
|
||||
recipe.ar.pattern="{compiler.path}{compiler.ar.cmd}" {compiler.ar.flags} {compiler.ar.extra_flags} "{build.path}/arduino.ar" "{object_file}"
|
||||
|
||||
## Combine gc-sections, archives, and objects
|
||||
recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" {compiler.c.elf.flags} {compiler.c.elf.extra_flags} -o "{build.path}/{build.project_name}.elf" -Wl,--start-group {object_files} "{build.path}/arduino.ar" {compiler.c.elf.libs} -Wl,--end-group "-L{build.path}"
|
||||
|
||||
## Create eeprom
|
||||
recipe.objcopy.eep.pattern=
|
||||
|
||||
## Create hex
|
||||
#recipe.objcopy.hex.pattern="{compiler.path}{compiler.elf2hex.cmd}" {compiler.elf2hex.flags} {compiler.elf2hex.extra_flags} "{build.path}/{build.project_name}.elf" "{build.path}/{build.project_name}.hex"
|
||||
|
||||
recipe.objcopy.hex.pattern="{runtime.tools.esptool.path}/{compiler.esptool.cmd}" -eo "{runtime.platform.path}/bootloaders/eboot/eboot.elf" -bo "{build.path}/{build.project_name}.bin" -bm {build.flash_mode} -bf {build.flash_freq} -bz {build.flash_size} -bs .text -bp 4096 -ec -eo "{build.path}/{build.project_name}.elf" -bs .irom0.text -bs .text -bs .data -bs .rodata -bc -ec
|
||||
|
||||
## Save hex
|
||||
recipe.output.tmp_file={build.project_name}.bin
|
||||
recipe.output.save_file={build.project_name}.{build.variant}.bin
|
||||
|
||||
## Compute size
|
||||
recipe.size.pattern="{compiler.path}{compiler.size.cmd}" -A "{build.path}/{build.project_name}.elf"
|
||||
recipe.size.regex=^(?:\.irom0\.text|\.text|\.data|\.rodata|)\s+([0-9]+).*
|
||||
recipe.size.regex.data=^(?:\.data|\.rodata|\.bss)\s+([0-9]+).*
|
||||
#recipe.size.regex.eeprom=^(?:\.eeprom)\s+([0-9]+).*
|
||||
|
||||
# ------------------------------
|
||||
|
||||
tools.esptool.cmd=esptool
|
||||
tools.esptool.cmd.windows=esptool.exe
|
||||
tools.esptool.path={runtime.tools.esptool.path}
|
||||
tools.esptool.network_cmd=python
|
||||
tools.esptool.network_cmd.windows=python.exe
|
||||
|
||||
tools.esptool.upload.protocol=esp
|
||||
tools.esptool.upload.params.verbose=-vv
|
||||
tools.esptool.upload.params.quiet=
|
||||
tools.esptool.upload.pattern="{path}/{cmd}" {upload.verbose} -cd {upload.resetmethod} -cb {upload.speed} -cp "{serial.port}" -ca 0x00000 -cf "{build.path}/{build.project_name}.bin"
|
||||
tools.esptool.upload.network_pattern="{network_cmd}" "{runtime.platform.path}/tools/espota.py" -i "{serial.port}" -p "{network.port}" "--auth={network.password}" -f "{build.path}/{build.project_name}.bin"
|
||||
|
||||
tools.mkspiffs.cmd=mkspiffs
|
||||
tools.mkspiffs.cmd.windows=mkspiffs.exe
|
||||
tools.mkspiffs.path={runtime.tools.mkspiffs.path}
|
||||
|
||||
tools.espupload.cmd=python
|
||||
tools.espupload.cmd.windows=python.exe
|
||||
tools.espupload.path={runtime.platform.path}/tools
|
||||
|
||||
tools.espupload.upload.protocol=espupload
|
||||
tools.espupload.upload.params.verbose=
|
||||
tools.espupload.upload.params.quiet=
|
||||
tools.espupload.upload.pattern="{cmd}" "{path}/espupload.py" -f "{build.path}/{build.project_name}.bin"
|
@ -1,18 +0,0 @@
|
||||
/* Flash Split for 1M chips, no SPIFFS */
|
||||
/* sketch 999KB */
|
||||
/* eeprom 20KB */
|
||||
|
||||
MEMORY
|
||||
{
|
||||
dport0_0_seg : org = 0x3FF00000, len = 0x10
|
||||
dram0_0_seg : org = 0x3FFE8000, len = 0x14000
|
||||
iram1_0_seg : org = 0x40100000, len = 0x8000
|
||||
irom0_0_seg : org = 0x40201010, len = 0xf9ff0
|
||||
}
|
||||
|
||||
PROVIDE ( _SPIFFS_start = 0x402FB000 );
|
||||
PROVIDE ( _SPIFFS_end = 0x402FB000 );
|
||||
PROVIDE ( _SPIFFS_page = 0 );
|
||||
PROVIDE ( _SPIFFS_block = 0 );
|
||||
|
||||
INCLUDE "../ld/eagle.app.v6.common.ld"
|
@ -1,143 +0,0 @@
|
||||
|
||||
# ESP8266 platform
|
||||
# ------------------------------
|
||||
|
||||
# For more info:
|
||||
# https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5---3rd-party-Hardware-specification
|
||||
|
||||
name=ESP8266 Modules
|
||||
version=2.4.2
|
||||
|
||||
|
||||
|
||||
|
||||
compiler.warning_flags=-w
|
||||
compiler.warning_flags.none=-w
|
||||
compiler.warning_flags.default=
|
||||
compiler.warning_flags.more=-Wall
|
||||
compiler.warning_flags.all=-Wall -Wextra
|
||||
|
||||
build.lwip_lib=-llwip_gcc
|
||||
build.lwip_include=lwip/include
|
||||
build.lwip_flags=-DLWIP_OPEN_SRC
|
||||
|
||||
build.vtable_flags=-DVTABLES_IN_FLASH
|
||||
|
||||
#build.float=-u _printf_float -u _scanf_float
|
||||
build.float=
|
||||
build.led=
|
||||
build.noextra4kheap=
|
||||
|
||||
compiler.path={runtime.tools.xtensa-lx106-elf-gcc.path}/bin/
|
||||
compiler.sdk.path={runtime.platform.path}/tools/sdk
|
||||
compiler.libc.path={runtime.platform.path}/tools/sdk/libc/xtensa-lx106-elf
|
||||
compiler.cpreprocessor.flags=-D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ "-I{compiler.sdk.path}/include" "-I{compiler.sdk.path}/{build.lwip_include}" "-I{compiler.libc.path}/include" "-I{build.path}/core"
|
||||
|
||||
compiler.c.cmd=xtensa-lx106-elf-gcc
|
||||
compiler.c.flags=-c {compiler.warning_flags} {build.noextra4kheap} -Os -g -Wpointer-arith -Wno-implicit-function-declaration -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -falign-functions=4 -MMD -std=gnu99 -ffunction-sections -fdata-sections
|
||||
|
||||
compiler.S.cmd=xtensa-lx106-elf-gcc
|
||||
compiler.S.flags=-c -g -x assembler-with-cpp -MMD -mlongcalls
|
||||
|
||||
compiler.c.elf.flags=-g {compiler.warning_flags} -Os -nostdlib -Wl,--no-check-sections -u app_entry {build.float} -Wl,-static "-L{compiler.sdk.path}/lib" "-L{compiler.sdk.path}/ld" "-L{compiler.libc.path}/lib" "-T{build.flash_ld}" -Wl,--gc-sections -Wl,-wrap,system_restart_local -Wl,-wrap,spi_flash_read
|
||||
|
||||
compiler.c.elf.cmd=xtensa-lx106-elf-gcc
|
||||
compiler.c.elf.libs=-lhal -lphy -lpp -lnet80211 {build.lwip_lib} -lwpa -lcrypto -lmain -lwps -lbearssl -laxtls -lespnow -lsmartconfig -lairkiss -lwpa2 -lstdc++ -lm -lc -lgcc
|
||||
|
||||
compiler.cpp.cmd=xtensa-lx106-elf-g++
|
||||
compiler.cpp.flags=-c {compiler.warning_flags} {build.noextra4kheap} -Os -g -mlongcalls -mtext-section-literals -fno-exceptions -fno-rtti -falign-functions=4 -std=c++11 -MMD -ffunction-sections -fdata-sections
|
||||
|
||||
compiler.as.cmd=xtensa-lx106-elf-as
|
||||
|
||||
compiler.ar.cmd=xtensa-lx106-elf-ar
|
||||
compiler.ar.flags=cru
|
||||
|
||||
compiler.elf2hex.cmd=esptool
|
||||
compiler.elf2hex.flags=
|
||||
|
||||
compiler.size.cmd=xtensa-lx106-elf-size
|
||||
|
||||
compiler.esptool.cmd=esptool
|
||||
compiler.esptool.cmd.windows=esptool.exe
|
||||
|
||||
# This can be overriden in boards.txt
|
||||
build.extra_flags=-DESP8266
|
||||
|
||||
# These can be overridden in platform.local.txt
|
||||
compiler.c.extra_flags=
|
||||
compiler.c.elf.extra_flags=
|
||||
compiler.S.extra_flags=
|
||||
compiler.cpp.extra_flags=
|
||||
compiler.ar.extra_flags=
|
||||
compiler.objcopy.eep.extra_flags=
|
||||
compiler.elf2hex.extra_flags=
|
||||
|
||||
## generate file with git version number
|
||||
## needs bash, git, and echo
|
||||
|
||||
|
||||
## windows-compatible version without git
|
||||
|
||||
|
||||
|
||||
## Build the app.ld linker file
|
||||
recipe.hooks.linking.prelink.1.pattern="{compiler.path}{compiler.c.cmd}" -CC -E -P {build.vtable_flags} "{runtime.platform.path}/tools/sdk/ld/eagle.app.v6.common.ld.h" -o "{runtime.platform.path}/tools/sdk/ld/eagle.app.v6.common.ld"
|
||||
|
||||
## Compile c files
|
||||
recipe.c.o.pattern="{compiler.path}{compiler.c.cmd}" {compiler.cpreprocessor.flags} {compiler.c.flags} -DF_CPU={build.f_cpu} {build.lwip_flags} {build.debug_port} {build.debug_level} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} -DARDUINO_BOARD="{build.board}" {build.led} {compiler.c.extra_flags} {build.extra_flags} {includes} "{source_file}" -o "{object_file}"
|
||||
|
||||
## Compile c++ files
|
||||
recipe.cpp.o.pattern="{compiler.path}{compiler.cpp.cmd}" {compiler.cpreprocessor.flags} {compiler.cpp.flags} -DF_CPU={build.f_cpu} {build.lwip_flags} {build.debug_port} {build.debug_level} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} -DARDUINO_BOARD="{build.board}" {build.led} {compiler.cpp.extra_flags} {build.extra_flags} {includes} "{source_file}" -o "{object_file}"
|
||||
|
||||
## Compile S files
|
||||
recipe.S.o.pattern="{compiler.path}{compiler.c.cmd}" {compiler.cpreprocessor.flags} {compiler.S.flags} -DF_CPU={build.f_cpu} {build.lwip_flags} {build.debug_port} {build.debug_level} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} -DARDUINO_BOARD="{build.board}" {build.led} {compiler.c.extra_flags} {build.extra_flags} {includes} "{source_file}" -o "{object_file}"
|
||||
|
||||
## Create archives
|
||||
recipe.ar.pattern="{compiler.path}{compiler.ar.cmd}" {compiler.ar.flags} {compiler.ar.extra_flags} "{build.path}/arduino.ar" "{object_file}"
|
||||
|
||||
## Combine gc-sections, archives, and objects
|
||||
recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" -Wl,-Map "-Wl,{build.path}/{build.project_name}.map" {compiler.c.elf.flags} {compiler.c.elf.extra_flags} -o "{build.path}/{build.project_name}.elf" -Wl,--start-group {object_files} "{build.path}/arduino.ar" {compiler.c.elf.libs} -Wl,--end-group "-L{build.path}"
|
||||
|
||||
## Create eeprom
|
||||
recipe.objcopy.eep.pattern=
|
||||
|
||||
## Create hex
|
||||
#recipe.objcopy.hex.pattern="{compiler.path}{compiler.elf2hex.cmd}" {compiler.elf2hex.flags} {compiler.elf2hex.extra_flags} "{build.path}/{build.project_name}.elf" "{build.path}/{build.project_name}.hex"
|
||||
|
||||
recipe.objcopy.hex.pattern="{runtime.tools.esptool.path}/{compiler.esptool.cmd}" -eo "{runtime.platform.path}/bootloaders/eboot/eboot.elf" -bo "{build.path}/{build.project_name}.bin" -bm {build.flash_mode} -bf {build.flash_freq} -bz {build.flash_size} -bs .text -bp 4096 -ec -eo "{build.path}/{build.project_name}.elf" -bs .irom0.text -bs .text -bs .data -bs .rodata -bc -ec
|
||||
|
||||
## Save hex
|
||||
recipe.output.tmp_file={build.project_name}.bin
|
||||
recipe.output.save_file={build.project_name}.{build.variant}.bin
|
||||
|
||||
## Compute size
|
||||
recipe.size.pattern="{compiler.path}{compiler.size.cmd}" -A "{build.path}/{build.project_name}.elf"
|
||||
recipe.size.regex=^(?:\.irom0\.text|\.text|\.data|\.rodata|)\s+([0-9]+).*
|
||||
recipe.size.regex.data=^(?:\.data|\.rodata|\.bss)\s+([0-9]+).*
|
||||
#recipe.size.regex.eeprom=^(?:\.eeprom)\s+([0-9]+).*
|
||||
|
||||
# ------------------------------
|
||||
|
||||
tools.esptool.cmd=esptool
|
||||
tools.esptool.cmd.windows=esptool.exe
|
||||
tools.esptool.path={runtime.tools.esptool.path}
|
||||
tools.esptool.network_cmd=python
|
||||
tools.esptool.network_cmd.windows=python.exe
|
||||
|
||||
tools.esptool.upload.protocol=esp
|
||||
tools.esptool.upload.params.verbose=-vv
|
||||
tools.esptool.upload.params.quiet=
|
||||
tools.esptool.upload.pattern="{path}/{cmd}" {upload.verbose} -cd {upload.resetmethod} -cb {upload.speed} -cp "{serial.port}" {upload.erase_cmd} -ca 0x00000 -cf "{build.path}/{build.project_name}.bin"
|
||||
tools.esptool.upload.network_pattern="{network_cmd}" "{runtime.platform.path}/tools/espota.py" -i "{serial.port}" -p "{network.port}" "--auth={network.password}" -f "{build.path}/{build.project_name}.bin"
|
||||
|
||||
tools.mkspiffs.cmd=mkspiffs
|
||||
tools.mkspiffs.cmd.windows=mkspiffs.exe
|
||||
tools.mkspiffs.path={runtime.tools.mkspiffs.path}
|
||||
|
||||
tools.espupload.cmd=python
|
||||
tools.espupload.cmd.windows=python.exe
|
||||
tools.espupload.path={runtime.platform.path}/tools
|
||||
tools.espupload.upload.protocol=espupload
|
||||
tools.espupload.upload.params.verbose=
|
||||
tools.espupload.upload.params.quiet=
|
||||
tools.espupload.upload.pattern="{cmd}" "{path}/espupload.py" -f "{build.path}/{build.project_name}.bin"
|
7124
arduino/version 2.6.3/boards.txt
Normal file
171
arduino/version 2.6.3/platform.txt
Normal file
@ -0,0 +1,171 @@
|
||||
|
||||
# ESP8266 platform
|
||||
# ------------------------------
|
||||
|
||||
# For more info:
|
||||
# https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5-3rd-party-Hardware-specification
|
||||
|
||||
name=ESP8266 Boards (2.6.3)
|
||||
version=2.6.3
|
||||
|
||||
# These will be removed by the packager script when doing a JSON release
|
||||
|
||||
|
||||
|
||||
|
||||
runtime.tools.signing={runtime.platform.path}/tools/signing.py
|
||||
runtime.tools.elf2bin={runtime.platform.path}/tools/elf2bin.py
|
||||
runtime.tools.sizes={runtime.platform.path}/tools/sizes.py
|
||||
runtime.tools.makecorever={runtime.platform.path}/tools/makecorever.py
|
||||
runtime.tools.eboot={runtime.platform.path}/bootloaders/eboot/eboot.elf
|
||||
|
||||
compiler.warning_flags=-w
|
||||
compiler.warning_flags.none=-w
|
||||
compiler.warning_flags.default=
|
||||
compiler.warning_flags.more=-Wall
|
||||
compiler.warning_flags.all=-Wall -Wextra
|
||||
|
||||
build.lwip_lib=-llwip_gcc
|
||||
build.lwip_include=lwip/include
|
||||
build.lwip_flags=-DLWIP_OPEN_SRC
|
||||
|
||||
build.vtable_flags=-DVTABLES_IN_FLASH
|
||||
|
||||
build.sslflags=
|
||||
|
||||
build.exception_flags=-fno-exceptions
|
||||
build.stdcpp_lib=-lstdc++
|
||||
build.stdcpp_level=-std=gnu++11
|
||||
|
||||
#build.float=-u _printf_float -u _scanf_float
|
||||
build.float=
|
||||
build.led=
|
||||
|
||||
# default SDK for all boards
|
||||
# (generic board overrides this variable)
|
||||
build.sdk=NONOSDK22x_190703
|
||||
#build.sdk=NONOSDK22x_191024
|
||||
#build.sdk=NONOSDK22x_191105
|
||||
|
||||
compiler.path={runtime.tools.xtensa-lx106-elf-gcc.path}/bin/
|
||||
compiler.sdk.path={runtime.platform.path}/tools/sdk
|
||||
|
||||
compiler.libc.path={runtime.platform.path}/tools/sdk/libc/xtensa-lx106-elf
|
||||
compiler.cpreprocessor.flags=-D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ "-I{compiler.sdk.path}/include" "-I{compiler.sdk.path}/{build.lwip_include}" "-I{compiler.libc.path}/include" "-I{build.path}/core"
|
||||
|
||||
compiler.c.cmd=xtensa-lx106-elf-gcc
|
||||
compiler.c.flags=-c {compiler.warning_flags} -Os -g -Wpointer-arith -Wno-implicit-function-declaration -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -falign-functions=4 -MMD -std=gnu99 -ffunction-sections -fdata-sections {build.exception_flags} {build.sslflags}
|
||||
|
||||
compiler.S.cmd=xtensa-lx106-elf-gcc
|
||||
compiler.S.flags=-c -g -x assembler-with-cpp -MMD -mlongcalls
|
||||
|
||||
compiler.c.elf.flags=-g {compiler.warning_flags} -Os -nostdlib -Wl,--no-check-sections -u app_entry {build.float} -Wl,-static "-L{compiler.sdk.path}/lib" "-L{compiler.sdk.path}/lib/{build.sdk}" "-L{compiler.sdk.path}/ld" "-L{compiler.libc.path}/lib" "-T{build.flash_ld}" -Wl,--gc-sections -Wl,-wrap,system_restart_local -Wl,-wrap,spi_flash_read
|
||||
|
||||
compiler.c.elf.cmd=xtensa-lx106-elf-gcc
|
||||
compiler.c.elf.libs=-lhal -lphy -lpp -lnet80211 {build.lwip_lib} -lwpa -lcrypto -lmain -lwps -lbearssl -laxtls -lespnow -lsmartconfig -lairkiss -lwpa2 {build.stdcpp_lib} -lm -lc -lgcc
|
||||
|
||||
compiler.cpp.cmd=xtensa-lx106-elf-g++
|
||||
compiler.cpp.flags=-c {compiler.warning_flags} -Os -g -mlongcalls -mtext-section-literals -fno-rtti -falign-functions=4 {build.stdcpp_level} -MMD -ffunction-sections -fdata-sections {build.exception_flags} {build.sslflags}
|
||||
|
||||
compiler.as.cmd=xtensa-lx106-elf-as
|
||||
|
||||
compiler.ar.cmd=xtensa-lx106-elf-ar
|
||||
compiler.ar.flags=cru
|
||||
|
||||
compiler.elf2hex.cmd=esptool
|
||||
compiler.elf2hex.flags=
|
||||
|
||||
compiler.size.cmd=xtensa-lx106-elf-size
|
||||
|
||||
# This can be overriden in boards.txt
|
||||
build.extra_flags=-DESP8266
|
||||
|
||||
# These can be overridden in platform.local.txt
|
||||
compiler.c.extra_flags=
|
||||
compiler.c.elf.extra_flags=
|
||||
compiler.S.extra_flags=
|
||||
compiler.cpp.extra_flags=
|
||||
compiler.ar.extra_flags=
|
||||
compiler.objcopy.eep.extra_flags=
|
||||
compiler.elf2hex.extra_flags=
|
||||
|
||||
## generate file with git version number
|
||||
## needs git
|
||||
recipe.hooks.sketch.prebuild.pattern="{runtime.tools.python3.path}/python3" "{runtime.tools.signing}" --mode header --publickey "{build.source.path}/public.key" --out "{build.path}/core/Updater_Signing.h"
|
||||
# This is quite a working hack. This form of prebuild hook, while intuitive, is not explicitly documented.
|
||||
|
||||
|
||||
## Build the app.ld linker file
|
||||
recipe.hooks.linking.prelink.1.pattern="{compiler.path}{compiler.c.cmd}" -CC -E -P {build.vtable_flags} "{runtime.platform.path}/tools/sdk/ld/eagle.app.v6.common.ld.h" -o "{build.path}/local.eagle.app.v6.common.ld"
|
||||
|
||||
## Compile c files
|
||||
recipe.c.o.pattern="{compiler.path}{compiler.c.cmd}" {compiler.cpreprocessor.flags} {compiler.c.flags} -D{build.sdk}=1 -DF_CPU={build.f_cpu} {build.lwip_flags} {build.debug_port} {build.debug_level} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} -DARDUINO_BOARD="{build.board}" {build.led} {build.flash_flags} {compiler.c.extra_flags} {build.extra_flags} {includes} "{source_file}" -o "{object_file}"
|
||||
|
||||
## Compile c++ files
|
||||
recipe.cpp.o.pattern="{compiler.path}{compiler.cpp.cmd}" {compiler.cpreprocessor.flags} {compiler.cpp.flags} -D{build.sdk}=1 -DF_CPU={build.f_cpu} {build.lwip_flags} {build.debug_port} {build.debug_level} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} -DARDUINO_BOARD="{build.board}" {build.led} {build.flash_flags} {compiler.cpp.extra_flags} {build.extra_flags} {includes} "{source_file}" -o "{object_file}"
|
||||
|
||||
## Compile S files
|
||||
recipe.S.o.pattern="{compiler.path}{compiler.c.cmd}" {compiler.cpreprocessor.flags} {compiler.S.flags} -D{build.sdk}=1 -DF_CPU={build.f_cpu} {build.lwip_flags} {build.debug_port} {build.debug_level} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} -DARDUINO_BOARD="{build.board}" {build.led} {build.flash_flags} {compiler.c.extra_flags} {build.extra_flags} {includes} "{source_file}" -o "{object_file}"
|
||||
|
||||
## Create archives
|
||||
recipe.ar.pattern="{compiler.path}{compiler.ar.cmd}" {compiler.ar.flags} {compiler.ar.extra_flags} "{archive_file_path}" "{object_file}"
|
||||
|
||||
## Combine gc-sections, archives, and objects
|
||||
recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" {build.exception_flags} -Wl,-Map "-Wl,{build.path}/{build.project_name}.map" {compiler.c.elf.flags} {compiler.c.elf.extra_flags} -o "{build.path}/{build.project_name}.elf" -Wl,--start-group {object_files} "{archive_file_path}" {compiler.c.elf.libs} -Wl,--end-group "-L{build.path}"
|
||||
|
||||
## Create eeprom
|
||||
recipe.objcopy.eep.pattern=
|
||||
|
||||
## Create hex
|
||||
recipe.objcopy.hex.1.pattern="{runtime.tools.python3.path}/python3" "{runtime.tools.elf2bin}" --eboot "{runtime.tools.eboot}" --app "{build.path}/{build.project_name}.elf" --flash_mode {build.flash_mode} --flash_freq {build.flash_freq} --flash_size {build.flash_size} --path "{runtime.tools.xtensa-lx106-elf-gcc.path}/bin" --out "{build.path}/{build.project_name}.bin"
|
||||
recipe.objcopy.hex.2.pattern="{runtime.tools.python3.path}/python3" "{runtime.tools.signing}" --mode sign --privatekey "{build.source.path}/private.key" --bin "{build.path}/{build.project_name}.bin" --out "{build.path}/{build.project_name}.bin.signed" --legacy "{build.path}/{build.project_name}.bin.legacy_sig"
|
||||
recipe.objcopy.hex.3.pattern="{runtime.tools.python3.path}/python3" "{runtime.tools.sizes}" --elf "{build.path}/{build.project_name}.elf" --path "{runtime.tools.xtensa-lx106-elf-gcc.path}/bin"
|
||||
|
||||
## Save hex
|
||||
recipe.output.tmp_file={build.project_name}.bin
|
||||
recipe.output.save_file={build.project_name}.{build.variant}.bin
|
||||
|
||||
## Compute size
|
||||
recipe.size.pattern="{compiler.path}{compiler.size.cmd}" -A "{build.path}/{build.project_name}.elf"
|
||||
recipe.size.regex=^(?:\.irom0\.text|\.text|\.text1|\.data|\.rodata|)\s+([0-9]+).*
|
||||
recipe.size.regex.data=^(?:\.data|\.rodata|\.bss)\s+([0-9]+).*
|
||||
#recipe.size.regex.eeprom=^(?:\.eeprom)\s+([0-9]+).*
|
||||
|
||||
# ------------------------------
|
||||
|
||||
tools.esptool.path=
|
||||
# Because the variable expansion doesn't allow one tool to find another, the following lines
|
||||
# will point to "{runtime.platform.path}/tools/python3/python3" in GIT and
|
||||
# "{runtime.tools.python3.path}/python3" for JSON board manager releases.
|
||||
tools.esptool.cmd={runtime.tools.python3.path}/python3
|
||||
tools.esptool.network_cmd={runtime.tools.python3.path}/python3
|
||||
|
||||
|
||||
|
||||
tools.esptool.upload.protocol=esp
|
||||
# esptool.py --trace option is a debug option, not a verbose option
|
||||
tools.esptool.upload.params.verbose=
|
||||
tools.esptool.upload.params.quiet=
|
||||
|
||||
# First, potentially perform an erase or nothing
|
||||
# Next, do the binary upload
|
||||
# Combined in one rule because Arduino doesn't suport upload.1.pattern/upload.3.pattern
|
||||
tools.esptool.upload.pattern="{cmd}" "{runtime.platform.path}/tools/upload.py" --chip esp8266 --port "{serial.port}" --baud "{upload.speed}" "{upload.verbose}" {upload.erase_cmd} {upload.resetmethod} write_flash 0x0 "{build.path}/{build.project_name}.bin"
|
||||
|
||||
tools.esptool.upload.network_pattern="{network_cmd}" "{runtime.platform.path}/tools/espota.py" -i "{serial.port}" -p "{network.port}" "--auth={network.password}" -f "{build.path}/{build.project_name}.bin"
|
||||
|
||||
tools.mkspiffs.cmd=mkspiffs
|
||||
tools.mkspiffs.cmd.windows=mkspiffs.exe
|
||||
tools.mkspiffs.path={runtime.tools.mkspiffs.path}
|
||||
|
||||
tools.mklittlefs.cmd=mklittlefs
|
||||
tools.mklittlefs.cmd.windows=mklittlefs.exe
|
||||
tools.mklittlefs.path={runtime.platform.path}/tools/mklittlefs
|
||||
|
||||
tools.espupload.cmd=python
|
||||
tools.espupload.cmd.windows=python.exe
|
||||
tools.espupload.path={runtime.platform.path}/tools
|
||||
tools.espupload.upload.protocol=espupload
|
||||
tools.espupload.upload.params.verbose=
|
||||
tools.espupload.upload.params.quiet=
|
||||
tools.espupload.upload.pattern="{cmd}" "{path}/espupload.py" -f "{build.path}/{build.project_name}.bin"
|
@ -1,18 +0,0 @@
|
||||
/* Flash Split for 1M chips */
|
||||
/* sketch 999KB */
|
||||
/* eeprom 20KB */
|
||||
|
||||
MEMORY
|
||||
{
|
||||
dport0_0_seg : org = 0x3FF00000, len = 0x10
|
||||
dram0_0_seg : org = 0x3FFE8000, len = 0x14000
|
||||
iram1_0_seg : org = 0x40100000, len = 0x8000
|
||||
irom0_0_seg : org = 0x40201010, len = 0xf9ff0
|
||||
}
|
||||
|
||||
PROVIDE ( _SPIFFS_start = 0x402FB000 );
|
||||
PROVIDE ( _SPIFFS_end = 0x402FB000 );
|
||||
PROVIDE ( _SPIFFS_page = 0 );
|
||||
PROVIDE ( _SPIFFS_block = 0 );
|
||||
|
||||
INCLUDE "esp8266.flash.common.ld"
|
@ -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_
|
@ -1,44 +0,0 @@
|
||||
// Copyright 2009 Ken Shirriff
|
||||
// Copyright 2017, 2018 David Conran
|
||||
|
||||
// NEC originally added from https://github.com/shirriff/Arduino-IRremote/
|
||||
|
||||
#ifndef IR_NEC_H_
|
||||
#define IR_NEC_H_
|
||||
|
||||
#include <stdint.h>
|
||||
#include "IRremoteESP8266.h"
|
||||
|
||||
// Supports:
|
||||
// Brand: Yamaha, Model: RAV561 remote
|
||||
// Brand: Yamaha, Model: RXV585B A/V Receiver
|
||||
|
||||
// Constants
|
||||
// Ref:
|
||||
// http://www.sbprojects.com/knowledge/ir/nec.php
|
||||
const uint16_t kNecTick = 560;
|
||||
const uint16_t kNecHdrMarkTicks = 16;
|
||||
const uint16_t kNecHdrMark = kNecHdrMarkTicks * kNecTick;
|
||||
const uint16_t kNecHdrSpaceTicks = 8;
|
||||
const uint16_t kNecHdrSpace = kNecHdrSpaceTicks * kNecTick;
|
||||
const uint16_t kNecBitMarkTicks = 1;
|
||||
const uint16_t kNecBitMark = kNecBitMarkTicks * kNecTick;
|
||||
const uint16_t kNecOneSpaceTicks = 3;
|
||||
const uint16_t kNecOneSpace = kNecOneSpaceTicks * kNecTick;
|
||||
const uint16_t kNecZeroSpaceTicks = 1;
|
||||
const uint16_t kNecZeroSpace = kNecZeroSpaceTicks * kNecTick;
|
||||
const uint16_t kNecRptSpaceTicks = 4;
|
||||
const uint16_t kNecRptSpace = kNecRptSpaceTicks * kNecTick;
|
||||
const uint16_t kNecRptLength = 4;
|
||||
const uint16_t kNecMinCommandLengthTicks = 193;
|
||||
const uint32_t kNecMinCommandLength = kNecMinCommandLengthTicks * kNecTick;
|
||||
const uint32_t kNecMinGap =
|
||||
kNecMinCommandLength -
|
||||
(kNecHdrMark + kNecHdrSpace + kNECBits * (kNecBitMark + kNecOneSpace) +
|
||||
kNecBitMark);
|
||||
const uint16_t kNecMinGapTicks =
|
||||
kNecMinCommandLengthTicks -
|
||||
(kNecHdrMarkTicks + kNecHdrSpaceTicks +
|
||||
kNECBits * (kNecBitMarkTicks + kNecOneSpaceTicks) + kNecBitMarkTicks);
|
||||
|
||||
#endif // IR_NEC_H_
|
@ -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
|
||||
[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
|
||||
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.
|
||||
## v2.7.4 Now Available
|
||||
Version 2.7.4 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
|
||||
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.
|
@ -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
|
||||
[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
|
||||
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.
|
||||
## v2.7.4 disponible
|
||||
Version 2.7.4 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
|
||||
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.
|
@ -1,5 +1,55 @@
|
||||
# Release Notes
|
||||
|
||||
## _v2.7.4 (20200226)_
|
||||
|
||||
**[Bug Fixes]**
|
||||
- IRMQTTServer: Fix bug when receiving an IR A/C message and not re-transmitting it. (#1035, #1038)
|
||||
- Coolix: `setRaw()` doesn't update power state. (#1040, #1041)
|
||||
|
||||
**[Features]**
|
||||
- Electra: Add improved feature support. (#1033, #1051)
|
||||
- Add support for Epson protocol. (#1034, #1050)
|
||||
- Add options to `decode()` to aid detection. Improve NEC detection. (#1042, #1046)
|
||||
- SamsungAc: Add support for Light & Ion (VirusDoctor). (#1045, #1048, #1049)
|
||||
- Add Italian (it-IT) locale/language support. (#1047) (kudos @egueli)
|
||||
- gc_decode: Add repeat support for pronto codes. (#1034, #1043)
|
||||
|
||||
**[Misc]**
|
||||
- Update supported SamsungAc devices (#1045)
|
||||
- Coolix: Subtle protocol timing adjustments (#1036, #1037)
|
||||
- Add supported Electra device model info (#1033)
|
||||
|
||||
|
||||
## _v2.7.3 (20200130)_
|
||||
|
||||
**[Features]**
|
||||
- Allow protocols to be enabled or disabled with compiler flags. (#1013, #1012)
|
||||
- Panasonic AC: Add Ion Filter support for DKE models. (#1025, #1024)
|
||||
- Add support for sending Sony at 38Khz (#1029, #1018, #1019)
|
||||
- auto_analyse_raw_data.py: Handle analysing messages with no headers. (#1017)
|
||||
|
||||
**[Misc]**
|
||||
- Fix Coolix unit test errors when using Apple c++ compiler. (#1030, #1028)
|
||||
- Fix Apple clang c++ compiler error in unit tests. (#1027, #1026)
|
||||
- Improve/fix scraping of supported devices (#1022)
|
||||
- Panasonic PKR series A/C uses DKE protocol. (#1020, #1021)
|
||||
- Update NEC supported devices. (#1018)
|
||||
- Add note to avoid GPIO16 on the ESP8266 for receiving. (#1016, #1015)
|
||||
|
||||
|
||||
## _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)_
|
||||
|
||||
**[Bug Fixes]**
|
@ -1,6 +1,6 @@
|
||||
<!--- WARNING: Do NOT edit this file directly.
|
||||
It is generated by './tools/scrape_supported_devices.py'.
|
||||
Last generated: Mon Nov 25 11:12:06 2019 --->
|
||||
Last generated: Wed Feb 26 16:31:08 2020 --->
|
||||
# IR Protocols supported by this library
|
||||
|
||||
| Protocol | Brand | Model | A/C Model | Detailed A/C Support |
|
||||
@ -11,68 +11,72 @@
|
||||
| [Carrier](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Carrier.cpp) | **Carrier/Surrey** | 42QG5A55970 remote<BR>53NGK009/012 Inverter<BR>619EGX0090E0 A/C<BR>619EGX0120E0 A/C<BR>619EGX0180E0 A/C<BR>619EGX0220E0 A/C | | - |
|
||||
| [Coolix](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Coolix.cpp) | **[Beko](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Coolix.h)** | BINR 070/071 split-type A/C<BR>BINR 070/071 split-type A/C<BR>RG57K7(B)/BGEF Remote<BR>RG57K7(B)/BGEF Remote | | Yes |
|
||||
| [Coolix](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Coolix.cpp) | **[Midea](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Coolix.h)** | MS12FU-10HRDN1-QRD0GW(B) A/C<BR>MS12FU-10HRDN1-QRD0GW(B) A/C<BR>MSABAU-07HRFN1-QRD0GW A/C (circa 2016)<BR>MSABAU-07HRFN1-QRD0GW A/C (circa 2016)<BR>RG52D/BGE Remote<BR>RG52D/BGE Remote | | Yes |
|
||||
| [Coolix](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Coolix.cpp) | **[Tokio](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Coolix.h)** | AATOEMF17-12CHR1SW split-type RG51|50/BGE Remote<BR>AATOEMF17-12CHR1SW split-type RG51|50/BGE Remote | | Yes |
|
||||
| [Coolix](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Coolix.cpp) | **[Tokio](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Coolix.h)** | AATOEMF17-12CHR1SW split-type RG51\|50/BGE Remote<BR>AATOEMF17-12CHR1SW split-type RG51\|50/BGE Remote | | Yes |
|
||||
| [Daikin](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Daikin.cpp) | **[Daikin](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Daikin.h)** | 17 Series A/C (DAIKIN128)<BR>ARC423A5 remote<BR>ARC433** remote<BR>ARC433B69 remote<BR>ARC477A1 remote<BR>ARC480A5 remote (DAIKIN152)<BR>BRC4C153 remote<BR>BRC52B63 remote (DAIKIN128)<BR>FTE12HV2S A/C<BR>FTXB09AXVJU A/C (DAIKIN128)<BR>FTXB12AXVJU A/C (DAIKIN128)<BR>FTXZ25NV1B A/C<BR>FTXZ35NV1B A/C<BR>FTXZ50NV1B A/C | | Yes |
|
||||
| [Denon](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Denon.cpp) | **Unknown** | | | - |
|
||||
| [Dish](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Dish.cpp) | **DISH NETWORK** | echostar 301 | | - |
|
||||
| [Electra](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Electra.cpp) | **[AUX](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Electra.h)** | KFR-35GW/BpNFW=3 A/C<BR>YKR-T/011 remote | | Yes |
|
||||
| [Fujitsu](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Fujitsu.cpp) | **[Fujitsu](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Fujitsu.h)** | AGTV14LAC A/C<BR>AR-DB1 remote<BR>AR-DL10 remote<BR>AR-RAC1E remote<BR>AR-RAE1E remote<BR>AR-RAH2E remote<BR>AR-REB1E remote<BR>AR-RY4 remote<BR>AST9RSGCW A/C<BR>ASTB09LBC A/C<BR>ASU30C1 A/C<BR>ASYG30LFCA A/C<BR>ASYG7LMCA A/C | | Yes |
|
||||
| [Fujitsu](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Fujitsu.cpp) | **[Fujitsu General](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Fujitsu.h)** | AR-JW2 remote | | Yes |
|
||||
| [Electra](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Electra.cpp) | **[Electra](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Electra.h)** | Classic INV 17 / AXW12DCS A/C<BR>YKR-M/003E remote | | Yes |
|
||||
| [Epson](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Epson.cpp) | **Unknown** | | | - |
|
||||
| [Fujitsu](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Fujitsu.cpp) | **[Fujitsu](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Fujitsu.h)** | AGTV14LAC A/C<BR>AR-DB1 remote<BR>AR-DL10 remote<BR>AR-RAC1E remote<BR>AR-RAE1E remote<BR>AR-RAH2E remote<BR>AR-REB1E remote<BR>AR-RY4 remote<BR>AST9RSGCW A/C<BR>ASTB09LBC A/C<BR>ASU30C1 A/C<BR>ASYG30LFCA A/C<BR>ASYG7LMCA A/C | ARDB1<BR>ARJW2<BR>ARRAH2E<BR>ARREB1E<BR>ARRY4 | Yes |
|
||||
| [Fujitsu](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Fujitsu.cpp) | **[Fujitsu General](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Fujitsu.h)** | AR-JW2 remote | ARDB1<BR>ARJW2<BR>ARRAH2E<BR>ARREB1E<BR>ARRY4 | Yes |
|
||||
| [GICable](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_GICable.cpp) | **Unknown** | | | - |
|
||||
| [GlobalCache](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_GlobalCache.cpp) | **Unknown** | | | - |
|
||||
| [Goodweather](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Goodweather.cpp) | **[Goodweather](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Goodweather.h)** | ZH/JT-03 remote | | Yes |
|
||||
| [Gree](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.cpp) | **[EKOKAI](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.h)** | A/C | | Yes |
|
||||
| [Gree](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.cpp) | **[Green](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.h)** | YBOFB remote<BR>YBOFB2 remote | | Yes |
|
||||
| [Gree](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.cpp) | **[RusClimate](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.h)** | EACS/I-09HAR_X/N3 A/C<BR>YAW1F remote | | Yes |
|
||||
| [Gree](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.cpp) | **[Ultimate](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.h)** | Heat Pump | | Yes |
|
||||
| [Gree](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.cpp) | **[EKOKAI](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.h)** | A/C | YAW1F<BR>YBOFB | Yes |
|
||||
| [Gree](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.cpp) | **[Green](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.h)** | YBOFB remote<BR>YBOFB2 remote | YAW1F<BR>YBOFB | Yes |
|
||||
| [Gree](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.cpp) | **[RusClimate](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.h)** | EACS/I-09HAR_X/N3 A/C<BR>YAW1F remote | YAW1F<BR>YBOFB | Yes |
|
||||
| [Gree](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.cpp) | **[Ultimate](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.h)** | Heat Pump | YAW1F<BR>YBOFB | Yes |
|
||||
| [Haier](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Haier.cpp) | **[Haier](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Haier.h)** | HSU-09HMC203 A/C<BR>HSU07-HEA03 remote<BR>YR-W02 remote | | Yes |
|
||||
| [Hitachi](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Hitachi.cpp) | **[Hitachi](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Hitachi.h)** | LT0541-HTA remote<BR>RAR-8P2 remote<BR>RAS-35THA6 remote<BR>RAS-AJ25H A/C<BR>Series VI A/C (Circa 2007) | | Yes |
|
||||
| [Inax](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Inax.cpp) | **Lixil** | Inax DT-BA283 Toilet | | - |
|
||||
| [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) | **[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** | | | - |
|
||||
| [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** | | | - |
|
||||
| [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) | **[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 |
|
||||
| [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 |
|
||||
| [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) | **[Toshiba](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_NEC.h)** | 42TL838 LCD TV | | - |
|
||||
| [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 |
|
||||
| [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>A75C2616-1 remote (DKE)<BR>A75C3704 remote<BR>A75C3747 remote<BR>CKP series A/C<BR>CS-E7PKR A/C (DKE)<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>DKW series A/C (DKE)<BR>JKE series A/C<BR>NKE series A/C<BR>PKR series A/C (DKE)<BR>RKR series A/C<BR>TV | CKP<BR>DKE<BR>JKE<BR>LKE<BR>NKE<BR>RKR | Yes |
|
||||
| [Pioneer](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Pioneer.cpp) | **Unknown** | | | - |
|
||||
| [Pronto](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Pronto.cpp) | **Unknown** | | | - |
|
||||
| [RC5_RC6](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_RC5_RC6.cpp) | **Unknown** | | | - |
|
||||
| [RCMM](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_RCMM.cpp) | **Microsoft** | XBOX 360 | | - |
|
||||
| [Samsung](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Samsung.cpp) | **[Samsung](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Samsung.h)** | AR12HSSDBWKNEU A/C<BR>AR12KSFPEWQNET A/C<BR>IEC-R03 remote<BR>UA55H6300 TV | | Yes |
|
||||
| [Samsung](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Samsung.cpp) | **[Samsung](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Samsung.h)** | AR09FSSDAWKNFA A/C<BR>AR12HSSDBWKNEU A/C<BR>AR12KSFPEWQNET A/C<BR>DB63-03556X003 remote<BR>IEC-R03 remote<BR>UA55H6300 TV | | Yes |
|
||||
| [Sanyo](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Sanyo.cpp) | **Unknown** | | | - |
|
||||
| [Sharp](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Sharp.cpp) | **[Sharp](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Sharp.h)** | AY-ZP40KR A/C<BR>LC-52D62U TV | | Yes |
|
||||
| [Sherwood](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Sherwood.cpp) | **Sherwood** | RC-138 remote<BR>RD6505(B) Receiver | | - |
|
||||
| [Sony](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Sony.cpp) | **Unknown** | | | - |
|
||||
| [Sony](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Sony.cpp) | **Sony** | HT-CT380 Soundbar (Uses 38kHz & 3 repeats) | | - |
|
||||
| [Tcl](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Tcl.cpp) | **[Leberg](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Tcl.h)** | LBS-TOR07 A/C | | Yes |
|
||||
| [Teco](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Teco.cpp) | **[Alaska](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Teco.h)** | SAC9010QC A/C<BR>SAC9010QC remote | | Yes |
|
||||
| [Toshiba](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Toshiba.cpp) | **[Toshiba](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Toshiba.h)** | Akita EVO II<BR>RAS 18SKP-ES<BR>RAS-B13N3KV2<BR>RAS-B13N3KVP-E<BR>WC-L03SE<BR>WH-TA04NE | | Yes |
|
||||
| [Trotec](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Trotec.cpp) | **[Unknown](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Trotec.h)** | | | Yes |
|
||||
| [Vestel](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Vestel.cpp) | **[Vestel](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Vestel.h)** | BIOX CXP-9 A/C (9K BTU) | | Yes |
|
||||
| [Whirlpool](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Whirlpool.cpp) | **[Whirlpool](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Whirlpool.h)** | DG11J1-04 remote<BR>DG11J1-3A remote<BR>DG11J1-91 remote<BR>SPIS409L A/C<BR>SPIS412L A/C<BR>SPIW409L A/C<BR>SPIW412L A/C<BR>SPIW418L A/C | | Yes |
|
||||
| [Whirlpool](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Whirlpool.cpp) | **[Whirlpool](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Whirlpool.h)** | DG11J1-04 remote<BR>DG11J1-3A remote<BR>DG11J1-91 remote<BR>SPIS409L A/C<BR>SPIS412L A/C<BR>SPIW409L A/C<BR>SPIW412L A/C<BR>SPIW418L A/C | DG11J13A<BR>DG11J191 | Yes |
|
||||
| [Whynter](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Whynter.cpp) | **Whynter** | ARC-110WD A/C | | - |
|
||||
|
||||
|
||||
## Send only protocols:
|
||||
|
||||
- GLOBALCACHE
|
||||
- MITSUBISHI112
|
||||
- PRONTO
|
||||
- RAW
|
||||
- SHERWOOD
|
||||
- TCL112AC
|
||||
- SONY_38K
|
||||
|
||||
|
||||
## Send & decodable protocols:
|
||||
@ -92,6 +96,7 @@
|
||||
- DENON
|
||||
- DISH
|
||||
- ELECTRA_AC
|
||||
- EPSON
|
||||
- FUJITSU_AC
|
||||
- GICABLE
|
||||
- GOODWEATHER
|
||||
@ -113,6 +118,7 @@
|
||||
- MAGIQUEST
|
||||
- MIDEA
|
||||
- MITSUBISHI
|
||||
- MITSUBISHI112
|
||||
- MITSUBISHI136
|
||||
- MITSUBISHI2
|
||||
- MITSUBISHI_AC
|
||||
@ -138,10 +144,10 @@
|
||||
- SHARP
|
||||
- SHARP_AC
|
||||
- SONY
|
||||
- TCL112AC
|
||||
- TECO
|
||||
- TOSHIBA_AC
|
||||
- TROTEC
|
||||
- VESTEL_AC
|
||||
- WHIRLPOOL_AC
|
||||
- WHYNTER
|
||||
- typeguess
|
@ -37,6 +37,8 @@
|
||||
* * Pin 0/D3: Can interfere with the boot/program mode & support circuits.
|
||||
* * Pin 1/TX/TXD0: Any serial transmissions from the ESP will interfere.
|
||||
* * Pin 3/RX/RXD0: Any serial transmissions to the ESP will interfere.
|
||||
* * Pin 16/D0: Has no interrupts on the ESP8266, so can't be used for IR
|
||||
* receiving with this library.
|
||||
* * ESP-01 modules are tricky. We suggest you use a module with more GPIOs
|
||||
* for your first time. e.g. ESP-12 etc.
|
||||
*
|
||||
@ -54,6 +56,7 @@
|
||||
// ==================== start of TUNEABLE PARAMETERS ====================
|
||||
|
||||
// The GPIO an IR detector/demodulator is connected to. Recommended: 14 (D5)
|
||||
// Note: GPIO 16 won't work on the ESP8266 as it does not have interrupts.
|
||||
const uint16_t kRecvPin = 14;
|
||||
|
||||
// GPIO to use to control the IR LED circuit. Recommended: 4 (D2).
|
@ -47,6 +47,7 @@ const int8_t kDefaultIrLed = 4; // <=- CHANGE_ME (optional)
|
||||
const bool kInvertTxOutput = false;
|
||||
|
||||
// Default GPIO the IR demodulator is connected to/controlled by. GPIO 14 = D5.
|
||||
// Note: GPIO 16 won't work on the ESP8266 as it does not have interrupts.
|
||||
const int8_t kDefaultIrRx = 14; // <=- CHANGE_ME (optional)
|
||||
|
||||
// Enable/disable receiving/decoding IR messages entirely.
|
||||
@ -238,7 +239,7 @@ const uint16_t kJsonAcStateMaxSize = 1024; // Bytes
|
||||
// ----------------- End of User Configuration Section -------------------------
|
||||
|
||||
// Constants
|
||||
#define _MY_VERSION_ "v1.4.5"
|
||||
#define _MY_VERSION_ "v1.4.6"
|
||||
|
||||
const uint8_t kRebootTime = 15; // Seconds
|
||||
const uint8_t kQuickDisplayTime = 2; // Seconds
|
@ -271,7 +271,7 @@
|
||||
*
|
||||
* #### Home Assistant MQTT Discovery
|
||||
* There is an option for this: 'Send MQTT Discovery' under the 'Admin' menu.
|
||||
* It will produce a single MQTT Cliamte Discovery message for Home Assistant
|
||||
* It will produce a single MQTT Climate Discovery message for Home Assistant
|
||||
* provided you have everything configured correctly here and in HA.
|
||||
* This message has MQTT RETAIN set on it, so it only ever needs to be sent
|
||||
* once or if the config details change etc.
|
||||
@ -2679,7 +2679,7 @@ uint64_t getUInt64fromHex(char const *str) {
|
||||
// code: Numeric payload of the IR message. Most protocols use this.
|
||||
// code_str: The unparsed code to be sent. Used by complex protocol encodings.
|
||||
// bits: Nr. of bits in the protocol. 0 means use the protocol's default.
|
||||
// repeat: Nr. of times the message is to be repeated. (Not all protcols.)
|
||||
// repeat: Nr. of times the message is to be repeated. (Not all protocols.)
|
||||
// Returns:
|
||||
// bool: Successfully sent or not.
|
||||
bool sendIRCode(IRsend *irsend, decode_type_t const ir_type,
|
||||
@ -3071,6 +3071,10 @@ bool sendClimate(const String topic_prefix, const bool retain,
|
||||
lastClimateIr.reset();
|
||||
irClimateCounter++;
|
||||
}
|
||||
// Mark the "next" value as old/previous.
|
||||
if (ac != NULL) {
|
||||
ac->markAsSent();
|
||||
}
|
||||
return success;
|
||||
}
|
||||
|
||||
@ -3098,20 +3102,20 @@ bool decodeCommonAc(const decode_results *decode) {
|
||||
}
|
||||
#if IGNORE_DECODED_AC_PROTOCOL
|
||||
if (climate[0]->next.protocol != decode_type_t::UNKNOWN) {
|
||||
// Use the previous protcol/model if set.
|
||||
// Use the previous protocol/model if set.
|
||||
state.protocol = climate[0]->next.protocol;
|
||||
state.model = climate[0]->next.model;
|
||||
}
|
||||
#endif // IGNORE_DECODED_AC_PROTOCOL
|
||||
// Continue to use the previously prefered temperature units.
|
||||
// i.e. Keep using Celsius or Fahrenheit.
|
||||
if (climate[0]->next.celsius != state.celsius) {
|
||||
// We've got a mismatch, so we need to convert.
|
||||
state.degrees = climate[0]->next.celsius ? fahrenheitToCelsius(state.degrees)
|
||||
: celsiusToFahrenheit(state.degrees);
|
||||
state.celsius = climate[0]->next.celsius;
|
||||
}
|
||||
climate[0]->next = state; // Copy over the new climate state.
|
||||
// Continue to use the previously prefered temperature units.
|
||||
// i.e. Keep using Celsius or Fahrenheit.
|
||||
if (climate[0]->next.celsius != state.celsius) {
|
||||
// We've got a mismatch, so we need to convert.
|
||||
state.degrees = climate[0]->next.celsius ?
|
||||
fahrenheitToCelsius(state.degrees) : celsiusToFahrenheit(state.degrees);
|
||||
state.celsius = climate[0]->next.celsius;
|
||||
}
|
||||
climate[0]->next = state; // Copy over the new climate state.
|
||||
#if MQTT_ENABLE
|
||||
sendClimate(genStatTopic(0), true, false, REPLAY_DECODED_AC_MESSAGE,
|
||||
REPLAY_DECODED_AC_MESSAGE, climate[0]);
|
@ -23,6 +23,7 @@
|
||||
|
||||
// An IR detector/demodulator is connected to GPIO pin 14(D5 on a NodeMCU
|
||||
// board).
|
||||
// Note: GPIO 16 won't work on the ESP8266 as it does not have interrupts.
|
||||
const uint16_t kRecvPin = 14;
|
||||
|
||||
IRrecv irrecv(kRecvPin);
|
@ -17,7 +17,7 @@
|
||||
* Version 0.4 July, 2018
|
||||
* - Minor improvements and more A/C unit support.
|
||||
* Version 0.3 November, 2017
|
||||
* - Support for A/C decoding for some protcols.
|
||||
* - Support for A/C decoding for some protocols.
|
||||
* Version 0.2 April, 2017
|
||||
* - Decode from a copy of the data so we can start capturing faster thus
|
||||
* reduce the likelihood of miscaptures.
|
||||
@ -34,6 +34,7 @@
|
||||
// ==================== start of TUNEABLE PARAMETERS ====================
|
||||
// An IR detector/demodulator is connected to GPIO pin 14
|
||||
// e.g. D5 on a NodeMCU board.
|
||||
// Note: GPIO 16 won't work on the ESP8266 as it does not have interrupts.
|
||||
const uint16_t kRecvPin = 14;
|
||||
|
||||
// The Serial connection baud rate.
|
@ -40,6 +40,8 @@
|
||||
* * Pin 0/D3: Can interfere with the boot/program mode & support circuits.
|
||||
* * Pin 1/TX/TXD0: Any serial transmissions from the ESP will interfere.
|
||||
* * Pin 3/RX/RXD0: Any serial transmissions to the ESP will interfere.
|
||||
* * Pin 16/D0: Has no interrupts on the ESP8266, so can't be used for IR
|
||||
* receiving with this library.
|
||||
* * ESP-01 modules are tricky. We suggest you use a module with more GPIOs
|
||||
* for your first time. e.g. ESP-12 etc.
|
||||
*
|
||||
@ -57,6 +59,7 @@
|
||||
// ==================== start of TUNEABLE PARAMETERS ====================
|
||||
|
||||
// The GPIO an IR detector/demodulator is connected to. Recommended: 14 (D5)
|
||||
// Note: GPIO 16 won't work on the ESP8266 as it does not have interrupts.
|
||||
const uint16_t kRecvPin = 14;
|
||||
|
||||
// GPIO to use to control the IR LED circuit. Recommended: 4 (D2).
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
@ -39,6 +39,7 @@ IRHaierACYRW02 KEYWORD1
|
||||
IRHitachiAc KEYWORD1
|
||||
IRHitachiAc424 KEYWORD1
|
||||
IRKelvinatorAC KEYWORD1
|
||||
IRLgAc KEYWORD1
|
||||
IRMideaAC KEYWORD1
|
||||
IRMitsubishi112 KEYWORD1
|
||||
IRMitsubishi136 KEYWORD1
|
||||
@ -66,6 +67,7 @@ fanspeed_t KEYWORD1
|
||||
fujitsu_ac_remote_model_t KEYWORD1
|
||||
gree_ac_remote_model_t KEYWORD1
|
||||
irparams_t KEYWORD1
|
||||
lg_ac_remote_model_t KEYWORD1
|
||||
match_result_t KEYWORD1
|
||||
opmode_t KEYWORD1
|
||||
panasonic_ac_remote_model_t KEYWORD1
|
||||
@ -82,6 +84,7 @@ _delayMicroseconds KEYWORD2
|
||||
_getTime KEYWORD2
|
||||
_getTimer KEYWORD2
|
||||
_matchGeneric KEYWORD2
|
||||
_sendSony KEYWORD2
|
||||
_setMode KEYWORD2
|
||||
_setTemp KEYWORD2
|
||||
_setTime KEYWORD2
|
||||
@ -130,6 +133,7 @@ convertSwingV KEYWORD2
|
||||
coolix KEYWORD2
|
||||
copyIrParams KEYWORD2
|
||||
countBits KEYWORD2
|
||||
crudeNoiseFilter KEYWORD2
|
||||
daikin KEYWORD2
|
||||
daikin128 KEYWORD2
|
||||
daikin152 KEYWORD2
|
||||
@ -153,6 +157,7 @@ decodeDaikin2 KEYWORD2
|
||||
decodeDaikin216 KEYWORD2
|
||||
decodeDenon KEYWORD2
|
||||
decodeElectraAC KEYWORD2
|
||||
decodeEpson KEYWORD2
|
||||
decodeFujitsuAC KEYWORD2
|
||||
decodeGICable KEYWORD2
|
||||
decodeGoodweather KEYWORD2
|
||||
@ -249,6 +254,7 @@ getCorrectedRawLength KEYWORD2
|
||||
getCurrTime KEYWORD2
|
||||
getCurrentDay KEYWORD2
|
||||
getCurrentTime KEYWORD2
|
||||
getDisplay KEYWORD2
|
||||
getEcono KEYWORD2
|
||||
getEye KEYWORD2
|
||||
getEyeAuto KEYWORD2
|
||||
@ -346,10 +352,13 @@ isSwingVToggle KEYWORD2
|
||||
isTimeCommand KEYWORD2
|
||||
isTimerActive KEYWORD2
|
||||
isTimerEnabled KEYWORD2
|
||||
isValidLgAc KEYWORD2
|
||||
kelvinator KEYWORD2
|
||||
ledOff KEYWORD2
|
||||
ledOn KEYWORD2
|
||||
lg KEYWORD2
|
||||
mark KEYWORD2
|
||||
markAsSent KEYWORD2
|
||||
match KEYWORD2
|
||||
matchAtLeast KEYWORD2
|
||||
matchBytes KEYWORD2
|
||||
@ -401,6 +410,7 @@ sendDaikin216 KEYWORD2
|
||||
sendData KEYWORD2
|
||||
sendDenon KEYWORD2
|
||||
sendElectraAC KEYWORD2
|
||||
sendEpson KEYWORD2
|
||||
sendExtended KEYWORD2
|
||||
sendFujitsuAC KEYWORD2
|
||||
sendGC KEYWORD2
|
||||
@ -455,6 +465,7 @@ sendSharpAc KEYWORD2
|
||||
sendSharpRaw KEYWORD2
|
||||
sendSherwood KEYWORD2
|
||||
sendSony KEYWORD2
|
||||
sendSony38 KEYWORD2
|
||||
sendTcl112Ac KEYWORD2
|
||||
sendTeco KEYWORD2
|
||||
sendToshibaAC KEYWORD2
|
||||
@ -478,6 +489,7 @@ setCommand KEYWORD2
|
||||
setCurrTime KEYWORD2
|
||||
setCurrentDay KEYWORD2
|
||||
setCurrentTime KEYWORD2
|
||||
setDisplay KEYWORD2
|
||||
setEcono KEYWORD2
|
||||
setEye KEYWORD2
|
||||
setEyeAuto KEYWORD2
|
||||
@ -590,6 +602,7 @@ xorBytes KEYWORD2
|
||||
// LITERAL1
|
||||
AIWA_RC_T501 LITERAL1
|
||||
AIWA_RC_T501_BITS LITERAL1
|
||||
AKB75215403 LITERAL1
|
||||
ALLOW_DELAY_CALLS LITERAL1
|
||||
AMCOR LITERAL1
|
||||
ARDB1 LITERAL1
|
||||
@ -659,6 +672,7 @@ DECODE_DAIKIN216 LITERAL1
|
||||
DECODE_DENON LITERAL1
|
||||
DECODE_DISH LITERAL1
|
||||
DECODE_ELECTRA_AC LITERAL1
|
||||
DECODE_EPSON LITERAL1
|
||||
DECODE_FUJITSU_AC LITERAL1
|
||||
DECODE_GICABLE LITERAL1
|
||||
DECODE_GLOBALCACHE LITERAL1
|
||||
@ -721,6 +735,8 @@ DG11J191 LITERAL1
|
||||
DISH LITERAL1
|
||||
DISH_BITS LITERAL1
|
||||
ELECTRA_AC LITERAL1
|
||||
ENABLE_NOISE_FILTER_OPTION LITERAL1
|
||||
EPSON LITERAL1
|
||||
FUJITSU_AC LITERAL1
|
||||
FUJITSU_AC_BITS LITERAL1
|
||||
FUJITSU_AC_CMD_STAY_ON LITERAL1
|
||||
@ -748,6 +764,7 @@ FUJITSU_AC_SWING_BOTH LITERAL1
|
||||
FUJITSU_AC_SWING_HORIZ LITERAL1
|
||||
FUJITSU_AC_SWING_OFF LITERAL1
|
||||
FUJITSU_AC_SWING_VERT LITERAL1
|
||||
GE6711AR2853M LITERAL1
|
||||
GICABLE LITERAL1
|
||||
GICABLE_BITS LITERAL1
|
||||
GLOBALCACHE LITERAL1
|
||||
@ -956,6 +973,7 @@ SEND_DAIKIN216 LITERAL1
|
||||
SEND_DENON LITERAL1
|
||||
SEND_DISH LITERAL1
|
||||
SEND_ELECTRA_AC LITERAL1
|
||||
SEND_EPSON LITERAL1
|
||||
SEND_FUJITSU_AC LITERAL1
|
||||
SEND_GICABLE LITERAL1
|
||||
SEND_GLOBALCACHE LITERAL1
|
||||
@ -1018,6 +1036,7 @@ SONY LITERAL1
|
||||
SONY_12_BITS LITERAL1
|
||||
SONY_15_BITS LITERAL1
|
||||
SONY_20_BITS LITERAL1
|
||||
SONY_38K LITERAL1
|
||||
TCL112AC LITERAL1
|
||||
TECO LITERAL1
|
||||
TIMEOUT_MS LITERAL1
|
||||
@ -1063,6 +1082,22 @@ kAiwaRcT501PostBits LITERAL1
|
||||
kAiwaRcT501PostData LITERAL1
|
||||
kAiwaRcT501PreBits 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
|
||||
kAmcorBits LITERAL1
|
||||
kAmcorChecksumByte LITERAL1
|
||||
@ -1609,6 +1644,7 @@ kEconoStr LITERAL1
|
||||
kElectraAcAuto LITERAL1
|
||||
kElectraAcBitMark LITERAL1
|
||||
kElectraAcBits LITERAL1
|
||||
kElectraAcCleanOffset LITERAL1
|
||||
kElectraAcCool LITERAL1
|
||||
kElectraAcDry LITERAL1
|
||||
kElectraAcFan LITERAL1
|
||||
@ -1621,6 +1657,9 @@ kElectraAcFanSize LITERAL1
|
||||
kElectraAcHdrMark LITERAL1
|
||||
kElectraAcHdrSpace LITERAL1
|
||||
kElectraAcHeat LITERAL1
|
||||
kElectraAcLightToggleMask LITERAL1
|
||||
kElectraAcLightToggleOff LITERAL1
|
||||
kElectraAcLightToggleOn LITERAL1
|
||||
kElectraAcMaxTemp LITERAL1
|
||||
kElectraAcMessageGap LITERAL1
|
||||
kElectraAcMinRepeat LITERAL1
|
||||
@ -1637,7 +1676,10 @@ kElectraAcSwingVOffset LITERAL1
|
||||
kElectraAcTempDelta LITERAL1
|
||||
kElectraAcTempOffset LITERAL1
|
||||
kElectraAcTempSize LITERAL1
|
||||
kElectraAcTurboOffset LITERAL1
|
||||
kElectraAcZeroSpace LITERAL1
|
||||
kEpsonBits LITERAL1
|
||||
kEpsonMinRepeat LITERAL1
|
||||
kEyeAutoStr LITERAL1
|
||||
kEyeStr LITERAL1
|
||||
kFalseStr LITERAL1
|
||||
@ -2094,9 +2136,38 @@ kLg32HdrSpace LITERAL1
|
||||
kLg32HdrSpaceTicks LITERAL1
|
||||
kLg32RptHdrMark 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
|
||||
kLgBitMarkTicks LITERAL1
|
||||
kLgBits LITERAL1
|
||||
kLgDefaultRepeat LITERAL1
|
||||
kLgHdrMark LITERAL1
|
||||
kLgHdrMarkTicks LITERAL1
|
||||
kLgHdrSpace LITERAL1
|
||||
@ -2555,6 +2626,8 @@ kPanasonicAcFanMed LITERAL1
|
||||
kPanasonicAcFanMin LITERAL1
|
||||
kPanasonicAcFanModeTemp LITERAL1
|
||||
kPanasonicAcHeat LITERAL1
|
||||
kPanasonicAcIonFilterByte LITERAL1
|
||||
kPanasonicAcIonFilterOffset LITERAL1
|
||||
kPanasonicAcMaxTemp LITERAL1
|
||||
kPanasonicAcMessageGap LITERAL1
|
||||
kPanasonicAcMinTemp LITERAL1
|
||||
@ -2707,6 +2780,7 @@ kSamsungAcClean10Offset LITERAL1
|
||||
kSamsungAcClean11Offset LITERAL1
|
||||
kSamsungAcCool LITERAL1
|
||||
kSamsungAcDefaultRepeat LITERAL1
|
||||
kSamsungAcDisplayOffset LITERAL1
|
||||
kSamsungAcDry LITERAL1
|
||||
kSamsungAcExtendedBits LITERAL1
|
||||
kSamsungAcExtendedStateLength LITERAL1
|
||||
@ -2722,6 +2796,7 @@ kSamsungAcFanTurbo LITERAL1
|
||||
kSamsungAcHdrMark LITERAL1
|
||||
kSamsungAcHdrSpace LITERAL1
|
||||
kSamsungAcHeat LITERAL1
|
||||
kSamsungAcIonOffset LITERAL1
|
||||
kSamsungAcMaxTemp LITERAL1
|
||||
kSamsungAcMinTemp LITERAL1
|
||||
kSamsungAcModeOffset LITERAL1
|
||||
@ -2845,6 +2920,7 @@ kSlowStr LITERAL1
|
||||
kSony12Bits LITERAL1
|
||||
kSony15Bits LITERAL1
|
||||
kSony20Bits LITERAL1
|
||||
kSonyAltFreq LITERAL1
|
||||
kSonyHdrMark LITERAL1
|
||||
kSonyHdrMarkTicks LITERAL1
|
||||
kSonyMinBits LITERAL1
|
||||
@ -2857,6 +2933,7 @@ kSonyRptLength LITERAL1
|
||||
kSonyRptLengthTicks LITERAL1
|
||||
kSonySpace LITERAL1
|
||||
kSonySpaceTicks LITERAL1
|
||||
kSonyStdFreq LITERAL1
|
||||
kSonyTick LITERAL1
|
||||
kSonyZeroMark LITERAL1
|
||||
kSonyZeroMarkTicks LITERAL1
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "IRremoteESP8266",
|
||||
"version": "2.7.1",
|
||||
"version": "2.7.4",
|
||||
"keywords": "infrared, ir, remote, esp8266, esp32",
|
||||
"description": "Send and receive infrared signals with multiple protocols (ESP8266/ESP32)",
|
||||
"repository":
|
@ -1,7 +1,7 @@
|
||||
name=IRremoteESP8266
|
||||
version=2.7.1
|
||||
version=2.7.4
|
||||
author=David Conran, Sebastien Warin, Mark Szabo, Ken Shirriff
|
||||
maintainer=Mark Szabo, David Conran, Sebastien Warin, Roi Dayan, Massimiliano Pinto
|
||||
maintainer=David Conran, Mark Szabo, Sebastien Warin, Roi Dayan, Massimiliano Pinto
|
||||
sentence=Send and receive infrared signals with multiple protocols (ESP8266/ESP32)
|
||||
paragraph=This library enables you to send and receive infra-red signals on an ESP8266 or an ESP32.
|
||||
category=Device Control
|
@ -25,6 +25,7 @@
|
||||
#include "ir_Haier.h"
|
||||
#include "ir_Hitachi.h"
|
||||
#include "ir_Kelvinator.h"
|
||||
#include "ir_LG.h"
|
||||
#include "ir_Midea.h"
|
||||
#include "ir_Mitsubishi.h"
|
||||
#include "ir_MitsubishiHeavy.h"
|
||||
@ -44,7 +45,7 @@ IRac::IRac(const uint16_t pin, const bool inverted, const bool use_modulation) {
|
||||
_inverted = inverted;
|
||||
_modulation = use_modulation;
|
||||
initState(&next);
|
||||
_prev = next;
|
||||
this->markAsSent();
|
||||
}
|
||||
|
||||
void IRac::initState(stdAc::state_t *state,
|
||||
@ -149,6 +150,10 @@ bool IRac::isProtocolSupported(const decode_type_t protocol) {
|
||||
#if SEND_KELVINATOR
|
||||
case decode_type_t::KELVINATOR:
|
||||
#endif
|
||||
#if SEND_LG
|
||||
case decode_type_t::LG:
|
||||
case decode_type_t::LG2:
|
||||
#endif
|
||||
#if SEND_MIDEA
|
||||
case decode_type_t::MIDEA:
|
||||
#endif
|
||||
@ -461,7 +466,8 @@ void IRac::electra(IRElectraAc *ac,
|
||||
const bool on, const stdAc::opmode_t mode,
|
||||
const float degrees, const stdAc::fanspeed_t fan,
|
||||
const stdAc::swingv_t swingv,
|
||||
const stdAc::swingh_t swingh) {
|
||||
const stdAc::swingh_t swingh, const bool turbo,
|
||||
const bool lighttoggle, const bool clean) {
|
||||
ac->begin();
|
||||
ac->setPower(on);
|
||||
ac->setMode(ac->convertMode(mode));
|
||||
@ -470,11 +476,12 @@ void IRac::electra(IRElectraAc *ac,
|
||||
ac->setSwingV(swingv != stdAc::swingv_t::kOff);
|
||||
ac->setSwingH(swingh != stdAc::swingh_t::kOff);
|
||||
// No Quiet setting available.
|
||||
// No Turbo setting available.
|
||||
ac->setTurbo(turbo);
|
||||
ac->setLightToggle(lighttoggle);
|
||||
// No Light setting available.
|
||||
// No Econo setting available.
|
||||
// No Filter setting available.
|
||||
// No Clean setting available.
|
||||
ac->setClean(clean);
|
||||
// No Beep setting available.
|
||||
// No Sleep setting available.
|
||||
// No Clock setting available.
|
||||
@ -719,6 +726,30 @@ void IRac::kelvinator(IRKelvinatorAC *ac,
|
||||
}
|
||||
#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
|
||||
void IRac::midea(IRMideaAC *ac,
|
||||
const bool on, const stdAc::opmode_t mode, const bool celsius,
|
||||
@ -911,7 +942,8 @@ void IRac::panasonic(IRPanasonicAc *ac, const panasonic_ac_remote_model_t model,
|
||||
const bool on, const stdAc::opmode_t mode,
|
||||
const float degrees, const stdAc::fanspeed_t fan,
|
||||
const stdAc::swingv_t swingv, const stdAc::swingh_t swingh,
|
||||
const bool quiet, const bool turbo, const int16_t clock) {
|
||||
const bool quiet, const bool turbo, const bool filter,
|
||||
const int16_t clock) {
|
||||
ac->begin();
|
||||
ac->setModel(model);
|
||||
ac->setPower(on);
|
||||
@ -922,9 +954,9 @@ void IRac::panasonic(IRPanasonicAc *ac, const panasonic_ac_remote_model_t model,
|
||||
ac->setSwingHorizontal(ac->convertSwingH(swingh));
|
||||
ac->setQuiet(quiet);
|
||||
ac->setPowerful(turbo);
|
||||
ac->setIon(filter);
|
||||
// No Light setting available.
|
||||
// No Econo setting available.
|
||||
// No Filter setting available.
|
||||
// No Clean setting available.
|
||||
// No Beep setting available.
|
||||
// No Sleep setting available.
|
||||
@ -938,7 +970,8 @@ void IRac::samsung(IRSamsungAc *ac,
|
||||
const bool on, const stdAc::opmode_t mode,
|
||||
const float degrees,
|
||||
const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv,
|
||||
const bool quiet, const bool turbo, const bool clean,
|
||||
const bool quiet, const bool turbo, const bool light,
|
||||
const bool filter, const bool clean,
|
||||
const bool beep, const bool prevpower,
|
||||
const bool forcepower) {
|
||||
ac->begin();
|
||||
@ -951,9 +984,9 @@ void IRac::samsung(IRSamsungAc *ac,
|
||||
// No Horizontal swing setting available.
|
||||
ac->setQuiet(quiet);
|
||||
ac->setPowerful(turbo);
|
||||
// No Light setting available.
|
||||
ac->setDisplay(light);
|
||||
// No Econo setting available.
|
||||
// No Filter setting available.
|
||||
ac->setIon(filter);
|
||||
ac->setClean(clean);
|
||||
ac->setBeep(beep);
|
||||
// No Sleep setting available.
|
||||
@ -1144,6 +1177,20 @@ void IRac::whirlpool(IRWhirlpoolAc *ac, const whirlpool_ac_remote_model_t model,
|
||||
}
|
||||
#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
|
||||
// any state changes for options that need to be toggled.
|
||||
// Args:
|
||||
@ -1175,6 +1222,9 @@ stdAc::state_t IRac::handleToggles(const stdAc::state_t desired,
|
||||
result.power = desired.power ^ prev->power;
|
||||
result.light = desired.light ^ prev->light;
|
||||
break;
|
||||
case decode_type_t::ELECTRA_AC:
|
||||
result.light = desired.light ^ prev->light;
|
||||
break;
|
||||
case decode_type_t::MIDEA:
|
||||
case decode_type_t::HITACHI_AC424:
|
||||
if ((desired.swingv == stdAc::swingv_t::kOff) ^
|
||||
@ -1244,23 +1294,18 @@ bool IRac::sendAc(const decode_type_t vendor, const int16_t model,
|
||||
// Returns:
|
||||
// boolean: True, if accepted/converted/attempted. False, if unsupported.
|
||||
bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
|
||||
stdAc::state_t send = this->handleToggles(desired, prev);
|
||||
// Convert the temperature to Celsius.
|
||||
float degC;
|
||||
if (desired.celsius)
|
||||
degC = send.degrees;
|
||||
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;
|
||||
// Convert the temp from Fahrenheit to Celsius if we are not in Celsius mode.
|
||||
float degC = desired.celsius ? desired.degrees
|
||||
: fahrenheitToCelsius(desired.degrees);
|
||||
// special `state_t` that is required to be sent based on that.
|
||||
stdAc::state_t send = this->handleToggles(this->cleanState(desired), prev);
|
||||
// Per vendor settings & setup.
|
||||
switch (send.protocol) {
|
||||
#if SEND_AMCOR
|
||||
case AMCOR:
|
||||
{
|
||||
IRAmcorAc ac(_pin, _inverted, _modulation);
|
||||
amcor(&ac, on, send.mode, degC, send.fanspeed);
|
||||
amcor(&ac, send.power, send.mode, degC, send.fanspeed);
|
||||
break;
|
||||
}
|
||||
#endif // SEND_AMCOR
|
||||
@ -1268,8 +1313,8 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
|
||||
case ARGO:
|
||||
{
|
||||
IRArgoAC ac(_pin, _inverted, _modulation);
|
||||
argo(&ac, on, send.mode, degC, send.fanspeed, send.swingv, send.turbo,
|
||||
send.sleep);
|
||||
argo(&ac, send.power, send.mode, degC, send.fanspeed, send.swingv,
|
||||
send.turbo, send.sleep);
|
||||
break;
|
||||
}
|
||||
#endif // SEND_ARGO
|
||||
@ -1277,8 +1322,8 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
|
||||
case COOLIX:
|
||||
{
|
||||
IRCoolixAC ac(_pin, _inverted, _modulation);
|
||||
coolix(&ac, on, send.mode, degC, send.fanspeed, send.swingv, send.swingh,
|
||||
send.turbo, send.light, send.clean, send.sleep);
|
||||
coolix(&ac, send.power, send.mode, degC, send.fanspeed, send.swingv,
|
||||
send.swingh, send.turbo, send.light, send.clean, send.sleep);
|
||||
break;
|
||||
}
|
||||
#endif // SEND_COOLIX
|
||||
@ -1286,8 +1331,8 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
|
||||
case DAIKIN:
|
||||
{
|
||||
IRDaikinESP ac(_pin, _inverted, _modulation);
|
||||
daikin(&ac, on, send.mode, degC, send.fanspeed, send.swingv, send.swingh,
|
||||
send.quiet, send.turbo, send.econo, send.clean);
|
||||
daikin(&ac, send.power, send.mode, degC, send.fanspeed, send.swingv,
|
||||
send.swingh, send.quiet, send.turbo, send.econo, send.clean);
|
||||
break;
|
||||
}
|
||||
#endif // SEND_DAIKIN
|
||||
@ -1295,7 +1340,7 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
|
||||
case DAIKIN128:
|
||||
{
|
||||
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.clock);
|
||||
break;
|
||||
@ -1305,7 +1350,7 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
|
||||
case DAIKIN152:
|
||||
{
|
||||
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);
|
||||
break;
|
||||
}
|
||||
@ -1314,7 +1359,7 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
|
||||
case DAIKIN160:
|
||||
{
|
||||
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;
|
||||
}
|
||||
#endif // SEND_DAIKIN160
|
||||
@ -1322,7 +1367,7 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
|
||||
case DAIKIN176:
|
||||
{
|
||||
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;
|
||||
}
|
||||
#endif // SEND_DAIKIN176
|
||||
@ -1330,9 +1375,9 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
|
||||
case DAIKIN2:
|
||||
{
|
||||
IRDaikin2 ac(_pin, _inverted, _modulation);
|
||||
daikin2(&ac, on, send.mode, degC, send.fanspeed, send.swingv, send.swingh,
|
||||
send.quiet, send.turbo, send.light, send.econo, send.filter,
|
||||
send.clean, send.beep, send.sleep, send.clock);
|
||||
daikin2(&ac, send.power, send.mode, degC, send.fanspeed, send.swingv,
|
||||
send.swingh, send.quiet, send.turbo, send.light, send.econo,
|
||||
send.filter, send.clean, send.beep, send.sleep, send.clock);
|
||||
break;
|
||||
}
|
||||
#endif // SEND_DAIKIN2
|
||||
@ -1340,7 +1385,7 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
|
||||
case DAIKIN216:
|
||||
{
|
||||
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);
|
||||
break;
|
||||
}
|
||||
@ -1349,8 +1394,8 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
|
||||
case ELECTRA_AC:
|
||||
{
|
||||
IRElectraAc ac(_pin, _inverted, _modulation);
|
||||
electra(&ac, on, send.mode, degC, send.fanspeed, send.swingv,
|
||||
send.swingh);
|
||||
electra(&ac, send.power, send.mode, degC, send.fanspeed, send.swingv,
|
||||
send.swingh, send.turbo, send.light, send.clean);
|
||||
break;
|
||||
}
|
||||
#endif // SEND_ELECTRA_AC
|
||||
@ -1359,9 +1404,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,
|
||||
_modulation);
|
||||
fujitsu(&ac, (fujitsu_ac_remote_model_t)send.model, on, send.mode, degC,
|
||||
send.fanspeed, send.swingv, send.swingh, send.quiet, send.turbo,
|
||||
send.econo, send.filter, send.clean);
|
||||
fujitsu(&ac, (fujitsu_ac_remote_model_t)send.model, send.power, send.mode,
|
||||
degC, send.fanspeed, send.swingv, send.swingh, send.quiet,
|
||||
send.turbo, send.econo, send.filter, send.clean);
|
||||
break;
|
||||
}
|
||||
#endif // SEND_FUJITSU_AC
|
||||
@ -1369,7 +1414,7 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
|
||||
case GOODWEATHER:
|
||||
{
|
||||
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);
|
||||
break;
|
||||
}
|
||||
@ -1379,7 +1424,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,
|
||||
_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.sleep);
|
||||
break;
|
||||
@ -1389,8 +1434,8 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
|
||||
case HAIER_AC:
|
||||
{
|
||||
IRHaierAC ac(_pin, _inverted, _modulation);
|
||||
haier(&ac, on, send.mode, degC, send.fanspeed, send.swingv, send.filter,
|
||||
send.sleep, send.clock);
|
||||
haier(&ac, send.power, send.mode, degC, send.fanspeed, send.swingv,
|
||||
send.filter, send.sleep, send.clock);
|
||||
break;
|
||||
}
|
||||
#endif // SEND_HAIER_AC
|
||||
@ -1398,7 +1443,7 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
|
||||
case HAIER_AC_YRW02:
|
||||
{
|
||||
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);
|
||||
break;
|
||||
}
|
||||
@ -1407,7 +1452,7 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
|
||||
case HITACHI_AC:
|
||||
{
|
||||
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);
|
||||
break;
|
||||
}
|
||||
@ -1416,7 +1461,7 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
|
||||
case HITACHI_AC424:
|
||||
{
|
||||
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;
|
||||
}
|
||||
#endif // SEND_HITACHI_AC424
|
||||
@ -1424,18 +1469,28 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
|
||||
case KELVINATOR:
|
||||
{
|
||||
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.clean);
|
||||
break;
|
||||
}
|
||||
#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
|
||||
case MIDEA:
|
||||
{
|
||||
IRMideaAC ac(_pin, _inverted, _modulation);
|
||||
midea(&ac, on, send.mode, send.celsius, send.degrees, send.fanspeed,
|
||||
send.swingv, send.sleep);
|
||||
midea(&ac, send.power, send.mode, send.celsius, send.degrees,
|
||||
send.fanspeed, send.swingv, send.sleep);
|
||||
break;
|
||||
}
|
||||
#endif // SEND_MIDEA
|
||||
@ -1443,7 +1498,7 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
|
||||
case MITSUBISHI_AC:
|
||||
{
|
||||
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);
|
||||
break;
|
||||
}
|
||||
@ -1452,8 +1507,8 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
|
||||
case MITSUBISHI112:
|
||||
{
|
||||
IRMitsubishi112 ac(_pin, _inverted, _modulation);
|
||||
mitsubishi112(&ac, on, send.mode, degC, send.fanspeed, send.swingv,
|
||||
send.swingh, send.quiet);
|
||||
mitsubishi112(&ac, send.power, send.mode, degC, send.fanspeed,
|
||||
send.swingv, send.swingh, send.quiet);
|
||||
break;
|
||||
}
|
||||
#endif // SEND_MITSUBISHI112
|
||||
@ -1461,8 +1516,8 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
|
||||
case MITSUBISHI136:
|
||||
{
|
||||
IRMitsubishi136 ac(_pin, _inverted, _modulation);
|
||||
mitsubishi136(&ac, on, send.mode, degC, send.fanspeed, send.swingv,
|
||||
send.quiet);
|
||||
mitsubishi136(&ac, send.power, send.mode, degC, send.fanspeed,
|
||||
send.swingv, send.quiet);
|
||||
break;
|
||||
}
|
||||
#endif // SEND_MITSUBISHI136
|
||||
@ -1470,16 +1525,17 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
|
||||
case MITSUBISHI_HEAVY_88:
|
||||
{
|
||||
IRMitsubishiHeavy88Ac ac(_pin, _inverted, _modulation);
|
||||
mitsubishiHeavy88(&ac, on, send.mode, degC, send.fanspeed, send.swingv,
|
||||
send.swingh, send.turbo, send.econo, send.clean);
|
||||
mitsubishiHeavy88(&ac, send.power, send.mode, degC, send.fanspeed,
|
||||
send.swingv, send.swingh, send.turbo, send.econo,
|
||||
send.clean);
|
||||
break;
|
||||
}
|
||||
case MITSUBISHI_HEAVY_152:
|
||||
{
|
||||
IRMitsubishiHeavy152Ac ac(_pin, _inverted, _modulation);
|
||||
mitsubishiHeavy152(&ac, on, send.mode, degC, send.fanspeed, send.swingv,
|
||||
send.swingh, send.quiet, send.turbo, send.econo,
|
||||
send.filter, send.clean, send.sleep);
|
||||
mitsubishiHeavy152(&ac, send.power, send.mode, degC, send.fanspeed,
|
||||
send.swingv, send.swingh, send.quiet, send.turbo,
|
||||
send.econo, send.filter, send.clean, send.sleep);
|
||||
break;
|
||||
}
|
||||
#endif // SEND_MITSUBISHIHEAVY
|
||||
@ -1487,7 +1543,7 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
|
||||
case NEOCLIMA:
|
||||
{
|
||||
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);
|
||||
break;
|
||||
}
|
||||
@ -1496,9 +1552,9 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
|
||||
case PANASONIC_AC:
|
||||
{
|
||||
IRPanasonicAc ac(_pin, _inverted, _modulation);
|
||||
panasonic(&ac, (panasonic_ac_remote_model_t)send.model, on, send.mode,
|
||||
degC, send.fanspeed, send.swingv, send.swingh, send.quiet,
|
||||
send.turbo, send.clock);
|
||||
panasonic(&ac, (panasonic_ac_remote_model_t)send.model, send.power,
|
||||
send.mode, degC, send.fanspeed, send.swingv, send.swingh,
|
||||
send.quiet, send.turbo, send.clock);
|
||||
break;
|
||||
}
|
||||
#endif // SEND_PANASONIC_AC
|
||||
@ -1506,8 +1562,9 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
|
||||
case SAMSUNG_AC:
|
||||
{
|
||||
IRSamsungAc ac(_pin, _inverted, _modulation);
|
||||
samsung(&ac, on, send.mode, degC, send.fanspeed, send.swingv, send.quiet,
|
||||
send.turbo, send.clean, send.beep, prev->power);
|
||||
samsung(&ac, send.power, send.mode, degC, send.fanspeed, send.swingv,
|
||||
send.quiet, send.turbo, send.light, send.filter, send.clean,
|
||||
send.beep, prev->power);
|
||||
break;
|
||||
}
|
||||
#endif // SEND_SAMSUNG_AC
|
||||
@ -1515,7 +1572,7 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
|
||||
case SHARP_AC:
|
||||
{
|
||||
IRSharpAc ac(_pin, _inverted, _modulation);
|
||||
sharp(&ac, on, send.mode, degC, send.fanspeed);
|
||||
sharp(&ac, send.power, send.mode, degC, send.fanspeed);
|
||||
break;
|
||||
}
|
||||
#endif // SEND_SHARP_AC
|
||||
@ -1523,8 +1580,8 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
|
||||
case TCL112AC:
|
||||
{
|
||||
IRTcl112Ac ac(_pin, _inverted, _modulation);
|
||||
tcl112(&ac, on, send.mode, degC, send.fanspeed, send.swingv, send.swingh,
|
||||
send.turbo, send.light, send.econo, send.filter);
|
||||
tcl112(&ac, send.power, send.mode, degC, send.fanspeed, send.swingv,
|
||||
send.swingh, send.turbo, send.light, send.econo, send.filter);
|
||||
break;
|
||||
}
|
||||
#endif // SEND_TCL112AC
|
||||
@ -1532,8 +1589,8 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
|
||||
case TECO:
|
||||
{
|
||||
IRTecoAc ac(_pin, _inverted, _modulation);
|
||||
teco(&ac, on, send.mode, degC, send.fanspeed, send.swingv, send.light,
|
||||
send.sleep);
|
||||
teco(&ac, send.power, send.mode, degC, send.fanspeed, send.swingv,
|
||||
send.light, send.sleep);
|
||||
break;
|
||||
}
|
||||
#endif // SEND_TECO
|
||||
@ -1541,7 +1598,7 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
|
||||
case TOSHIBA_AC:
|
||||
{
|
||||
IRToshibaAC ac(_pin, _inverted, _modulation);
|
||||
toshiba(&ac, on, send.mode, degC, send.fanspeed);
|
||||
toshiba(&ac, send.power, send.mode, degC, send.fanspeed);
|
||||
break;
|
||||
}
|
||||
#endif // SEND_TOSHIBA_AC
|
||||
@ -1549,7 +1606,7 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
|
||||
case TROTEC:
|
||||
{
|
||||
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;
|
||||
}
|
||||
#endif // SEND_TROTEC
|
||||
@ -1557,8 +1614,8 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
|
||||
case VESTEL_AC:
|
||||
{
|
||||
IRVestelAc ac(_pin, _inverted, _modulation);
|
||||
vestel(&ac, on, send.mode, degC, send.fanspeed, send.swingv, send.turbo,
|
||||
send.filter, send.sleep, send.clock);
|
||||
vestel(&ac, send.power, send.mode, degC, send.fanspeed, send.swingv,
|
||||
send.turbo, send.filter, send.sleep, send.clock);
|
||||
break;
|
||||
}
|
||||
#endif // SEND_VESTEL_AC
|
||||
@ -1566,9 +1623,9 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
|
||||
case WHIRLPOOL_AC:
|
||||
{
|
||||
IRWhirlpoolAc ac(_pin, _inverted, _modulation);
|
||||
whirlpool(&ac, (whirlpool_ac_remote_model_t)send.model, on, send.mode,
|
||||
degC, send.fanspeed, send.swingv, send.turbo, send.light,
|
||||
send.sleep, send.clock);
|
||||
whirlpool(&ac, (whirlpool_ac_remote_model_t)send.model, send.power,
|
||||
send.mode, degC, send.fanspeed, send.swingv, send.turbo,
|
||||
send.light, send.sleep, send.clock);
|
||||
break;
|
||||
}
|
||||
#endif // SEND_WHIRLPOOL_AC
|
||||
@ -1578,13 +1635,18 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) {
|
||||
return true; // Success.
|
||||
}
|
||||
|
||||
// Update the previous state to the current one.
|
||||
void IRac::markAsSent(void) {
|
||||
_prev = next;
|
||||
}
|
||||
|
||||
// Send an A/C message based soley on our internal state.
|
||||
//
|
||||
// Returns:
|
||||
// boolean: True, if accepted/converted/attempted. False, if unsupported.
|
||||
bool IRac::sendAc(void) {
|
||||
bool success = this->sendAc(next, &_prev);
|
||||
_prev = next;
|
||||
if (success) this->markAsSent();
|
||||
return success;
|
||||
}
|
||||
|
||||
@ -1750,7 +1812,8 @@ int16_t IRac::strToModel(const char *str, const int16_t def) {
|
||||
return panasonic_ac_remote_model_t::kPanasonicLke;
|
||||
} else if (!strcasecmp(str, "NKE") || !strcasecmp(str, "PANASONICNKE")) {
|
||||
return panasonic_ac_remote_model_t::kPanasonicNke;
|
||||
} else if (!strcasecmp(str, "DKE") || !strcasecmp(str, "PANASONICDKE")) {
|
||||
} else if (!strcasecmp(str, "DKE") || !strcasecmp(str, "PANASONICDKE") ||
|
||||
!strcasecmp(str, "PKR") || !strcasecmp(str, "PANASONICPKR")) {
|
||||
return panasonic_ac_remote_model_t::kPanasonicDke;
|
||||
} else if (!strcasecmp(str, "JKE") || !strcasecmp(str, "PANASONICJKE")) {
|
||||
return panasonic_ac_remote_model_t::kPanasonicJke;
|
||||
@ -2129,6 +2192,21 @@ namespace IRAcUtils {
|
||||
return ac.toString();
|
||||
}
|
||||
#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:
|
||||
return "";
|
||||
}
|
||||
@ -2299,6 +2377,23 @@ namespace IRAcUtils {
|
||||
break;
|
||||
}
|
||||
#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
|
||||
case decode_type_t::MIDEA: {
|
||||
IRMideaAC ac(kGpioUnused);
|
@ -18,6 +18,7 @@
|
||||
#include "ir_Haier.h"
|
||||
#include "ir_Hitachi.h"
|
||||
#include "ir_Kelvinator.h"
|
||||
#include "ir_LG.h"
|
||||
#include "ir_Midea.h"
|
||||
#include "ir_Mitsubishi.h"
|
||||
#include "ir_MitsubishiHeavy.h"
|
||||
@ -53,6 +54,7 @@ class IRac {
|
||||
const bool beep, const int16_t sleep,
|
||||
const int16_t clock);
|
||||
static void initState(stdAc::state_t *state);
|
||||
void markAsSent(void);
|
||||
bool sendAc(void);
|
||||
bool sendAc(const stdAc::state_t desired, const stdAc::state_t *prev = NULL);
|
||||
bool sendAc(const decode_type_t vendor, const int16_t model,
|
||||
@ -136,16 +138,16 @@ class IRac {
|
||||
const bool quiet, const bool turbo, const bool econo);
|
||||
#endif // SEND_DAIKIN152
|
||||
#if SEND_DAIKIN160
|
||||
void daikin160(IRDaikin160 *ac,
|
||||
const bool on, const stdAc::opmode_t mode,
|
||||
const float degrees, const stdAc::fanspeed_t fan,
|
||||
const stdAc::swingv_t swingv);
|
||||
void daikin160(IRDaikin160 *ac,
|
||||
const bool on, const stdAc::opmode_t mode,
|
||||
const float degrees, const stdAc::fanspeed_t fan,
|
||||
const stdAc::swingv_t swingv);
|
||||
#endif // SEND_DAIKIN160
|
||||
#if SEND_DAIKIN176
|
||||
void daikin176(IRDaikin176 *ac,
|
||||
const bool on, const stdAc::opmode_t mode,
|
||||
const float degrees, const stdAc::fanspeed_t fan,
|
||||
const stdAc::swingh_t swingh);
|
||||
void daikin176(IRDaikin176 *ac,
|
||||
const bool on, const stdAc::opmode_t mode,
|
||||
const float degrees, const stdAc::fanspeed_t fan,
|
||||
const stdAc::swingh_t swingh);
|
||||
#endif // SEND_DAIKIN176
|
||||
#if SEND_DAIKIN2
|
||||
void daikin2(IRDaikin2 *ac,
|
||||
@ -169,7 +171,8 @@ void electra(IRElectraAc *ac,
|
||||
const bool on, const stdAc::opmode_t mode,
|
||||
const float degrees, const stdAc::fanspeed_t fan,
|
||||
const stdAc::swingv_t swingv,
|
||||
const stdAc::swingh_t swingh);
|
||||
const stdAc::swingh_t swingh, const bool turbo,
|
||||
const bool lighttoggle, const bool clean);
|
||||
#endif // SEND_ELECTRA_AC
|
||||
#if SEND_FUJITSU_AC
|
||||
void fujitsu(IRFujitsuAC *ac, const fujitsu_ac_remote_model_t model,
|
||||
@ -230,6 +233,11 @@ void electra(IRElectraAc *ac,
|
||||
const bool quiet, const bool turbo, const bool light,
|
||||
const bool filter, const bool clean);
|
||||
#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
|
||||
void midea(IRMideaAC *ac,
|
||||
const bool on, const stdAc::opmode_t mode, const bool celsius,
|
||||
@ -286,13 +294,15 @@ void electra(IRElectraAc *ac,
|
||||
const bool on, const stdAc::opmode_t mode, const float degrees,
|
||||
const stdAc::fanspeed_t fan,
|
||||
const stdAc::swingv_t swingv, const stdAc::swingh_t swingh,
|
||||
const bool quiet, const bool turbo, const int16_t clock = -1);
|
||||
const bool quiet, const bool turbo, const bool filter,
|
||||
const int16_t clock = -1);
|
||||
#endif // SEND_PANASONIC_AC
|
||||
#if SEND_SAMSUNG_AC
|
||||
void samsung(IRSamsungAc *ac,
|
||||
const bool on, const stdAc::opmode_t mode, const float degrees,
|
||||
const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv,
|
||||
const bool quiet, const bool turbo, const bool clean,
|
||||
const bool quiet, const bool turbo, const bool light,
|
||||
const bool filter, const bool clean,
|
||||
const bool beep, const bool prevpower = true,
|
||||
const bool forcepower = true);
|
||||
#endif // SEND_SAMSUNG_AC
|
||||
@ -340,6 +350,7 @@ void electra(IRElectraAc *ac,
|
||||
const bool turbo, const bool light,
|
||||
const int16_t sleep = -1, const int16_t clock = -1);
|
||||
#endif // SEND_WHIRLPOOL_AC
|
||||
static stdAc::state_t cleanState(const stdAc::state_t state);
|
||||
static stdAc::state_t handleToggles(const stdAc::state_t desired,
|
||||
const stdAc::state_t *prev = NULL);
|
||||
}; // IRac class
|