From 6df64fd3a05ee354359eaa40204b722a821cc87a Mon Sep 17 00:00:00 2001 From: Atilla Date: Sun, 7 Apr 2024 19:18:53 +0200 Subject: [PATCH] errors gefixed | modal | form | dynamische paginas --- app.js | 2 + app.py | 25 ++ goodgarden.sql | 316 --------------- mqtt/publisher.py | 7 +- src/css/style.css | 405 ------------------- src/css/style.css.map | 1 - src/css/style.scss | 536 -------------------------- src/py/script/goodgarden.sql | 346 ----------------- src/py/script/plants.json | 48 +-- src/py/static/css/style.css | 116 ++++-- src/py/static/css/style.css.map | 2 +- src/py/static/css/style.scss | 107 +++-- src/py/static/images/Toevoegen.png | Bin 109908 -> 0 bytes src/py/static/images/plus.png | Bin 0 -> 1501 bytes src/py/static/js/main.js | 227 ++++++++--- src/py/static/js/planten.class.js | 56 +-- src/py/templates/index.html | 193 ++++++---- src/py/templates/kas_informatie.html | 8 +- src/py/templates/planteninfo.html | 10 +- src/py/templates/pomp_informatie.html | 136 +++++++ src/py/templates/sensor.html | 136 +++++++ src/py/templates/sensoren.html | 54 --- 22 files changed, 795 insertions(+), 1936 deletions(-) delete mode 100644 goodgarden.sql delete mode 100644 src/css/style.css delete mode 100644 src/css/style.css.map delete mode 100644 src/css/style.scss delete mode 100644 src/py/script/goodgarden.sql delete mode 100644 src/py/static/images/Toevoegen.png create mode 100644 src/py/static/images/plus.png create mode 100644 src/py/templates/pomp_informatie.html create mode 100644 src/py/templates/sensor.html delete mode 100644 src/py/templates/sensoren.html diff --git a/app.js b/app.js index 44fa17c..b137651 100644 --- a/app.js +++ b/app.js @@ -97,6 +97,7 @@ app.on("window-all-closed", () => // Creëert het hoofdvenster opnieuw wanneer het app icoon wordt aangeklikt en er zijn geen vensters open. app.on("activate", () => { + if (BrowserWindow.getAllWindows().length === 0) { createWindow(); @@ -105,6 +106,7 @@ app.on("activate", () => // + // Configureert IPC (Inter-Process Communication) luisteraars. function setupIpcMainListeners() { diff --git a/app.py b/app.py index f149a30..650e5fc 100644 --- a/app.py +++ b/app.py @@ -73,6 +73,31 @@ def get_weather(): } return jsonify(weather_data) + + +def get_planten_data(): + mydb = database_connect() + if mydb and mydb.is_connected(): + cursor = mydb.cursor(dictionary=True) # Corrected from corsor to cursor + + query = "SELECT id, plant_naam, plantensoort, plant_geteelt FROM planten" + + cursor.execute(query) + planten_data = cursor.fetchall() # Fetch all rows + mydb.close() + return planten_data + + +@app.route("/planten", methods=["GET"]) +def get_data_planten(): + planten_data = get_planten_data() + + if planten_data is None or len(planten_data) == 0: + + return jsonify({"error": "Failed to fetch data from database"}) + + + return jsonify(planten_data) # Directly return the list of dictionaries as JSON if __name__ == "__main__": app.run(host="127.0.0.1", port=5000) \ No newline at end of file diff --git a/goodgarden.sql b/goodgarden.sql deleted file mode 100644 index c0e33a4..0000000 --- a/goodgarden.sql +++ /dev/null @@ -1,316 +0,0 @@ --- phpMyAdmin SQL Dump --- version 5.2.1 --- https://www.phpmyadmin.net/ --- --- Host: 127.0.0.1 --- Gegenereerd op: 20 mrt 2024 om 10:19 --- Serverversie: 10.4.32-MariaDB --- PHP-versie: 8.2.12 - -DROP DATABASE IF EXISTS goodgarden; -CREATE DATABASE goodgarden; - -USE goodgarden; - -SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; -START TRANSACTION; -SET time_zone = "+00:00"; - - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8mb4 */; - --- --- Database: `goodgarden` --- - --- -------------------------------------------------------- - --- --- Tabelstructuur voor tabel `battery_voltage_events` --- - -CREATE TABLE `battery_voltage_events` ( - `id` int(10) UNSIGNED NOT NULL, - `timestamp` int(11) DEFAULT NULL, - `gateway_receive_time` varchar(50) DEFAULT NULL, - `device` int(11) DEFAULT NULL, - `value` decimal(10,5) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Gegevens worden geëxporteerd voor tabel `battery_voltage_events` --- - -INSERT INTO `battery_voltage_events` (`id`, `timestamp`, `gateway_receive_time`, `device`, `value`) VALUES -(2185, 1710839863, '2024-03-19T09:17:43Z', 256, 4.03663), -(2186, 1710842346, '2024-03-19T09:59:06Z', 322, 4.08547); - --- -------------------------------------------------------- - --- --- Tabelstructuur voor tabel `devices` --- - -CREATE TABLE `devices` ( - `id` int(10) UNSIGNED NOT NULL, - `serial_number` varchar(255) DEFAULT NULL, - `name` varchar(255) DEFAULT NULL, - `label` varchar(255) DEFAULT NULL, - `last_seen` int(11) DEFAULT NULL, - `last_battery_voltage` float DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabelstructuur voor tabel `fetch` --- - -CREATE TABLE `fetch` ( - `id` int(10) UNSIGNED NOT NULL, - `timestamp` int(11) DEFAULT NULL, - `gateway_receive_time` varchar(50) DEFAULT NULL, - `device` int(11) DEFAULT NULL, - `value` decimal(10,5) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabelstructuur voor tabel `par_events` --- - -CREATE TABLE `par_events` ( - `id` int(10) UNSIGNED NOT NULL, - `timestamp` int(11) DEFAULT NULL, - `gateway_receive_time` varchar(50) DEFAULT NULL, - `device` int(11) DEFAULT NULL, - `value` decimal(10,5) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabelstructuur voor tabel `planten` --- - -CREATE TABLE `planten` ( - `id` int(20) UNSIGNED NOT NULL, - `plant_naam` varchar(255) DEFAULT NULL, - `plantensoort` varchar(255) DEFAULT NULL, - `plant_geteelt` tinyint(1) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Gegevens worden geëxporteerd voor tabel `planten` --- - -INSERT INTO `planten` (`id`, `plant_naam`, `plantensoort`, `plant_geteelt`) VALUES -(47, 'Tomaten', 'Groente', 1), -(49, 'Komkommer', 'Groente', 1), -(50, 'Appel', 'Fruit', 1), -(51, 'Sla', 'Groente', 1), -(52, 'Wietplant', 'Onkruid', 0); - --- -------------------------------------------------------- - --- --- Tabelstructuur voor tabel `relative_humidity_events` --- - -CREATE TABLE `relative_humidity_events` ( - `id` int(10) UNSIGNED NOT NULL, - `timestamp` int(11) DEFAULT NULL, - `gateway_receive_time` varchar(50) DEFAULT NULL, - `device` int(11) DEFAULT NULL, - `value` decimal(10,5) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabelstructuur voor tabel `soil_electric_conductivity_events` --- - -CREATE TABLE `soil_electric_conductivity_events` ( - `id` int(10) UNSIGNED NOT NULL, - `timestamp` int(11) DEFAULT NULL, - `gateway_receive_time` varchar(50) DEFAULT NULL, - `device` int(11) DEFAULT NULL, - `value` decimal(10,5) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabelstructuur voor tabel `soil_relative_permittivity_events` --- - -CREATE TABLE `soil_relative_permittivity_events` ( - `id` int(10) UNSIGNED NOT NULL, - `timestamp` int(11) DEFAULT NULL, - `gateway_receive_time` varchar(50) DEFAULT NULL, - `device` int(11) DEFAULT NULL, - `value` decimal(10,5) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- -------------------------------------------------------- - --- --- Tabelstructuur voor tabel `soil_temperature_events` --- - -CREATE TABLE `soil_temperature_events` ( - `id` int(10) NOT NULL, - `timestamp` int(11) DEFAULT NULL, - `gateway_receive_time` varchar(50) DEFAULT NULL, - `device` int(11) DEFAULT NULL, - `value` decimal(10,5) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Indexen voor geëxporteerde tabellen --- - --- --- Indexen voor tabel `battery_voltage_events` --- -ALTER TABLE `battery_voltage_events` - ADD PRIMARY KEY (`id`), - ADD UNIQUE KEY `timestamp` (`timestamp`), - ADD UNIQUE KEY `gateway_receive_time` (`gateway_receive_time`); - --- --- Indexen voor tabel `devices` --- -ALTER TABLE `devices` - ADD PRIMARY KEY (`id`), - ADD UNIQUE KEY `last_seen` (`last_seen`), - ADD UNIQUE KEY `last_battery_voltage` (`last_battery_voltage`); - --- --- Indexen voor tabel `fetch` --- -ALTER TABLE `fetch` - ADD PRIMARY KEY (`id`), - ADD UNIQUE KEY `timestamp` (`timestamp`), - ADD UNIQUE KEY `gateway_receive_time` (`gateway_receive_time`), - ADD UNIQUE KEY `value` (`value`); - --- --- Indexen voor tabel `par_events` --- -ALTER TABLE `par_events` - ADD PRIMARY KEY (`id`), - ADD UNIQUE KEY `timestamp` (`timestamp`), - ADD UNIQUE KEY `gateway_receive_time` (`gateway_receive_time`), - ADD UNIQUE KEY `value` (`value`); - --- --- Indexen voor tabel `planten` --- -ALTER TABLE `planten` - ADD PRIMARY KEY (`id`), - ADD UNIQUE KEY `plant_naam` (`plant_naam`); - --- --- Indexen voor tabel `relative_humidity_events` --- -ALTER TABLE `relative_humidity_events` - ADD PRIMARY KEY (`id`), - ADD UNIQUE KEY `timestamp` (`timestamp`), - ADD UNIQUE KEY `gateway_receive_time` (`gateway_receive_time`), - ADD UNIQUE KEY `value` (`value`); - --- --- Indexen voor tabel `soil_electric_conductivity_events` --- -ALTER TABLE `soil_electric_conductivity_events` - ADD PRIMARY KEY (`id`), - ADD UNIQUE KEY `timestamp` (`timestamp`), - ADD UNIQUE KEY `gateway_receive_time` (`gateway_receive_time`), - ADD UNIQUE KEY `value` (`value`); - --- --- Indexen voor tabel `soil_relative_permittivity_events` --- -ALTER TABLE `soil_relative_permittivity_events` - ADD PRIMARY KEY (`id`), - ADD UNIQUE KEY `timestamp` (`timestamp`), - ADD UNIQUE KEY `gateway_receive_time` (`gateway_receive_time`), - ADD UNIQUE KEY `value` (`value`); - --- --- Indexen voor tabel `soil_temperature_events` --- -ALTER TABLE `soil_temperature_events` - ADD PRIMARY KEY (`id`), - ADD UNIQUE KEY `timestamp` (`timestamp`), - ADD UNIQUE KEY `gateway_receive_time` (`gateway_receive_time`), - ADD UNIQUE KEY `value` (`value`); - --- --- AUTO_INCREMENT voor geëxporteerde tabellen --- - --- --- AUTO_INCREMENT voor een tabel `battery_voltage_events` --- -ALTER TABLE `battery_voltage_events` - MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2189; - --- --- AUTO_INCREMENT voor een tabel `devices` --- -ALTER TABLE `devices` - MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=15; - --- --- AUTO_INCREMENT voor een tabel `fetch` --- -ALTER TABLE `fetch` - MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=100; - --- --- AUTO_INCREMENT voor een tabel `par_events` --- -ALTER TABLE `par_events` - MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=7; - --- --- AUTO_INCREMENT voor een tabel `planten` --- -ALTER TABLE `planten` - MODIFY `id` int(20) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=53; - --- --- AUTO_INCREMENT voor een tabel `relative_humidity_events` --- -ALTER TABLE `relative_humidity_events` - MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=9; - --- --- AUTO_INCREMENT voor een tabel `soil_electric_conductivity_events` --- -ALTER TABLE `soil_electric_conductivity_events` - MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5; - --- --- AUTO_INCREMENT voor een tabel `soil_relative_permittivity_events` --- -ALTER TABLE `soil_relative_permittivity_events` - MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4; - --- --- AUTO_INCREMENT voor een tabel `soil_temperature_events` --- -ALTER TABLE `soil_temperature_events` - MODIFY `id` int(10) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=8; -COMMIT; - -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/mqtt/publisher.py b/mqtt/publisher.py index 5056e49..6cbf0a7 100644 --- a/mqtt/publisher.py +++ b/mqtt/publisher.py @@ -12,7 +12,12 @@ publish_interval = 30 # MOET ~300 ZIJN voor productiegebruik. # Definieer API-eindpunten en de corresponderende MQTT topics. api_endpoints = [ {"url": "https://garden.inajar.nl/api/devices/", "topic": "goodgarden/devices"}, - # Voeg meer API-eindpunten en topics toe zoals vereist. + {"url": "https://garden.inajar.nl/api/relative_humidity_events/", "topic": "goodgarden/relative_humidity"}, + {"url": "https://garden.inajar.nl/api/battery_voltage_events/", "topic": "goodgarden/battery_voltage"}, + {"url": "https://garden.inajar.nl/api/soil_electric_conductivity_events/", "topic": "goodgarden/soil_electric_conductivity"}, + {"url": "https://garden.inajar.nl/api/soil_relative_permittivity_events/", "topic": "goodgarden/soil_relative_permittivity"}, + {"url": "https://garden.inajar.nl/api/soil_temperature_events/", "topic": "goodgarden/soil_temperature"}, + {"url": "https://garden.inajar.nl/api/par_events/", "topic": "goodgarden/par_events"} ] def on_connect(client, userdata, flags, rc): diff --git a/src/css/style.css b/src/css/style.css deleted file mode 100644 index 334ce84..0000000 --- a/src/css/style.css +++ /dev/null @@ -1,405 +0,0 @@ -@import url("https://fonts.googleapis.com/css2?family=Akaya+Kanadaka&display=swap"); -@import url("https://fonts.googleapis.com/css2?family=Afacad:ital,wght@0,400..700;1,400..700&display=swap"); -h1, -h2, -h3, -h4, -h5 { - font-family: "Akaya Kanadaka", system-ui; - margin: 0; -} - -p, -td { - font-family: "Afacad", sans-serif; - color: black; -} - -a { - text-decoration: none; -} - -body { - background: linear-gradient(rgba(255, 255, 255, 0.5), rgba(255, 255, 255, 0.5)), url("../images/achtergrond.png"); - background-repeat: no-repeat; - background-size: cover; - background-position: center; - font-family: "Afacad", sans-serif; - display: flex; - justify-content: center; - align-items: center; - height: 100vh; - margin: 0; -} -body .mainContainer { - width: 85vw; - height: 38rem; - background-color: rgba(255, 255, 255, 0.85); - border-radius: 40px; - padding: 2rem; -} -body .mainContainer .goodgarden-logo { - position: absolute; - width: 10vw; - left: 50%; - top: 4.1rem; - transform: translateX(-50%); -} -body .mainContainer .informatie-kas-main-container { - display: grid; - grid-template-columns: 5fr 7fr; -} -body .mainContainer .mainBorder { - padding: 1.25rem 1.5rem; - padding: 1rem 0; - height: 35rem; - border: solid 5px rgb(171, 211, 174); - border-radius: 40px; -} -body .mainContainer .mainBorder .pagina-titel { - font-size: 2rem; - margin-left: 1.5rem; -} -body .mainContainer .mainBorder #sectie-1 { - display: flex; - flex-direction: column; - gap: 0; - padding: 0 2.5rem 0 1rem; - position: relative; -} -body .mainContainer .mainBorder #sectie-1 h1 { - background-color: green; -} -body .mainContainer .mainBorder #sectie-1 .parent-algemeen-overzicht { - box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.5); - border-radius: 40px; - padding: 1rem; - background-color: white; -} -body .mainContainer .mainBorder #sectie-1 .parent-algemeen-overzicht .algemeen-overzicht { - border: solid 2px rgb(171, 211, 174); - border-radius: 35px; - font-size: 1.25rem; - padding: 0.5rem 1rem; -} -body .mainContainer .mainBorder #sectie-1 .parent-algemeen-overzicht .algemeen-overzicht .table-informatie-kas { - width: 100%; -} -body .mainContainer .mainBorder #sectie-1 .parent-algemeen-overzicht .algemeen-overzicht .table-informatie-kas .tr-informatie-kas { - display: flex; - justify-content: space-between; - text-align: left; -} -body .mainContainer .mainBorder #sectie-1 .grafiek { - box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.5); - border-radius: 40px; - padding: 1rem; - position: relative; - background-color: white; -} -body .mainContainer .mainBorder #sectie-1 .grafiek .grafiek-innerbox { - border: solid 2px rgb(171, 211, 174); - border-radius: 35px; - font-size: 1.25rem; - padding: 0 1rem 2.5rem; - height: 225px; - position: relative; -} -body .mainContainer .mainBorder #sectie-1 .grafiek .grafiek-innerbox h2 { - position: absolute; - left: 50%; - transform: translateX(-50%); -} -body .mainContainer .mainBorder #sectie-1 .grafiek .grafiek-innerbox canvas { - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); -} -body .mainContainer .mainBorder .content { - display: grid; - grid-template-columns: 3fr 1fr 3fr; - height: 100%; -} -body .mainContainer .mainBorder .content .kant-links { - grid-column: 1; -} -body .mainContainer .mainBorder .content .kant-links #planten { - width: 100%; - border-collapse: collapse; -} -body .mainContainer .mainBorder .content .kant-links #planten td article { - height: 7rem; - width: 10rem; - padding: 0.6rem; - margin: 0.1rem; - margin-left: 2rem; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - border: solid 3px rgb(171, 211, 174); - border-radius: 40px; - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); -} -body .mainContainer .mainBorder .content .kant-links #planten td article #toevoegen { - height: 5rem; - width: 5rem; -} -body .mainContainer .mainBorder .content .kant-links #planten td article h2 { - color: gray; -} -body .mainContainer .mainBorder .content .kant-links #planten td article:hover { - background-color: lightgray; -} -body .mainContainer .mainBorder .content .kant-rechts { - grid-column: 3; -} -body .mainContainer .mainBorder .content .kant-rechts #metingen { - border: solid 3px rgb(171, 211, 174); - border-radius: 40px; -} -body .mainContainer .mainBorder .content .kant-rechts #metingen #main-waardes { - display: flex; - justify-content: space-between; - padding: 0.5rem; - padding-bottom: 0; - width: 100%; -} -body .mainContainer .mainBorder .content .kant-rechts #metingen #main-waardes table { - display: flex; - justify-content: space-between; - width: 100%; -} -body .mainContainer .mainBorder .grid-column-2 { - box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.5); - border-radius: 40px; - padding: 1rem; - margin: 3.25rem 1rem 1.25rem 1rem; - background-color: white; -} -body .mainContainer .mainBorder .grid-column-2 .grid-2-child { - border: solid 2px rgb(171, 211, 174); - border-radius: 35px; - height: 100%; -} -body .mainContainer .mainBorder .grid-column-2 .grid-2-child .parent-table { - padding: 1.5rem 2rem; - display: flex; - flex-direction: column; - align-items: stretch; - gap: 2.5rem; - justify-content: space-around; - height: 90%; -} -body .mainContainer .mainBorder .grid-column-2 .grid-2-child .parent-table table tr td { - font-size: 1.05rem; -} -body .mainContainer .mainBorder .grid-column-2 .grid-2-child .parent-table .kas-table-1 tr td { - font-size: 1.25rem; -} -body .mainContainer .mainBorder .grid-column-2 .grid-2-child .parent-table .kas-table-2 { - position: relative; -} -body .mainContainer .mainBorder .grid-column-2 .grid-2-child .parent-table .kas-table-2::after, body .mainContainer .mainBorder .grid-column-2 .grid-2-child .parent-table .kas-table-2::before { - content: ""; - position: absolute; - left: 0; - right: 0; - height: 1px; - width: 90%; - background: black; -} -body .mainContainer .mainBorder .grid-column-2 .grid-2-child .parent-table .kas-table-2::after { - bottom: -20px; -} -body .mainContainer .mainBorder .grid-column-2 .grid-2-child .parent-table .kas-table-2::before { - top: -20px; -} - -.divider { - display: flex; - justify-content: center; - border: solid 1px rgb(171, 211, 174); - border-radius: 5px; - width: 80%; - margin: 0 auto; -} - -.modal { - display: none; - position: fixed; - z-index: 999; - left: 50%; - top: 50%; - transform: translate(-50%, -50%); - background: white; - padding: 1.25rem; - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); - width: 30vw; - height: auto; - border: solid 2px #abd3ae; - border-radius: 10px; -} - -.modal .close { - color: #aaa; - float: right; - font-size: 1.75rem; - font-weight: bold; -} - -.modal .close:hover, -.modal .close:active { - color: black; - text-decoration: none; - cursor: pointer; -} - -#myModal select, -#myModal input { - width: calc(100% - 20px); - padding: 10px; - margin-bottom: 15px; - border: 2px solid #abd3ae; - border-radius: 5px; - box-sizing: border-box; -} - -#myModal .knop { - display: flex; - justify-content: space-between; -} - -#myModal button { - width: 48%; - padding: 10px; - box-sizing: border-box; - height: 40px; -} - -#myModal .knop-container { - display: flex; - justify-content: space-between; - margin-top: 20px; -} - -#myModal .knop-container input, -#myModal .knop-container button { - flex: 1; - margin: 0 5px; - padding: 10px; - box-sizing: border-box; -} - -#myModal input[type=text], -#myModal select { - border: 2px solid #abd3ae; - padding: 10px; - border-radius: 17px; - box-sizing: border-box; -} - -#myModal input[type=submit], -#myModal button { - color: #fff; - border: none; - border-radius: 15px; - cursor: pointer; -} - -#myModal input[type=submit] { - background-color: white; -} - -#myModal button { - background-color: white; - color: black; -} - -.toevoeging { - background: linear-gradient(45deg, #abd3ae, #2ecc71); -} - -.annulatie-knop { - background: linear-gradient(45deg, #ffcc00, #ff6600); -} - -#myModal button:hover { - background: linear-gradient(45deg, #abd3ae, #fff); - color: #000; -} - -.modal .close { - color: #aaa; - float: right; - font-size: 1.75rem; - font-weight: bold; -} - -.modal .close:hover, -.modal .close:active { - color: black; - text-decoration: none; - cursor: pointer; -} - -.switch-container { - display: flex; - align-items: end; -} - -.switch { - position: relative; - display: inline-block; - width: 60px; - height: 30px; -} - -.switch input { - opacity: 0; - width: 0; - height: 0; -} - -.slider { - position: absolute; - cursor: pointer; - top: 0; - left: 0; - right: 0; - bottom: 0; - background-color: #ccc; - border-radius: 34px; - transition: 0.4s; -} - -.slider:before { - position: absolute; - content: ""; - height: 26px; - width: 26px; - left: 4px; - bottom: 4px; - background-color: white; - border-radius: 50%; - transition: 0.4s; -} - -input:checked + .slider { - background-color: #2ecc71; -} - -input:checked + .slider:before { - transform: translateX(26px); -} - -.rechterkant { - display: flex; - justify-content: end; -} - -.plant-container, -#modalButton { - background-color: white; -}/*# sourceMappingURL=style.css.map */ \ No newline at end of file diff --git a/src/css/style.css.map b/src/css/style.css.map deleted file mode 100644 index c39b804..0000000 --- a/src/css/style.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["style.scss","style.css"],"names":[],"mappings":"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","file":"style.css"} \ No newline at end of file diff --git a/src/css/style.scss b/src/css/style.scss deleted file mode 100644 index aa4a200..0000000 --- a/src/css/style.scss +++ /dev/null @@ -1,536 +0,0 @@ -$primary-color: rgb(171, 211, 174); -$secondary-color: rgb(143, 188, 143); - -@import url("https://fonts.googleapis.com/css2?family=Akaya+Kanadaka&display=swap"); -@import url("https://fonts.googleapis.com/css2?family=Afacad:ital,wght@0,400..700;1,400..700&display=swap"); - -$font-titels: "Akaya Kanadaka", system-ui; - -$font-text: "Afacad", sans-serif; - -@mixin flexbox-center -{ - display: flex; - justify-content: center; -} - -@mixin groene-border -{ - border: solid 2px $primary-color; -} - -@mixin box-shadow -{ - box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.5); -} - -@mixin border-radius -{ - border-radius: 40px; -} - -@mixin inner-border-radius -{ - border-radius: 35px; -} - -h1, -h2, -h3, -h4, -h5 -{ - font-family: $font-titels; - margin: 0; -} - -p, -td -{ - font-family: $font-text; - color: black; -} - -a -{ - text-decoration: none; -} - -body -{ - background: linear-gradient(rgba(255, 255, 255, 0.5), rgba(255, 255, 255, 0.5)), url("../images/achtergrond.png"); - background-repeat: no-repeat; - background-size: cover; - background-position: center; - font-family: $font-text; - display: flex; - justify-content: center; - align-items: center; - height: 100vh; - margin: 0; - - .mainContainer - { - width: 85vw; - height: 38rem; - background-color: rgb(255, 255, 255, 85%); - border-radius: 40px; - padding: 2rem; - - .goodgarden-logo - { - position: absolute; - width: 10vw; - left: 50%; - top: 4.1rem; - transform: translateX(-50%); - } - - .informatie-kas-main-container - { - display: grid; - grid-template-columns: 5fr 7fr; - } - - .mainBorder - { - padding: 1.25rem 1.5rem; - padding: 1rem 0; - height: 35rem; - border: solid 5px $primary-color; - border-radius: 40px; - - .pagina-titel - { - font-size: 2rem; - margin-left: 1.5rem; - } - - #sectie-1 - { - display: flex; - flex-direction: column; - // gap: 1rem; - gap: 0; - padding: 0 2.5rem 0 1rem; - position: relative; - - h1 - { - background-color: green; - } - - .parent-algemeen-overzicht - { - @include box-shadow; - @include border-radius; - padding: 1rem; - // margin-top: 1rem; - background-color: white; - - .algemeen-overzicht - { - @include groene-border; - @include inner-border-radius; - font-size: 1.25rem; - padding: 0.5rem 1rem; - - .table-informatie-kas - { - width: 100%; - - .tr-informatie-kas - { - display: flex; - justify-content: space-between; - text-align: left; - } - } - } - } - - .grafiek - { - @include box-shadow; - @include border-radius; - padding: 1rem; - position: relative; - background-color: white; - - .grafiek-innerbox - { - @include groene-border; - @include inner-border-radius; - font-size: 1.25rem; - padding: 0 1rem 2.5rem; - height: 225px; - position: relative; - - h2 - { - position: absolute; - left: 50%; - transform: translateX(-50%); - } - - canvas - { - // Zorgt ervoor dat de grafiek precies in eht midden komt - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - } - } - } - } - - .content - { - display: grid; - grid-template-columns: 3fr 1fr 3fr; - height: 100%; - - .kant - { - &-links - { - grid-column: 1; - - #planten - { - width: 100%; - border-collapse: collapse; - - td - { - article - { - height: 7rem; - width: 10rem; - padding: 0.6rem; - margin: 0.1rem; - margin-left: 2rem; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - border: solid 3px $primary-color; - border-radius: 40px; - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); - - #toevoegen - { - height: 5rem; - width: 5rem; - } - - h2 - { - color: gray; - } - - &:hover - { - background-color: lightgray; - } - } - } - } - } - - &-rechts - { - grid-column: 3; - // margin-right: 2rem; - - #metingen - { - border: solid 3px $primary-color; - border-radius: 40px; - - #main-waardes - { - display: flex; - justify-content: space-between; - padding: 0.5rem; - padding-bottom: 0; - width: 100%; - - table - { - display: flex; - justify-content: space-between; - width: 100%; - } - } - } - } - } - } - - .grid-column-2 - { - @include box-shadow; - @include border-radius; - padding: 1rem; - margin: 3.25rem 1rem 1.25rem 1rem; - background-color: white; - - .grid-2-child - { - @include groene-border; - @include inner-border-radius; - height: 100%; - - .parent-table - { - padding: 1.5rem 2rem; - display: flex; - flex-direction: column; - align-items: stretch; - gap: 2.5rem; - justify-content: space-around; - height: 90%; - - table - { - tr - { - td - { - font-size: 1.05rem; - } - } - } - - .kas-table-1 - { - tr - { - td - { - font-size: 1.25rem; - } - } - } - - .kas-table-2 - { - position: relative; - - &::after, - &::before - { - content: ""; - position: absolute; - left: 0; - right: 0; - height: 1px; - width: 90%; - background: black; - } - - &::after - { - bottom: -20px; - } - - &::before - { - top: -20px; - } - } - } - } - } - } - } -} - -.divider { - display: flex; - justify-content: center; - border: solid 1px $primary-color; - border-radius: 5px; - width: 80%; - margin: 0 auto; -} - -.modal { - display: none; - position: fixed; - z-index: 999; - left: 50%; - top: 50%; - transform: translate(-50%, -50%); - background: white; - padding: 1.25rem; - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); - width: 30vw; - height: auto; - border: solid 2px #abd3ae; - border-radius: 10px; -} -.modal .close { - color: #aaa; - float: right; - font-size: 1.75rem; - font-weight: bold; -} -.modal .close:hover, -.modal .close:active { - color: black; - text-decoration: none; - cursor: pointer; -} - -#myModal select, -#myModal input { - width: calc(100% - 20px); - padding: 10px; - margin-bottom: 15px; - border: 2px solid #abd3ae; - border-radius: 5px; - box-sizing: border-box; -} - -#myModal .knop { - display: flex; - justify-content: space-between; -} - -#myModal button { - width: 48%; - padding: 10px; - box-sizing: border-box; - height: 40px; -} - -#myModal .knop-container { - display: flex; - justify-content: space-between; - margin-top: 20px; -} - -#myModal .knop-container input, -#myModal .knop-container button { - flex: 1; - margin: 0 5px; - padding: 10px; - box-sizing: border-box; -} - -#myModal input[type="text"], -#myModal select { - border: 2px solid #abd3ae; - padding: 10px; - border-radius: 17px; - box-sizing: border-box; -} - -#myModal input[type="submit"], -#myModal button { - color: #fff; - border: none; - border-radius: 15px; - cursor: pointer; -} - -#myModal input[type="submit"] { - background-color: white; -} - -#myModal button { - background-color: white; - color: black; -} - -.toevoeging { - background: linear-gradient(45deg, #abd3ae, #2ecc71); -} - -.annulatie-knop { - background: linear-gradient(45deg, #ffcc00, #ff6600); -} - -#myModal button:hover { - background: linear-gradient(45deg, #abd3ae, #fff); - color: #000; -} - -.modal .close { - color: #aaa; - float: right; - font-size: 1.75rem; - font-weight: bold; -} - -.modal .close:hover, -.modal .close:active { - color: black; - text-decoration: none; - cursor: pointer; -} - -.switch-container { - display: flex; - align-items: end; -} - -.switch { - position: relative; - display: inline-block; - width: 60px; - height: 30px; -} - -.switch input { - opacity: 0; - width: 0; - height: 0; -} - -.slider { - position: absolute; - cursor: pointer; - top: 0; - left: 0; - right: 0; - bottom: 0; - background-color: #ccc; - border-radius: 34px; - transition: 0.4s; -} - -.slider:before { - position: absolute; - content: ""; - height: 26px; - width: 26px; - left: 4px; - bottom: 4px; - background-color: white; - border-radius: 50%; - transition: 0.4s; -} - -input:checked + .slider { - background-color: #2ecc71; -} - -input:checked + .slider:before { - transform: translateX(26px); -} - -.rechterkant { - display: flex; - justify-content: end; -} - - .plant-container, - #modalButton - { - background-color: white; - } - \ No newline at end of file diff --git a/src/py/script/goodgarden.sql b/src/py/script/goodgarden.sql deleted file mode 100644 index 93d8664..0000000 --- a/src/py/script/goodgarden.sql +++ /dev/null @@ -1,346 +0,0 @@ --- phpMyAdmin SQL Dump --- version 5.2.1 --- https://www.phpmyadmin.net/ --- --- Host: 127.0.0.1 --- Gegenereerd op: 14 feb 2024 om 14:36 --- Serverversie: 10.4.28-MariaDB --- PHP-versie: 8.2.4 - -DROP DATABASE IF EXISTS goodgarden; -CREATE DATABASE goodgarden; - -USE goodgarden; - -SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; -START TRANSACTION; -SET time_zone = "+00:00"; - - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8mb4 */; - --- --- Database: `goodgarden` --- - --- -------------------------------------------------------- - --- --- Tabelstructuur voor tabel `battery_voltage_events` --- - -CREATE TABLE `battery_voltage_events` ( - `id` int(10) UNSIGNED NOT NULL, - `timestamp` int(11) DEFAULT NULL, - `gateway_receive_time` varchar(50) DEFAULT NULL, - `device` int(11) DEFAULT NULL, - `value` decimal(10,5) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Gegevens worden geëxporteerd voor tabel `battery_voltage_events` --- - -INSERT INTO `battery_voltage_events` (`id`, `timestamp`, `gateway_receive_time`, `device`, `value`) VALUES -(1, 1707825721, '2024-02-13T12:02:01Z', 256, 4.09890), -(2, 1707837460, '2024-02-13T15:17:40Z', 322, 4.10501), -(3, 1707825721, '2024-02-13T12:02:01Z', 256, 4.09890), -(4, 1707837460, '2024-02-13T15:17:40Z', 322, 4.10501), -(5, 1707825721, '2024-02-13T12:02:01Z', 256, 4.09890), -(6, 1707837460, '2024-02-13T15:17:40Z', 322, 4.10501), -(7, 1707825721, '2024-02-13T12:02:01Z', 256, 4.09890), -(8, 1707837460, '2024-02-13T15:17:40Z', 322, 4.10501), -(9, 1707825721, '2024-02-13T12:02:01Z', 256, 4.09890), -(10, 1707837460, '2024-02-13T15:17:40Z', 322, 4.10501); - --- -------------------------------------------------------- - --- --- Tabelstructuur voor tabel `devices` --- - -CREATE TABLE `devices` ( - `id` int(10) UNSIGNED NOT NULL, - `serial_number` varchar(255) DEFAULT NULL, - `name` varchar(255) DEFAULT NULL, - `label` varchar(255) DEFAULT NULL, - `last_seen` int(11) DEFAULT NULL, - `last_battery_voltage` float DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Gegevens worden geëxporteerd voor tabel `devices` --- - -INSERT INTO `devices` (`id`, `serial_number`, `name`, `label`, `last_seen`, `last_battery_voltage`) VALUES -(1, '0033889B1BAB1169', 'firefly2_0051', 'The Field', 1707765066, 4.09768), -(2, '006FE1FC316ED7D8', 'firefly2_0111', 'The Field', 1707764966, 4.10745); - --- -------------------------------------------------------- - --- --- Tabelstructuur voor tabel `fetch` --- - -CREATE TABLE `fetch` ( - `id` int(10) UNSIGNED NOT NULL, - `timestamp` int(11) DEFAULT NULL, - `gateway_receive_time` varchar(50) DEFAULT NULL, - `device` int(11) DEFAULT NULL, - `value` decimal(10,5) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Gegevens worden geëxporteerd voor tabel `fetch` --- - -INSERT INTO `fetch` (`id`, `timestamp`, `gateway_receive_time`, `device`, `value`) VALUES -(70, 1707851215, '2024-02-13T19:06:55Z', 322, 0.00000), -(71, 1707851215, '2024-02-13T19:06:55Z', 322, 1.52000), -(72, 1707851215, '2024-02-13T19:06:55Z', 322, 12.06000), -(73, 1707825721, '2024-02-13T12:02:01Z', 256, 4.09890), -(74, 1707837460, '2024-02-13T15:17:40Z', 322, 4.10501), -(75, 0, '', 0, 0.00000), -(76, 0, '', 0, 0.00000), -(77, 1707844638, '2024-02-13T17:17:18Z', 322, 0.00000), -(78, 1707851099, '2024-02-13T19:04:59Z', 256, 0.00000), -(79, 1707844638, '2024-02-13T17:17:18Z', 322, 71.08984), -(80, 1707851099, '2024-02-13T19:04:59Z', 256, 66.72949), -(81, 1707851215, '2024-02-13T19:06:55Z', 322, 0.00000), -(82, 1707851215, '2024-02-13T19:06:55Z', 322, 1.52000), -(83, 1707851215, '2024-02-13T19:06:55Z', 322, 12.06000), -(84, 0, '', 0, 0.00000), -(85, 0, '', 0, 0.00000), -(86, 1707844638, '2024-02-13T17:17:18Z', 322, 0.00000), -(87, 1707851099, '2024-02-13T19:04:59Z', 256, 0.00000), -(88, 1707844638, '2024-02-13T17:17:18Z', 322, 71.08984), -(89, 1707851099, '2024-02-13T19:04:59Z', 256, 66.72949), -(90, 1707825721, '2024-02-13T12:02:01Z', 256, 4.09890), -(91, 1707837460, '2024-02-13T15:17:40Z', 322, 4.10501), -(92, 0, '', 0, 0.00000), -(93, 0, '', 0, 0.00000), -(94, 1707844638, '2024-02-13T17:17:18Z', 322, 0.00000), -(95, 1707851099, '2024-02-13T19:04:59Z', 256, 0.00000), -(96, 1707844638, '2024-02-13T17:17:18Z', 322, 71.08984), -(97, 1707851099, '2024-02-13T19:04:59Z', 256, 66.72949); - --- -------------------------------------------------------- - --- --- Tabelstructuur voor tabel `par_events` --- - -CREATE TABLE `par_events` ( - `id` int(10) UNSIGNED NOT NULL, - `timestamp` int(11) DEFAULT NULL, - `gateway_receive_time` varchar(50) DEFAULT NULL, - `device` int(11) DEFAULT NULL, - `value` decimal(10,5) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Gegevens worden geëxporteerd voor tabel `par_events` --- - -INSERT INTO `par_events` (`id`, `timestamp`, `gateway_receive_time`, `device`, `value`) VALUES -(1, 1707844638, '2024-02-13T17:17:18Z', 322, 0.00000), -(2, 1707851099, '2024-02-13T19:04:59Z', 256, 0.00000); - --- -------------------------------------------------------- - --- --- Tabelstructuur voor tabel `relative_humidity_events` --- - -CREATE TABLE `relative_humidity_events` ( - `id` int(10) UNSIGNED NOT NULL, - `timestamp` int(11) DEFAULT NULL, - `gateway_receive_time` varchar(50) DEFAULT NULL, - `device` int(11) DEFAULT NULL, - `value` decimal(10,5) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Gegevens worden geëxporteerd voor tabel `relative_humidity_events` --- - -INSERT INTO `relative_humidity_events` (`id`, `timestamp`, `gateway_receive_time`, `device`, `value`) VALUES -(3, 1707844638, '2024-02-13T17:17:18Z', 322, 71.08984), -(4, 1707851099, '2024-02-13T19:04:59Z', 256, 66.72949), -(5, 1707844638, '2024-02-13T17:17:18Z', 322, 71.08984), -(6, 1707851099, '2024-02-13T19:04:59Z', 256, 66.72949); - --- -------------------------------------------------------- - --- --- Tabelstructuur voor tabel `soil_electric_conductivity_events` --- - -CREATE TABLE `soil_electric_conductivity_events` ( - `id` int(10) UNSIGNED NOT NULL, - `timestamp` int(11) DEFAULT NULL, - `gateway_receive_time` varchar(50) DEFAULT NULL, - `device` int(11) DEFAULT NULL, - `value` decimal(10,5) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Gegevens worden geëxporteerd voor tabel `soil_electric_conductivity_events` --- - -INSERT INTO `soil_electric_conductivity_events` (`id`, `timestamp`, `gateway_receive_time`, `device`, `value`) VALUES -(3, 1707851215, '2024-02-13T19:06:55Z', 322, 0.00000); - --- -------------------------------------------------------- - --- --- Tabelstructuur voor tabel `soil_relative_permittivity_events` --- - -CREATE TABLE `soil_relative_permittivity_events` ( - `id` int(10) UNSIGNED NOT NULL, - `timestamp` int(11) DEFAULT NULL, - `gateway_receive_time` varchar(50) DEFAULT NULL, - `device` int(11) DEFAULT NULL, - `value` decimal(10,5) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Gegevens worden geëxporteerd voor tabel `soil_relative_permittivity_events` --- - -INSERT INTO `soil_relative_permittivity_events` (`id`, `timestamp`, `gateway_receive_time`, `device`, `value`) VALUES -(3, 1707851215, '2024-02-13T19:06:55Z', 322, 1.52000); - --- -------------------------------------------------------- - --- --- Tabelstructuur voor tabel `soil_temperature_events` --- - -CREATE TABLE `soil_temperature_events` ( - `id` int(10) NOT NULL, - `timestamp` int(11) DEFAULT NULL, - `gateway_receive_time` varchar(50) DEFAULT NULL, - `device` int(11) DEFAULT NULL, - `value` decimal(10,5) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Gegevens worden geëxporteerd voor tabel `soil_temperature_events` --- - -INSERT INTO `soil_temperature_events` (`id`, `timestamp`, `gateway_receive_time`, `device`, `value`) VALUES -(3, 1707851215, '2024-02-13T19:06:55Z', 322, 12.06000); - --- --- Indexen voor geëxporteerde tabellen --- - --- --- Indexen voor tabel `battery_voltage_events` --- -ALTER TABLE `battery_voltage_events` - ADD PRIMARY KEY (`id`); - --- --- Indexen voor tabel `devices` --- -ALTER TABLE `devices` - ADD PRIMARY KEY (`id`); - --- --- Indexen voor tabel `fetch` --- -ALTER TABLE `fetch` - ADD PRIMARY KEY (`id`); - --- --- Indexen voor tabel `par_events` --- -ALTER TABLE `par_events` - ADD PRIMARY KEY (`id`); - --- --- Indexen voor tabel `relative_humidity_events` --- -ALTER TABLE `relative_humidity_events` - ADD PRIMARY KEY (`id`); - --- --- Indexen voor tabel `soil_electric_conductivity_events` --- -ALTER TABLE `soil_electric_conductivity_events` - ADD PRIMARY KEY (`id`); - --- --- Indexen voor tabel `soil_relative_permittivity_events` --- -ALTER TABLE `soil_relative_permittivity_events` - ADD PRIMARY KEY (`id`); - --- --- Indexen voor tabel `soil_temperature_events` --- -ALTER TABLE `soil_temperature_events` - ADD PRIMARY KEY (`id`); - --- --- AUTO_INCREMENT voor geëxporteerde tabellen --- - --- --- AUTO_INCREMENT voor een tabel `battery_voltage_events` --- -ALTER TABLE `battery_voltage_events` - MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=11; - --- --- AUTO_INCREMENT voor een tabel `devices` --- -ALTER TABLE `devices` - MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3; - --- --- AUTO_INCREMENT voor een tabel `fetch` --- -ALTER TABLE `fetch` - MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=98; - --- --- AUTO_INCREMENT voor een tabel `par_events` --- -ALTER TABLE `par_events` - MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3; - --- --- AUTO_INCREMENT voor een tabel `relative_humidity_events` --- -ALTER TABLE `relative_humidity_events` - MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=7; - --- --- AUTO_INCREMENT voor een tabel `soil_electric_conductivity_events` --- -ALTER TABLE `soil_electric_conductivity_events` - MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4; - --- --- AUTO_INCREMENT voor een tabel `soil_relative_permittivity_events` --- -ALTER TABLE `soil_relative_permittivity_events` - MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4; - --- --- AUTO_INCREMENT voor een tabel `soil_temperature_events` --- -ALTER TABLE `soil_temperature_events` - MODIFY `id` int(10) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4; -COMMIT; - -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/src/py/script/plants.json b/src/py/script/plants.json index b406a46..a499c72 100644 --- a/src/py/script/plants.json +++ b/src/py/script/plants.json @@ -1,50 +1,26 @@ [ { - "id": 47, - "plant_naam": "Tomaten", + "id": 3, + "plant_naam": "Tomatenplant", "plantensoort": "Groente", "plant_geteelt": 1 }, { - "id": 49, - "plant_naam": "Komkommer", - "plantensoort": "Groente", - "plant_geteelt": 1 - }, - { - "id": 50, - "plant_naam": "Appel", - "plantensoort": "Fruit", - "plant_geteelt": 0 - }, - { - "id": 51, + "id": 4, "plant_naam": "Sla", "plantensoort": "Groente", - "plant_geteelt": 0 - }, - { - "id": 53, - "plant_naam": "Patat", - "plantensoort": "Aarde", - "plant_geteelt": 0 - }, - { - "id": 54, - "plant_naam": "asfasfas", - "plantensoort": "fasfasfsaf", - "plant_geteelt": 0 - }, - { - "id": 55, - "plant_naam": "sadfadsfdsf", - "plantensoort": "sdfdsafdsfdf", "plant_geteelt": 1 }, { - "id": 56, - "plant_naam": "asdasd", - "plantensoort": "asdasdasdasdasd", + "id": 5, + "plant_naam": "Peterselie", + "plantensoort": "Kruiden", + "plant_geteelt": 1 + }, + { + "id": 6, + "plant_naam": "Aardbei", + "plantensoort": "Fruit", "plant_geteelt": 1 } ] \ No newline at end of file diff --git a/src/py/static/css/style.css b/src/py/static/css/style.css index 0668a0e..412de2a 100644 --- a/src/py/static/css/style.css +++ b/src/py/static/css/style.css @@ -59,11 +59,12 @@ body .mainContainer .mainBorder { body .mainContainer .mainBorder .pagina-titel { font-size: 2rem; margin-left: 1.5rem; + margin-bottom: 1rem; } body .mainContainer .mainBorder #sectie-1 { display: flex; flex-direction: column; - gap: 1rem; + gap: 0.75rem; padding: 0 2.5rem 0 1rem; position: relative; } @@ -74,7 +75,6 @@ body .mainContainer .mainBorder #sectie-1 .parent-algemeen-overzicht { box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.5); border-radius: 40px; padding: 1rem; - margin-top: 1rem; background-color: white; } body .mainContainer .mainBorder #sectie-1 .parent-algemeen-overzicht .algemeen-overzicht { @@ -152,6 +152,7 @@ body .mainContainer .mainBorder .content .kant-links #planten td article h2 { } body .mainContainer .mainBorder .content .kant-links #planten td article:hover { background-color: lightgray; + cursor: pointer; } body .mainContainer .mainBorder .content .kant-rechts { grid-column: 3; @@ -243,11 +244,16 @@ body .mainContainer .mainBorder .grid-column-2 .grid-2-child .parent-table .kas- border-radius: 10px; } +.modal #plant-id { + font-size: 1.5rem; +} + .modal .close { color: #aaa; float: right; - font-size: 1.75rem; + font-size: 2rem; font-weight: bold; + margin-top: -35px; } .modal .close:hover, @@ -310,7 +316,7 @@ body .mainContainer .mainBorder .grid-column-2 .grid-2-child .parent-table .kas- } #myModal input[type=submit] { - background-color: white; + background: linear-gradient(45deg, #abd3ae, #6ebf7d); } #myModal button { @@ -326,25 +332,6 @@ body .mainContainer .mainBorder .grid-column-2 .grid-2-child .parent-table .kas- background: linear-gradient(45deg, #ffcc00, #ff6600); } -#myModal button:hover { - background: linear-gradient(45deg, #abd3ae, #fff); - color: #000; -} - -.modal .close { - color: #aaa; - float: right; - font-size: 1.75rem; - font-weight: bold; -} - -.modal .close:hover, -.modal .close:active { - color: black; - text-decoration: none; - cursor: pointer; -} - .switch-container { display: flex; align-items: end; @@ -356,14 +343,12 @@ body .mainContainer .mainBorder .grid-column-2 .grid-2-child .parent-table .kas- width: 60px; height: 30px; } - -.switch input { +.switch .switch input { opacity: 0; width: 0; height: 0; } - -.slider { +.switch .slider { position: absolute; cursor: pointer; top: 0; @@ -374,8 +359,7 @@ body .mainContainer .mainBorder .grid-column-2 .grid-2-child .parent-table .kas- border-radius: 34px; transition: 0.4s; } - -.slider:before { +.switch .slider:before { position: absolute; content: ""; height: 26px; @@ -386,21 +370,77 @@ body .mainContainer .mainBorder .grid-column-2 .grid-2-child .parent-table .kas- border-radius: 50%; transition: 0.4s; } - -input:checked + .slider { +.switch input:checked + .slider { background-color: #2ecc71; } - -input:checked + .slider:before { +.switch input:checked + .slider:before { transform: translateX(26px); } - -.rechterkant { +.switch .rechterkant { display: flex; justify-content: end; } - -.plant-container, -#modalButton { +.switch .plant-container, +.switch #modalButton { background-color: white; +} +.switch .switch-container { + position: absolute; +} + +.pagina-container { + position: relative; + align-items: end; +} + +.close-button:hover { + background-color: rgb(171, 211, 174); /* Aangepaste hover kleur */ + color: white; /* Tekstkleur wit op hover voor betere zichtbaarheid */ +} + +.container { + position: relative; + align-items: end; +} + +.close-button { + position: absolute; + top: -90px; + right: -35px; + transform: translate(100%, 0%); + width: 50px; + height: 50px; + background-color: white; + color: rgb(171, 211, 174); + border-radius: 50%; /* Aangepast voor perfecte cirkel */ + display: flex; + justify-content: center; + align-items: center; + cursor: pointer; + font-size: 50px; + border: solid rgb(171, 211, 174) 2px; + font-weight: bold; +} + +.back-button { + position: absolute; + top: -90px; + right: -25px; + width: 50px; + height: 50px; + background-color: white; + color: rgb(171, 211, 174); + border-radius: 50%; + display: flex; + justify-content: center; + align-items: center; + cursor: pointer; + font-size: 35px; + border: solid rgb(171, 211, 174) 2px; + font-weight: bold; +} + +.back-button:hover { + background-color: rgb(171, 211, 174); + color: white; }/*# sourceMappingURL=style.css.map */ \ No newline at end of file diff --git a/src/py/static/css/style.css.map b/src/py/static/css/style.css.map index 90630c9..38e0962 100644 --- a/src/py/static/css/style.css.map +++ b/src/py/static/css/style.css.map @@ -1 +1 @@ -{"version":3,"sources":["style.scss","style.css"],"names":[],"mappings":"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","file":"style.css"} \ No newline at end of file +{"version":3,"sources":["style.scss","style.css"],"names":[],"mappings":"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","file":"style.css"} \ No newline at end of file diff --git a/src/py/static/css/style.scss b/src/py/static/css/style.scss index 05fda39..25e7e1a 100644 --- a/src/py/static/css/style.scss +++ b/src/py/static/css/style.scss @@ -104,13 +104,14 @@ body { font-size: 2rem; margin-left: 1.5rem; + margin-bottom: 1rem; } #sectie-1 { display: flex; flex-direction: column; - gap: 1rem; + gap: 0.75rem; padding: 0 2.5rem 0 1rem; position: relative; @@ -124,7 +125,7 @@ body @include box-shadow; @include border-radius; padding: 1rem; - margin-top: 1rem; + // margin-top: 1rem; background-color: white; .algemeen-overzicht @@ -232,6 +233,7 @@ body &:hover { background-color: lightgray; + cursor: pointer; } } } @@ -371,11 +373,18 @@ body border: solid 2px #abd3ae; border-radius: 10px; } + +.modal #plant-id +{ + font-size: 1.5rem; +} + .modal .close { color: #aaa; float: right; - font-size: 1.75rem; + font-size: 2rem; font-weight: bold; + margin-top: -35px; } .modal .close:hover, .modal .close:active { @@ -437,7 +446,7 @@ body } #myModal input[type="submit"] { - background-color: white; + background: linear-gradient(45deg, #abd3ae, #6ebf7d); } #myModal button { @@ -453,24 +462,6 @@ body background: linear-gradient(45deg, #ffcc00, #ff6600); } -#myModal button:hover { - background: linear-gradient(45deg, #abd3ae, #fff); - color: #000; -} - -.modal .close { - color: #aaa; - float: right; - font-size: 1.75rem; - font-weight: bold; -} - -.modal .close:hover, -.modal .close:active { - color: black; - text-decoration: none; - cursor: pointer; -} .switch-container { display: flex; @@ -482,7 +473,7 @@ body display: inline-block; width: 60px; height: 30px; -} + .switch input { opacity: 0; @@ -532,3 +523,73 @@ input:checked + .slider:before { { background-color: white; } + + .switch-container { + position: absolute; + } +} + +.pagina-container { + position: relative; + align-items: end; +} + +.close-button:hover { + background-color: $primary-color; /* Aangepaste hover kleur */ + color: white; /* Tekstkleur wit op hover voor betere zichtbaarheid */ +} + +.container { + position: relative; + align-items: end; +} + +.close-button +{ + position: absolute; + top: -90px; + right: -35px; + transform: translate(100%, 0%); + width: 50px; + height: 50px; + background-color: white; + color: $primary-color; + border-radius: 50%; /* Aangepast voor perfecte cirkel */ + display: flex; + justify-content: center; + align-items: center; + cursor: pointer; + font-size: 50px; + border: solid $primary-color 2px; + font-weight: bold; +} + +.back-button { + position: absolute; + top: -90px; + right: -25px; + width: 50px; + height: 50px; + background-color: white; + color: $primary-color; + border-radius: 50%; + display: flex; + justify-content: center; + align-items: center; + cursor: pointer; + font-size: 35px; + border: solid $primary-color 2px; + font-weight: bold; +} + +.back-button:hover { + background-color: $primary-color; + color: white +} + +// .modal-header +// { +// width: 100%; +// display: flex; +// flex-direction: row; +// } \ No newline at end of file diff --git a/src/py/static/images/Toevoegen.png b/src/py/static/images/Toevoegen.png deleted file mode 100644 index 3878c7ee113fca3c193394226b93ed774aa43129..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109908 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%0D9= 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ⅈ6+&mJs@uT-_^n4(03%kBmXivYRrY=0;lVI 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 diff --git a/src/py/static/images/plus.png b/src/py/static/images/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..41c3a3171e5a1d0eac257dd0dc0f12a678fbc0b8 GIT binary patch literal 1501 zcmeAS@N?(olHy`uVBq!ia0y~yVB`a0ZVon}h(=9@7?9#D@Q5sCV9-+rVaAH3_GJtV zto@!Yjv*Cu-rf!@x)mYN7WnYfzv;&7H}^#HRVq1iaQszR^RD`QrBCRZ)m^_As~%ro z|NnP-V%Br<|MxPl2VXe#{UZB=<9nsL(&ODd)Rbh3Z)l4}uUAxR7Vg{l*Tvx4I&Fn! zp*}-d(Vl1~qZR8H^B;J(%H{E`%9WLRaVj#&EA8f7J%8NokYStO{1>t3PI5hbvHr0_ znT>IH%i`_lm~Z@ib6L1=pPR%U!FP#Xhb~_BU^c(B*T>o7mt^4uw>`@ja0VIok0M3?J;s}_pT4LRkjr=WpLWp4;nevS9o4`66+g?Z<^Aylu{B0yP{H zIa?;gcd=n(?!1p{9}4i!IJ_+KK1g7v&D@{qAc4!T-mGtRHc80imws^lRikP7=>iUxznHOEpns} zq=DreUg^jdr zeEr%7X5H`IP{^?HcEJs+hUGaj2gK@iM86+Oe9f@#@6{G}>Glc+{>l)>Yj@=(_pu zss3dDm#z($9#z&o|6ka_{^i>zp%3rs88+8C_~)N}`~6(I#rrQ`8_wT&+FZB3AclkE z%9huY58ivYLqNdd-tjnPU|flBXBQXxF-N}o{*RXhcRneVN;m$U{C;-QpD0_9--c%* z4!r#G1@i$ZP`-35-L}37nl<}&t$8s;RVGAjo+~J)_T8#^6f~(IU}}aKI2c~d{y4e( zSaqJOMU{ca6eXDul?oY7Kn=6TtU g`<$HtKCi?dUP)}zsAstiEUy_nUHx3vIVCg!0G*&y{r~^~ literal 0 HcmV?d00001 diff --git a/src/py/static/js/main.js b/src/py/static/js/main.js index e5b49a1..8212056 100644 --- a/src/py/static/js/main.js +++ b/src/py/static/js/main.js @@ -40,36 +40,41 @@ function openModal() } } } - else - { - console.error("Modaal elementen niet gevonden"); - } + // else + // { + // console.error("Modaal elementen niet gevonden"); + // } } -document.addEventListener('DOMContentLoaded', () => -{ +// document.addEventListener('DOMContentLoaded', () => { + // Call openModal when DOM content is loaded openModal(); - // Roep andere functies hier aan zoals vereist, bijvoorbeeld: - // fetchWeatherDataAndDrawChart(); - - // Stuur een bericht naar het hoofdproces om het Python-script uit te voeren. + // Send a message to the main process to execute the Python script ipcRenderer.send('run-python-script', ['some', 'arguments']); - // Luister naar updates van HTML-data vanuit het hoofdproces. - ipcRenderer.on('update-html-data', (event, data) => - { - // Werk de HTML bij met de ontvangen data. - document.getElementById('batteryVoltage').innerText = data.batteryVoltage; - // Voeg vergelijkbare regels toe voor andere data velden. + ipcRenderer.on('python-script-response', (event, pythonData) => { + if (pythonData === 'error') { + console.error('An error occurred while retrieving data from Python'); + } else { + // Update HTML elements with data received from Python + document.getElementById('bodem-temperatuur').textContent = pythonData.bodemTemperatuur; // Adjust the property based on your actual Python response + } }); - // Trigger een event om data update aan te vragen. + // Listen for updates to HTML data from the main process + ipcRenderer.on('update-html-data', (event, data) => { + // Update the HTML with the received data + document.getElementById('batteryVoltage').innerText = data.batteryVoltage; + // Add similar lines for other data fields + }); + + // Trigger an event to request data update ipcRenderer.send('request-update-data'); - // Haal batterij data op wanneer de pagina laadt. + // Fetch battery data when the page loads fetchBatteryData(); -}); +// }); /** * Functie om een lijngrafiek te tekenen. @@ -83,8 +88,9 @@ function drawLineChart(xLabels, data) // Verkrijg het canvas element en de context voor tekenen. const canvas = document.getElementById("myCanvas"); + if (canvas) + { const ctx = canvas.getContext("2d"); - // Maak het canvas schoon voor nieuwe tekening. ctx.clearRect(0, 0, canvas.width, canvas.height); @@ -144,6 +150,11 @@ function drawLineChart(xLabels, data) } } } +else +{ + console.log("Canvas element does not exist on this page."); +} +} /** * Functie om weergegevens op te halen en een grafiek te tekenen. @@ -168,17 +179,17 @@ function fetchWeatherDataAndDrawChart() throw new Error('Network response was not ok.'); }) .then(data => - { - // Verkrijg de weersvoorspelling voor de eerste 5 dagen. - const weatherForecast = data.weather_forecast.slice(0, 5); - // Converteer datums naar dagen van de week. - const dates = weatherForecast.map(day => convertDateToDayOfWeek(day.dag)); - // Verkrijg de maximale temperaturen. - const temperatures = weatherForecast.map(day => day.max_temp); - - // Teken de lijngrafiek met de verkregen data. - drawLineChart(dates, temperatures); - }) + { + // Verkrijg de weersvoorspelling voor de eerste 5 dagen. + const weatherForecast = data.weather_forecast.slice(0, 5); + // Converteer datums naar afkortingen van dagen van de week. + const dates = weatherForecast.map(day => convertDateToDayOfWeek(day.dag)); + // Verkrijg de maximale temperaturen. + const temperatures = weatherForecast.map(day => day.max_temp); + + // Teken de lijngrafiek met de verkregen data. + drawLineChart(dates, temperatures); + }) .catch(error => { // Log eventuele fouten tijdens het ophalen. @@ -191,16 +202,32 @@ function fetchWeatherDataAndDrawChart() * @param {string} dateString - De datum als string in het formaat "dd-mm". * @returns {string} De afkorting van de dag van de week. */ -function convertDateToDayOfWeek(dateString) -{ - // Split de datum in dag en maand, en zet deze om naar nummers. - const [day, month] = dateString.split('-').map(Number); - // Maak een nieuwe datumobject (jaar is willekeurig omdat we alleen maand en dag nodig hebben). - const date = new Date(2024, month - 1, day); - // Verkrijg de dag van de week en zet deze om naar een afkorting. - const dayOfWeek = ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'][date.getDay()]; - return dayOfWeek; -} +// function convertDateToDayOfWeek(dateString) +// { +// // Split de datum in dag en maand, en zet deze om naar nummers. +// const [day, month] = dateString.split('-').map(Number); +// // Maak een nieuwe datumobject (jaar is willekeurig omdat we alleen maand en dag nodig hebben). +// const date = new Date(2024, month - 1, day); +// // Verkrijg de dag van de week en zet deze om naar een afkorting. +// const dayOfWeek = ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'][date.getDay()]; +// return dayOfWeek; +// } + +// function convertDateToDayOfWeek(dateString) +// { +// // Create a date object from the dateString +// const [year, month, day] = dateString.split("-").map(Number); +// const date = new Date(year, month - 1, day); + +// // Array of Dutch day names +// const dayNames = ["zo", "ma", "di", "wo", "do", "vr", "za"]; + +// // Return the day name according to the date object +// return dayNames[date.getDay()]; +// } + + + /** * Functie om batterijdata op te halen wanneer de pagina laadt. @@ -222,6 +249,7 @@ function fetchBatteryData() console.error('Error fetching battery data:', error); }); } + /** * Functie om batterijdata op de pagina bij te werken. @@ -230,22 +258,31 @@ function fetchBatteryData() */ function updateBatteryData(batteryData) { - // Update de data voor specifieke apparaten op basis van hun ID. - if (batteryData[1].device_id == 322) + // Check if on the specific page where the battery data should be updated + if (window.location.pathname.endsWith('index.html')) { - document.getElementById('deviceNumber-322').innerHTML = batteryData[1].device_id; - document.getElementById('voltage-322').innerHTML = batteryData[1].label; - document.getElementById('time-322').innerHTML = new Date(batteryData[0].last_seen).toLocaleTimeString(); - document.getElementById('tevredenheid-322').innerHTML = batteryData[1].last_battery_voltage; - } - if (batteryData[0].device_id == 256) - { - document.getElementById('deviceNumber-256').innerHTML = batteryData[0].device_id; - document.getElementById('voltage-256').innerHTML = batteryData[0].label; - document.getElementById('time-256').innerHTML = new Date(batteryData[0].last_seen).toLocaleTimeString(); - document.getElementById('tevredenheid-256').innerHTML = batteryData[0].last_battery_voltage; + // Update de data voor specifieke apparaten op basis van hun ID. + const sensor322Element = document.getElementById('deviceNumber-322'); + const sensor256Element = document.getElementById('deviceNumber-256'); + + if (batteryData[1].device_id === 322 && sensor322Element) + { + sensor322Element.innerHTML = batteryData[1].device_id; + document.getElementById('voltage-322').innerHTML = batteryData[1].label; + document.getElementById('time-322').innerHTML = new Date(batteryData[1].last_seen * 1000).toLocaleTimeString(); + document.getElementById('tevredenheid-322').innerHTML = batteryData[1].last_battery_voltage.toFixed(2); + } + if (batteryData[0].device_id === 256 && sensor256Element) + { + sensor256Element.innerHTML = batteryData[0].device_id; + document.getElementById('voltage-256').innerHTML = batteryData[0].label; + document.getElementById('time-256').innerHTML = new Date(batteryData[0].last_seen * 1000).toLocaleTimeString(); + document.getElementById('tevredenheid-256').innerHTML = batteryData[0].last_battery_voltage.toFixed(2); + } } } + + // Definieer de API-sleutel en de stad waarvoor we de weergegevens willen ophalen. const apiKey = "9516081f15727d063c9e2f08454a2fe9"; @@ -286,4 +323,84 @@ fetch(apiUrl) { // Log eventuele fouten tijdens het ophalen van de data. console.error('There was a problem with the fetch operation:', error); - }); \ No newline at end of file + }); + + function dynamischSensor() + { + if (window.location.pathname.endsWith('index.html') || window.location.pathname === '/') + { + const sensor1 = document.getElementById("sensor-1"); + const sensor2 = document.getElementById("sensor-2"); + + if (sensor1 && sensor2) + { + sensor1.href = `sensor.html?id=${322}`; + sensor2.href = `sensor.html?id=${256}`; + } + else + { + console.log("Elementen 'sensor-1' of 'sensor-2' bestaan niet in de DOM."); + } + } + } + + // Aanroepen van de functie + dynamischSensor(); + + + function closeApplication() { + if (confirm("Weet je zeker dat je de applicatie wilt sluiten?")) { + window.close(); + }} + + function fetchPlantenData() + { + // Gebruik Axios om een GET-verzoek te versturen naar de planten endpoint. + axios.get('http://127.0.0.1:5000/planten') + .then(response => + { + // Verwerk de ontvangen data. + const plantenData = response.data; + updatePlantenData(plantenData); + }) + .catch(error => + { + // Log eventuele fouten tijdens het ophalen. + console.error('Error fetching planten data:', error); + }); + } + + function getPlantIdFromUrl() + { + // Maak een URL-object van de huidige locatie. + const currentUrl = new URL(window.location.href); + // Gebruik de URLSearchParams API om de query parameters te verwerken. + const searchParams = currentUrl.searchParams; + // Haal de 'id' query parameter op. + return searchParams.get('id'); // Dit zal een string retourneren of null als het niet bestaat. + } + + function updatePlantenData(plantenData) + { + // Verkrijg de plant ID uit de URL. + const plantId = parseInt(getPlantIdFromUrl(), 10); + + // Vind de plant met die ID in de ontvangen JSON-data. + const gevondenPlant = plantenData.find(plant => plant.id === plantId); + + // Update de titel van de pagina met de naam van de gevonden plant. + if (gevondenPlant) + { + document.title = gevondenPlant.plant_naam; + document.querySelector(".plant-titel").textContent = gevondenPlant.plant_naam; + console.log("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"); + } + else + { + console.log(`Geen plant gevonden met ID ${plantId}`); + } + } + + // Roep fetchPlantenData aan ergens waar het logisch is binnen je applicatielogica, bijvoorbeeld na het laden van de pagina of na een gebruikersactie. + fetchPlantenData(); + \ No newline at end of file diff --git a/src/py/static/js/planten.class.js b/src/py/static/js/planten.class.js index 6262cb5..9690491 100644 --- a/src/py/static/js/planten.class.js +++ b/src/py/static/js/planten.class.js @@ -88,7 +88,8 @@ class PlantGrid { // Handle the "Add" button const article = document.createElement("article"); const img = article.appendChild(document.createElement("img")); - img.src = "../static/images/Toevoegen.png"; + img.src = "../static/images/plus.png"; + // img.src = "../images/plus.png"; img.id = "toevoegen"; img.alt = "Add"; article.id = "modalButton"; @@ -107,60 +108,7 @@ class PlantGrid { } - displayGrid() { - const plantenTable = document.getElementById("planten"); // Verkrijg de tabel waarin het raster getoond moet worden. - let itemCount = 0; // Teller voor het aantal items in het raster. - - this.grid.forEach((row, rowIndex) => { - const tr = document.createElement("tr"); // Maak een tabelrij element. - - row.forEach((plant, colIndex) => { - const td = document.createElement("td"); // Maak een tabeldata element. - - // Logica om plantitems of de "Toevoegen" knop te verwerken. - if (itemCount < 8) { - if (plant) { - // Verwerk normale plantitems. - // Creëer een link element naar de planteninformatiepagina met plant ID als query parameter. - // Voeg vervolgens een artikel, afbeelding en titel toe met de plantinformatie. - // Handle regular plant items - const link = document.createElement("a"); - link.href = `planteninfo.html?id=${plant.id}`; - - const article = document.createElement("article"); - article.classList.add("plant-container"); - link.appendChild(article); - - const img = article.appendChild(document.createElement("img")); - img.src = "../static/images/icon_awesome-apple-alt.png"; - const h2 = article.appendChild(document.createElement("h2")); - h2.classList.add("plant-naam"); - h2.textContent = plant.plantNaam; - - td.appendChild(link); - itemCount++; - } else if (rowIndex === this.rows - 1 && colIndex === this.cols - 1 && itemCount <= 7) { - // Handle the "Add" button - const article = document.createElement("article"); - const img = article.appendChild(document.createElement("img")); - img.src = "../static/images/Toevoegen.png"; - img.id = "toevoegen"; - img.alt = "Add"; - article.id = "modalButton"; - article.onclick = openModal; - - td.appendChild(article); - itemCount++; - } - } - - tr.appendChild(td); // Voeg de td toe aan de tr. - }); - - plantenTable.appendChild(tr); // Voeg de tr toe aan de tabel. - }); -} } document.addEventListener("DOMContentLoaded", () => { diff --git a/src/py/templates/index.html b/src/py/templates/index.html index 1505214..8fa8e53 100644 --- a/src/py/templates/index.html +++ b/src/py/templates/index.html @@ -12,24 +12,27 @@ -
+
+
+
×
+
-
- -
-
+
\ No newline at end of file diff --git a/src/py/templates/kas_informatie.html b/src/py/templates/kas_informatie.html index f5ccc8e..d2182ab 100644 --- a/src/py/templates/kas_informatie.html +++ b/src/py/templates/kas_informatie.html @@ -13,6 +13,12 @@
+
+
×
+
+
@@ -20,7 +26,7 @@
-

Informatie Kas

+

Informatie Kas

diff --git a/src/py/templates/planteninfo.html b/src/py/templates/planteninfo.html index e873a84..ad8245e 100644 --- a/src/py/templates/planteninfo.html +++ b/src/py/templates/planteninfo.html @@ -8,11 +8,17 @@ - Informatie Kas + Planten
+
+
×
+
+
+ +
@@ -20,7 +26,7 @@
-

Informatie Kas

+

 

diff --git a/src/py/templates/pomp_informatie.html b/src/py/templates/pomp_informatie.html new file mode 100644 index 0000000..0275266 --- /dev/null +++ b/src/py/templates/pomp_informatie.html @@ -0,0 +1,136 @@ + + + + + + + + + + + Informatie Kas + + +
+ + +
+
+

Informatie Pomp

+ +
+ +
+
+ + + + + + + + + + + + + + + + + + +
Pomp Status:Uitstekend!
Waterverbruik:0.5 L/u
Volgende Irrigatie24:00
Laatste Irrigatie:18:00
+
+
+ +
+
+

Waterverbruik

+ +
+
+
+
+ +
+
+
+ + + + + + + + + + + + + + + +
Aantal geplant:Loading...
Succesvolle Oogst:2
Gefaalde Oogst:2
+ + + + + + + + + + + + + + + + + + +
Warmste Maand:n.v.t.
koudste Maand:December
Gemiddelde Bodemtemp.:2˚C
Gemiddelde Uren Zonlicht:2u
+ + + + + + + + + + + + + + + + + + +
Laatste Irrigatie:2u
Aankomende Irrigatie:2u
Laatste Bemesting2d
Aankomende Bemesting:2w
+
+
+
+
+
+ + + diff --git a/src/py/templates/sensor.html b/src/py/templates/sensor.html new file mode 100644 index 0000000..c5f172e --- /dev/null +++ b/src/py/templates/sensor.html @@ -0,0 +1,136 @@ + + + + + + + + + + + Informatie Kas + + +
+ + +
+
+

Informatie Kas

+ +
+ +
+
+ + + + + + + + + + + + + + + + + + +
Device
Batterij Voltage
Tijden
Zulu
+
+
+ +
+
+

Zonlicht

+ +
+
+
+
+ +
+
+
+ + + + + + + + + + + + + + + +
Aantal geplant:Loading...
Succesvolle Oogst:2
Gefaalde Oogst:2
+ + + + + + + + + + + + + + + + + + +
Warmste Maand:n.v.t.
koudste Maand:December
Gemiddelde Bodemtemp.:2˚C
Gemiddelde Uren Zonlicht:2u
+ + + + + + + + + + + + + + + + + + +
Laatste Irrigatie:2u
Aankomende Irrigatie:2u
Laatste Bemesting2d
Aankomende Bemesting:2w
+
+
+
+
+
+ + + diff --git a/src/py/templates/sensoren.html b/src/py/templates/sensoren.html deleted file mode 100644 index 442839c..0000000 --- a/src/py/templates/sensoren.html +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - Sensoren - - - - - -
-
- -
-
-
- -
- -
-
-
- -
-
- -
-
-
-
-
- - \ No newline at end of file