/* * Home Assistant REST transport (device only). * * Everything ESP-IDF-specific about talking to HA lives here; parsing and * presentation are in ha_data.c, which the desktop simulator also compiles. * * Plain HTTP on the LAN, deliberately. The Ambient Weather cloud client needs * TLS and pays a multi-second handshake for it; this talks to a box on the * same switch, and the token is not worth a handshake inside the window where * the UI is frozen. Do not point this at an https:// HA instance without * revisiting that trade-off. */ #ifndef HA_CLIENT_H #define HA_CLIENT_H #include #include #include "esp_err.h" #include "ha_data.h" /* Validates configuration. Does not open a connection. */ esp_err_t ha_client_init(void); /* * One request for every sensor, light and sun time (~400 bytes). Leaves * data->forecast alone -- see ha_fetch_forecast(). * * Blocks for the round trip, so callers pause LVGL around it. */ esp_err_t ha_fetch_state(ha_data_t *data); /* * Fills data->forecast. A separate, slower poll: the forecast is a service * call rather than a template render, and it changes hourly at most. */ esp_err_t ha_fetch_forecast(ha_data_t *data); /* * Turn a light on or off. `index` indexes HA_LIGHTS; `brightness` is 0-255, * or -1 to leave the level alone (and always for switch-domain entities). * * Blocks. Must not be called from the LVGL task -- see ui_set_light_cb(). */ esp_err_t ha_light_command(int index, bool on, int16_t brightness); #endif