/*
* app_config.h — site-specific configuration and credentials.
*
* Copy this file to main/app_config.h and fill it in. app_config.h is
* gitignored; this template is tracked.
*
* cp main/app_config.h.example main/app_config.h
*
* Everything here is specific to one installation. Behavioural tuning
* (hysteresis, timings, safety limits) lives in hvac/control.h and
* hvac/relay.h instead, because those are properties of the firmware rather
* than of the house.
*/
#pragma once
/* ---------------------------------------------------------------- WiFi -- */
#define APP_WIFI_SSID "your-ssid"
#define APP_WIFI_PASS "your-password"
/* --------------------------------------------------------------- MQTT --- */
/*
* The ESP32 talks to the MQTT broker that zigbee2mqtt publishes to, not to
* zigbee2mqtt itself. z2m has no REST endpoint for live sensor state — the
* frontend streams it over a WebSocket — and subscribing to the broker
* directly is both simpler and more robust: the sensor topics are retained,
* so the last known reading for every room arrives within milliseconds of
* connecting, including after a reboot.
*
* URI forms: mqtt://host:1883, mqtts://host:8883, ws://host:9001/mqtt
*/
#define APP_MQTT_URI "mqtt://192.168.1.10:1883"
#define APP_MQTT_USER "" /* leave empty for anonymous */
#define APP_MQTT_PASS ""
/* z2m's configured base topic. Sensor topics are /. */
#define APP_MQTT_BASE_TOPIC "zigbee2mqtt"
/* --------------------------------------------------------------- Rooms -- */
/*
* One row per room the thermostat knows about.
*
* X(display_name, zigbee2mqtt_friendly_name)
*
* display_name — what appears on the round screen. Keep it short; there is
* not much horizontal room at 480x480 with a circular mask.
* friendly_name — exactly as it appears in zigbee2mqtt, i.e. the last path
* element of the MQTT topic. Case and spaces matter. If a
* name contains a space the topic will too, which is legal
* MQTT and handled correctly here.
*
* The order is the order the encoder cycles through in manual mode, and the
* index is what gets persisted to NVS — so inserting a row in the middle
* will shift a previously saved selection. Append rather than insert.
*
* Room 0 is the power-on default before anything is loaded from NVS.
*/
#define APP_ROOM_TABLE(X) \
X("TV Room", "tv_room_sensor") \
X("Bedroom", "bedroom_sensor")
/* --------------------------------------------------------------- Units -- */
/*
* Display units. All internal control math is in degrees Celsius regardless;
* this only affects what is rendered and how big an encoder detent is.
* APP_UNITS_FAHRENHEIT: 1 detent = 1 F. Celsius: 1 detent = 0.5 C.
*/
#define APP_UNITS_FAHRENHEIT 1
/* ---------------------------------------------------------------- Time -- */
/*
* POSIX TZ string, used by schedule mode. SNTP keeps the clock honest; if it
* never syncs, schedule mode falls back to the formula rule and says so on
* screen rather than acting on a wrong clock.
* US Central: "CST6CDT,M3.2.0,M11.1.0" US Eastern: "EST5EDT,M3.2.0,M11.1.0"
*/
#define APP_TIMEZONE "CST6CDT,M3.2.0,M11.1.0"
#define APP_SNTP_SERVER "pool.ntp.org"