The major features of IF statement are:
- Support IF, ELSEIF, ELSE
- Support not only comparison but also using logical expression as condition
- Support run multiple commands
- Support nested IF statement
- All the commands run by IF statement will go to the BACKLOG!
- No limit for logical operators, parenthesis and nested IF statement. Depends on your RAM!
Extended Backus-Naur Form of IF statement:
<if-statement> ::=
IF "(" <logical-expression> ")" <statement-list> {ELSEIF "(" <logical-expression> ")" <statement-list>} [ELSE <statement-list>] ENDIF
<logical-expression> :=
<comparison-expression> |
(<comparison-expression> | <logical-expression>) {(AND | OR) <logical-expression>} |
"(" <logical-expression ")" {(AND | OR) <logical expression>}
<comparison-expression> ::=
<math-expression> ("=" | "<" | ">" | "|" | "==" | "<=" | ">=" | "!=") <math-expression>
<statement-list> ::=
<statement> {";" <statement>}
<statement> ::=
<Sonoff-Tasmota-command> | <if-statement>
In English:
If statement support 3 format:
1. IF (<condition>) <statement-list> ENDIF
2. IF (<condition>) <statement-list> ELSE <statement-list> ENDIF
3. IF (<condition>) <statement-list> [ELSEIF (<condition>) <statement-list> ]* ELSE <statement-list> ENDIF
<condition> is a logical expression which can be:
1. A comparison expression for example:
VAR1 >= 10
2. Multiple comparison expression with logical operator "AND" or "OR" between them. "AND" has higher priority than "OR". Fox example:
UPTIME > 100 AND MEM1 == 1 OR MEM2 == 1
3. Parenthesis can be used to change the priority of logical expression. For example:
UPTIME > 100 AND (MEM1 == 1 OR MEM2 == 1)
<statement-list> can be:
1. A Sonoff-Tasmota command. For example:
ledpower on
2. A IF statement ("IF .... ENDIF")
3. Multiple Sonoff-Tasmota command or IF statement split with ";". For example:
Power1 off; Ledpower on; if (mem1 == 0) Var1 Var1+1; mem1==1 endif; Delay 10; POWER1 on
4. Do not need to lead with "BACKLOG" for multiple commands.
|
||
|---|---|---|
| .github | ||
| api | ||
| arduino | ||
| build-container | ||
| include | ||
| lib | ||
| pio | ||
| sonoff | ||
| tools | ||
| .gitattributes | ||
| .gitignore | ||
| .gitpod.yml | ||
| .travis.yml | ||
| API.md | ||
| CODE_OF_CONDUCT.md | ||
| CONTRIBUTING.md | ||
| Doxyfile | ||
| esp8266.flash.1m0.ld | ||
| LICENSE.txt | ||
| platformio.ini | ||
| README.md | ||
| REFERENCE.md | ||
| RELEASENOTES.md | ||
| scripter.md | ||
| SUPPORT.md | ||
| TEMPLATE.md | ||
| updateDocs.sh | ||
Sonoff-Tasmota
Alternative firmware for ESP8266 based devices like iTead Sonoff with web UI, rules and timers, OTA updates, custom device templates and sensor support. Allows control over MQTT, HTTP, Serial and KNX for integrations with smart home systems. Written for Arduino IDE and PlatformIO.
If you like Sonoff-Tasmota, give it a star, or fork it and contribute!
See RELEASENOTES.md for release information.
In addition to the release webpage the binaries can also be downloaded from http://thehackbox.org/tasmota/release/
Development
See sonoff/_changelog.ino for detailed change information.
The development codebase is checked hourly for changes and if new commits have been merged and compile successfuly they will be posted at http://thehackbox.org/tasmota/ (this web address can be used for OTA too). It is important to note that these are based on the current development codebase and it is not recommended to flash it to devices used in production or which are hard to reach in the event that you need to manually flash the device if OTA failed. The last compiled commit number is also posted on the same page along with the current build status (if a firmware rebuild is in progress).
Disclaimer
⚠️ DANGER OF ELECTROCUTION ⚠️
A Sonoff device is not a toy. It uses Mains AC so there is a danger of electrocution if not installed properly. If you don't know how to install it, please call an electrician. Remember: SAFETY FIRST. It is not worth risk to yourself, your family, and your home if you don't know exactly what you are doing. Never try to flash a Sonoff device while it is connected to MAINS AC.
We don't take any responsibility nor liability for using this software nor for the installation or any tips, advice, videos, etc. given by any member of this site or any related site.
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 first. If it is not listed in the Tasmota Device Templates Repository create your own Template.
Quick Install
Download one of the released binaries from https://github.com/arendst/Sonoff-Tasmota/releases and flash it to your hardware as documented in the wiki.
Important User Compilation Information
If you want to compile Sonoff-Tasmota yourself keep in mind the following:
- Only Flash Mode DOUT is supported. Do not use Flash Mode DIO / QIO / QOUT as it might seem to brick your device. See Wiki for background information.
- Sonoff-Tasmota uses a 1M linker script WITHOUT spiffs 1M (no SPIFFS) for optimal code space. If you compile using ESP/Arduino library 2.3.0 then download the provided new linker script to your Arduino IDE or Platformio base folder. Later version of ESP/Arduino library already contain the correct linker script. See Wiki > Prerequisites.
- To make compile time changes to Sonoff-Tasmota it can use the
user_config_override.hfile. It assures keeping your settings when you download and compile a new version. To useuser_config.override.hyou will have to make a copy of the provideduser_config_override_sample.hfile and add your setting overrides. To enable the override file you will need to use a compile define as documented in theuser_config_override_sample.hfile.
Version Information
- Sonoff-Tasmota provides all (Sonoff) modules in one file and starts with module Sonoff Basic.
- Once uploaded, select Module using the configuration webpage, the commands
ModulesandModuleor configure the Template for your device - After reboot select config menu again or use commands
GPIOsandGPIOto change GPIO with desired sensor.
Migration Information
See wiki migration path for instructions how to migrate to a major version. Pay attention to the following version breaks due to dynamic settings updates:
- Migrate to Sonoff-Tasmota 3.9.x
- Migrate to Sonoff-Tasmota 4.x
- Migrate to Sonoff-Tasmota 5.14
- Migrate to Sonoff-Tasmota 6.x
Support Information
For a database of supported devices see Tasmota Device Templates Repository
See Wiki for use instructions and how-to's.
See Community for forum.
Visit Discord Chat for discussions and troubleshooting.
Contribute
You can contribute to Sonoff-Tasmota by
- providing Pull Requests (Features, Proof of Concepts, Language files or Fixes)
- testing new released features and report issues
- donating to acquire hardware for testing and implementing or out of gratitude
- contributing missing documentation for features and devices on our Wiki
Credits
Libraries Used
Libraries used with Sonoff-Tasmota are:
- ESP8266 core for Arduino
- Adafruit CCS811
- Adafruit ILI9341
- Adafruit LED Backpack
- Adafruit SGP30
- Adafruit SSD1306
- Adafruit GFX
- ArduinoJson
- Bosch BME680
- C2 Programmer
- esp-epaper-29-ws-20171230-gemu
- esp-knx-ip
- FrogmoreScd30
- I2Cdevlib
- IRremoteEsp8266
- JobaTsl2561
- LinkedList
- Liquid Cristal
- MultiChannelGasSensor
- NeoPixelBus
- NewPing
- OneWire
- PubSubClient
- rc-switch
People inspiring me
People helping to keep the show on the road:
- David Lang providing initial issue resolution and code optimizations
- Heiko Krupp for his IRSend, HTU21, SI70xx and Wemo/Hue emulation drivers
- Wiktor Schmidt for Travis CI implementation
- Thom Dietrich for PlatformIO optimizations
- Marinus van den Broek for his EspEasy groundwork
- Pete Ba for more user friendly energy monitor calibration
- Lobradov providing compile optimization tips
- Flexiti for his initial timer implementation
- reloxx13 for his TasmoAdmin management tool
- Joachim Banzhaf for his TSL2561 library and driver
- Gijs Noorlander for his MHZ19, SenseAir and updated PubSubClient drivers
- Emontnemery for his HomeAssistant Discovery concept and many code tuning tips
- Aidan Mountford for his HSB support
- Daniel Ztolnai for his Serial Bridge implementation
- Gerhard Mutz for multiple sensor & display drivers, Sunrise/Sunset, and scripting
- Nuno Ferreira for his HC-SR04 driver
- Adrian Scillato for his (security)fixes and implementing and maintaining KNX
- Gennaro Tortone for implementing and maintaining Eastron drivers
- Raymond Mouthaan for managing Wemos Wiki information
- Norbert Richter for his decode-config.py tool
- Andre Thomas for providing thehackbox OTA support and daily development builds
- Joel Stein and digiblur for their Tuya research and driver
- Frogmore42 and Jason2866 for providing many issue answers
- Blakadder for editing the wiki and providing template management
- Stephan Hadinger for refactoring light driver and enhancing HueEmulation
- tmo for designing the official logo
- Many more providing Tips, Wips, Pocs or PRs
License
This program is licensed under GPL-3.0