49 lines
1.5 KiB
C
49 lines
1.5 KiB
C
/*
|
|
* 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 <stdbool.h>
|
|
#include <stdint.h>
|
|
|
|
#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
|