Merge branch 'pre-release'
4
.github/ISSUE_TEMPLATE/Bug_report.md
vendored
@ -13,7 +13,7 @@ Please DO NOT OPEN AN ISSUE:
|
||||
- If your issue is a flashing issue, please address it to the [Tasmota Support Chat](https://discord.gg/Ks2Kzd4)
|
||||
- If your issue is compilation problem, please address it to the [Tasmota Support Chat](https://discord.gg/Ks2Kzd4)
|
||||
- If your issue has been addressed before (i.e., duplicated issue), please ask in the original issue
|
||||
- If your issue is a Wi-Fi problem or MQTT problem, please try the steps provided in the [FAQ](https://tasmota.github.io/docs/#/help/FAQ) and [Troubleshooting](https://tasmota.github.io/docs/#/help/Troubleshooting)
|
||||
- If your issue is a Wi-Fi problem or MQTT problem, please try the steps provided in the [FAQ](https://tasmota.github.io/docs/FAQ) and [Troubleshooting](https://tasmota.github.io/docs/Troubleshooting)
|
||||
|
||||
Please take a few minutes to complete the requested information below. Our ability to provide assistance is greatly hampered without it. The details requested potentially affect which options to pursue. The small amount of time you spend completing the template will also help the volunteers providing the assistance to you to reduce the time required to help you.
|
||||
|
||||
@ -29,7 +29,7 @@ _Make sure your have performed every step and checked the applicable boxes befor
|
||||
|
||||
- [ ] Read the [Contributing Guide and Policy](https://github.com/arendst/Tasmota/blob/development/CONTRIBUTING.md) and [the Code of Conduct](https://github.com/arendst/Tasmota/blob/development/CODE_OF_CONDUCT.md)
|
||||
- [ ] Searched the problem in [issues](https://github.com/arendst/Tasmota/issues)
|
||||
- [ ] Searched the problem in the [docs](https://tasmota.github.io/docs/#/help/FAQ)
|
||||
- [ ] Searched the problem in the [docs](https://tasmota.github.io/docs/FAQ)
|
||||
- [ ] Searched the problem in the [forum](https://groups.google.com/d/forum/sonoffusers)
|
||||
- [ ] Searched the problem in the [chat](https://discord.gg/Ks2Kzd4)
|
||||
- [ ] Device used (e.g., Sonoff Basic): _____
|
||||
|
2
.github/ISSUE_TEMPLATE/config.yml
vendored
@ -1,7 +1,7 @@
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: Tasmota Docs
|
||||
url: https://tasmota.github.io/docs/#/
|
||||
url: https://tasmota.github.io/docs
|
||||
about: All the information related to Tasmota
|
||||
- name: Tasmota Support Chat
|
||||
url: https://discord.gg/Ks2Kzd4
|
||||
|
6
.github/PULL_REQUEST_TEMPLATE.md
vendored
@ -6,6 +6,8 @@
|
||||
- [ ] The pull request is done against the latest dev branch
|
||||
- [ ] Only relevant files were touched
|
||||
- [ ] Only one feature/fix was added per PR.
|
||||
- [ ] The code change is tested and works on core Tasmota_core_stage
|
||||
- [ ] The code change pass travis tests. **Your PR cannot be merged unless tests pass**
|
||||
- [ ] The code change is tested and works on core ESP8266 V.2.7.1
|
||||
- [ ] The code change is tested and works on core ESP32 V.1.12.0
|
||||
- [ ] I accept the [CLA](https://github.com/arendst/Tasmota/blob/development/CONTRIBUTING.md#contributor-license-agreement-cla).
|
||||
|
||||
_NOTE: The code change must pass CI tests. **Your PR cannot be merged unless tests pass**_
|
||||
|
2
.github/issue-close-app.yml
vendored
@ -19,7 +19,7 @@ comment: >-
|
||||
|
||||
[Support Information](https://github.com/arendst/Sonoff-Tasmota/blob/development/SUPPORT.md)
|
||||
|
||||
[Wiki](https://tasmota.github.io/docs/#/) for more information.
|
||||
[Wiki](https://tasmota.github.io/docs/) for more information.
|
||||
|
||||
[Chat](https://discord.gg/Ks2Kzd4) for more user experience.
|
||||
|
||||
|
441
.github/workflows/CI_github.yml
vendored
Normal file
@ -0,0 +1,441 @@
|
||||
name: Tasmota CI
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
tasmota:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: platformio run -e tasmota
|
||||
|
||||
tasmota-minimal:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: platformio run -e tasmota-minimal
|
||||
|
||||
tasmota-lite:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: platformio run -e tasmota-lite
|
||||
|
||||
tasmota-knx:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: platformio run -e tasmota-knx
|
||||
|
||||
tasmota-sensors:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: platformio run -e tasmota-sensors
|
||||
|
||||
|
||||
tasmota-display:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: platformio run -e tasmota-display
|
||||
|
||||
tasmota-ir:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: platformio run -e tasmota-ir
|
||||
|
||||
tasmota-BG:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: platformio run -e tasmota-BG
|
||||
|
||||
tasmota-BR:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: platformio run -e tasmota-BR
|
||||
|
||||
tasmota-CN:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: platformio run -e tasmota-CN
|
||||
|
||||
tasmota-CZ:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: platformio run -e tasmota-CZ
|
||||
|
||||
tasmota-DE:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: platformio run -e tasmota-DE
|
||||
|
||||
tasmota-ES:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: platformio run -e tasmota-ES
|
||||
|
||||
|
||||
tasmota-FR:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: platformio run -e tasmota-FR
|
||||
|
||||
tasmota-GR:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: platformio run -e tasmota-GR
|
||||
|
||||
tasmota-HE:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: platformio run -e tasmota-HE
|
||||
|
||||
tasmota-HU:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: platformio run -e tasmota-HU
|
||||
|
||||
tasmota-IT:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: platformio run -e tasmota-IT
|
||||
|
||||
tasmota-KO:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: platformio run -e tasmota-KO
|
||||
|
||||
tasmota-NL:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: platformio run -e tasmota-NL
|
||||
|
||||
tasmota-PL:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: platformio run -e tasmota-PL
|
||||
|
||||
tasmota-PT:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: platformio run -e tasmota-PT
|
||||
|
||||
tasmota-RO:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: platformio run -e tasmota-RO
|
||||
|
||||
tasmota-RU:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: platformio run -e tasmota-RU
|
||||
|
||||
tasmota-SE:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: platformio run -e tasmota-SE
|
||||
|
||||
tasmota-SK:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: platformio run -e tasmota-SK
|
||||
|
||||
tasmota-TR:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: platformio run -e tasmota-TR
|
||||
|
||||
tasmota-TW:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: platformio run -e tasmota-TW
|
||||
|
||||
tasmota-UK:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: platformio run -e tasmota-UK
|
516
.github/workflows/CI_github_ESP32.yml
vendored
Normal file
@ -0,0 +1,516 @@
|
||||
name: Tasmota ESP32 CI
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
tasmota32:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: |
|
||||
cp platformio_override_sample.ini platformio_override.ini
|
||||
platformio run -e tasmota32
|
||||
|
||||
|
||||
tasmota32-webcam:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: |
|
||||
cp platformio_override_sample.ini platformio_override.ini
|
||||
platformio run -e tasmota32-webcam
|
||||
|
||||
tasmota32-minimal:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: |
|
||||
cp platformio_override_sample.ini platformio_override.ini
|
||||
platformio run -e tasmota32-minimal
|
||||
|
||||
tasmota32-lite:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: |
|
||||
cp platformio_override_sample.ini platformio_override.ini
|
||||
platformio run -e tasmota32-lite
|
||||
|
||||
tasmota32-knx:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: |
|
||||
cp platformio_override_sample.ini platformio_override.ini
|
||||
platformio run -e tasmota32-knx
|
||||
|
||||
tasmota32-sensors:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: |
|
||||
cp platformio_override_sample.ini platformio_override.ini
|
||||
platformio run -e tasmota32-sensors
|
||||
|
||||
tasmota32-display:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: |
|
||||
cp platformio_override_sample.ini platformio_override.ini
|
||||
platformio run -e tasmota32-display
|
||||
|
||||
tasmota32-ir:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: |
|
||||
cp platformio_override_sample.ini platformio_override.ini
|
||||
platformio run -e tasmota32-ir
|
||||
|
||||
tasmota32-BG:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: |
|
||||
cp platformio_override_sample.ini platformio_override.ini
|
||||
platformio run -e tasmota32-BG
|
||||
|
||||
tasmota32-BR:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: |
|
||||
cp platformio_override_sample.ini platformio_override.ini
|
||||
platformio run -e tasmota32-BR
|
||||
|
||||
tasmota32-CN:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: |
|
||||
cp platformio_override_sample.ini platformio_override.ini
|
||||
platformio run -e tasmota32-CN
|
||||
|
||||
tasmota32-CZ:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: |
|
||||
cp platformio_override_sample.ini platformio_override.ini
|
||||
platformio run -e tasmota32-CZ
|
||||
|
||||
tasmota32-DE:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: |
|
||||
cp platformio_override_sample.ini platformio_override.ini
|
||||
platformio run -e tasmota32-DE
|
||||
|
||||
tasmota32-ES:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: |
|
||||
cp platformio_override_sample.ini platformio_override.ini
|
||||
platformio run -e tasmota32-ES
|
||||
|
||||
|
||||
tasmota32-FR:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: |
|
||||
cp platformio_override_sample.ini platformio_override.ini
|
||||
platformio run -e tasmota32-FR
|
||||
|
||||
tasmota32-GR:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: |
|
||||
cp platformio_override_sample.ini platformio_override.ini
|
||||
platformio run -e tasmota32-GR
|
||||
|
||||
tasmota32-HE:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: |
|
||||
cp platformio_override_sample.ini platformio_override.ini
|
||||
platformio run -e tasmota32-HE
|
||||
|
||||
tasmota32-HU:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: |
|
||||
cp platformio_override_sample.ini platformio_override.ini
|
||||
platformio run -e tasmota32-HU
|
||||
|
||||
tasmota32-IT:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: |
|
||||
cp platformio_override_sample.ini platformio_override.ini
|
||||
platformio run -e tasmota32-IT
|
||||
|
||||
tasmota32-KO:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: |
|
||||
cp platformio_override_sample.ini platformio_override.ini
|
||||
platformio run -e tasmota32-KO
|
||||
|
||||
tasmota32-NL:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: |
|
||||
cp platformio_override_sample.ini platformio_override.ini
|
||||
platformio run -e tasmota32-NL
|
||||
|
||||
tasmota32-PL:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: |
|
||||
cp platformio_override_sample.ini platformio_override.ini
|
||||
platformio run -e tasmota32-PL
|
||||
|
||||
tasmota32-PT:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: |
|
||||
cp platformio_override_sample.ini platformio_override.ini
|
||||
platformio run -e tasmota32-PT
|
||||
|
||||
tasmota32-RO:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: |
|
||||
cp platformio_override_sample.ini platformio_override.ini
|
||||
platformio run -e tasmota32-RO
|
||||
|
||||
tasmota32-RU:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: |
|
||||
cp platformio_override_sample.ini platformio_override.ini
|
||||
platformio run -e tasmota32-RU
|
||||
|
||||
tasmota32-SE:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: |
|
||||
cp platformio_override_sample.ini platformio_override.ini
|
||||
platformio run -e tasmota32-SE
|
||||
|
||||
tasmota32-SK:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: |
|
||||
cp platformio_override_sample.ini platformio_override.ini
|
||||
platformio run -e tasmota32-SK
|
||||
|
||||
tasmota32-TR:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: |
|
||||
cp platformio_override_sample.ini platformio_override.ini
|
||||
platformio run -e tasmota32-TR
|
||||
|
||||
tasmota32-TW:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: |
|
||||
cp platformio_override_sample.ini platformio_override.ini
|
||||
platformio run -e tasmota32-TW
|
||||
|
||||
tasmota32-UK:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
platformio upgrade --dev
|
||||
platformio update
|
||||
- name: Run PlatformIO
|
||||
run: |
|
||||
cp platformio_override_sample.ini platformio_override.ini
|
||||
platformio run -e tasmota32-UK
|
2
.gitignore
vendored
@ -17,6 +17,7 @@ tasmota*.bin
|
||||
tasmota*.bin.gz
|
||||
tasmota*.map
|
||||
platformio_override.ini
|
||||
platformio_tasmota_cenv.ini
|
||||
|
||||
## Visual Studio Code specific ######
|
||||
.vscode
|
||||
@ -24,3 +25,4 @@ platformio_override.ini
|
||||
.vscode/c_cpp_properties.json
|
||||
.vscode/launch.json
|
||||
*.bak
|
||||
*.code-workspace
|
||||
|
2
API.md
@ -2,7 +2,7 @@
|
||||
|
||||
# Basic API information
|
||||
|
||||
Tasmota can easily be extended by developers using provided function pointers as callback Ids. This document lists the available callback function Ids. Read [Sensor API](https://tasmota.github.io/docs/#/Sensor-API) for more information.
|
||||
Tasmota can easily be extended by developers using provided function pointers as callback Ids. This document lists the available callback function Ids. Read [Sensor API](https://tasmota.github.io/docs/Sensor-API) for more information.
|
||||
|
||||
Callback availability can be checked by searching for either XdrvCall, XsnsCall, XdspCall, XnrgCall and XlgtCall.
|
||||
|
||||
|
17
BUILDS.md
@ -2,7 +2,7 @@
|
||||
|
||||
| Feature or Sensor | minimal | lite | tasmota | knx | sensors | ir | display | Remarks
|
||||
|-----------------------|---------|-------|--------|-----|---------|----|---------|--------
|
||||
| MY_LANGUAGE en-GB | x | x | x | x | x | x | x |
|
||||
| MY_LANGUAGE en_GB | x | x | x | x | x | x | x |
|
||||
| USE_ARDUINO_OTA | - | - | - | - | - | - | - |
|
||||
| USE_DOMOTICZ | - | - | x | x | x | x | - |
|
||||
| USE_HOME_ASSISTANT | - | - | x | x | x | x | - |
|
||||
@ -71,7 +71,7 @@
|
||||
| | | | | | | | |
|
||||
| USE_ADC_VCC | x | x | - | - | - | - | - |
|
||||
| USE_COUNTER | - | - | x | x | x | x | x |
|
||||
| USE_DS18x20 | - | - | x | x | x | - | x |
|
||||
| USE_DS18x20 | - | - | x | x | x | x | x |
|
||||
| USE_DHT | - | - | x | x | x | x | x |
|
||||
| USE_MAX31855 | - | - | - | - | x | - | - |
|
||||
| USE_MAX31865 | - | - | - | - | - | - | - |
|
||||
@ -117,6 +117,8 @@
|
||||
| USE_AHT1x | - | - | - | - | - | - | - |
|
||||
| USE_HDC1080 | - | - | - | - | - | - | - |
|
||||
| USE_WEMOS_MOTOR_V1 | - | - | - | - | x | - | - |
|
||||
| USE_IAQ | - | - | - | - | x | - | - |
|
||||
| USE_AS3935 | - | - | - | - | x | - | - |
|
||||
| | | | | | | | |
|
||||
| Feature or Sensor | minimal | lite | tasmota | knx | sensors | ir | display | Remarks
|
||||
| USE_SPI | - | - | - | - | - | - | x |
|
||||
@ -134,6 +136,8 @@
|
||||
| USE_GPS | - | - | - | - | - | - | - |
|
||||
| USE_HM10 | - | - | - | - | x | - | - |
|
||||
| USE_HRXL | - | - | - | - | x | - | - |
|
||||
| USE_TASMOTA_SLAVE | - | - | - | - | - | - | - |
|
||||
| USE_OPENTHERM | - | - | - | - | - | - | - |
|
||||
| | | | | | | | |
|
||||
| USE_NRF24 | - | - | - | - | - | - | - |
|
||||
| USE_MIBLE | - | - | - | - | - | - | - |
|
||||
@ -147,11 +151,11 @@
|
||||
| USE_TM1638 | - | - | - | - | x | - | - |
|
||||
| USE_HX711 | - | - | - | - | x | - | - |
|
||||
| USE_TX2x_WIND_SENSOR | - | - | - | - | - | - | - |
|
||||
| USE_WINDMETER | - | - | - | - | - | - | - |
|
||||
| USE_RC_SWITCH | - | - | - | - | x | - | - |
|
||||
| USE_RF_SENSOR | - | - | - | - | x | - | - | AlectoV2 only
|
||||
| USE_HRE | - | - | - | - | x | - | - |
|
||||
| USE_A4988_STEPPER | - | - | - | - | - | - | - |
|
||||
| USE_TASMOTA_SLAVE | - | - | - | - | - | - | - | Experimental
|
||||
| | | | | | | | |
|
||||
| Feature or Sensor | minimal | lite | tasmota | knx | sensors | ir | display | Remarks
|
||||
| USE_DISPLAY | - | - | - | - | - | - | x |
|
||||
@ -165,3 +169,10 @@
|
||||
| USE_DISPLAY_ILI9488 | - | - | - | - | - | - | - |
|
||||
| USE_DISPLAY_SSD1351 | - | - | - | - | - | - | - |
|
||||
| USE_DISPLAY_RA8876 | - | - | - | - | - | - | - |
|
||||
|
||||
## Additional Features and Sensors on ESP32
|
||||
|
||||
| Feature or Sensor | minimal | lite | tasmota | knx | sensors | ir | display | webcam | Remarks
|
||||
|-----------------------|---------|-------|--------|-----|---------|----|---------|--------|--------
|
||||
| USE_MI_ESP32 | - | - | - | - | - | - | - | - |
|
||||
| USE_WEBCAM | - | - | - | - | - | - | - | x |
|
||||
|
@ -8,7 +8,7 @@ Everybody is welcome and invited to contribute to Tasmota Project by:
|
||||
|
||||
* Testing newly released features and reporting issues.
|
||||
* Providing Pull Requests (Features, Proof of Concepts, Language files or Fixes)
|
||||
* Contributing missing documentation for features and devices in our [documentation](https://tasmota.github.io/docs/#/Contributing)
|
||||
* Contributing missing documentation for features and devices in our [documentation](https://tasmota.github.io/docs/Contributing)
|
||||
|
||||
This document describes rules that are in effect for this repository, meant for handling issues by contributors in the issue tracker and PRs.
|
||||
|
||||
|
@ -1,43 +0,0 @@
|
||||
# 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, execute the command SetOption85 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)<br>
|
||||
1 = Power, 2 = Light brightness, 4 = Light fade/speed, 8 = Light scheme, 16 = Light color, 32 = Dimmer settings (presets)
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>GroupTopic<x>
|
||||
</td>
|
||||
<td>1 = reset device group <x> MQTT group topic to firmware default (MQTT_GRPTOPIC) and restart<br>
|
||||
<value> = set device group <x> MQTT group topic (32 chars max) and restart
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
@ -67,3 +67,6 @@ Index | Define | Driver | Device | Address(es) | Description
|
||||
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)
|
||||
45 | USE_HDC1080 | xsns_65 | HDC1080 | 0x40 | Temperature and Humidity sensor
|
||||
46 | USE_IAQ | xsns_66 | IAQ | 0x5a | Air quality sensor
|
||||
47 | USE_DISPLAY_SEVENSEG| xdsp_11 | HT16K33 | 0x70 - 0x77 | Seven segment LED
|
||||
48 | USE_AS3935 | xsns_67 | AS3935 | 0x03 | Franklin Lightning Sensor
|
@ -23,7 +23,7 @@ Module | Description
|
||||
17 WiOn | WiOn Wifi Smart Socket
|
||||
18 Generic | Any ESP8266/ESP8285 device like WeMos and NodeMCU
|
||||
19 Sonoff Dev | Sonoff Dev Wifi Development Board
|
||||
20 H801 | H801 Wifi RGBWW Led Controller
|
||||
20 H801 | H801 Wifi 5 Channel LED Controller
|
||||
21 Sonoff SC | Sonoff SC Wifi Environmental Monitor
|
||||
22 Sonoff BN-SZ | Sonoff BN-SZ01 Wifi Ceiling Led (Retired)
|
||||
23 Sonoff 4CH Pro | Sonoff 4CH Pro 4-gang Wifi Smart Switch
|
||||
@ -57,7 +57,7 @@ Module | Description
|
||||
51 OBI Socket | OBI Wifi Smart Socket
|
||||
52 Teckin | Teckin SP22 Wifi Smart Switch with Energy Monitoring
|
||||
53 AplicWDP303075 | Aplic WDP 303075 CSL Wifi Smart Switch with Energy Monitoring
|
||||
54 Tuya Dimmer | MIUO (and other Tuya based) Wifi Dimmer for Incandescent Lights and Led
|
||||
54 TuyaMCU | Devices with an MCU using Tuya communication protocol for control
|
||||
55 Gosund SP1 v23 | Gosund SP1 v2.3 Wifi Smart Switch with Energy Monitoring
|
||||
56 ARMTR Dimmer | ARMtronix Wifi dimmer for Incandescent Lights and Led
|
||||
57 SK03 Outdoor | SK03 Outdoor Wifi Smart Switch with Energy Monitoring
|
||||
@ -65,7 +65,7 @@ Module | Description
|
||||
59 Teckin US | Teckin SP20 and ZooZee SA102 Wifi Smart Switch with Energy Monitoring
|
||||
60 Manzoku strip | Manzoku Wifi Smart Power Strip with four Relays
|
||||
61 OBI Socket 2 | OBI 2 Wifi Smart Socket
|
||||
62 YTF IR Bridge | YTF Infra Red Wifi Bridge
|
||||
62 YTF IR Bridge | YTF Universal IR Bridge
|
||||
63 Digoo DG-SP202 | Digoo DG-SP202 Dual Wifi Smart Switch with Energy Monitoring
|
||||
64 KA10 | Smanergy KA10 Wifi Smart Wall Switch with Energy Monitoring
|
||||
65 Luminea ZX2820 | Luminea ZX2820 Wifi Smart Switch with Energy Monitoring
|
||||
|
@ -1,94 +0,0 @@
|
||||
# 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. 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 and releasing the down or up button turns the power on at a temporary brightness of the low/high levels set by the DimmerPreset command. Turning the power on at the low preset can also be accomplished by holding the power button while the power is off. The dimmer 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.
|
||||
|
||||
When the power is off, holding the down or up button publishes an MQTT EVENT command. The topic follows the format of the Full Topic with a prefix of Event (ex. cmnd/LightSwitch1/EVENT). The MQTT payload is Trigger#, 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#Trigger1) or by automation software to trigger automations such as scene changes. For example, the Event topic Trigger1 payload could trigger the automation software to turn on the previous scene in a list and the Trigger2 payload could trigger the automation software to turn on the next scene in a list.
|
||||
|
||||
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 LED timeout can also be enabled/disabled by holding the power button while tapping (pressing and releasing quickly) the down button.
|
||||
|
||||
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. The powered-off indicator can also be enabled/disabled by holding the power button and tapping the up button.
|
||||
|
||||
Holding the power button, tapping the down button and then tapping or holding the down or up button sends a device group message to set RGB lights in the device group to the previous/next fixed color. The command is sent/value is adjusted once every .5 seconds for as long as the button is held. 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.
|
||||
|
||||
Holding the power button, tapping the up button and then tapping or holding the down or up button publishes an MQTT Event command. The command is sent/value is adjusted once every .5 seconds for as long as the button is held. The MQTT topic is as described above. The MQTT payload is Trigger#, where # is 3 if the down button is held or 4 if the up button is held.
|
||||
|
||||
Holding the down or up button alone for over 10 seconds executes the WiFiConfig 2 command.
|
||||
|
||||
Pressing and releasing any button publishes an MQTT TOGGLE command for the button. 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 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>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, execute the command SetOption88 1 (the device will restart). 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 is 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). Button combinations that publish MQTT Event commands use a topic in the format cmnd/%group-topic%/EVENT.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
21
README.md
@ -20,9 +20,10 @@ In addition to the [release webpage](https://github.com/arendst/Tasmota/releases
|
||||
|
||||
## Development
|
||||
|
||||
[](https://github.com/arendst/Tasmota)
|
||||
[](https://github.com/arendst/Tasmota)
|
||||
[](http://thehackbox.org/tasmota/)
|
||||
[](https://travis-ci.org/arendst/Tasmota)
|
||||
[](https://github.com/arendst/Tasmota/actions?query=workflow%3A%22Tasmota+CI%22)
|
||||
[](https://github.com/arendst/Tasmota/actions?query=workflow%3A%22Tasmota+ESP32+CI%22)
|
||||
|
||||
See [tasmota/CHANGELOG.md](tasmota/CHANGELOG.md) for detailed change information.
|
||||
|
||||
@ -42,10 +43,10 @@ We don't take any responsibility nor liability for using this software nor for t
|
||||
|
||||
## Note
|
||||
|
||||
Please do not ask to add new devices unless it requires additional code for new features. If the device is not listed as a module, try using [Templates](https://tasmota.github.io/docs/#/Templates) first. If it is not listed in the [Tasmota Device Templates Repository](http://blakadder.github.io/templates) create your own [Template](https://tasmota.github.io/docs/#/Templates?id=creating-your-template).
|
||||
Please do not ask to add new devices unless it requires additional code for new features. If the device is not listed as a module, try using [Templates](https://tasmota.github.io/docs/Templates) first. If it is not listed in the [Tasmota Device Templates Repository](http://blakadder.github.io/templates) create your own [Template](https://tasmota.github.io/docs/Templates#creating-your-template).
|
||||
|
||||
## Quick Install
|
||||
Download one of the released binaries from https://github.com/arendst/Tasmota/releases and flash it to your hardware [using our installation guide](https://tasmota.github.io/docs/#/installation/).
|
||||
Download one of the released binaries from https://github.com/arendst/Tasmota/releases and flash it to your hardware [using our installation guide](https://tasmota.github.io/docs/Getting-Started).
|
||||
|
||||
## Important User Compilation Information
|
||||
If you want to compile Tasmota yourself keep in mind the following:
|
||||
@ -60,7 +61,7 @@ Please refer to the installation and configuration articles in our [documentatio
|
||||
|
||||
## Migration Information
|
||||
|
||||
See [wiki migration path](https://tasmota.github.io/docs/#/Upgrading?id=migration-path) for instructions how to migrate to a major version. Pay attention to the following version breaks due to dynamic settings updates:
|
||||
See [wiki migration path](https://tasmota.github.io/docs/Upgrading#migration-path) for instructions how to migrate to a major version. Pay attention to the following version breaks due to dynamic settings updates:
|
||||
|
||||
1. Migrate to **Sonoff-Tasmota 3.9.x**
|
||||
2. Migrate to **Sonoff-Tasmota 4.x**
|
||||
@ -77,15 +78,15 @@ See [wiki migration path](https://tasmota.github.io/docs/#/Upgrading?id=migratio
|
||||
|
||||
<img src="https://user-images.githubusercontent.com/5904370/68332933-e6e5a600-00d7-11ea-885d-50395f7239a1.png" width=150 align="right" />
|
||||
|
||||
For a database of supported devices see [Tasmota Device Templates Repository](https://blakadder.github.io/templates)
|
||||
For a database of supported devices see [Tasmota Device Templates Repository](https://templates.blakadder.com)
|
||||
|
||||
If you're looking for support on **Tasmota** there are some options available:
|
||||
|
||||
### Documentation
|
||||
|
||||
* [Documentation Site](https://tasmota.github.io/docs): For information on how to flash Tasmota, configure, use and expand it
|
||||
* [FAQ and Troubleshooting](https://tasmota.github.io/docs/#/help/): For information on common problems and solutions.
|
||||
* [Commands Information](https://tasmota.github.io/docs/#/Commands): For information on all the commands supported by Tasmota.
|
||||
* [FAQ and Troubleshooting](https://tasmota.github.io/docs/FAQ/): For information on common problems and solutions.
|
||||
* [Commands Information](https://tasmota.github.io/docs/Commands): For information on all the commands supported by Tasmota.
|
||||
|
||||
### Support's Community
|
||||
|
||||
@ -144,7 +145,9 @@ People helping to keep the show on the road:
|
||||
- Stefan Bode for his Shutter and Deep sleep drivers
|
||||
- Jacek Ziółkowski for his [TDM](https://github.com/jziolkowski/tdm) management tool and [Tasmotizer](https://github.com/tasmota/tasmotizer) flashing tool
|
||||
- Christian Staars for NRF24L01 and HM-10 Bluetooth sensor support
|
||||
- Pail Diem for UDP Group communication support
|
||||
- Paul Diem for UDP Group communication support
|
||||
- Jörg Schüler-Maroldt for his initial ESP32 port
|
||||
- Javier Arigita for his thermostat driver
|
||||
- Many more providing Tips, Wips, Pocs, PRs and Donations
|
||||
|
||||
## License
|
||||
|
133
RELEASENOTES.md
@ -4,7 +4,7 @@
|
||||
|
||||
## Migration Information
|
||||
|
||||
See [migration path](https://tasmota.github.io/docs/#/Upgrading?id=migration-path) for instructions how to migrate to a major version. Pay attention to the following version breaks due to dynamic settings updates:
|
||||
See [migration path](https://tasmota.github.io/docs/Upgrading#migration-path) for instructions how to migrate to a major version. Pay attention to the following version breaks due to dynamic settings updates:
|
||||
|
||||
1. Migrate to **Sonoff-Tasmota 3.9.x**
|
||||
2. Migrate to **Sonoff-Tasmota 4.x**
|
||||
@ -21,13 +21,13 @@ While fallback or downgrading is common practice it was never supported due to S
|
||||
|
||||
## Supported Core versions
|
||||
|
||||
This release will be supported from ESP8266/Arduino library Core version **2.6.3 + 372a3ec** due to reported security and stability issues on previous Core version. This will also support gzipped binaries.
|
||||
This release will be supported from ESP8266/Arduino library Core version **2.7.0** due to reported security and stability issues on previous Core version. This will also support gzipped binaries.
|
||||
|
||||
Although it might still compile on previous Core versions all support will be removed in the near future.
|
||||
|
||||
## Support of TLS
|
||||
|
||||
To save resources when TLS is enabled mDNS needs to be disabled. In addition to TLS using fingerprints now also user supplied CA certs and AWS IoT is supported. Read [full documentation](https://tasmota.github.io/docs/#/integrations/AWS-IoT)
|
||||
To save resources when TLS is enabled mDNS needs to be disabled. In addition to TLS using fingerprints now also user supplied CA certs and AWS IoT is supported. Read [full documentation](https://tasmota.github.io/docs/AWS-IoT)
|
||||
|
||||
## Initial configuration tools
|
||||
|
||||
@ -35,7 +35,7 @@ For initial configuration this release supports Webserver based **WifiManager**
|
||||
|
||||
## Provided Binary Downloads
|
||||
|
||||
The following binary downloads have been compiled with ESP8266/Arduino library core version **2.6.3 + 372a3ec**.
|
||||
The following binary downloads have been compiled with ESP8266/Arduino library core version **2.7.0**.
|
||||
|
||||
- **tasmota.bin** = The Tasmota version with most drivers. **RECOMMENDED RELEASE BINARY**
|
||||
- **tasmota-BG.bin** to **tasmota-TW.bin** = The Tasmota version in different languages.
|
||||
@ -52,76 +52,57 @@ The following binary downloads have been compiled with ESP8266/Arduino library c
|
||||
|
||||
## Changelog
|
||||
|
||||
### Version 8.2.0 Elliot
|
||||
### Version 8.3.0 Fred
|
||||
|
||||
- Change default my_user_config.h driver and sensor support removing most sensors and adding most drivers to tasmota.bin
|
||||
- Change DHT driver (#7468, #7717)
|
||||
- Change Lights: simplified gamma correction and 10 bits internal computation
|
||||
- Change commands ``Prefix``, ``Ssid``, ``StateText``, ``NTPServer``, and ``FriendlyName`` displaying all items
|
||||
- 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 IRremoteESP8266 library updated to v2.7.4
|
||||
- Fix ``PowerDelta`` zero power detection (#7515)
|
||||
- Fix ``White`` added to light status (#7142)
|
||||
- Fix ``WakeUp <x>`` ignores provided value (#7473)
|
||||
- Fix ``RGBWWTable`` ignored (#7572)
|
||||
- Fix commands ``Display`` and ``Counter`` from overruling command processing (#7322)
|
||||
- Fix Sonoff Bridge, Sc, L1, iFan03 and CSE7766 serial interface to forced speed, config and disable logging
|
||||
- Fix Improved fade linearity with gamma correction
|
||||
- Fix PWM flickering at low levels (#7415)
|
||||
- Fix LCD line and column positioning (#7387)
|
||||
- Fix Display handling of hexadecimal escape characters (#7387)
|
||||
- Fix exception 9 restart on log message in Ticker interrupt service routines NTP, Wemos and Hue emulation (#7496)
|
||||
- Fix Hass sensor discovery by Federico Leoni (#7582, #7548)
|
||||
- Fix MaxPower functionality (#7647)
|
||||
- Fix relation between Wifi 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 commands ``SwitchMode 13`` PushOn and ``SwitchMode 14`` PushOnInverted (#7912)
|
||||
- Add command ``Buzzer -1`` for infinite mode and command ``Buzzer -2`` for following led mode (#7623)
|
||||
- Add command ``HumOffset -10.0 .. 10.0`` to set global humidity sensor offset (#7934)
|
||||
- Add support for ``AdcParam`` parameters to control ADC0 Current Transformer Apparent Power formula by Jodi Dillon (#7100)
|
||||
- Add optional parameter ``<startcolor>`` to command ``Scheme <scheme>, <startcolor>`` to control initial start color
|
||||
- Add web page sliders when ``SetOption37 128`` is active allowing control of white(s)
|
||||
- Add SerialConfig to ``Status 1``
|
||||
- Add BootCount Reset Time as BCResetTime to ``Status 1``
|
||||
- Add WifiPower to ``Status 5``
|
||||
- Add most SetOptions as defines to my_user_config.h
|
||||
- Add optional Wifi AccessPoint passphrase define WIFI_AP_PASSPHRASE in my_user_config.h (#7690)
|
||||
- Add SoftwareSerial to CSE7766 driver allowing different GPIOs (#7563)
|
||||
- Add rule trigger on one level deeper using syntax with two ``#`` like ``on zbreceived#vibration_sensor#aqaracubeside=0 do ...``
|
||||
- Add Zigbee attribute decoder for Xiaomi Aqara Cube
|
||||
- Add ``ZbZNPReceived``and ``ZbZCLReceived`` being published to MQTT when ``SetOption66 1``
|
||||
- Add Zigbee enhanced commands decoding, added ``ZbPing``
|
||||
- Add Zigbee features and improvements
|
||||
- Add Zigbee support for Hue emulation by Stefan Hadinger
|
||||
- Add HAss Discovery support for Button and Switch triggers by Federico Leoni (#7901)
|
||||
- Add Dew Point to Temperature and Humidity sensors
|
||||
- Add optional support for Prometheus using file xsns_91_prometheus.ino (#7216)
|
||||
- Add support for gzipped binaries
|
||||
- Add support for Romanian language translations by Augustin Marti
|
||||
- Add support for sensors DS18x20 and DHT family on Shelly 1 and Shelly 1PM using Shelly Add-On adapter (#7469)
|
||||
- Add support to BMP driver to enter reset state (sleep enable) when deep sleep is used in Tasmota
|
||||
- Add support for DS1624, DS1621 Temperature sensor by Leonid Myravjev
|
||||
- Add support for NRF24L01 as BLE-bridge for Mijia Bluetooth sensors by Christian Baars (#7394)
|
||||
- Add support for MI-BLE sensors using HM-10 Bluetooth 4.0 module by Christian Staars (#7683)
|
||||
- Add support for FiF LE-01MR energy meter by saper-2 (#7584)
|
||||
- Add support for Sensors AHT10 and AHT15 by Martin Wagner (#7596)
|
||||
- Add support for Wemos Motor Shield V1 by Denis Sborets (#7764)
|
||||
- Add support for La Crosse TX23 Anemometer by Norbert Richter (#3146, #7765)
|
||||
- Add support for Martin Jerry/acenx/Tessan/NTONPOWER SD0x PWM dimmer switches by Paul Diem (#7791)
|
||||
- Add support for UDP Group control without MQTT by Paul Diem (#7790)
|
||||
- Add support for Jarolift rollers by Keeloq algorithm
|
||||
- Add support for MaxBotix HRXL-MaxSonar ultrasonic range finders by Jon Little (#7814)
|
||||
- Add support for HDC1080 Temperature and Humidity sensor by Luis Teixeira (#7888)
|
||||
- Add support for ElectriQ iQ-wifiMOODL RGBW light by Ian King (#7947)
|
||||
- Breaking Change Device Groups multicast address and port (#8270)
|
||||
- Change PWM implementation to Arduino #7231 removing support for Core versions before 2.6.3
|
||||
- Change default PWM Frequency to 977 Hz from 880 Hz
|
||||
- Change minimum PWM Frequency from 100 Hz to 40 Hz
|
||||
- Change flash access removing support for any Core before 2.6.3
|
||||
- Change HM-10 sensor type detection and add features (#7962)
|
||||
- Change light scheme 2,3,4 cycle time speed from 24,48,72,... seconds to 4,6,12,24,36,48,... seconds (#8034)
|
||||
- Change remove floating point libs from IRAM
|
||||
- Change remove MQTT Info messages on restart for DeepSleep Wake (#8044)
|
||||
- Change IRremoteESP8266 library updated to v2.7.6
|
||||
- Change HAss discovery by Federico Leoni (#8370)
|
||||
- Fix possible Relay toggle on (OTA) restart
|
||||
- Fix PWM flickering during wifi connection (#8046)
|
||||
- Fix Zigbee sending wrong Sat value with Hue emulation
|
||||
- Fix Zigbee crash with Occupancy sensor (#8089)
|
||||
- Add Zigbee command ``ZbRestore`` to restore device configuration dumped with ``ZbStatus 2``
|
||||
- Add Zigbee command ``ZbUnbind``
|
||||
- Add Zigbee command ``ZbBindState`` and ``manuf``attribute
|
||||
- Add Zigbee command ``ZbConfig`` and configuration in Settings
|
||||
- Add commands ``CounterDebounceLow`` and ``CounterDebounceHigh`` to control debouncing (#8021)
|
||||
- Add commands ``NrfPage``, ``NrfIgnore``, ``NrfScan`` and ``NrfBeacon`` to NRF24 Bluetooth driver (#8075)
|
||||
- Add commands ``GlobalTemp`` and ``GlobalHum`` to init sensor data (#8152)
|
||||
- Add command ``SO`` as shortcut for command ``SetOption``
|
||||
- Add command ``SetOption41 <x>`` to force sending gratuitous ARP every <x> seconds
|
||||
- Add command ``SetOption73 1`` for button decoupling and send multi-press and hold MQTT messages by Federico Leoni (#8235)
|
||||
- Add command ``SetOption90 1`` to disable non-json MQTT messages (#8044)
|
||||
- Add command ``SetOption91 1`` to enable fading at startup / power on
|
||||
- Add command ``SetOption92 1`` to set PWM Mode from regular PWM to ColorTemp control (Xiaomi Philips ...)
|
||||
- Add command ``SetOption93 1`` to control caching of compressed rules
|
||||
- Add command ``Sensor10 0/1/2`` to control BH1750 resolution - 0 = High (default), 1 = High2, 2 = Low (#8016)
|
||||
- Add command ``Sensor10 31..254`` to control BH1750 measurement time which defaults to 69 (#8016)
|
||||
- Add command ``Sensor18 0..32000`` to control PMS5003 sensor interval to extend lifetime by Gene Ruebsamen (#8128)
|
||||
- Add command ``DevGroupName`` to specify up to four Device Group Names (#8087)
|
||||
- Add command ``DevGroupSend`` to send an update to a Device Group (#8093)
|
||||
- Add command ``Ping`` (#7176)
|
||||
- Add command ``Palette`` to add the ability to specify a palette of colors (#8150)
|
||||
- Add support for unreachable (unplugged) Zigbee devices in Philips Hue emulation and Alexa
|
||||
- Add support for 64x48 SSD1306 OLED (#6740)
|
||||
- Add support for Seven Segment display using HT16K33 (#8116)
|
||||
- Add support for up to four MQTT GroupTopics (#8014)
|
||||
- Add support for longer template names
|
||||
- Add support for an iAQ sensor (#8107)
|
||||
- Add support for AS3935 Lightning Sensor by device111 (#8130)
|
||||
- Add console command history (#7483, #8015)
|
||||
- Add quick wifi reconnect using saved AP parameters when ``SetOption56 0`` (#3189)
|
||||
- Add more accuracy to GPS NTP server (#8088)
|
||||
- Add support for analog anemometer by Matteo Albinola (#8283)
|
||||
- Add support for OpenTherm by Yuriy Sannikov (#8373)
|
||||
- Add support for Thermostat control by arijav (#8212)
|
||||
- Add experimental basic support for Tasmota on ESP32 based on work by Jörg Schüler-Maroldt
|
||||
- Add automatic compression of Rules to achieve ~60% compression by Stefan Hadinger
|
||||
- Add rule trigger at root level like ``on loadavg<50 do power 2 endon`` after ``state`` command
|
||||
|
885
TEMPLATES.md
6
esp32_partition_app1984k_spiffs64k.csv
Normal file
@ -0,0 +1,6 @@
|
||||
# Name, Type, SubType, Offset, Size, Flags
|
||||
nvs, data, nvs, 0x9000, 0x5000,
|
||||
otadata, data, ota, 0xe000, 0x2000,
|
||||
app0, app, ota_0, 0x10000, 0x1F0000,
|
||||
app1, app, ota_1, 0x200000, 0x1F0000,
|
||||
spiffs, data, spiffs, 0x3F0000,0x10000,
|
|
@ -916,15 +916,22 @@ uint8_t *Adafruit_SSD1306::getBuffer(void) {
|
||||
of graphics commands, as best needed by one's own application.
|
||||
*/
|
||||
void Adafruit_SSD1306::display(void) {
|
||||
int16_t col_start = 0;
|
||||
int16_t col_end = WIDTH - 1;
|
||||
if ((64 == WIDTH) && (48 == HEIGHT)) { // for 64x48, we need to shift by 32 in both directions
|
||||
col_start += 32;
|
||||
col_end += 32;
|
||||
}
|
||||
|
||||
TRANSACTION_START
|
||||
static const uint8_t PROGMEM dlist1[] = {
|
||||
SSD1306_PAGEADDR,
|
||||
0, // Page start address
|
||||
0xFF, // Page end (not really, but works here)
|
||||
SSD1306_COLUMNADDR,
|
||||
0 }; // Column start address
|
||||
SSD1306_COLUMNADDR };
|
||||
ssd1306_commandList(dlist1, sizeof(dlist1));
|
||||
ssd1306_command1(WIDTH - 1); // Column end address
|
||||
ssd1306_command1(col_start); // Column start address
|
||||
ssd1306_command1(col_end); // Column end address
|
||||
|
||||
#if defined(ESP8266)
|
||||
// ESP8266 needs a periodic yield() call to avoid watchdog reset.
|
||||
|
@ -17,63 +17,81 @@
|
||||
|
||||
bool NtpServer::beginListening()
|
||||
{
|
||||
if (timeServerPort_.begin(NTP_PORT)){
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
if (timeServerPort_.begin(NTP_PORT)){
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool NtpServer::processOneRequest(uint32_t utc, uint32_t millisecs)
|
||||
{
|
||||
// We need the time we've received the packet in our response.
|
||||
uint32_t recvSecs = utc + NTP_TIMESTAMP_DIFF;
|
||||
double recvFractDouble = (double)millisecs/0.00023283064365386963; // millisec/((10^6)/(2^32))
|
||||
uint32_t recvFract = (double)recvFractDouble; //TODO: really handle this!!!
|
||||
bool processed = false;
|
||||
|
||||
int packetDataSize = timeServerPort_.parsePacket();
|
||||
if (packetDataSize && packetDataSize >= NtpPacket::PACKET_SIZE)
|
||||
{
|
||||
// Received what is probably an NTP packet. Read it in and verify
|
||||
// that it's legit.
|
||||
NtpPacket packet;
|
||||
timeServerPort_.read((char*)&packet, NtpPacket::PACKET_SIZE);
|
||||
// TODO: verify packet.
|
||||
// millisecs is millis() at the time of the last iTOW reception, where iTOW%1000 == 0
|
||||
uint32_t refMillis = millis()-millisecs;
|
||||
if (refMillis>999){
|
||||
utc++;
|
||||
refMillis = refMillis%1000;
|
||||
}
|
||||
|
||||
// Populate response.
|
||||
packet.swapEndian();
|
||||
packet.leapIndicator(0);
|
||||
packet.versionNumber(4);
|
||||
packet.mode(4);
|
||||
packet.stratum = 2; // I guess stratum 1 is too optimistic
|
||||
packet.poll = 10; // 6-10 per RFC 5905.
|
||||
packet.precision = -21; // ~0.5 microsecond precision.
|
||||
packet.rootDelay = 0; //60 * (0xFFFF / 1000); // ~60 milliseconds, TBD
|
||||
packet.rootDispersion = 0; //10 * (0xFFFF / 1000); // ~10 millisecond dispersion, TBD
|
||||
packet.referenceId[0] = 'G';
|
||||
packet.referenceId[1] = 'P';
|
||||
packet.referenceId[2] = 'S';
|
||||
packet.referenceId[3] = 0;
|
||||
packet.referenceTimestampSeconds = utc;
|
||||
packet.referenceTimestampFraction = recvFract;
|
||||
packet.originTimestampSeconds = packet.transmitTimestampSeconds;
|
||||
packet.originTimestampFraction = packet.transmitTimestampFraction;
|
||||
packet.receiveTimestampSeconds = recvSecs;
|
||||
packet.receiveTimestampFraction = recvFract;
|
||||
|
||||
// ...and the transmit time.
|
||||
// timeSource_.now(&packet.transmitTimestampSeconds, &packet.transmitTimestampFraction);
|
||||
|
||||
// Now transmit the response to the client.
|
||||
packet.swapEndian();
|
||||
timeServerPort_.beginPacket(timeServerPort_.remoteIP(), timeServerPort_.remotePort());
|
||||
for (int count = 0; count < NtpPacket::PACKET_SIZE; count++)
|
||||
{
|
||||
timeServerPort_.write(packet.packet()[count]);
|
||||
}
|
||||
timeServerPort_.endPacket();
|
||||
processed = true;
|
||||
}
|
||||
|
||||
return processed;
|
||||
bool processed = false;
|
||||
|
||||
int packetDataSize = timeServerPort_.parsePacket();
|
||||
if (packetDataSize && packetDataSize >= NtpPacket::PACKET_SIZE)
|
||||
{
|
||||
// We need the time we've received the packet in our response.
|
||||
uint32_t recvSecs = utc + NTP_TIMESTAMP_DIFF;
|
||||
|
||||
uint64_t recvFract64 = refMillis;
|
||||
recvFract64 <<= 32;
|
||||
recvFract64 /= 1000;
|
||||
uint32_t recvFract = recvFract64 & 0xffffffff;
|
||||
// is equal to:
|
||||
// uint32_t recvFract = (double)(refMillis)/0.00000023283064365386963;
|
||||
|
||||
// Received what is probably an NTP packet. Read it in and verify
|
||||
// that it's legit.
|
||||
NtpPacket packet;
|
||||
timeServerPort_.read((char*)&packet, NtpPacket::PACKET_SIZE);
|
||||
// TODO: verify packet.
|
||||
|
||||
// Populate response.
|
||||
packet.swapEndian();
|
||||
packet.leapIndicator(0);
|
||||
packet.versionNumber(4);
|
||||
packet.mode(4);
|
||||
packet.stratum = 1; // >1 will lead to misinterpretation of refId
|
||||
packet.poll = 10; // 6-10 per RFC 5905.
|
||||
packet.precision = -21; // ~0.5 microsecond precision.
|
||||
packet.rootDelay = 100 * (0xFFFF / 1000); //~100 milliseconds
|
||||
packet.rootDispersion = 50 * (0xFFFF / 1000);; //~50 millisecond dispersion
|
||||
packet.referenceId[0] = 'G';
|
||||
packet.referenceId[1] = 'P';
|
||||
packet.referenceId[2] = 'S';
|
||||
packet.referenceId[3] = 0;
|
||||
packet.referenceTimestampSeconds = recvSecs;
|
||||
packet.referenceTimestampFraction = 0; // the "click" of the GPS
|
||||
packet.originTimestampSeconds = packet.transmitTimestampSeconds;
|
||||
packet.originTimestampFraction = packet.transmitTimestampFraction;
|
||||
packet.receiveTimestampSeconds = recvSecs;
|
||||
packet.receiveTimestampFraction = recvFract;
|
||||
|
||||
// ...and the transmit time.
|
||||
// the latency has been between 135 and 175 microseconds in internal testing, so we harcode 150
|
||||
uint32_t transFract = recvFract+(150*(10^3)/(2^32)); // microsec/((10^3)/(2^32))
|
||||
if (recvFract>transFract){
|
||||
recvSecs++; //overflow
|
||||
}
|
||||
packet.transmitTimestampSeconds = recvSecs;
|
||||
packet.transmitTimestampFraction = transFract;
|
||||
|
||||
// Now transmit the response to the client.
|
||||
packet.swapEndian();
|
||||
|
||||
timeServerPort_.beginPacket(timeServerPort_.remoteIP(), timeServerPort_.remotePort());
|
||||
timeServerPort_.write((const uint8_t *)packet.packet(), NtpPacket::PACKET_SIZE);
|
||||
timeServerPort_.endPacket();
|
||||
|
||||
processed = true;
|
||||
}
|
||||
|
||||
return processed;
|
||||
}
|
@ -58,7 +58,9 @@ void FrogmoreScd30::begin(TwoWire *pWire, uint8_t i2cAddress)
|
||||
}
|
||||
|
||||
co2NewDataLocation = -1; // indicates there is no data, so the 1st data point needs to fill up the median filter
|
||||
#ifdef ESP8266
|
||||
this->pWire->setClockStretchLimit(200000);
|
||||
#endif
|
||||
this->ambientPressure = 0;
|
||||
}
|
||||
|
||||
@ -106,7 +108,11 @@ int FrogmoreScd30::clearI2CBus(void)
|
||||
snprintf_P(scd30log_data, sizeof(scd30log_data), "clearI2CBus");
|
||||
AddLog(LOG_LEVEL_DEBUG_MORE);
|
||||
#endif
|
||||
#ifdef ESP8266
|
||||
return (twi_status());
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef SCD30_DEBUG
|
||||
@ -253,7 +259,7 @@ int FrogmoreScd30::get16BitRegCheckCRC(void* pInput, uint16_t *pData)
|
||||
}
|
||||
|
||||
// gets 32 bits, (2) 16-bit chunks, and validates the CRCs
|
||||
//
|
||||
//
|
||||
int FrogmoreScd30::get32BitRegCheckCRC(void *pInput, float *pData)
|
||||
{
|
||||
uint16_t tempU16High;
|
||||
@ -458,7 +464,7 @@ int FrogmoreScd30::setTemperatureOffset(float offset_degC)
|
||||
{
|
||||
return (ERROR_SCD30_INVALID_VALUE);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
int FrogmoreScd30::setTemperatureOffset(uint16_t offset_centiDegC)
|
||||
@ -568,7 +574,7 @@ int FrogmoreScd30::readMeasurement(
|
||||
return (error);
|
||||
}
|
||||
|
||||
error = get32BitRegCheckCRC(&bytes[12], &tempHumidity);
|
||||
error = get32BitRegCheckCRC(&bytes[12], &tempHumidity);
|
||||
if (error)
|
||||
{
|
||||
#ifdef SCD30_DEBUG
|
||||
@ -650,4 +656,3 @@ int FrogmoreScd30::stopMeasuring(void)
|
||||
{
|
||||
return (sendCommand(COMMAND_SCD30_STOP_MEASUREMENT));
|
||||
}
|
||||
|
||||
|
@ -1,46 +0,0 @@
|
||||
[platformio]
|
||||
src_dir = .
|
||||
|
||||
[env]
|
||||
; Default platform
|
||||
platform = espressif8266
|
||||
; Default board
|
||||
board = nodemcuv2
|
||||
framework = arduino
|
||||
lib_extra_dirs = ../../
|
||||
lib_ldf_mode = deep+
|
||||
lib_ignore = examples
|
||||
build_flags = ; -D_IR_LOCALE_=en-AU
|
||||
|
||||
[env:nodemcuv2]
|
||||
board = nodemcuv2
|
||||
; build_flags = -D_IR_LOCALE_=en-AU
|
||||
|
||||
[env:esp32dev]
|
||||
platform = espressif32
|
||||
board = esp32dev
|
||||
; build_flags = -D_IR_LOCALE_=en-AU
|
||||
|
||||
[env:de-CH]
|
||||
build_flags = -D_IR_LOCALE_=de-CH
|
||||
|
||||
[env:de-DE]
|
||||
build_flags = -D_IR_LOCALE_=de-DE
|
||||
|
||||
[env:en-AU]
|
||||
build_flags = -D_IR_LOCALE_=en-AU
|
||||
|
||||
[env:en-IE]
|
||||
build_flags = -D_IR_LOCALE_=en-IE
|
||||
|
||||
[env:en-UK]
|
||||
build_flags = -D_IR_LOCALE_=en-UK
|
||||
|
||||
[env:en-US]
|
||||
build_flags = -D_IR_LOCALE_=en-US
|
||||
|
||||
[env:es-ES]
|
||||
build_flags = -D_IR_LOCALE_=es-ES
|
||||
|
||||
[env:fr-FR]
|
||||
build_flags = -D_IR_LOCALE_=fr-FR
|
@ -1,178 +0,0 @@
|
||||
// Hitachi A/C
|
||||
//
|
||||
// Copyright 2018-2019 David Conran
|
||||
|
||||
// Supports:
|
||||
// Brand: Hitachi, Model: RAS-35THA6 remote
|
||||
// Brand: Hitachi, Model: LT0541-HTA remote
|
||||
// Brand: Hitachi, Model: Series VI A/C (Circa 2007)
|
||||
// Brand: Hitachi, Model: RAR-8P2 remote
|
||||
// Brand: Hitachi, Model: RAS-AJ25H A/C
|
||||
|
||||
#ifndef IR_HITACHI_H_
|
||||
#define IR_HITACHI_H_
|
||||
|
||||
#define __STDC_LIMIT_MACROS
|
||||
#include <stdint.h>
|
||||
#ifndef UNIT_TEST
|
||||
#include <Arduino.h>
|
||||
#endif
|
||||
#include "IRremoteESP8266.h"
|
||||
#include "IRsend.h"
|
||||
#ifdef UNIT_TEST
|
||||
#include "IRsend_test.h"
|
||||
#endif
|
||||
|
||||
// Constants
|
||||
const uint16_t kHitachiAcFreq = 38000; // Hz.
|
||||
const uint8_t kHitachiAcAuto = 2;
|
||||
const uint8_t kHitachiAcHeat = 3;
|
||||
const uint8_t kHitachiAcCool = 4;
|
||||
const uint8_t kHitachiAcDry = 5;
|
||||
const uint8_t kHitachiAcFan = 0xC;
|
||||
const uint8_t kHitachiAcFanAuto = 1;
|
||||
const uint8_t kHitachiAcFanLow = 2;
|
||||
const uint8_t kHitachiAcFanMed = 3;
|
||||
const uint8_t kHitachiAcFanHigh = 5;
|
||||
const uint8_t kHitachiAcMinTemp = 16; // 16C
|
||||
const uint8_t kHitachiAcMaxTemp = 32; // 32C
|
||||
const uint8_t kHitachiAcAutoTemp = 23; // 23C
|
||||
const uint8_t kHitachiAcPowerOffset = 0;
|
||||
const uint8_t kHitachiAcSwingOffset = 7;
|
||||
|
||||
// HitachiAc424
|
||||
// Byte[11]
|
||||
const uint8_t kHitachiAc424ButtonByte = 11;
|
||||
const uint8_t kHitachiAc424ButtonPowerMode = 0x13;
|
||||
const uint8_t kHitachiAc424ButtonFan = 0x42;
|
||||
const uint8_t kHitachiAc424ButtonTempDown = 0x43;
|
||||
const uint8_t kHitachiAc424ButtonTempUp = 0x44;
|
||||
const uint8_t kHitachiAc424ButtonSwingV = 0x81;
|
||||
|
||||
// Byte[13]
|
||||
const uint8_t kHitachiAc424TempByte = 13;
|
||||
const uint8_t kHitachiAc424TempOffset = 2;
|
||||
const uint8_t kHitachiAc424TempSize = 6;
|
||||
const uint8_t kHitachiAc424MinTemp = 16; // 16C
|
||||
const uint8_t kHitachiAc424MaxTemp = 32; // 32C
|
||||
const uint8_t kHitachiAc424FanTemp = 27; // 27C
|
||||
|
||||
// Byte[25]
|
||||
const uint8_t kHitachiAc424ModeByte = 25;
|
||||
const uint8_t kHitachiAc424Fan = 1;
|
||||
const uint8_t kHitachiAc424Cool = 3;
|
||||
const uint8_t kHitachiAc424Dry = 5;
|
||||
const uint8_t kHitachiAc424Heat = 6;
|
||||
const uint8_t kHitachiAc424FanByte = kHitachiAc424ModeByte;
|
||||
const uint8_t kHitachiAc424FanMin = 1;
|
||||
const uint8_t kHitachiAc424FanLow = 2;
|
||||
const uint8_t kHitachiAc424FanMedium = 3;
|
||||
const uint8_t kHitachiAc424FanHigh = 4;
|
||||
const uint8_t kHitachiAc424FanAuto = 5;
|
||||
const uint8_t kHitachiAc424FanMax = 6;
|
||||
const uint8_t kHitachiAc424FanMaxDry = 2;
|
||||
// Byte[27]
|
||||
const uint8_t kHitachiAc424PowerByte = 27;
|
||||
const uint8_t kHitachiAc424PowerOn = 0xF1;
|
||||
const uint8_t kHitachiAc424PowerOff = 0xE1;
|
||||
|
||||
// Classes
|
||||
class IRHitachiAc {
|
||||
public:
|
||||
explicit IRHitachiAc(const uint16_t pin, const bool inverted = false,
|
||||
const bool use_modulation = true);
|
||||
|
||||
void stateReset(void);
|
||||
#if SEND_HITACHI_AC
|
||||
void send(const uint16_t repeat = kHitachiAcDefaultRepeat);
|
||||
uint8_t calibrate(void) { return _irsend.calibrate(); }
|
||||
#endif // SEND_HITACHI_AC
|
||||
void begin(void);
|
||||
void on(void);
|
||||
void off(void);
|
||||
void setPower(const bool on);
|
||||
bool getPower(void);
|
||||
void setTemp(const uint8_t temp);
|
||||
uint8_t getTemp(void);
|
||||
void setFan(const uint8_t speed);
|
||||
uint8_t getFan(void);
|
||||
void setMode(const uint8_t mode);
|
||||
uint8_t getMode(void);
|
||||
void setSwingVertical(const bool on);
|
||||
bool getSwingVertical(void);
|
||||
void setSwingHorizontal(const bool on);
|
||||
bool getSwingHorizontal(void);
|
||||
uint8_t* getRaw(void);
|
||||
void setRaw(const uint8_t new_code[],
|
||||
const uint16_t length = kHitachiAcStateLength);
|
||||
static bool validChecksum(const uint8_t state[],
|
||||
const uint16_t length = kHitachiAcStateLength);
|
||||
static uint8_t calcChecksum(const uint8_t state[],
|
||||
const uint16_t length = kHitachiAcStateLength);
|
||||
uint8_t convertMode(const stdAc::opmode_t mode);
|
||||
uint8_t convertFan(const stdAc::fanspeed_t speed);
|
||||
static stdAc::opmode_t toCommonMode(const uint8_t mode);
|
||||
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
|
||||
stdAc::state_t toCommon(void);
|
||||
String toString(void);
|
||||
#ifndef UNIT_TEST
|
||||
|
||||
private:
|
||||
IRsend _irsend;
|
||||
#else
|
||||
IRsendTest _irsend;
|
||||
#endif
|
||||
// The state of the IR remote in IR code form.
|
||||
uint8_t remote_state[kHitachiAcStateLength];
|
||||
void checksum(const uint16_t length = kHitachiAcStateLength);
|
||||
uint8_t _previoustemp;
|
||||
};
|
||||
|
||||
class IRHitachiAc424 {
|
||||
public:
|
||||
explicit IRHitachiAc424(const uint16_t pin, const bool inverted = false,
|
||||
const bool use_modulation = true);
|
||||
|
||||
void stateReset(void);
|
||||
#if SEND_HITACHI_AC424
|
||||
void send(const uint16_t repeat = kHitachiAcDefaultRepeat);
|
||||
uint8_t calibrate(void) { return _irsend.calibrate(); }
|
||||
#endif // SEND_HITACHI_AC424
|
||||
void begin(void);
|
||||
void on(void);
|
||||
void off(void);
|
||||
void setPower(const bool on);
|
||||
bool getPower(void);
|
||||
void setTemp(const uint8_t temp, bool setPrevious = true);
|
||||
uint8_t getTemp(void);
|
||||
void setFan(const uint8_t speed);
|
||||
uint8_t getFan(void);
|
||||
uint8_t getButton(void);
|
||||
void setButton(const uint8_t button);
|
||||
void setSwingVToggle(const bool on);
|
||||
bool getSwingVToggle(void);
|
||||
void setMode(const uint8_t mode);
|
||||
uint8_t getMode(void);
|
||||
uint8_t* getRaw(void);
|
||||
void setRaw(const uint8_t new_code[],
|
||||
const uint16_t length = kHitachiAc424StateLength);
|
||||
uint8_t convertMode(const stdAc::opmode_t mode);
|
||||
uint8_t convertFan(const stdAc::fanspeed_t speed);
|
||||
static stdAc::opmode_t toCommonMode(const uint8_t mode);
|
||||
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
|
||||
stdAc::state_t toCommon(void);
|
||||
String toString(void);
|
||||
#ifndef UNIT_TEST
|
||||
|
||||
private:
|
||||
IRsend _irsend;
|
||||
#else
|
||||
IRsendTest _irsend;
|
||||
#endif
|
||||
// The state of the IR remote in IR code form.
|
||||
uint8_t remote_state[kHitachiAc424StateLength];
|
||||
void setInvertedStates(void);
|
||||
uint8_t _previoustemp;
|
||||
};
|
||||
|
||||
#endif // IR_HITACHI_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.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.
|
||||
## v2.7.6 Now Available
|
||||
Version 2.7.6 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.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.
|
||||
## v2.7.6 disponible
|
||||
Version 2.7.6 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,35 @@
|
||||
# Release Notes
|
||||
|
||||
## _v2.7.6 (20200425)_
|
||||
|
||||
**[Features]**
|
||||
- IRMQTTServer: Use more i18n text. (#1086)
|
||||
- Convert Protocol names to shared text. Saves ~3k of flash. (#1078)
|
||||
- Add Chinese translation (zh-CN) & add utf-8 support. (#1080, #1085)
|
||||
|
||||
**[Misc]**
|
||||
- IRMQTTServer: Ensure MQTT_MAX_PACKET_SIZE is correctly set. (#1084)
|
||||
- Add Italian locale to IRrecvDumpV2 platformio file.
|
||||
|
||||
|
||||
## _v2.7.5 (20200409)_
|
||||
|
||||
**[Features]**
|
||||
- Detailed support for `HITACHI_AC1` protocol. (#1056, #1061, #1072)
|
||||
- update sharp to match Sharp AH-A5SAY (#1074)
|
||||
- Experimental support for AIRWELL protocol. (#1069, #1070)
|
||||
- SamsungAC: Add Breeze (Aka WindFree) control (#1062, #1071)
|
||||
- Support for Daikin FFN-C A/C (#1064, #1065)
|
||||
- Add basic support for HITACHI_AC3 protocol. (#1060, #1063)
|
||||
- Add support for `SYMPHONY` 11 bit protocol. (#1057, #1058)
|
||||
- IRMQTTServer: Improve Home-Assistant discovery by sending a 'device' with the discovery packet (#1055)
|
||||
|
||||
**[Misc]**
|
||||
- Clean up support status of various protocols.
|
||||
- Add `decodeToState()` unit tests to all supported protocols (#1067, #1068)
|
||||
- Add Gree AC example code. (#1066)
|
||||
|
||||
|
||||
## _v2.7.4 (20200226)_
|
||||
|
||||
**[Bug Fixes]**
|
@ -1,18 +1,20 @@
|
||||
<!--- WARNING: Do NOT edit this file directly.
|
||||
It is generated by './tools/scrape_supported_devices.py'.
|
||||
Last generated: Wed Feb 26 16:31:08 2020 --->
|
||||
Last generated: Thu Apr 9 15:49:53 2020 --->
|
||||
# IR Protocols supported by this library
|
||||
|
||||
| Protocol | Brand | Model | A/C Model | Detailed A/C Support |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| [Airwell](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Airwell.cpp) | **Airwell** | RC08W remote | | - |
|
||||
| [Aiwa](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Aiwa.cpp) | **Aiwa** | RC-T501 RCU | | - |
|
||||
| [Amcor](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Amcor.cpp) | **[Amcor](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Amcor.h)** | ADR-853H A/C<BR>ADR-853H A/C<BR>TAC-444 remote<BR>TAC-444 remote<BR>TAC-495 remote<BR>TAC-495 remote | | Yes |
|
||||
| [Argo](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Argo.cpp) | **[Argo](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Argo.h)** | Ulisse 13 DCI Mobile Split A/C | | Yes |
|
||||
| [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) | **[Airwell](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Coolix.h)** | RC08B remote | | Yes |
|
||||
| [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 |
|
||||
| [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 |
|
||||
| [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>DGS01 remote (DAIKIN64)<BR>FFN-C/FCN-F Series A/C (DAIKIN64)<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 |
|
||||
@ -28,7 +30,7 @@
|
||||
| [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 |
|
||||
| [Hitachi](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Hitachi.cpp) | **[Hitachi](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Hitachi.h)** | KAZE-312KSDP A/C (HITACHI_AC1)<BR>LT0541-HTA remote<BR>PC-LH3B (HITACHI_AC3)<BR>R-LT0541-HTA/Y.K.1.1-1 V2.3 remote (HITACHI_AC1)<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 |
|
||||
@ -56,11 +58,12 @@
|
||||
| [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)** | AR09FSSDAWKNFA A/C<BR>AR12HSSDBWKNEU A/C<BR>AR12KSFPEWQNET A/C<BR>DB63-03556X003 remote<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>AR12NXCXAWKXEU A/C<BR>DB63-03556X003 remote<BR>DB93-16761C 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 |
|
||||
| [Sharp](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Sharp.cpp) | **[Sharp](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Sharp.h)** | AH-AxSAY A/C<BR>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) | **Sony** | HT-CT380 Soundbar (Uses 38kHz & 3 repeats) | | - |
|
||||
| [Symphony](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Symphony.cpp) | **Symphony** | Air Cooler 3Di | | - |
|
||||
| [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 |
|
||||
@ -81,6 +84,7 @@
|
||||
|
||||
## Send & decodable protocols:
|
||||
|
||||
- AIRWELL
|
||||
- AIWA_RC_T501
|
||||
- AMCOR
|
||||
- ARGO
|
||||
@ -93,6 +97,7 @@
|
||||
- DAIKIN176
|
||||
- DAIKIN2
|
||||
- DAIKIN216
|
||||
- DAIKIN64
|
||||
- DENON
|
||||
- DISH
|
||||
- ELECTRA_AC
|
||||
@ -106,6 +111,7 @@
|
||||
- HITACHI_AC
|
||||
- HITACHI_AC1
|
||||
- HITACHI_AC2
|
||||
- HITACHI_AC3
|
||||
- HITACHI_AC424
|
||||
- INAX
|
||||
- JVC
|
||||
@ -144,6 +150,7 @@
|
||||
- SHARP
|
||||
- SHARP_AC
|
||||
- SONY
|
||||
- SYMPHONY
|
||||
- TCL112AC
|
||||
- TECO
|
||||
- TOSHIBA_AC
|
@ -239,7 +239,7 @@ const uint16_t kJsonAcStateMaxSize = 1024; // Bytes
|
||||
// ----------------- End of User Configuration Section -------------------------
|
||||
|
||||
// Constants
|
||||
#define _MY_VERSION_ "v1.4.6"
|
||||
#define _MY_VERSION_ "v1.4.9"
|
||||
|
||||
const uint8_t kRebootTime = 15; // Seconds
|
||||
const uint8_t kQuickDisplayTime = 2; // Seconds
|
@ -358,12 +358,17 @@
|
||||
#include <IRutils.h>
|
||||
#include <IRac.h>
|
||||
#if MQTT_ENABLE
|
||||
#include <PubSubClient.h>
|
||||
// --------------------------------------------------------------------
|
||||
// * * * IMPORTANT * * *
|
||||
// You must change <PubSubClient.h> to have the following value.
|
||||
// #define MQTT_MAX_PACKET_SIZE 768
|
||||
// --------------------------------------------------------------------
|
||||
#include <PubSubClient.h>
|
||||
// Check that the user has set MQTT_MAX_PACKET_SIZE to an appropriate size.
|
||||
#if MQTT_MAX_PACKET_SIZE < 768
|
||||
#error "MQTT_MAX_PACKET_SIZE in <PubSubClient.h> is too small. "\
|
||||
"Increase the value per comments."
|
||||
#endif // MQTT_MAX_PACKET_SIZE < 768
|
||||
#endif // MQTT_ENABLE
|
||||
#include <algorithm> // NOLINT(build/include)
|
||||
#include <memory>
|
||||
@ -449,6 +454,7 @@ String MqttClimate; // Sub-topic for the climate topics.
|
||||
String MqttClimateCmnd; // Sub-topic for the climate command topics.
|
||||
#if MQTT_DISCOVERY_ENABLE
|
||||
String MqttDiscovery;
|
||||
String MqttUniqueId;
|
||||
#endif // MQTT_DISCOVERY_ENABLE
|
||||
String MqttHAName;
|
||||
String MqttClientId;
|
||||
@ -621,7 +627,7 @@ bool loadConfigFile(void) {
|
||||
|
||||
String timeElapsed(uint32_t const msec) {
|
||||
String result = msToString(msec);
|
||||
if (result.equalsIgnoreCase("Now"))
|
||||
if (result.equalsIgnoreCase(D_STR_NOW))
|
||||
return result;
|
||||
else
|
||||
return result + F(" ago");
|
||||
@ -641,7 +647,7 @@ String timeSince(uint32_t const start) {
|
||||
|
||||
String gpioToString(const int16_t gpio) {
|
||||
if (gpio == kGpioUnused)
|
||||
return F("Unused");
|
||||
return F(D_STR_UNUSED);
|
||||
else
|
||||
return String(gpio);
|
||||
}
|
||||
@ -714,13 +720,13 @@ void handleRoot(void) {
|
||||
html += F(
|
||||
"<h3>Send a simple IR message</h3><p>"
|
||||
"<form method='POST' action='/ir' enctype='multipart/form-data'>"
|
||||
"Type: ");
|
||||
D_STR_PROTOCOL ": ");
|
||||
html += htmlSelectAcStateProtocol(KEY_TYPE, decode_type_t::NEC, true);
|
||||
html += F(
|
||||
" Code: 0x<input type='text' name='code' min='0' value='0' size='16'"
|
||||
" maxlength='16'>"
|
||||
" Bit size: "
|
||||
"<select name='bits'>"
|
||||
" " D_STR_CODE ": 0x<input type='text' name='" KEY_CODE "' min='0' "
|
||||
"value='0' size='16' maxlength='16'> "
|
||||
D_STR_BITS ": "
|
||||
"<select name='" KEY_BITS "'>"
|
||||
"<option selected='selected' value='0'>Default</option>"); // Default
|
||||
for (uint8_t i = 0; i < sizeof(kCommonBitSizes); i++) {
|
||||
String num = String(kCommonBitSizes[i]);
|
||||
@ -732,18 +738,18 @@ void handleRoot(void) {
|
||||
}
|
||||
html += F(
|
||||
"</select>"
|
||||
" Repeats: <input type='number' name='repeats' min='0' max='99' value='0'"
|
||||
"size='2' maxlength='2'>"
|
||||
" <input type='submit' value='Send IR'>"
|
||||
" " D_STR_REPEAT ": <input type='number' name='" KEY_REPEAT "' min='0' "
|
||||
"max='99' value='0' size='2' maxlength='2'>"
|
||||
" <input type='submit' value='Send " D_STR_CODE "'>"
|
||||
"</form>"
|
||||
"<br><hr>"
|
||||
"<h3>Send a complex (Air Conditioner) IR message</h3><p>"
|
||||
"<form method='POST' action='/ir' enctype='multipart/form-data'>"
|
||||
"Type: ");
|
||||
D_STR_PROTOCOL ": ");
|
||||
html += htmlSelectAcStateProtocol(KEY_TYPE, decode_type_t::KELVINATOR, false);
|
||||
html += F(
|
||||
" State code: 0x"
|
||||
"<input type='text' name='code' size='");
|
||||
" State " D_STR_CODE ": 0x"
|
||||
"<input type='text' name='" KEY_CODE "' size='");
|
||||
html += String(kStateSizeMax * 2);
|
||||
html += F("' maxlength='");
|
||||
html += String(kStateSizeMax * 2);
|
||||
@ -753,14 +759,14 @@ void handleRoot(void) {
|
||||
"190B8050000000E0190B8070000010F0"
|
||||
#endif // EXAMPLES_ENABLE
|
||||
"'>"
|
||||
" <input type='submit' value='Send A/C State'>"
|
||||
" <input type='submit' value='Send A/C " D_STR_CODE "'>"
|
||||
"</form>"
|
||||
"<br><hr>"
|
||||
"<h3>Send an IRremote Raw IR message</h3><p>"
|
||||
"<form method='POST' action='/ir' enctype='multipart/form-data'>"
|
||||
"<input type='hidden' name='type' value='30'>"
|
||||
"String: (freq,array data) <input type='text' name='code' size='132'"
|
||||
" value='"
|
||||
"<input type='hidden' name='" KEY_TYPE "' value='30'>"
|
||||
"String: (freq,array data) <input type='text' name='" KEY_CODE "'"
|
||||
" size='132' value='"
|
||||
#if EXAMPLES_ENABLE
|
||||
"38000,4420,4420,520,1638,520,1638,520,1638,520,520,520,520,520,"
|
||||
"520,520,520,520,520,520,1638,520,1638,520,1638,520,520,520,"
|
||||
@ -775,8 +781,8 @@ void handleRoot(void) {
|
||||
"<h3>Send a <a href='https://irdb.globalcache.com/'>GlobalCache</a>"
|
||||
" IR message</h3><p>"
|
||||
"<form method='POST' action='/ir' enctype='multipart/form-data'>"
|
||||
"<input type='hidden' name='type' value='31'>"
|
||||
"String: 1:1,1,<input type='text' name='code' size='132'"
|
||||
"<input type='hidden' name='" KEY_TYPE "' value='31'>"
|
||||
"String: 1:1,1,<input type='text' name='" KEY_CODE "' size='132'"
|
||||
" value='"
|
||||
#if EXAMPLES_ENABLE
|
||||
"38000,1,1,170,170,20,63,20,63,20,63,20,20,20,20,20,20,20,20,20,"
|
||||
@ -791,9 +797,9 @@ void handleRoot(void) {
|
||||
"<h3>Send a <a href='http://www.remotecentral.com/cgi-bin/files/rcfiles.cgi"
|
||||
"?area=pronto&db=discrete'>Pronto code</a> IR message</h3><p>"
|
||||
"<form method='POST' action='/ir' enctype='multipart/form-data'>"
|
||||
"<input type='hidden' name='type' value='25'>"
|
||||
"String (comma separated): <input type='text' name='code' size='132'"
|
||||
" value='"
|
||||
"<input type='hidden' name='" KEY_TYPE "' value='25'>"
|
||||
"String (comma separated): <input type='text' name='" KEY_CODE "'"
|
||||
" size='132' value='"
|
||||
#if EXAMPLES_ENABLE
|
||||
"0000,0067,0000,0015,0060,0018,0018,0018,0030,0018,0030,0018,"
|
||||
"0030,0018,0018,0018,0030,0018,0018,0018,0018,0018,0030,0018,0018,"
|
||||
@ -801,8 +807,8 @@ void handleRoot(void) {
|
||||
"0018,0018,0018,0018,0030,0018,0018,03f6"
|
||||
#endif // EXAMPLES_ENABLE
|
||||
"'>"
|
||||
" Repeats: <input type='number' name='repeats' min='0' max='99' value='0'"
|
||||
"size='2' maxlength='2'>"
|
||||
" " D_STR_REPEAT ": <input type='number' name='" KEY_REPEAT "' min='0' "
|
||||
"max='99' value='0' size='2' maxlength='2'>"
|
||||
" <input type='submit' value='Send Pronto'>"
|
||||
"</form>"
|
||||
"<br>");
|
||||
@ -824,7 +830,7 @@ String addJsReloadUrl(const String url, const uint16_t timeout_s,
|
||||
if (notify && timeout_s) {
|
||||
html += F(" document.write(\"You will be redirected to the main page in ");
|
||||
html += String(timeout_s);
|
||||
html += F(" seconds.\");\n");
|
||||
html += F(" " D_STR_SECONDS ".\");\n");
|
||||
}
|
||||
html += F(" setTimeout('Redirect()', ");
|
||||
html += String(timeout_s * 1000); // Convert to mSecs
|
||||
@ -847,35 +853,44 @@ void handleExamples(void) {
|
||||
html += htmlMenu();
|
||||
html += F(
|
||||
"<h3>Hardcoded examples</h3>"
|
||||
"<p><a href=\"ir?code=38000,1,69,341,171,21,64,21,64,21,21,21,21,21,21,21,"
|
||||
"21,21,21,21,64,21,64,21,21,21,64,21,21,21,21,21,21,21,64,21,21,21,64,"
|
||||
"21,21,21,21,21,21,21,64,21,21,21,21,21,21,21,21,21,64,21,64,21,64,21,"
|
||||
"21,21,64,21,64,21,64,21,1600,341,85,21,3647&type=31\">"
|
||||
"Sherwood Amp On (GlobalCache)</a></p>"
|
||||
"<p><a href=\"ir?code=38000,8840,4446,546,1664,546,1664,546,546,546,546,"
|
||||
"546,546,546,546,546,546,546,1664,546,1664,546,546,546,1664,546,546,"
|
||||
"546,546,546,546,546,1664,546,546,546,1664,546,546,546,1664,546,1664,"
|
||||
"546,1664,546,546,546,546,546,546,546,546,546,1664,546,546,546,546,546,"
|
||||
"546,546,1664,546,1664,546,1664,546,41600,8840,2210,546&type=30\">"
|
||||
"Sherwood Amp Off (Raw)</a></p>"
|
||||
"<p><a href=\"ir?code=0000,006E,0022,0002,0155,00AA,0015,0040,0015,0040"
|
||||
",0015,0015,0015,0015,0015,0015,0015,0015,0015,0015,0015,0040,0015,0040"
|
||||
",0015,0015,0015,0040,0015,0015,0015,0015,0015,0015,0015,0040,0015,0015"
|
||||
",0015,0015,0015,0040,0015,0040,0015,0015,0015,0015,0015,0015,0015,0015"
|
||||
",0015,0015,0015,0040,0015,0015,0015,0015,0015,0040,0015,0040,0015,0040"
|
||||
",0015,0040,0015,0040,0015,0640,0155,0055,0015,0E40"
|
||||
"&type=25&repeats=1\">"
|
||||
"<p><a href=\"ir?" KEY_CODE "=38000,1,69,341,171,21,64,21,64,21,21,21,21,"
|
||||
"21,21,21,21,21,21,21,64,21,64,21,21,21,64,21,21,21,21,21,21,21,64,21,"
|
||||
"21,21,64,21,21,21,21,21,21,21,64,21,21,21,21,21,21,21,21,21,64,21,64,"
|
||||
"21,64,21,21,21,64,21,64,21,64,21,1600,341,85,21,3647"
|
||||
"&" KEY_TYPE "=31\">Sherwood Amp " D_STR_ON " (GlobalCache)</a></p>"
|
||||
"<p><a href=\"ir?" KEY_CODE "=38000,8840,4446,546,1664,546,1664,546,546,"
|
||||
"546,546,546,546,546,546,546,546,546,1664,546,1664,546,546,546,1664,"
|
||||
"546,546,546,546,546,546,546,1664,546,546,546,1664,546,546,546,1664,"
|
||||
"546,1664,546,1664,546,546,546,546,546,546,546,546,546,1664,546,546,"
|
||||
"546,546,546,546,546,1664,546,1664,546,1664,546,41600,8840,2210,546"
|
||||
"&" KEY_TYPE "=30\">Sherwood Amp " D_STR_OFF " (Raw)</a></p>"
|
||||
"<p><a href=\"ir?" KEY_CODE "=0000,006E,0022,0002,0155,00AA,0015,0040,0015,"
|
||||
"0040,0015,0015,0015,0015,0015,0015,0015,0015,0015,0015,0015,0040,0015,"
|
||||
"0040,0015,0015,0015,0040,0015,0015,0015,0015,0015,0015,0015,0040,0015,"
|
||||
"0015,0015,0015,0015,0040,0015,0040,0015,0015,0015,0015,0015,0015,0015,"
|
||||
"0015,0015,0015,0015,0040,0015,0015,0015,0015,0015,0040,0015,0040,0015,"
|
||||
"0040,0015,0040,0015,0040,0015,0640,0155,0055,0015,0E40"
|
||||
"&" KEY_TYPE "=25&" KEY_REPEAT "=1\">"
|
||||
"Sherwood Amp Input TAPE (Pronto)</a></p>"
|
||||
"<p><a href=\"ir?type=7&code=E0E09966\">TV on (Samsung)</a></p>"
|
||||
"<p><a href=\"ir?type=4&code=0xf50&bits=12\">Power Off (Sony 12bit)</a></p>"
|
||||
"<p><a href=\"aircon/set?protocol=PANASONIC_AC&model=LKE&power=on&"
|
||||
"mode=auto&fanspeed=min&temp=23\">"
|
||||
"Panasonic A/C LKE model, On, Auto mode, Min fan, 23C"
|
||||
"<p><a href=\"ir?" KEY_TYPE "=7&" KEY_CODE "=E0E09966\">TV " D_STR_ON
|
||||
" (Samsung)</a></p>"
|
||||
"<p><a href=\"ir?" KEY_TYPE "=4&" KEY_CODE "=0xf50&bits=12\">" D_STR_POWER
|
||||
" " D_STR_OFF " (Sony 12 " D_STR_BITS ")</a></p>"
|
||||
"<p><a href=\"aircon/set?protocol=PANASONIC_AC&"
|
||||
KEY_MODEL "=LKE&"
|
||||
KEY_POWER "=on&"
|
||||
KEY_MODE "=auto&"
|
||||
KEY_FANSPEED "=min&"
|
||||
KEY_TEMP "=23\">"
|
||||
"Panasonic A/C " D_STR_MODEL " LKE, " D_STR_ON ", " D_STR_AUTO " "
|
||||
D_STR_MODE ", " D_STR_MIN " " D_STR_FAN ", 23C"
|
||||
" <i>(via HTTP aircon interface)</i></a></p>"
|
||||
"<p><a href=\"aircon/set?temp=27\">"
|
||||
"Change just the temp to 27C <i>(via HTTP aircon interface)</i></a></p>"
|
||||
"<p><a href=\"aircon/set?power=off&mode=off\">"
|
||||
"Turn OFF the current A/C <i>(via HTTP aircon interface)</i></a></p>"
|
||||
"<p><a href=\"aircon/set?" KEY_TEMP "=27\">"
|
||||
"Change just the " D_STR_TEMP " to 27C <i>"
|
||||
"(via HTTP aircon interface)</i></a></p>"
|
||||
"<p><a href=\"aircon/set?" KEY_POWER "=off&" KEY_MODE "=off\">"
|
||||
"Turn " D_STR_OFF " the current A/C <i>("
|
||||
"via HTTP aircon interface)</i></a></p>"
|
||||
"<br><hr>");
|
||||
html += htmlEnd();
|
||||
server.send(200, "text/html", html);
|
||||
@ -995,7 +1010,9 @@ String htmlSelectSwingh(const String name, const stdAc::swingh_t def) {
|
||||
String htmlHeader(const String title, const String h1_text) {
|
||||
String html = F("<html><head><title>");
|
||||
html += title;
|
||||
html += F("</title></head><body><center><h1>");
|
||||
html += F("</title><meta http-equiv=\"Content-Type\" "
|
||||
"content=\"text/html;charset=utf-8\">"
|
||||
"</head><body><center><h1>");
|
||||
if (h1_text.length())
|
||||
html += h1_text;
|
||||
else
|
||||
@ -1041,20 +1058,20 @@ void handleAirCon(void) {
|
||||
"<input type='hidden' name='" KEY_CHANNEL "' value='" + String(chan) +
|
||||
"'>" +
|
||||
"<table style='width:33%'>"
|
||||
"<tr><td>Protocol</td><td>" +
|
||||
"<tr><td>" D_STR_PROTOCOL "</td><td>" +
|
||||
htmlSelectClimateProtocol(KEY_PROTOCOL,
|
||||
climate[chan]->next.protocol) +
|
||||
"</td></tr>"
|
||||
"<tr><td>Model</td><td>" +
|
||||
"<tr><td>" D_STR_MODEL "</td><td>" +
|
||||
htmlSelectModel(KEY_MODEL, climate[chan]->next.model) +
|
||||
"</td></tr>"
|
||||
"<tr><td>Power</td><td>" +
|
||||
"<tr><td>" D_STR_POWER "</td><td>" +
|
||||
htmlSelectBool(KEY_POWER, climate[chan]->next.power) +
|
||||
"</td></tr>"
|
||||
"<tr><td>Mode</td><td>" +
|
||||
"<tr><td>" D_STR_MODE "</td><td>" +
|
||||
htmlSelectMode(KEY_MODE, climate[chan]->next.mode) +
|
||||
"</td></tr>"
|
||||
"<tr><td>Temp</td><td>"
|
||||
"<tr><td>" D_STR_TEMP "</td><td>"
|
||||
"<input type='number' name='" KEY_TEMP "' min='16' max='90' "
|
||||
"step='0.5' value='" + String(climate[chan]->next.degrees, 1) + "'>"
|
||||
"<select name='" KEY_CELSIUS "'>"
|
||||
@ -1065,34 +1082,34 @@ void handleAirCon(void) {
|
||||
(!climate[chan]->next.celsius ? " selected='selected'" : "") +
|
||||
">F</option>"
|
||||
"</select></td></tr>"
|
||||
"<tr><td>Fan Speed</td><td>" +
|
||||
"<tr><td>" D_STR_FAN "</td><td>" +
|
||||
htmlSelectFanspeed(KEY_FANSPEED, climate[chan]->next.fanspeed) +
|
||||
"</td></tr>"
|
||||
"<tr><td>Swing (V)</td><td>" +
|
||||
"<tr><td>" D_STR_SWINGV "</td><td>" +
|
||||
htmlSelectSwingv(KEY_SWINGV, climate[chan]->next.swingv) +
|
||||
"</td></tr>"
|
||||
"<tr><td>Swing (H)</td><td>" +
|
||||
"<tr><td>" D_STR_SWINGH "</td><td>" +
|
||||
htmlSelectSwingh(KEY_SWINGH, climate[chan]->next.swingh) +
|
||||
"</td></tr>"
|
||||
"<tr><td>Quiet</td><td>" +
|
||||
"<tr><td>" D_STR_QUIET "</td><td>" +
|
||||
htmlSelectBool(KEY_QUIET, climate[chan]->next.quiet) +
|
||||
"</td></tr>"
|
||||
"<tr><td>Turbo</td><td>" +
|
||||
"<tr><td>" D_STR_TURBO "</td><td>" +
|
||||
htmlSelectBool(KEY_TURBO, climate[chan]->next.turbo) +
|
||||
"</td></tr>"
|
||||
"<tr><td>Econo</td><td>" +
|
||||
"<tr><td>" D_STR_ECONO "</td><td>" +
|
||||
htmlSelectBool(KEY_ECONO, climate[chan]->next.econo) +
|
||||
"</td></tr>"
|
||||
"<tr><td>Light</td><td>" +
|
||||
"<tr><td>" D_STR_LIGHT "</td><td>" +
|
||||
htmlSelectBool(KEY_LIGHT, climate[chan]->next.light) +
|
||||
"</td></tr>"
|
||||
"<tr><td>Filter</td><td>" +
|
||||
"<tr><td>" D_STR_FILTER "</td><td>" +
|
||||
htmlSelectBool(KEY_FILTER, climate[chan]->next.filter) +
|
||||
"</td></tr>"
|
||||
"<tr><td>Clean</td><td>" +
|
||||
"<tr><td>" D_STR_CLEAN "</td><td>" +
|
||||
htmlSelectBool(KEY_CLEAN, climate[chan]->next.clean) +
|
||||
"</td></tr>"
|
||||
"<tr><td>Beep</td><td>" +
|
||||
"<tr><td>" D_STR_BEEP "</td><td>" +
|
||||
htmlSelectBool(KEY_BEEP, climate[chan]->next.beep) +
|
||||
"</td></tr>"
|
||||
"<tr><td>Force resend</td><td>" +
|
||||
@ -1228,6 +1245,7 @@ void handleInfo(void) {
|
||||
"<h3>General</h3>"
|
||||
"<p>Hostname: " + String(Hostname) + "<br>"
|
||||
"IP address: " + WiFi.localIP().toString() + "<br>"
|
||||
"MAC address: " + WiFi.macAddress() + "<br>"
|
||||
"Booted: " + timeSince(1) + "<br>" +
|
||||
"Version: " _MY_VERSION_ "<br>"
|
||||
"Built: " __DATE__
|
||||
@ -1258,9 +1276,9 @@ void handleInfo(void) {
|
||||
"Last IR Received: " + lastIrReceived +
|
||||
" <i>(" + timeSince(lastIrReceivedTime) + ")</i><br>"
|
||||
#endif // IR_RX
|
||||
"Duplicate Wifi networks: " +
|
||||
"Duplicate " D_STR_WIFI " networks: " +
|
||||
String(HIDE_DUPLICATE_NETWORKS ? "Hide" : "Show") + "<br>"
|
||||
"Min Wifi signal required: "
|
||||
"Min " D_STR_WIFI " signal required: "
|
||||
#ifdef MIN_SIGNAL_STRENGTH
|
||||
+ String(static_cast<int>(MIN_SIGNAL_STRENGTH)) +
|
||||
#else // MIN_SIGNAL_STRENGTH
|
||||
@ -1269,9 +1287,9 @@ void handleInfo(void) {
|
||||
"%<br>"
|
||||
"Serial debugging: "
|
||||
#if DEBUG
|
||||
+ String(isSerialGpioUsedByIr() ? "Off" : "On") +
|
||||
+ String(isSerialGpioUsedByIr() ? D_STR_OFF : D_STR_ON) +
|
||||
#else // DEBUG
|
||||
"Off"
|
||||
D_STR_OFF
|
||||
#endif // DEBUG
|
||||
"<br>"
|
||||
#if REPORT_VCC
|
||||
@ -1287,6 +1305,7 @@ void handleInfo(void) {
|
||||
: "Disconnected " + timeSince(lastConnectedTime)) +
|
||||
")</i><br>"
|
||||
"Disconnections: " + String(mqttDisconnectCounter - 1) + "<br>"
|
||||
"Max Packet Size: " + MQTT_MAX_PACKET_SIZE + " bytes<br>"
|
||||
"Client id: " + MqttClientId + "<br>"
|
||||
"Command topic(s): " + listOfCommandTopics() + "<br>"
|
||||
"Acknowledgements topic: " + MqttAck + "<br>"
|
||||
@ -1328,6 +1347,7 @@ void handleInfo(void) {
|
||||
timeElapsed(lastDiscovery.elapsed()) :
|
||||
String("<i>Never</i>"))) +
|
||||
"<br>"
|
||||
"Discovery topic: " + MqttDiscovery + "<br>" +
|
||||
#endif // MQTT_DISCOVERY_ENABLE
|
||||
"Command topics: " + MqttClimate + channel_re + '/' + MQTT_CLIMATE_CMND +
|
||||
'/' + kClimateTopics +
|
||||
@ -1337,7 +1357,7 @@ void handleInfo(void) {
|
||||
"</p>"
|
||||
// Page footer
|
||||
"<hr><p><small><center>"
|
||||
"<i>(Note: Page will refresh every 60 seconds.)</i>"
|
||||
"<i>(Note: Page will refresh every 60 " D_STR_SECONDS ".)</i>"
|
||||
"<centre></small></p>";
|
||||
html += addJsReloadUrl(kUrlInfo, 60, false);
|
||||
html += htmlEnd();
|
||||
@ -1399,7 +1419,7 @@ void handleClearMqtt(void) {
|
||||
htmlHeader(F("Clearing saved info from MQTT"),
|
||||
F("Removing all saved settings for this device from "
|
||||
"MQTT.")) +
|
||||
"<p>Device restarting. Try connecting in a few seconds.</p>" +
|
||||
"<p>Device restarting. Try connecting in a few " D_STR_SECONDS ".</p>" +
|
||||
addJsReloadUrl(kUrlRoot, 10, true) +
|
||||
htmlEnd());
|
||||
// Do the clearing.
|
||||
@ -1421,7 +1441,7 @@ void handleReset(void) {
|
||||
server.send(200, "text/html",
|
||||
htmlHeader(F("Reset WiFi Config"),
|
||||
F("Resetting the WiFiManager config back to defaults.")) +
|
||||
"<p>Device restarting. Try connecting in a few seconds.</p>" +
|
||||
"<p>Device restarting. Try connecting in a few " D_STR_SECONDS ".</p>" +
|
||||
addJsReloadUrl(kUrlRoot, 10, true) +
|
||||
htmlEnd());
|
||||
// Do the reset.
|
||||
@ -1454,7 +1474,7 @@ void handleReboot() {
|
||||
#endif
|
||||
server.send(200, "text/html",
|
||||
htmlHeader(F("Device restarting.")) +
|
||||
"<p>Try connecting in a few seconds.</p>" +
|
||||
"<p>Try connecting in a few " D_STR_SECONDS ".</p>" +
|
||||
addJsReloadUrl(kUrlRoot, kRebootTime, true) +
|
||||
htmlEnd());
|
||||
doRestart("Reboot requested");
|
||||
@ -1516,6 +1536,23 @@ bool parseStringAndSendAirCon(IRsend *irsend, const decode_type_t irType,
|
||||
// Lastly, it should never exceed the maximum "normal" size.
|
||||
stateSize = std::min(stateSize, kFujitsuAcStateLength);
|
||||
break;
|
||||
case HITACHI_AC3:
|
||||
// HitachiAc3 has two distinct & different size states, so make a best
|
||||
// guess which one we are being presented with based on the number of
|
||||
// hexadecimal digits provided. i.e. Zero-pad if you need to to get
|
||||
// the correct length/byte size.
|
||||
stateSize = inputLength / 2; // Every two hex chars is a byte.
|
||||
// Use at least the minimum size.
|
||||
stateSize = std::max(stateSize,
|
||||
(uint16_t) (kHitachiAc3MinStateLength));
|
||||
// If we think it isn't a "short" message.
|
||||
if (stateSize > kHitachiAc3MinStateLength)
|
||||
// Then it probably the "normal" size.
|
||||
stateSize = std::max(stateSize,
|
||||
(uint16_t) (kHitachiAc3StateLength));
|
||||
// Lastly, it should never exceed the maximum "normal" size.
|
||||
stateSize = std::min(stateSize, kHitachiAc3StateLength);
|
||||
break;
|
||||
case MWM:
|
||||
// MWM has variable size states, so make a best guess
|
||||
// which one we are being presented with based on the number of
|
||||
@ -1993,7 +2030,8 @@ void setup_wifi(void) {
|
||||
|
||||
if (!wifiManager.autoConnect())
|
||||
// Reboot. A.k.a. "Have you tried turning it Off and On again?"
|
||||
doRestart("Wifi failed to connect and hit timeout. Rebooting...", true);
|
||||
doRestart(D_STR_WIFI " failed to connect and hit timeout. Rebooting...",
|
||||
true);
|
||||
|
||||
#if MQTT_ENABLE
|
||||
strncpy(MqttServer, custom_mqtt_server.getValue(), kHostnameLength);
|
||||
@ -2033,6 +2071,8 @@ void init_vars(void) {
|
||||
// Sub-topic for the climate stat topics.
|
||||
#if MQTT_DISCOVERY_ENABLE
|
||||
MqttDiscovery = "homeassistant/climate/" + String(Hostname) + "/config";
|
||||
MqttUniqueId = WiFi.macAddress();
|
||||
MqttUniqueId.replace(":", "");
|
||||
#endif // MQTT_DISCOVERY_ENABLE
|
||||
MqttHAName = String(Hostname) + "_aircon";
|
||||
// Create a unique MQTT client id.
|
||||
@ -2163,7 +2203,8 @@ void setup(void) {
|
||||
server.send(200, "text/html",
|
||||
htmlHeader(F("Updating firmware")) +
|
||||
"<hr>"
|
||||
"<h3>Warning! Don't power off the device for 60 seconds!</h3>"
|
||||
"<h3>Warning! Don't " D_STR_POWER " " D_STR_OFF " the device for "
|
||||
"60 " D_STR_SECONDS "!</h3>"
|
||||
"<p>The firmware is uploading and will try to flash itself. "
|
||||
"It is important to not interrupt the process.</p>"
|
||||
"<p>The firmware upload seems to have " +
|
||||
@ -2531,7 +2572,16 @@ void sendMQTTDiscovery(const char *topic) {
|
||||
"\"swing_mode_stat_t\":\"~/" MQTT_CLIMATE_STAT "/" KEY_SWINGV "\","
|
||||
"\"swing_modes\":[\"" D_STR_OFF "\",\"" D_STR_AUTO "\",\"" D_STR_HIGHEST
|
||||
"\",\"" D_STR_HIGH "\",\"" D_STR_MIDDLE "\",\""
|
||||
D_STR_LOW "\",\"" D_STR_LOWEST "\"]"
|
||||
D_STR_LOW "\",\"" D_STR_LOWEST "\"],"
|
||||
"\"uniq_id\":\"" + MqttUniqueId + "\","
|
||||
"\"device\":{"
|
||||
"\"identifiers\":[\"" + MqttUniqueId + "\"],"
|
||||
"\"connections\":[[\"mac\",\"" + WiFi.macAddress() + "\"]],"
|
||||
"\"manufacturer\":\"IRremoteESP8266\","
|
||||
"\"model\":\"IRMQTTServer\","
|
||||
"\"name\":\"" + Hostname + "\","
|
||||
"\"sw_version\":\"" _MY_VERSION_ "\""
|
||||
"}"
|
||||
"}").c_str(), true)) {
|
||||
mqttLog("MQTT climate discovery successful sent.");
|
||||
hasDiscoveryBeenSent = true;
|
||||
@ -2738,12 +2788,12 @@ bool sendIRCode(IRsend *irsend, decode_type_t const ir_type,
|
||||
} else {
|
||||
debug("Failed to send IR Message:");
|
||||
}
|
||||
debug("Type:");
|
||||
debug(D_STR_PROTOCOL ": ");
|
||||
debug(String(ir_type).c_str());
|
||||
// For "long" codes we basically repeat what we got.
|
||||
if (hasACState(ir_type) || ir_type == PRONTO || ir_type == RAW ||
|
||||
ir_type == GLOBALCACHE) {
|
||||
debug("Code: ");
|
||||
debug(D_STR_CODE ": ");
|
||||
debug(code_str);
|
||||
// Confirm what we were asked to send was sent.
|
||||
#if MQTT_ENABLE
|
||||
@ -2762,9 +2812,9 @@ bool sendIRCode(IRsend *irsend, decode_type_t const ir_type,
|
||||
}
|
||||
#endif // MQTT_ENABLE
|
||||
} else { // For "short" codes, we break it down a bit more before we report.
|
||||
debug(("Code: 0x" + uint64ToString(code, 16)).c_str());
|
||||
debug(("Bits: " + String(bits)).c_str());
|
||||
debug(("Repeats: " + String(repeat)).c_str());
|
||||
debug((D_STR_CODE ": 0x" + uint64ToString(code, 16)).c_str());
|
||||
debug((D_STR_BITS ": " + String(bits)).c_str());
|
||||
debug((D_STR_REPEAT ": " + String(repeat)).c_str());
|
||||
#if MQTT_ENABLE
|
||||
if (success) {
|
||||
mqtt_client.publish(MqttAck.c_str(), (String(ir_type) +
|
@ -65,7 +65,10 @@ IRsend irsend(kIrLed); // Set the GPIO to be used to sending the message.
|
||||
void handleRoot() {
|
||||
server.send(200, "text/html",
|
||||
"<html>" \
|
||||
"<head><title>" HOSTNAME " Demo</title></head>" \
|
||||
"<head><title>" HOSTNAME " Demo </title>" \
|
||||
"<meta http-equiv=\"Content-Type\" " \
|
||||
"content=\"text/html;charset=utf-8\">" \
|
||||
"</head>" \
|
||||
"<body>" \
|
||||
"<h1>Hello from " HOSTNAME ", you can send NEC encoded IR" \
|
||||
"signals from here!</h1>" \
|
@ -0,0 +1,52 @@
|
||||
[platformio]
|
||||
src_dir = .
|
||||
|
||||
[env]
|
||||
; Default platform
|
||||
platform = espressif8266
|
||||
; Default board
|
||||
board = nodemcuv2
|
||||
framework = arduino
|
||||
lib_extra_dirs = ../../
|
||||
lib_ldf_mode = deep+
|
||||
lib_ignore = examples
|
||||
build_flags = ; -D_IR_LOCALE_=en-AU
|
||||
|
||||
[env:nodemcuv2]
|
||||
board = nodemcuv2
|
||||
; build_flags = -D_IR_LOCALE_=en-AU
|
||||
|
||||
[env:esp32dev]
|
||||
platform = espressif32
|
||||
board = esp32dev
|
||||
; build_flags = -D_IR_LOCALE_=en-AU
|
||||
|
||||
[env:de-CH]
|
||||
build_flags = -D_IR_LOCALE_=de-CH ; German (Swiss)
|
||||
|
||||
[env:de-DE]
|
||||
build_flags = -D_IR_LOCALE_=de-DE ; German
|
||||
|
||||
[env:en-AU]
|
||||
build_flags = -D_IR_LOCALE_=en-AU ; English (Australian) (Default)
|
||||
|
||||
[env:en-IE]
|
||||
build_flags = -D_IR_LOCALE_=en-IE ; English (Irish)
|
||||
|
||||
[env:en-UK]
|
||||
build_flags = -D_IR_LOCALE_=en-UK ; English (UK)
|
||||
|
||||
[env:en-US]
|
||||
build_flags = -D_IR_LOCALE_=en-US ; English (Simplified) (USA)
|
||||
|
||||
[env:es-ES]
|
||||
build_flags = -D_IR_LOCALE_=es-ES ; Spanish
|
||||
|
||||
[env:fr-FR]
|
||||
build_flags = -D_IR_LOCALE_=fr-FR ; French
|
||||
|
||||
[env:it-IT]
|
||||
build_flags = -D_IR_LOCALE_=it-IT ; Italian
|
||||
|
||||
[env:zh-CN]
|
||||
build_flags = -D_IR_LOCALE_=zh-CN ; Chinese (Simplified)
|
@ -0,0 +1,77 @@
|
||||
/* Copyright 2016, 2018 David Conran
|
||||
* Copyright 2020 Sadid Rafsun Tulon
|
||||
*
|
||||
* An IR LED circuit *MUST* be connected to the ESP8266 on a pin
|
||||
* as specified by kIrLed below.
|
||||
*
|
||||
* TL;DR: The IR LED needs to be driven by a transistor for a good result.
|
||||
*
|
||||
* Suggested circuit:
|
||||
* https://github.com/crankyoldgit/IRremoteESP8266/wiki#ir-sending
|
||||
*
|
||||
* Common mistakes & tips:
|
||||
* * Don't just connect the IR LED directly to the pin, it won't
|
||||
* have enough current to drive the IR LED effectively.
|
||||
* * Make sure you have the IR LED polarity correct.
|
||||
* See: https://learn.sparkfun.com/tutorials/polarity/diode-and-led-polarity
|
||||
* * Typical digital camera/phones can be used to see if the IR LED is flashed.
|
||||
* Replace the IR LED with a normal LED if you don't have a digital camera
|
||||
* when debugging.
|
||||
* * Avoid using the following pins unless you really know what you are doing:
|
||||
* * Pin 0/D3: Can interfere with the boot/program mode & support circuits.
|
||||
* * Pin 1/TX/TXD0: Any serial transmissions from the ESP8266 will interfere.
|
||||
* * Pin 3/RX/RXD0: Any serial transmissions to the ESP8266 will interfere.
|
||||
* * ESP-01 modules are tricky. We suggest you use a module with more GPIOs
|
||||
* for your first time. e.g. ESP-12 etc.
|
||||
*/
|
||||
#include <Arduino.h>
|
||||
#include <IRremoteESP8266.h>
|
||||
#include <IRsend.h>
|
||||
#include <ir_Gree.h>
|
||||
|
||||
const uint16_t kIrLed = 4; // ESP8266 GPIO pin to use. Recommended: 4 (D2).
|
||||
IRGreeAC ac(kIrLed); // Set the GPIO to be used for sending messages.
|
||||
|
||||
void printState() {
|
||||
// Display the settings.
|
||||
Serial.println("GREE A/C remote is in the following state:");
|
||||
Serial.printf(" %s\n", ac.toString().c_str());
|
||||
// Display the encoded IR sequence.
|
||||
unsigned char* ir_code = ac.getRaw();
|
||||
Serial.print("IR Code: 0x");
|
||||
for (uint8_t i = 0; i < kGreeStateLength; i++)
|
||||
Serial.printf("%02X", ir_code[i]);
|
||||
Serial.println();
|
||||
}
|
||||
|
||||
void setup() {
|
||||
ac.begin();
|
||||
Serial.begin(115200);
|
||||
delay(200);
|
||||
|
||||
// Set up what we want to send. See ir_Gree.cpp for all the options.
|
||||
// Most things default to off.
|
||||
Serial.println("Default state of the remote.");
|
||||
printState();
|
||||
Serial.println("Setting desired state for A/C.");
|
||||
ac.on();
|
||||
ac.setFan(1);
|
||||
// kGreeAuto, kGreeDry, kGreeCool, kGreeFan, kGreeHeat
|
||||
ac.setMode(kGreeCool);
|
||||
ac.setTemp(20); // 16-30C
|
||||
ac.setSwingVertical(true, kGreeSwingAuto);
|
||||
ac.setXFan(false);
|
||||
ac.setLight(false);
|
||||
ac.setSleep(false);
|
||||
ac.setTurbo(false);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
// Now send the IR signal.
|
||||
#if SEND_GREE
|
||||
Serial.println("Sending IR command to A/C ...");
|
||||
ac.send();
|
||||
#endif // SEND_GREE
|
||||
printState();
|
||||
delay(5000);
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
[platformio]
|
||||
src_dir = .
|
||||
|
||||
[env]
|
||||
lib_extra_dirs = ../../
|
||||
lib_ldf_mode = deep+
|
||||
lib_ignore = examples
|
||||
framework = arduino
|
||||
build_flags = ; -D_IR_LOCALE_=en-AU
|
||||
|
||||
[env:nodemcuv2]
|
||||
platform = espressif8266
|
||||
board = nodemcuv2
|
||||
|
||||
[env:esp32dev]
|
||||
platform = espressif32
|
||||
board = esp32dev
|
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 |
@ -29,6 +29,7 @@ IRDaikin160 KEYWORD1
|
||||
IRDaikin176 KEYWORD1
|
||||
IRDaikin2 KEYWORD1
|
||||
IRDaikin216 KEYWORD1
|
||||
IRDaikin64 KEYWORD1
|
||||
IRDaikinESP KEYWORD1
|
||||
IRElectraAc KEYWORD1
|
||||
IRFujitsuAC KEYWORD1
|
||||
@ -37,6 +38,8 @@ IRGreeAC KEYWORD1
|
||||
IRHaierAC KEYWORD1
|
||||
IRHaierACYRW02 KEYWORD1
|
||||
IRHitachiAc KEYWORD1
|
||||
IRHitachiAc1 KEYWORD1
|
||||
IRHitachiAc3 KEYWORD1
|
||||
IRHitachiAc424 KEYWORD1
|
||||
IRKelvinatorAC KEYWORD1
|
||||
IRLgAc KEYWORD1
|
||||
@ -66,6 +69,7 @@ decode_type_t KEYWORD1
|
||||
fanspeed_t KEYWORD1
|
||||
fujitsu_ac_remote_model_t KEYWORD1
|
||||
gree_ac_remote_model_t KEYWORD1
|
||||
hitachi_ac1_remote_model_t KEYWORD1
|
||||
irparams_t KEYWORD1
|
||||
lg_ac_remote_model_t KEYWORD1
|
||||
match_result_t KEYWORD1
|
||||
@ -141,7 +145,9 @@ daikin160 KEYWORD2
|
||||
daikin176 KEYWORD2
|
||||
daikin2 KEYWORD2
|
||||
daikin216 KEYWORD2
|
||||
daikin64 KEYWORD2
|
||||
decode KEYWORD2
|
||||
decodeAirwell KEYWORD2
|
||||
decodeAiwaRCT501 KEYWORD2
|
||||
decodeAmcor KEYWORD2
|
||||
decodeArgo KEYWORD2
|
||||
@ -155,6 +161,7 @@ decodeDaikin160 KEYWORD2
|
||||
decodeDaikin176 KEYWORD2
|
||||
decodeDaikin2 KEYWORD2
|
||||
decodeDaikin216 KEYWORD2
|
||||
decodeDaikin64 KEYWORD2
|
||||
decodeDenon KEYWORD2
|
||||
decodeElectraAC KEYWORD2
|
||||
decodeEpson KEYWORD2
|
||||
@ -166,6 +173,7 @@ decodeHaierAC KEYWORD2
|
||||
decodeHaierACYRW02 KEYWORD2
|
||||
decodeHash KEYWORD2
|
||||
decodeHitachiAC KEYWORD2
|
||||
decodeHitachiAc3 KEYWORD2
|
||||
decodeHitachiAc424 KEYWORD2
|
||||
decodeInax KEYWORD2
|
||||
decodeJVC KEYWORD2
|
||||
@ -200,6 +208,7 @@ decodeSanyoLC7461 KEYWORD2
|
||||
decodeSharp KEYWORD2
|
||||
decodeSharpAc KEYWORD2
|
||||
decodeSony KEYWORD2
|
||||
decodeSymphony KEYWORD2
|
||||
decodeTeco KEYWORD2
|
||||
decodeToState KEYWORD2
|
||||
decodeToshibaAC KEYWORD2
|
||||
@ -243,6 +252,7 @@ get3D KEYWORD2
|
||||
get8CHeat KEYWORD2
|
||||
getBeep KEYWORD2
|
||||
getBit KEYWORD2
|
||||
getBreeze KEYWORD2
|
||||
getBufSize KEYWORD2
|
||||
getButton KEYWORD2
|
||||
getClean KEYWORD2
|
||||
@ -280,15 +290,18 @@ getMode KEYWORD2
|
||||
getMold KEYWORD2
|
||||
getNight KEYWORD2
|
||||
getOffTime KEYWORD2
|
||||
getOffTimeEnabled KEYWORD2
|
||||
getOffTimer KEYWORD2
|
||||
getOffTimerEnabled KEYWORD2
|
||||
getOnTime KEYWORD2
|
||||
getOnTimeEnabled KEYWORD2
|
||||
getOnTimer KEYWORD2
|
||||
getOnTimerEnabled KEYWORD2
|
||||
getOutsideQuiet KEYWORD2
|
||||
getPower KEYWORD2
|
||||
getPowerToggle KEYWORD2
|
||||
getPowerful KEYWORD2
|
||||
getPreviousPower KEYWORD2
|
||||
getPurify KEYWORD2
|
||||
getQuiet KEYWORD2
|
||||
getRClevel KEYWORD2
|
||||
@ -309,6 +322,7 @@ getSuper KEYWORD2
|
||||
getSwing KEYWORD2
|
||||
getSwingH KEYWORD2
|
||||
getSwingHorizontal KEYWORD2
|
||||
getSwingToggle KEYWORD2
|
||||
getSwingV KEYWORD2
|
||||
getSwingVToggle KEYWORD2
|
||||
getSwingVertical KEYWORD2
|
||||
@ -336,8 +350,10 @@ haier KEYWORD2
|
||||
haierYrwo2 KEYWORD2
|
||||
handleSpecialState KEYWORD2
|
||||
hasACState KEYWORD2
|
||||
hasInvertedStates KEYWORD2
|
||||
hasStateChanged KEYWORD2
|
||||
hitachi KEYWORD2
|
||||
hitachi1 KEYWORD2
|
||||
hitachi424 KEYWORD2
|
||||
htmlEscape KEYWORD2
|
||||
initState KEYWORD2
|
||||
@ -364,6 +380,7 @@ matchAtLeast KEYWORD2
|
||||
matchBytes KEYWORD2
|
||||
matchData KEYWORD2
|
||||
matchGeneric KEYWORD2
|
||||
matchManchester KEYWORD2
|
||||
matchMark KEYWORD2
|
||||
matchSpace KEYWORD2
|
||||
midea KEYWORD2
|
||||
@ -394,6 +411,7 @@ reverseBits KEYWORD2
|
||||
samsung KEYWORD2
|
||||
send KEYWORD2
|
||||
sendAc KEYWORD2
|
||||
sendAirwell KEYWORD2
|
||||
sendAiwaRCT501 KEYWORD2
|
||||
sendAmcor KEYWORD2
|
||||
sendArgo KEYWORD2
|
||||
@ -407,6 +425,7 @@ sendDaikin160 KEYWORD2
|
||||
sendDaikin176 KEYWORD2
|
||||
sendDaikin2 KEYWORD2
|
||||
sendDaikin216 KEYWORD2
|
||||
sendDaikin64 KEYWORD2
|
||||
sendData KEYWORD2
|
||||
sendDenon KEYWORD2
|
||||
sendElectraAC KEYWORD2
|
||||
@ -423,6 +442,7 @@ sendHaierACYRW02 KEYWORD2
|
||||
sendHitachiAC KEYWORD2
|
||||
sendHitachiAC1 KEYWORD2
|
||||
sendHitachiAC2 KEYWORD2
|
||||
sendHitachiAc3 KEYWORD2
|
||||
sendHitachiAc424 KEYWORD2
|
||||
sendInax KEYWORD2
|
||||
sendJVC KEYWORD2
|
||||
@ -434,6 +454,8 @@ sendLegoPf KEYWORD2
|
||||
sendLutron KEYWORD2
|
||||
sendMWM KEYWORD2
|
||||
sendMagiQuest KEYWORD2
|
||||
sendManchester KEYWORD2
|
||||
sendManchesterData KEYWORD2
|
||||
sendMidea KEYWORD2
|
||||
sendMitsubishi KEYWORD2
|
||||
sendMitsubishi112 KEYWORD2
|
||||
@ -466,6 +488,7 @@ sendSharpRaw KEYWORD2
|
||||
sendSherwood KEYWORD2
|
||||
sendSony KEYWORD2
|
||||
sendSony38 KEYWORD2
|
||||
sendSymphony KEYWORD2
|
||||
sendTcl112Ac KEYWORD2
|
||||
sendTeco KEYWORD2
|
||||
sendToshibaAC KEYWORD2
|
||||
@ -480,6 +503,7 @@ setAuto KEYWORD2
|
||||
setBeep KEYWORD2
|
||||
setBit KEYWORD2
|
||||
setBits KEYWORD2
|
||||
setBreeze KEYWORD2
|
||||
setButton KEYWORD2
|
||||
setClean KEYWORD2
|
||||
setClock KEYWORD2
|
||||
@ -516,9 +540,13 @@ setMode KEYWORD2
|
||||
setModel KEYWORD2
|
||||
setMold KEYWORD2
|
||||
setNight KEYWORD2
|
||||
setOffTime KEYWORD2
|
||||
setOffTimeEnabled KEYWORD2
|
||||
setOffTimer KEYWORD2
|
||||
setOffTimerActive KEYWORD2
|
||||
setOffTimerEnabled KEYWORD2
|
||||
setOnTime KEYWORD2
|
||||
setOnTimeEnabled KEYWORD2
|
||||
setOnTimer KEYWORD2
|
||||
setOnTimerActive KEYWORD2
|
||||
setOnTimerEnabled KEYWORD2
|
||||
@ -526,6 +554,7 @@ setOutsideQuiet KEYWORD2
|
||||
setPower KEYWORD2
|
||||
setPowerToggle KEYWORD2
|
||||
setPowerful KEYWORD2
|
||||
setPreviousPower KEYWORD2
|
||||
setPurify KEYWORD2
|
||||
setQuiet KEYWORD2
|
||||
setRaw KEYWORD2
|
||||
@ -543,6 +572,7 @@ setSuper KEYWORD2
|
||||
setSwing KEYWORD2
|
||||
setSwingH KEYWORD2
|
||||
setSwingHorizontal KEYWORD2
|
||||
setSwingToggle KEYWORD2
|
||||
setSwingV KEYWORD2
|
||||
setSwingVToggle KEYWORD2
|
||||
setSwingVertical KEYWORD2
|
||||
@ -599,7 +629,9 @@ xorBytes KEYWORD2
|
||||
# Constants (LITERAL1)
|
||||
#######################################
|
||||
|
||||
*kAllProtocolNamesStr LITERAL1
|
||||
// LITERAL1
|
||||
AIRWELL LITERAL1
|
||||
AIWA_RC_T501 LITERAL1
|
||||
AIWA_RC_T501_BITS LITERAL1
|
||||
AKB75215403 LITERAL1
|
||||
@ -644,6 +676,7 @@ DAIKIN160 LITERAL1
|
||||
DAIKIN176 LITERAL1
|
||||
DAIKIN2 LITERAL1
|
||||
DAIKIN216 LITERAL1
|
||||
DAIKIN64 LITERAL1
|
||||
DAIKIN_AUTO LITERAL1
|
||||
DAIKIN_COMMAND_LENGTH LITERAL1
|
||||
DAIKIN_COOL LITERAL1
|
||||
@ -657,6 +690,7 @@ DAIKIN_HEAT LITERAL1
|
||||
DAIKIN_MAX_TEMP LITERAL1
|
||||
DAIKIN_MIN_TEMP LITERAL1
|
||||
DECODE_AC LITERAL1
|
||||
DECODE_AIRWELL LITERAL1
|
||||
DECODE_AIWA_RC_T501 LITERAL1
|
||||
DECODE_AMCOR LITERAL1
|
||||
DECODE_ARGO LITERAL1
|
||||
@ -669,6 +703,7 @@ DECODE_DAIKIN160 LITERAL1
|
||||
DECODE_DAIKIN176 LITERAL1
|
||||
DECODE_DAIKIN2 LITERAL1
|
||||
DECODE_DAIKIN216 LITERAL1
|
||||
DECODE_DAIKIN64 LITERAL1
|
||||
DECODE_DENON LITERAL1
|
||||
DECODE_DISH LITERAL1
|
||||
DECODE_ELECTRA_AC LITERAL1
|
||||
@ -684,6 +719,7 @@ DECODE_HASH LITERAL1
|
||||
DECODE_HITACHI_AC LITERAL1
|
||||
DECODE_HITACHI_AC1 LITERAL1
|
||||
DECODE_HITACHI_AC2 LITERAL1
|
||||
DECODE_HITACHI_AC3 LITERAL1
|
||||
DECODE_HITACHI_AC424 LITERAL1
|
||||
DECODE_INAX LITERAL1
|
||||
DECODE_JVC LITERAL1
|
||||
@ -719,6 +755,7 @@ DECODE_SHARP LITERAL1
|
||||
DECODE_SHARP_AC LITERAL1
|
||||
DECODE_SHERWOOD LITERAL1
|
||||
DECODE_SONY LITERAL1
|
||||
DECODE_SYMPHONY LITERAL1
|
||||
DECODE_TCL112AC LITERAL1
|
||||
DECODE_TECO LITERAL1
|
||||
DECODE_TOSHIBA_AC LITERAL1
|
||||
@ -855,6 +892,7 @@ HITACHI_AC1_STATE_LENGTH LITERAL1
|
||||
HITACHI_AC2 LITERAL1
|
||||
HITACHI_AC2_BITS LITERAL1
|
||||
HITACHI_AC2_STATE_LENGTH LITERAL1
|
||||
HITACHI_AC3 LITERAL1
|
||||
HITACHI_AC424 LITERAL1
|
||||
HITACHI_AC_BITS LITERAL1
|
||||
HITACHI_AC_STATE_LENGTH LITERAL1
|
||||
@ -950,6 +988,8 @@ RC6_36_BITS LITERAL1
|
||||
RC6_MODE0_BITS LITERAL1
|
||||
RCMM LITERAL1
|
||||
RCMM_BITS LITERAL1
|
||||
R_LT0541_HTA_A LITERAL1
|
||||
R_LT0541_HTA_B LITERAL1
|
||||
SAMSUNG LITERAL1
|
||||
SAMSUNG36 LITERAL1
|
||||
SAMSUNG_AC LITERAL1
|
||||
@ -958,6 +998,7 @@ SANYO LITERAL1
|
||||
SANYO_LC7461 LITERAL1
|
||||
SANYO_LC7461_BITS LITERAL1
|
||||
SANYO_SA8650B_BITS LITERAL1
|
||||
SEND_AIRWELL LITERAL1
|
||||
SEND_AIWA_RC_T501 LITERAL1
|
||||
SEND_AMCOR LITERAL1
|
||||
SEND_ARGO LITERAL1
|
||||
@ -970,6 +1011,7 @@ SEND_DAIKIN160 LITERAL1
|
||||
SEND_DAIKIN176 LITERAL1
|
||||
SEND_DAIKIN2 LITERAL1
|
||||
SEND_DAIKIN216 LITERAL1
|
||||
SEND_DAIKIN64 LITERAL1
|
||||
SEND_DENON LITERAL1
|
||||
SEND_DISH LITERAL1
|
||||
SEND_ELECTRA_AC LITERAL1
|
||||
@ -984,6 +1026,7 @@ SEND_HAIER_AC_YRW02 LITERAL1
|
||||
SEND_HITACHI_AC LITERAL1
|
||||
SEND_HITACHI_AC1 LITERAL1
|
||||
SEND_HITACHI_AC2 LITERAL1
|
||||
SEND_HITACHI_AC3 LITERAL1
|
||||
SEND_HITACHI_AC424 LITERAL1
|
||||
SEND_INAX LITERAL1
|
||||
SEND_JVC LITERAL1
|
||||
@ -1020,6 +1063,7 @@ SEND_SHARP LITERAL1
|
||||
SEND_SHARP_AC LITERAL1
|
||||
SEND_SHERWOOD LITERAL1
|
||||
SEND_SONY LITERAL1
|
||||
SEND_SYMPHONY LITERAL1
|
||||
SEND_TCL112AC LITERAL1
|
||||
SEND_TECO LITERAL1
|
||||
SEND_TOSHIBA_AC LITERAL1
|
||||
@ -1037,6 +1081,7 @@ SONY_12_BITS LITERAL1
|
||||
SONY_15_BITS LITERAL1
|
||||
SONY_20_BITS LITERAL1
|
||||
SONY_38K LITERAL1
|
||||
SYMPHONY LITERAL1
|
||||
TCL112AC LITERAL1
|
||||
TECO LITERAL1
|
||||
TIMEOUT_MS LITERAL1
|
||||
@ -1076,6 +1121,13 @@ k3DStr LITERAL1
|
||||
k6thSenseStr LITERAL1
|
||||
k8CHeatStr LITERAL1
|
||||
kAirFlowStr LITERAL1
|
||||
kAirwellBits LITERAL1
|
||||
kAirwellFooterMark LITERAL1
|
||||
kAirwellHalfClockPeriod LITERAL1
|
||||
kAirwellHdrMark LITERAL1
|
||||
kAirwellHdrSpace LITERAL1
|
||||
kAirwellMinRepeats LITERAL1
|
||||
kAirwellOverhead LITERAL1
|
||||
kAiwaRcT501Bits LITERAL1
|
||||
kAiwaRcT501MinRepeats LITERAL1
|
||||
kAiwaRcT501PostBits LITERAL1
|
||||
@ -1498,6 +1550,53 @@ kDaikin2SwingVLow LITERAL1
|
||||
kDaikin2SwingVSwing LITERAL1
|
||||
kDaikin2Tolerance LITERAL1
|
||||
kDaikin2ZeroSpace LITERAL1
|
||||
kDaikin64BitMark LITERAL1
|
||||
kDaikin64Bits LITERAL1
|
||||
kDaikin64ChecksumOffset LITERAL1
|
||||
kDaikin64ChecksumSize LITERAL1
|
||||
kDaikin64ClockHoursSize LITERAL1
|
||||
kDaikin64ClockMinsSize LITERAL1
|
||||
kDaikin64ClockOffset LITERAL1
|
||||
kDaikin64ClockSize LITERAL1
|
||||
kDaikin64Cool LITERAL1
|
||||
kDaikin64DefaultRepeat LITERAL1
|
||||
kDaikin64Dry LITERAL1
|
||||
kDaikin64Fan LITERAL1
|
||||
kDaikin64FanAuto LITERAL1
|
||||
kDaikin64FanHigh LITERAL1
|
||||
kDaikin64FanLow LITERAL1
|
||||
kDaikin64FanMed LITERAL1
|
||||
kDaikin64FanOffset LITERAL1
|
||||
kDaikin64FanQuiet LITERAL1
|
||||
kDaikin64FanSize LITERAL1
|
||||
kDaikin64FanTurbo LITERAL1
|
||||
kDaikin64Freq LITERAL1
|
||||
kDaikin64Gap LITERAL1
|
||||
kDaikin64HdrMark LITERAL1
|
||||
kDaikin64HdrSpace LITERAL1
|
||||
kDaikin64KnownGoodState LITERAL1
|
||||
kDaikin64LdrMark LITERAL1
|
||||
kDaikin64LdrSpace LITERAL1
|
||||
kDaikin64MaxTemp LITERAL1
|
||||
kDaikin64MinTemp LITERAL1
|
||||
kDaikin64ModeOffset LITERAL1
|
||||
kDaikin64ModeSize LITERAL1
|
||||
kDaikin64OffTimeEnableBit LITERAL1
|
||||
kDaikin64OffTimeHalfHourBit LITERAL1
|
||||
kDaikin64OffTimeOffset LITERAL1
|
||||
kDaikin64OffTimeSize LITERAL1
|
||||
kDaikin64OnTimeEnableBit LITERAL1
|
||||
kDaikin64OnTimeHalfHourBit LITERAL1
|
||||
kDaikin64OnTimeOffset LITERAL1
|
||||
kDaikin64OnTimeSize LITERAL1
|
||||
kDaikin64OneSpace LITERAL1
|
||||
kDaikin64Overhead LITERAL1
|
||||
kDaikin64PowerToggleBit LITERAL1
|
||||
kDaikin64SleepBit LITERAL1
|
||||
kDaikin64SwingVBit LITERAL1
|
||||
kDaikin64TempOffset LITERAL1
|
||||
kDaikin64TempSize LITERAL1
|
||||
kDaikin64ZeroSpace LITERAL1
|
||||
kDaikinAuto LITERAL1
|
||||
kDaikinBeepLoud LITERAL1
|
||||
kDaikinBeepOff LITERAL1
|
||||
@ -1955,12 +2054,67 @@ kHighNibble LITERAL1
|
||||
kHighStr LITERAL1
|
||||
kHighest LITERAL1
|
||||
kHighestStr LITERAL1
|
||||
kHitachiAc1Auto LITERAL1
|
||||
kHitachiAc1Bits LITERAL1
|
||||
kHitachiAc1ChecksumStartByte LITERAL1
|
||||
kHitachiAc1Cool LITERAL1
|
||||
kHitachiAc1Dry LITERAL1
|
||||
kHitachiAc1Fan LITERAL1
|
||||
kHitachiAc1FanAuto LITERAL1
|
||||
kHitachiAc1FanByte LITERAL1
|
||||
kHitachiAc1FanHigh LITERAL1
|
||||
kHitachiAc1FanLow LITERAL1
|
||||
kHitachiAc1FanMed LITERAL1
|
||||
kHitachiAc1FanOffset LITERAL1
|
||||
kHitachiAc1FanSize LITERAL1
|
||||
kHitachiAc1HdrMark LITERAL1
|
||||
kHitachiAc1HdrSpace LITERAL1
|
||||
kHitachiAc1Heat LITERAL1
|
||||
kHitachiAc1ModeByte LITERAL1
|
||||
kHitachiAc1ModeOffset LITERAL1
|
||||
kHitachiAc1ModeSize LITERAL1
|
||||
kHitachiAc1ModelByte LITERAL1
|
||||
kHitachiAc1ModelOffset LITERAL1
|
||||
kHitachiAc1ModelSize LITERAL1
|
||||
kHitachiAc1Model_A LITERAL1
|
||||
kHitachiAc1Model_B LITERAL1
|
||||
kHitachiAc1OffTimerHighByte LITERAL1
|
||||
kHitachiAc1OffTimerLowByte LITERAL1
|
||||
kHitachiAc1OnTimerHighByte LITERAL1
|
||||
kHitachiAc1OnTimerLowByte LITERAL1
|
||||
kHitachiAc1PowerByte LITERAL1
|
||||
kHitachiAc1PowerOffset LITERAL1
|
||||
kHitachiAc1PowerToggleOffset LITERAL1
|
||||
kHitachiAc1Sleep1 LITERAL1
|
||||
kHitachiAc1Sleep2 LITERAL1
|
||||
kHitachiAc1Sleep3 LITERAL1
|
||||
kHitachiAc1Sleep4 LITERAL1
|
||||
kHitachiAc1SleepByte LITERAL1
|
||||
kHitachiAc1SleepOff LITERAL1
|
||||
kHitachiAc1SleepOffset LITERAL1
|
||||
kHitachiAc1SleepSize LITERAL1
|
||||
kHitachiAc1StateLength LITERAL1
|
||||
kHitachiAc1SwingByte LITERAL1
|
||||
kHitachiAc1SwingHOffset LITERAL1
|
||||
kHitachiAc1SwingToggleOffset LITERAL1
|
||||
kHitachiAc1SwingVOffset LITERAL1
|
||||
kHitachiAc1TempAuto LITERAL1
|
||||
kHitachiAc1TempByte LITERAL1
|
||||
kHitachiAc1TempDelta LITERAL1
|
||||
kHitachiAc1TempOffset LITERAL1
|
||||
kHitachiAc1TempSize LITERAL1
|
||||
kHitachiAc1TimerSize LITERAL1
|
||||
kHitachiAc2Bits LITERAL1
|
||||
kHitachiAc2StateLength LITERAL1
|
||||
kHitachiAc3BitMark LITERAL1
|
||||
kHitachiAc3Bits LITERAL1
|
||||
kHitachiAc3HdrMark LITERAL1
|
||||
kHitachiAc3HdrSpace LITERAL1
|
||||
kHitachiAc3MinBits LITERAL1
|
||||
kHitachiAc3MinStateLength LITERAL1
|
||||
kHitachiAc3OneSpace LITERAL1
|
||||
kHitachiAc3StateLength LITERAL1
|
||||
kHitachiAc3ZeroSpace LITERAL1
|
||||
kHitachiAc424BitMark LITERAL1
|
||||
kHitachiAc424Bits LITERAL1
|
||||
kHitachiAc424ButtonByte LITERAL1
|
||||
@ -2709,6 +2863,7 @@ kPioneerZeroSpaceTicks LITERAL1
|
||||
kPowerStr LITERAL1
|
||||
kPowerToggleStr LITERAL1
|
||||
kPowerfulStr LITERAL1
|
||||
kPreviousPowerStr LITERAL1
|
||||
kProntoDataOffset LITERAL1
|
||||
kProntoFreqFactor LITERAL1
|
||||
kProntoFreqOffset LITERAL1
|
||||
@ -2770,12 +2925,14 @@ kRightMaxStr LITERAL1
|
||||
kRightStr LITERAL1
|
||||
kRoomStr LITERAL1
|
||||
kSamsung36Bits LITERAL1
|
||||
kSamsungACSectionLength LITERAL1
|
||||
kSamsungAcAuto LITERAL1
|
||||
kSamsungAcAutoTemp LITERAL1
|
||||
kSamsungAcBeepOffset LITERAL1
|
||||
kSamsungAcBitMark LITERAL1
|
||||
kSamsungAcBits LITERAL1
|
||||
kSamsungAcBreezeOffset LITERAL1
|
||||
kSamsungAcBreezeOn LITERAL1
|
||||
kSamsungAcBreezeSize LITERAL1
|
||||
kSamsungAcClean10Offset LITERAL1
|
||||
kSamsungAcClean11Offset LITERAL1
|
||||
kSamsungAcCool LITERAL1
|
||||
@ -2806,11 +2963,13 @@ kSamsungAcPower6Offset LITERAL1
|
||||
kSamsungAcPower6Size LITERAL1
|
||||
kSamsungAcPowerSection LITERAL1
|
||||
kSamsungAcPowerful10Offset LITERAL1
|
||||
kSamsungAcPowerful10On LITERAL1
|
||||
kSamsungAcPowerful10Size LITERAL1
|
||||
kSamsungAcPowerfulMask8 LITERAL1
|
||||
kSamsungAcQuiet1Offset LITERAL1
|
||||
kSamsungAcQuiet5Offset LITERAL1
|
||||
kSamsungAcSectionGap LITERAL1
|
||||
kSamsungAcSectionLength LITERAL1
|
||||
kSamsungAcSectionMark LITERAL1
|
||||
kSamsungAcSectionSpace LITERAL1
|
||||
kSamsungAcSections LITERAL1
|
||||
@ -2864,14 +3023,17 @@ kSensorStr LITERAL1
|
||||
kSensorTempStr LITERAL1
|
||||
kSetStr LITERAL1
|
||||
kSharpAcAuto LITERAL1
|
||||
kSharpAcBitFanManualOffset LITERAL1
|
||||
kSharpAcBitMark LITERAL1
|
||||
kSharpAcBitModeNonAutoOffset LITERAL1
|
||||
kSharpAcBitPowerOffset LITERAL1
|
||||
kSharpAcBitTempManualOffset LITERAL1
|
||||
kSharpAcBitPreviousPowerOffset LITERAL1
|
||||
kSharpAcBits LITERAL1
|
||||
kSharpAcButtonFan LITERAL1
|
||||
kSharpAcButtonOffset LITERAL1
|
||||
kSharpAcButtonPowerMode LITERAL1
|
||||
kSharpAcButtonSize LITERAL1
|
||||
kSharpAcButtonTemp LITERAL1
|
||||
kSharpAcByteButton LITERAL1
|
||||
kSharpAcByteFan LITERAL1
|
||||
kSharpAcByteManual LITERAL1
|
||||
kSharpAcByteMode LITERAL1
|
||||
kSharpAcBytePower LITERAL1
|
||||
kSharpAcByteTemp LITERAL1
|
||||
@ -2952,6 +3114,14 @@ kSwingStr LITERAL1
|
||||
kSwingVModeStr LITERAL1
|
||||
kSwingVStr LITERAL1
|
||||
kSwingVToggleStr LITERAL1
|
||||
kSymphonyBits LITERAL1
|
||||
kSymphonyDefaultRepeat LITERAL1
|
||||
kSymphonyFooterGap LITERAL1
|
||||
kSymphonyFooterMark LITERAL1
|
||||
kSymphonyOneMark LITERAL1
|
||||
kSymphonyOneSpace LITERAL1
|
||||
kSymphonyZeroMark LITERAL1
|
||||
kSymphonyZeroSpace LITERAL1
|
||||
kTcl112AcAuto LITERAL1
|
||||
kTcl112AcBitEconoOffset LITERAL1
|
||||
kTcl112AcBitHealthOffset LITERAL1
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "IRremoteESP8266",
|
||||
"version": "2.7.4",
|
||||
"version": "2.7.6",
|
||||
"keywords": "infrared, ir, remote, esp8266, esp32",
|
||||
"description": "Send and receive infrared signals with multiple protocols (ESP8266/ESP32)",
|
||||
"repository":
|
@ -1,5 +1,5 @@
|
||||
name=IRremoteESP8266
|
||||
version=2.7.4
|
||||
version=2.7.6
|
||||
author=David Conran, Sebastien Warin, Mark Szabo, Ken Shirriff
|
||||
maintainer=David Conran, Mark Szabo, Sebastien Warin, Roi Dayan, Massimiliano Pinto
|
||||
sentence=Send and receive infrared signals with multiple protocols (ESP8266/ESP32)
|
21
lib/IRremoteESP8266-2.7.6/platformio.ini
Normal file
@ -0,0 +1,21 @@
|
||||
[platformio]
|
||||
# Default to building IRrecvDumpV2 if not in a specific example directory.
|
||||
src_dir = examples/IRrecvDumpV2
|
||||
|
||||
[env]
|
||||
lib_extra_dirs = .
|
||||
lib_ldf_mode = deep+
|
||||
lib_ignore = examples
|
||||
framework = arduino
|
||||
platform = espressif8266
|
||||
build_flags = ; -D_IR_LOCALE_=en-AU
|
||||
|
||||
[env:nodemcuv2]
|
||||
board = nodemcuv2
|
||||
|
||||
[env:d1_mini]
|
||||
board = d1_mini
|
||||
|
||||
[env:esp32dev]
|
||||
platform = espressif32
|
||||
board = esp32dev
|