Skip to content

webui_demo.tc

WebUI Demo — Smart Relay Controller

Source on GitHub

// WebUI Demo — Smart Relay Controller
// Demonstrates all 8 widget types on a /tc_ui dashboard
//
// Upload compiled .tcb to device, navigate to http://<device>/tc_ui

int power;
int brightness;
int mode;
int schedule;
int alarm_time;
int fade_speed;
char devname[32];

// mode: 0=Off, 1=Auto, 2=Manual, 3=Timer
// schedule: 0=Disabled, 1=Weekdays, 2=Weekend, 3=Daily

void WebUI() {
    webButton(power, "Power");
    webSlider(brightness, 0, 100, "Brightness");
    webPulldown(mode, "Mode", "Off|Auto|Manual|Timer");
    webCheckbox(schedule, "Schedule Active");
    webTime(alarm_time, "Turn-on Time");
    webNumber(fade_speed, 1, 10, "Fade Speed");
    webRadio(schedule, "Disabled|Weekdays|Weekend|Daily");
    webText(devname, 32, "Device Name");
}

void EverySecond() {
    // Auto mode: turn on if brightness > 50
    if (mode == 1) {
        if (brightness > 50) {
            power = 1;
        } else {
            power = 0;
        }
    }

    // Timer mode: check alarm
    if (mode == 3 && schedule > 0) {
        if (tasm_time == alarm_time) {
            power = 1;
        }
    }

    // Apply power state to GPIO
    if (power) {
        analogWrite(2, brightness * 10);
    } else {
        analogWrite(2, 0);
    }
}

int main() {
    // Defaults
    power = 0;
    brightness = 50;
    mode = 2;
    schedule = 0;
    alarm_time = 700;
    fade_speed = 5;
    strcpy(devname, "Living Room");

    webPageLabel(0, "Smart Relay");
    gpioInit(2, 1);
    return 0;
}