<picture>
  <source media="(prefers-color-scheme: dark)" srcset="./tools/logo/TASMOTA_FullLogo_Vector_White.svg">
  <img alt="Logo" src="./tools/logo/TASMOTA_FullLogo_Vector.svg" align="right" height="76">
</picture>

# 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.

Callback availability can be checked by searching for either XdrvCall, XsnsCall, XdspCall, XnrgCall and XlgtCall.

## Driver, Sensor, Energy and Light Callback Ids

The following table lists Callback Ids and their availability for a Driver, Sensor or Energy service.

Callback Id                 | Bool | xdrv | xsns | xnrg | xlgt | Description
----------------------------|------|------|------|------|------|----------------------------------
FUNC_SETTINGS_OVERRIDE      |      |  x   |      |      |      | Override start-up settings
FUNC_PIN_STATE              |  x   |  1   |  2   |      |      | At GPIO configuration
FUNC_I2C_INIT               |      |  x   |      |      |      | Immediately after I2C init
FUNC_MODULE_INIT            |  x   |  3   |  1   |      |  2   | Init module specific parameters
FUNC_PRE_INIT               |      |  1   |  3   |  2   |      | Once GPIO have been established
FUNC_INIT                   |      |  1   |  3   |  2   |      | At end of initialisation
FUNC_LOOP                   |      |  1   |  2   |      |      | In main loop
FUNC_SLEEP_LOOP             |      |  1   |  2   |      |      | In main loop during sleep
FUNC_EVERY_50_MSECOND       |      |  1   |  2   |      |      | In main loop
FUNC_EVERY_100_MSECOND      |      |  1   |  2   |      |      | In main loop
FUNC_EVERY_200_MSECOND      |      |      |      |  x   |      | In main loop
FUNC_EVERY_250_MSECOND      |      |  1   |  3   |  2   |      | In main loop
FUNC_EVERY_SECOND           |      |  1   |  2   |      |      | In main loop
FUNC_SAVE_SETTINGS          |      |  2   |  1   |      |      | Just before saving settings
FUNC_SAVE_AT_MIDNIGHT       |      |      |  x   |      |      | At midnight
FUNC_SAVE_BEFORE_RESTART    |      |  2   |  1   |      |      | Just before a planned restart
FUNC_AFTER_TELEPERIOD       |      |  2   |  1   |      |      | At end of teleperiod
FUNC_JSON_APPEND            |      |  2   |  1   |  3   |      | Extend teleperiod JSON text
FUNC_WEB_SENSOR             |      |  2   |  1   |  3   |      | Add sensor data to web GUI
FUNC_WEB_COL_SENSOR         |      |  2   |  1   |  3   |      | Add sensor data to web GUI using columns
FUNC_COMMAND                |  x   |  1   |  2   |  3   |  4   | When a command is not recognized
FUNC_COMMAND_DRIVER         |  x   |  x   |      |      |      | When command Driver\<id\> is executed
FUNC_COMMAND_SENSOR         |  x   |      |  x   |      |      | When command Sensor\<id\> is executed
FUNC_MQTT_SUBSCRIBE         |      |  x   |      |      |      | At end of MQTT subscriptions
FUNC_MQTT_INIT              |      |  x   |      |      |      | Once at end of MQTT connection
FUNC_MQTT_DATA              |  x   |  x   |      |      |      | Before decoding command
FUNC_SET_POWER              |      |  1   |  2   |      |      | Before setting relays
FUNC_SET_DEVICE_POWER       |  x   |  x   |      |      |      | Set relay
FUNC_SHOW_SENSOR            |      |  x   |      |      |      | When FUNC_JSON_APPEND completes
FUNC_ANY_KEY                |      |  x   |      |      |      |
FUNC_LED_LINK               |      |  x   |      |      |      | SetLedLink (On ESP32 only). XdrvMailbox.index holds state
FUNC_ENERGY_EVERY_SECOND    |      |      |      |  x   |      |
FUNC_ENERGY_RESET           |      |      |      |  x   |      |
FUNC_RULES_PROCESS          |  x   |  x   |      |      |      | Process specific rule
FUNC_TELEPERIOD_RULES_PROCESS | x  |  x   |      |      |      | Process specific rule as teleperiod
FUNC_SERIAL                 |  x   |  1   |      |  2   |  3   | Process serial data
FUNC_FREE_MEM               |      |  x   |      |      |      | Show free memory for debugging
FUNC_BUTTON_PRESSED         |  x   |  x   |      |      |      | When a button is pressed
FUNC_BUTTON_MULTI_PRESSED   |  x   |  x   |      |      |      | When a button is pressed multiple times
FUNC_WEB_ADD_BUTTON         |      |  1   |  2   |      |      | Add a Configuration Button to GUI
FUNC_WEB_ADD_MAIN_BUTTON    |      |  1   |  2   |      |      | Add a main button to GUI
FUNC_WEB_ADD_CONSOLE_BUTTON |      |  1   |  2   |      |      | Add a Consoles Button to GUI
FUNC_WEB_ADD_MANAGEMENT_BUTTON |   |  x   |      |      |      | Add a Management Button to GUI
FUNC_WEB_ADD_HANDLER        |      |  1   |  2   |      |      | Add a webserver handler
FUNC_WEB_GET_ARG            |      |  2   |  1   |      |  3   | Get webserver setting arguments
FUNC_SET_CHANNELS           |      |  2   |      |      |  1   |
FUNC_SET_SCHEME             |      |      |      |      |  x   |
FUNC_HOTPLUG_SCAN           |      |      |  x   |      |      |
FUNC_TIME_SYNCED            |      |  x   |      |      |      | Report time is synced
FUNC_DEVICE_GROUP_ITEM      |      |  x   |      |      |      |
FUNC_NETWORK_UP             |      |  1   |  2   |  3   |  4   | Wifi or ETH network just went up (received even if webserver is not enabled)
FUNC_NETWORK_DOWN           |      |  1   |  2   |  3   |  4   | Wifi or ETH network just went down (received even if webserver is not enabled)

