Nimbin[12]?Embedded / esp_garden / database.sql

esp_garden git · master

Distributed ESP sensor and actuator system (garden)

esp32 esp-idf iot sensors c++ sql · first commit 2025-10-15 · last commit 2026-01-20 (8 months ago) · synced 3 days ago · upstream: git.ide3.de/hsnr/mic/esp_garden

C++ 70.7% Markdown 18% C 10.7%
git clone https://git.christianimmanuel.de/embedded/esp_garden.gitwget https://git.christianimmanuel.de/embedded/esp_garden/archive/esp_garden.tar.gz
database.sql 4.3 KB · 123 lines raw
-- CREATE TABLE FOR ESP DATA
CREATE TABLE moisture_2 (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    time INT UNSIGNED DEFAULT NULL,
    value VARCHAR(255) NOT NULL,
    pump_reached TINYINT(1) NOT NULL DEFAULT 0
);
INSERT INTO test (value) VALUES ('817273');

CREATE TABLE `data_tables` (
    `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(100) NOT NULL UNIQUE,
    `description` VARCHAR(255) DEFAULT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;


-- CREATE USER TABLE
CREATE TABLE users (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(64) NOT NULL UNIQUE,
    password_hash VARCHAR(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;


-- ESP TYPES (pump, sensor, server..)
CREATE TABLE esp_types (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(32) NOT NULL UNIQUE
);
-- INSERT INTO esp_types (name) VALUES ('sensor'), ('pump');

-- ESP TABLES
CREATE TABLE esps (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(64) NOT NULL UNIQUE,
    mac VARCHAR(17) NOT NULL UNIQUE,
    type_id INT UNSIGNED NOT NULL,
    FOREIGN KEY (type_id) REFERENCES esp_types(id)
);


-- ESP CONNECTIONS (pump -> [sensor, server])
CREATE TABLE esp_connections (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    esp_id INT UNSIGNED NOT NULL,
    connected_esp_id INT UNSIGNED NOT NULL,
    UNIQUE KEY (esp_id, connected_esp_id),
    FOREIGN KEY (esp_id) REFERENCES esps(id) ON DELETE CASCADE,
    FOREIGN KEY (connected_esp_id) REFERENCES esps(id) ON DELETE CASCADE
);

-- ESP SENSORS (what when why)
CREATE TABLE esp_sensors (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    esp_id INT UNSIGNED NOT NULL,
    name VARCHAR(64) NOT NULL,
    info TEXT,
    pin INT NOT NULL,
    use_time BOOLEAN NOT NULL DEFAULT 0,
    delay_ms INT DEFAULT 0,
    min_moisture INT DEFAULT 0,
    is_active BOOLEAN NOT NULL DEFAULT 1,
    FOREIGN KEY (esp_id) REFERENCES esps(id) ON DELETE CASCADE,
    UNIQUE KEY (esp_id, name)
);

-- ESP SENSORS CHANGES (if config changed)
CREATE TABLE sensor_changes (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    sensor_id INT UNSIGNED NOT NULL,
    column_name VARCHAR(64) NOT NULL,
    update_sent TINYINT(1) NOT NULL DEFAULT 0,
    changed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (sensor_id) REFERENCES esp_sensors(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ESP TIMES (10:00, 12:00,..)
CREATE TABLE sensor_times (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    sensor_id INT UNSIGNED NOT NULL,
    time TIME NOT NULL,
    FOREIGN KEY (sensor_id) REFERENCES esp_sensors(id) ON DELETE CASCADE
);

-- ESP NOTIFY (Sensor sends pump_tomatoe to Pump)
CREATE TABLE sensor_notifications (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    sensor_id INT UNSIGNED NOT NULL,
    send_to_esp_id INT UNSIGNED NOT NULL,
    notification_name VARCHAR(64) NOT NULL,
    FOREIGN KEY (sensor_id) REFERENCES esp_sensors(id) ON DELETE CASCADE,
    FOREIGN KEY (send_to_esp_id) REFERENCES esps(id) ON DELETE CASCADE,
    UNIQUE KEY (sensor_id, send_to_esp_id, notification_name)
);

-- ESP PUMP
CREATE TABLE esp_pumps (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    esp_id INT UNSIGNED NOT NULL,
    name VARCHAR(64) NOT NULL,
    info TEXT DEFAULT NULL,
    pin INT NOT NULL,
    pumping_delay_sec INT UNSIGNED DEFAULT 0,
    pumping_duration INT UNSIGNED DEFAULT 0,
    UNIQUE KEY ux_esp_pumps_esp_name (esp_id, name),
    CONSTRAINT fk_esp_pumps_esp_id FOREIGN KEY (esp_id) REFERENCES esps(id) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;



-- SENSOR NOTIFICATIONS
CREATE TABLE sensor_notifications (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    sensor_id INT UNSIGNED NOT NULL,
    send_to_esp_id INT UNSIGNED NOT NULL,
    notification_name VARCHAR(64) NOT NULL,
    UNIQUE KEY ux_sensor_notifications (sensor_id, send_to_esp_id, notification_name),
    KEY fk_sensor_notifications_pump_name (send_to_esp_id, notification_name),
    CONSTRAINT fk_sensor_notifications_sensor_id FOREIGN KEY (sensor_id) REFERENCES esp_sensors(id) ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT fk_sensor_notifications_pump_name FOREIGN KEY (send_to_esp_id, notification_name)
        REFERENCES esp_pumps(esp_id, name) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;