The numbers represent the sequence of execution

## Display Call back Ids

The following table lists all Callback Ids for a Display service.

Callback Id                   | Bool | Description
------------------------------|------|---------------------
FUNC_DISPLAY_INIT_DRIVER      |      |
FUNC_DISPLAY_INIT             |      |
FUNC_DISPLAY_EVERY_50_MSECOND |      |
FUNC_DISPLAY_EVERY_SECOND     |      |
FUNC_DISPLAY_MODEL            |  x   |
FUNC_DISPLAY_MODE             |      |
FUNC_DISPLAY_POWER            |      |
FUNC_DISPLAY_CLEAR            |      |
FUNC_DISPLAY_DRAW_FRAME       |      |
FUNC_DISPLAY_DRAW_HLINE       |      |
FUNC_DISPLAY_DRAW_VLINE       |      |
FUNC_DISPLAY_DRAW_LINE        |      |
FUNC_DISPLAY_DRAW_CIRCLE      |      |
FUNC_DISPLAY_FILL_CIRCLE      |      |
FUNC_DISPLAY_DRAW_RECTANGLE   |      |
FUNC_DISPLAY_FILL_RECTANGLE   |      |
FUNC_DISPLAY_TEXT_SIZE        |      |
FUNC_DISPLAY_FONT_SIZE        |      |
FUNC_DISPLAY_ROTATION         |      |
FUNC_DISPLAY_DRAW_STRING      |      |
FUNC_DISPLAY_ONOFF            |      |

## Init sequence

The following list shows a typical callback init sequence

```
CFG: Loaded from flash at FB, Count 1581
xdrv - FUNC_SETTINGS_OVERRIDE
xdrv - FUNC_PIN_STATE
xsns - FUNC_PIN_STATE
xsns - FUNC_MODULE_INIT
xdrv - FUNC_MODULE_INIT
xlgt - FUNC_MODULE_INIT
xdrv - FUNC_PRE_INIT
xnrg - FUNC_PRE_INIT
xsns - FUNC_PRE_INIT
SRC: Restart
xdrv - FUNC_SET_POWER
xsns - FUNC_SET_POWER
xlgt - FUNC_SET_CHANNELS
xdrv - FUNC_SET_DEVICE_POWER
Project tasmota Wemos 2 Version 7.0.0.3(tasmota)-STAGE
xdrv - FUNC_INIT
xsns - FUNC_INIT
I2C: ADS1115 found at 0x48
xdrv - FUNC_LOOP
xsns - FUNC_LOOP
xdrv - FUNC_EVERY_50_MSECOND
xlgt - FUNC_SET_CHANNELS
xsns - FUNC_EVERY_50_MSECOND
xdrv - FUNC_EVERY_100_MSECOND
xsns - FUNC_EVERY_100_MSECOND
xdrv - FUNC_EVERY_250_MSECOND
xsns - FUNC_EVERY_250_MSECOND
xdrv - FUNC_EVERY_SECOND
xsns - FUNC_EVERY_SECOND
WIF: Attempting connection...
WIF: Network (re)scan started...
WIF: Attempting connection...
WIF: Attempting connection...
WIF: Attempting connection...
WIF: Network 0, AP1, SSId indebuurt1, Channel 1, BSSId 24:D3:F2:97:C0:A1, RSSI -86, Encryption 1
WIF: Network 1, AP2, SSId indebuurt2, Channel 5, BSSId A0:AB:1B:7D:42:AC, RSSI -42, Encryption 1
WIF: Network 2, AP-, SSId indebuurt3, Channel 12, BSSId 60:E3:27:58:77:E6, RSSI -84, Encryption 1
WIF: Connecting to AP2 indebuurt2 in mode 11N as wemos2...
WIF: Attempting connection...
WIF: Attempting connection...
WIF: Attempting connection...
WIF: Connected
xdrv - FUNC_WEB_ADD_HANDLER
xsns - FUNC_WEB_ADD_HANDLER
HTP: Web server active on wemos2 with IP address 192.168.2.191
NTP: Drift 0, (UTC) Wed Nov 06 13:57:08 2019, (DST) Sun Mar 31 02:00:00 2019, (STD) Sun Oct 27 03:00:00 2019
APP: Boot Count 500
MQT: Attempting connection...
MQT: Connected
MQT: tele/wemos2/LWT = Online (retained)
MQT: cmnd/wemos2/POWER =
MQT: Subscribe to cmnd/wemos2/#
MQT: Subscribe to cmnd/sonoffs/#
MQT: Subscribe to cmnd/DVES_15568C_fb/#
xdrv - FUNC_MQTT_SUBSCRIBE
MQT: tele/wemos2/INFO1 = {"Module":"Generic","Version":"7.0.0.3(tasmota)","FallbackTopic":"cmnd/DVES_15568C_fb/","GroupTopic":"cmnd/sonoffs/"}
MQT: tele/wemos2/INFO2 = {"WebServerMode":"Admin","Hostname":"wemos2","IPAddress":"192.168.2.191"}
MQT: tele/wemos2/INFO3 = {"RestartReason":"Software/System restart"}
MQT: stat/wemos2/RESULT = {"POWER1":"OFF"}
MQT: stat/wemos2/POWER1 = OFF
MQT: stat/wemos2/RESULT = {"POWER2":"ON"}
MQT: stat/wemos2/POWER2 = ON
xdrv - FUNC_MQTT_INIT
CFG: Saved to flash at FA, Count 1582, Bytes 4096
```
